Что касается первого вопроса, помимо вопроса стиля (он делает очевидным, что это переменная класса и не имеет связанного объекта), Фред Ларсен в комментариях к вопросу ссылается на предыдущий вопрос. Прочтите Ответ Адама Розенталя на очень вескую причину, по которой вы хотите быть осторожными с этим. (Я бы проголосовал за Фреда, если бы он опубликовал его в качестве ответа, но я не могу поверить в то, где это должно быть. Я проголосовал за Адама.)
Что касается вашего второго вопроса:
Почему я должен повторять часть "const double" в моем файле cpp?
Вы должны повторить тип в первую очередь как деталь реализации: это то, как компилятор C ++ анализирует объявление. Это не совсем идеальный вариант для локальных переменных, и C ++ 1x (ранее C ++ 0x) использует ключевое слово auto
, чтобы избежать повторения для обычных функциональных переменных.
Итак, это:
vector<string> v;
vector<string>::iterator it = v.begin();
может стать таким:
vector<string> v;
auto it = v.begin();
Нет четкой причины, по которой это не может работать и со статикой, поэтому в вашем случае thos:
const double Foo::d = 42;
вполне может стать этим.
static Foo::d = 42;
Ключ в том, чтобы иметь какой-нибудь способ идентифицировать это как объявление.
Заметьте, я не говорю ясной причины: грамматика C ++ - живая легенда: чрезвычайно трудно охватить все ее крайние случаи. Я не думаю, что сказанное выше неоднозначно, но может быть. Если это не так, они могли бы добавить это к языку. Расскажите им об этом ... для C ++ 2x: /.
person
quark
schedule
06.08.2009