在c ++类中定义静态字符串变量

时间:2012-02-29 10:09:32

标签: c++ string static

我有两个问题:

为什么这可能是一个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 个答案:

答案 0 :(得分:7)

  

为什么这可能是一个int变量:[..]但是对于一个字符串变量我需要这样做吗?

只是因为。实际上你仍然可以制作string const但是,是的,你必须在类定义之外定义它。您只能在static成员const和积分(或“文字类型”)时对static成员进行就地初始化。

(在C ++ 11中,你甚至可以为非conststatic const std::string成员提供文字类型。)

  

我希望对于类foo的每个对象,只有一个foo :: string实例,表示一个永远不会改变的const值。有没有其他方法可以解决这个问题?

// C++03 struct T { static const std::string foo; }; const std::string T::foo = "lol"; ,正如您所料。

{{1}}