我有两个问题:
为什么这可能是一个int变量:
class foo{
private:
const static int a = 42;
};
但对于字符串变量,我需要这样做吗?
class foo{
private:
static string fooString;
};
string foo::fooString = "foo";
还有:
在我的特定情况下,foo :: fooString应该表示一个路径变量,我希望对于类foo的每个对象,只有一个foo :: string实例,表示一个永远不会改变的const值。
有没有其他方法可以解决这个问题?
答案 0 :(得分:7)
为什么这可能是一个int变量:[..]但是对于一个字符串变量我需要这样做吗?
只是因为。实际上你仍然可以制作string
const
但是,是的,你必须在类定义之外定义它。您只能在static
成员const
和积分(或“文字类型”)时对static
成员进行就地初始化。
(在C ++ 11中,你甚至可以为非const
非static const std::string
成员提供文字类型。)
我希望对于类foo的每个对象,只有一个foo :: string实例,表示一个永远不会改变的const值。有没有其他方法可以解决这个问题?
// C++03
struct T {
static const std::string foo;
};
const std::string T::foo = "lol";
,正如您所料。
{{1}}