определить статическую строковую переменную в классе C ++ - PullRequest
3 голосов
/ 29 февраля 2012

У меня есть 2 вопроса:

Почему это возможно для переменной int:

foo.h:

class foo{

     private:
        const static int a = 42;
};

, но для строковой переменной мне нужносделать это таким образом?

foo.h:

class foo{

     private:
        static string fooString;
};

foo.cpp:

string foo::fooString = "foo";

А также:

ВВ моем конкретном случае foo :: fooString должен представлять переменную пути, и я хотел бы, чтобы для каждого объекта класса foo был только один экземпляр foo :: string, представляющий значение const, которое никогда не должно изменяться.

Есть ли другой способ решить эту проблему?

1 Ответ

7 голосов
/ 29 февраля 2012

Почему это возможно для переменной int: [..], но для строковой переменной мне нужно сделать это следующим образом?

Только потому, что.На самом деле вы все еще можете сделать string const, но, да, вы должны определить вне определения класса.Инициализацию static на месте можно выполнять только тогда, когда они const и являются целочисленными (или «литерального типа»).

(В C ++ 11 вы даже можете сделать это для неstatic не- const члены, когда они имеют литеральный тип.)

Мне бы хотелось, чтобы для каждого объекта класса foo был только один экземпляр foo :: string, представляющий constзначение, которое никогда не должно меняться.Есть ли другой способ решения этой проблемы?

A static const std::string, как и следовало ожидать.

// C++03
struct T {
   static const std::string foo;
};

const std::string T::foo = "lol";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...