Чем отличаются инлайн-функции от макросов?
#define Max(x,y) ((x)>(y)?(x):(y))
inline int Max(int x, int y)
{
return x>y?x:y;
}
Макросы обрабатываются препроцессором, а инлайн-функции компилятором.
Макрос не будет делать проверку типа и вычислять аргументы. Для Max(++x, y) результат будет разным.
Макросы не обращают внимания на пространство имен. Если объявить функцию Max, скажем, внутри класса, то она не перекроет макрос.
Макросы сложнее отлаживать, компилятор не видит макросы и не сможет точно сказать где произошла ошибка. Это особенно неудобно, если макрос большой.
пятница, января 28, 2005
Инлайн-функции и макросы
Категории: cpp
понедельник, января 24, 2005
Друзья
По стандарту С++ (11.4.9) можно объявить другом класс, который нигде ранее объявлен не был. То есть, если опечатаешься в названии класса, то ошибка не вылезет, потому что вот такое компилятор пропустит:
class CMyClassAA {
...
};
class CMyClassAB {
...
friend class CMyClassA;
...
};
Более того, вот такой номер тоже пройдет:
class CMyClassAB {
...
friend class CMyClassA;
CMyClassA* a;
...
};
То есть friend class CMyClassA; здесь фактически является декларацией.
А вот назвать другом необъявленную функцию по стандарту нельзя. Но и Visual C++ 6.0, и C++ Builder 4 такое пропустили:
class CMyClassAB {
...
friend class CMyClassA;
friend void UndeclaredFunction();
CMyClassA* a;
...
};
Категории: cpp
пятница, января 21, 2005
Блог Джона Кармака
У Джона Кармака теперь есть блог.
А вот здесь выложены его .plan файлы в виде блога.
Категории: gamedev