【发布时间】:2021-03-09 14:11:24
【问题描述】:
我在课堂上有这个字符串 s 和 t。
class A
{
private:
static string s;
string t;
public:
void printString()
{
cout<<s<<t<<endl;
}
};
我尝试打印这些字符串,如果没有初始化,每次它们都是空的。所以我的问题是在构造函数初始化之前类字符串是否总是空的。静态和非静态字符串也是如此吗?
【问题讨论】:
-
这取决于“在被构造函数初始化之前”的意思。您的意思是“在被
std::string构造函数初始化之前”还是“在被A的构造函数初始化之前”。 -
是的,我的意思是 A 的构造函数,这是否意味着
std::string s总是初始化为空? -
除非您指定使用替代构造函数,是的,默认构造函数会将
std::string初始化为空。 See implementation (1) here. -
@pujadeo
s在main之前初始化,但在某些情况下可能未初始化,例如在其他static成员从其他.cpp文件初始化期间。s的初始化方式取决于它在源文件中的定义方式。在.cpp文件中应该有一个std::string A::s;语句或等效语句来确定它的构造方式。 -
specify using an alternate constructor你的意思是std::string的替代构造函数吗?我们如何做到这一点,你能给我一些链接吗?
标签: c++ string initialization private access-modifiers