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

Posted

技术标签:

【中文标题】在 C++ 类中定义静态字符串变量【英文标题】:define static string variable in c++ class 【发布时间】:2012-02-29 10:09:32 【问题描述】:

我有两个问题:

为什么这对于 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】:

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

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

(在 C++11 中,当非staticconst 成员为文字类型时,您甚至可以这样做。)

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

如您所料,static const std::string

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

const std::string T::foo = "lol";

【讨论】:

以上是关于在 C++ 类中定义静态字符串变量的主要内容,如果未能解决你的问题,请参考以下文章

C++类中的静态成员函数以及静态成员变量

C++类中的静态成员函数以及静态成员变量

C++中类里面定义 静态成员变量的问题

C++类中的常成员和静态成员

c++中对静态变量的未定义引用

c++类中 各种成员的生命周期?