No, non è possibile cambiarlo. Cosa speri di imparare vedendo una sua implementazione?
Ciò che sizeof
non può essere scritto in C++ utilizzando più operazioni di base. Non è una funzione, o parte di un'intestazione di libreria come ad es. printf
o malloc
. È dentro il compilatore.
Edit: Se il compilatore è di per sé scritto in C o C++, allora si può pensare di realizzazione essere qualcosa di simile:
size_t calculate_sizeof(expression_or_type)
{
if (is_type(expression_or_type))
{
if (is_array_type(expression_or_type))
{
return array_size(exprssoin_or_type) *
calculate_sizeof(underlying_type_of_array(expression_or_type));
}
else
{
switch (expression_or_type)
{
case int_type:
case unsigned_int_type:
return 4; //for example
case char_type:
case unsigned_char_type:
case signed_char_type:
return 1;
case pointer_type:
return 4; //for example
//etc., for all the built-in types
case class_or_struct_type:
{
int base_size = compiler_overhead(expression_or_type);
for (/*loop over each class member*/)
{
base_size += calculate_sizeof(class_member) +
padding(class_member);
}
return round_up_to_multiple(base_size,
alignment_of_type(expression_or_type));
}
case union_type:
{
int max_size = 0;
for (/*loop over each class member*/)
{
max_size = max(max_size,
calculate_sizeof(class_member));
}
return round_up_to_multiple(max_size,
alignment_of_type(expression_or_type));
}
}
}
}
else
{
return calculate_sizeof(type_of(expression_or_type));
}
}
Si noti che è è molto pseudo-codice. Ci sono molte cose che non ho incluso, ma questa è l'idea generale. Il compilatore probabilmente non lo fa in realtà.Probabilmente calcola la dimensione di un tipo (inclusa una classe) e la memorizza, invece di ricalcolare ogni volta che scrivi sizeof(X)
. È anche permesso ad es. i puntatori sono di dimensioni diverse a seconda di cosa indicano.
quanto possibile utilizzo si potrebbe avere per un tale scenario? – Mikeage
Wow, pensa al danno che potresti causare sovraccaricando sizeof :-) – paxdiablo
la mia intenzione è solo quella di esaminare l'implementazione interna dell'operatore sizeof. – anand