Buonasera, avrei gentilmente bisogno di un vostro aiuto.
Sbirciando dei codici c++ trovati su internet per imparare, mi sono imbattuto in alcuni problemi. Ve li espongo:
1. Qual'è la differenza tra "inline" e "#define"?
Questo è un esempio in cui la medesima funzione restituisce valori diversi a seconda se essa è definita con inline o con #define:
codice:
#define SQUARE(x) ((x)*(x))
int a = 2;
int b = SQUARE(a++);
// Alla fine risulta a = 4, b = 2*3 = 6
codice:
inline int SQUARE(int x)
{
return x*x;
}
int a = 2;
int b = SQUARE(a++);
// Alla fine risulta a = 2, b = 2*2 = 4
Perché i due codici si comportano in maniera differente? Cosa succede precisamente? Ho sentito che inline serve per ridurre il tempo di overhead... è quindi consigliabile usare SEMPRE inline al posto di define oppure di non utilizzare niente?
2. Ho trovato il seguente codice:
codice:
#ifndef NO_ASSERTD
#undef assertd
#define assertd(exp) ((void)NULL)
#endif
...
inline char GetAt(int pos) const
{
assertd(pos<Len); return pData[pos];
}
Quello che mi chiedo è: assertd è una funzione standard del C/C++ che voi sappiate? NULL è una costante predefinita in C++? Si può scrivere NULL in minuscolo? Cosa significa (exp)((void)NULL)?