#include <iostream>
int C;
class C {
private:
int i[2];
public:
static int f() {
return sizeof(C);
}
};
int f()
{
return sizeof(C); // why the C can't be the class type C.
}
int main()
{
std::cout << "C::f() = " <<C::f() << ","
<< " ::f() = " <<::f() << std::endl;
}
Вышеприведенный код возвращает: C::f() = 8, ::f() = 4
Мой вопрос в том, почему идентификатор C
внутри глобальной функции f
разрешает объект типа int
, который имеет имя C, а не тип класса C
? Имеет ли sizeof
определенное правило поиска имен?
Заключение. Из того, что я читал в этом qaru.site/info/12876/..., скрытие имен классов по именам функций/объектов/перечислений относится к проблемам совместимости с C. И чтобы избежать этого непреднамеренного скрытия, нужно typedef
класс принудительно выполнить ошибки компилятора.