为什么我不能在声明中定义静态变量?

3

看起来出于某些原因,我无法做到这一点...

class MyClass
{
    static std::string name = "Whatever";
};

我不太明白,对我来说,在声明中定义一些东西是有意义的,即使它是静态的,但是相反,我必须这样做...¿?¿?¿?

class MyClass
{
    static std::string name;
};
std::string MyClass::name = "Whatever";

顺便问一句... name 默认不是私有的吗?那么为什么我可以从类外部更改它的值呢?


@scohe001 不,对于 std::string 的规则比 int 更严格。该页面的大部分内容不适用。 - Asteroids With Wings
@Asteroids 你更喜欢静态常量字符串(类成员)吗? - scohe001
1个回答

4
为什么我不能在声明中定义静态字段?
你是可以的!
#include <string>

class MyClass
{
    static inline std::string name = "Whatever";
    //     ^^^^^^
};

默认情况下,名称是私有的吗?那么为什么我可以从类外部更改其值?

你不能这样做!

你是在定义/初始化它,而不是更改它的值。


我正在使用Visual Studio 2019。 - Karlos
稍等……“非静态”? - Asteroids With Wings
不,那个连接还在。 - Karlos
你需要在MSVC中添加"/std:c++17"开关(不确定GUI)才能使inline正常工作。 - sklott
如果有人想知道,VS 2019(以及VS 2022)中的Intellisense无法正确解析静态内联成员,并将其标记为错误。编译您的项目,编译器本身不应该抱怨。 - GlassBeaver
显示剩余12条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接