Гуру SEO Jim Westergren протестировал этот назад в 2005 со строгой точки зрения SEO и пришел к выводу, что + (плюс) был на самом деле лучший ограничитель слова. Однако это не кажется разумным и может произойти из-за ошибки в алгоритмах поисковых систем. Он рекомендует - (тире) и для удобочитаемости и для SEO.
sizeof работает только с полными типами. const char * TEST []
не является полным типом, пока он не определен в First.cpp.
sizeof(char*[10]) == sizeof(char*) * 10 == 40
sizeof(short[10]) == sizeof(short) * 10 == 20
// a class Foo will be declared
class Foo;
sizeof(Foo) == //we don't know yet
// an array bar will be defined.
int bar[];
sizeof(bar) == sizeof(int) * ? == //we don't know yet.
// actually define bar
int bar[/*compiler please fill this in*/] = { 1, 2, 3 };
sizeof(bar) == sizeof(int) * 3 == 12
// note bar is exactly the right size
// an array baz is defined.
int baz[4];
sizeof(baz) == sizeof(int) * 4 == 16
// initialize baz
int baz[4] = { 1, 2, 3 };
sizeof(bar) == sizeof(int) * 4 == 16
// note baz is still 4 big, the compiler doesn't control its size
Чтобы заставить это работать по своему желанию, вы можете:
массив First :: TEST
к его объявлению ( static const char * TEST [2];
) First :: TEST
. Метод не может быть встроенным, он должен быть определен в First.cpp. Для меня даже первый sizeof (TEST)
не может быть скомпилирован, поскольку TEST не был объявлен с размером (который разрешается только во время компоновки).
Если я изменю TEST []
, скажем, на TEST [10]
, то оба случая будут компилироваться.
Я ожидал оба результата.
Какой вы компилятор? с помощью?
Это становится понятнее, когда вы расширяете Second.cpp. Вот и все, что компилируется (1 единица компиляции):
class First
{
public:
static const char* TEST[];
public:
First();
};
class Second
{
public:
Second();
Second::Second()
{
uint32_t len = sizeof(First::TEST); // error
uint32_t elements = (sizeof(First::TEST) / sizeof(First::TEST[0])); // error
}
}
Если вы посмотрите сюда, First :: TEST явно не имеет размера, а sizeof (FIRST :: TEST) не имеет смысла.
Почему бы просто не иметь метод, который возвращает длину TEST?
Эта функция отсутствовала долгое время - запрос функции был создан в ноябре 1999 года и был окончательно реализован в августе. 2010 (NetBeans 6.10). Вы можете включить / отключить его в « Просмотр → Показать непечатаемые символы ».
В NetBeans 7.0.1 определение «непечатаемых», по-видимому, включает вкладки и возврат каретки, но не обычный символ пробела:
NetBeans 7.1.0 наконец отображает пробелы. Однако теперь в нем есть новая ошибка, при которой последовательные табуляции (или комбинации табуляции и пробелов) сворачиваются в одну вкладку:
NetBeans 7.4.0 исправляет это:
Там '
sizeof () в Second (обычно) разрешается во время компиляции, когда известно только объявление массива, а пространство для статического не было выделено не может быть вычислено. См. http://en.wikipedia.org/wiki/Sizeof#sizeof_and_incomplete_types