C++类私有段变量赋值问题:为何两种写法结果不同?
C++类私有段变量赋值问题解答
第一种写法报错的原因:
类的成员声明区域(private/protected/public块内)只能存放成员的声明或定义,不能直接写可执行语句。foo = "randomValue";是一条赋值语句,属于运行时才会执行的代码,必须放在函数体(比如构造函数、普通成员函数)内部,直接放在类体里会被编译器判定为语法错误。第二种写法可行的原因:
这是C++11标准引入的非静态成员变量就地初始化语法,它属于成员声明的一部分,并不是普通的赋值语句。编译器会在创建类对象时,用这个初始化值来初始化foo(如果类的构造函数没有通过初始化列表显式初始化该成员的话)。
如果想在声明后再给成员变量赋值,正确的做法是在构造函数里处理,比如:
class YourClass { private: std::string foo; public: // 方式1:构造函数初始化列表(推荐,效率更高) YourClass() : foo("randomValue") {} // 方式2:构造函数体内赋值 // YourClass() { // foo = "randomValue"; // } };
内容的提问来源于stack exchange,提问作者dark_ursus
相关产品推荐
相关产品推荐

