В C++ существует ли какая-либо причина не допускать статические переменные-члены через экземпляр класса? Я знаю, что Java хмурится этим и задается вопросом, имеет ли это значение в C++. Пример:C++: доступ к константным элементам через класс или экземпляр?
class Foo {
static const int ZERO = 0;
static const int ONE = 1;
...
};
void bar(const Foo& inst) {
// is this ok?
int val1 = inst.ZERO;
// or should I prefer:
int val2 = Foo::ZERO
...
};
У меня есть второй вопрос бонуса. Если я объявляю статический двойник, я должен определить его где-то, и это определение должно повторить тип. Почему тип должен быть повторен? Например:
In a header:
class Foo {
static const double d;
};
In a source file:
const double Foo::d = 42;
Почему я должен повторить «константную двойную» часть в моем файле CPP?
Не точный дубликат, но я думаю, что те же ответы, вероятно, применимы: http://stackoverflow.com/questions/840522/given-a-pointer-to-ac-object-what-is-the-preferred-way -to-call-a-static-membe –
Да. Прочитайте ответ Адама Розенталя по * очень * хорошей причине, почему вы предпочитаете класс как префикс вместо экземпляра. – quark