我是 C++ 初学者,如果问题太基本,请见谅。
我已经尝试收集字符串 constrcturs 并尝试所有它们(以记住它们)。
string strA(); // string(); empty string // incorrect
string strB("Hello"); // string( const char* str)
string strC("Hello",3); // string( const char* str, size_type length)
string strD(2,'c'); // string( size_type lenght, const char &c)
string strE(strB); // string( const string& s)
cout << strA << endl;
cout << strB << endl;
cout << strC << endl;
cout << strD << endl;
cout << strE << endl;
除了 strA 之外,所有这些都有效。它打印“1”。 为什么?在这种情况下 strA 的类型是什么?当我不确定时如何检查元素的类型?
我注意到正确的方法是这样(顺便说一句,这似乎与其他构造函数不一致,有时parens有时没有parens):
string strA;
ps:粗体问题,通常不相关的答案将被否决。
最佳答案
这是一个非常受欢迎的问题。 C++ 语法是模棱两可的。解决歧义的规则之一是“如果某件事看起来像声明,那就是声明”。在这种情况下,您声明了一个函数原型(prototype),而不是定义一个变量。
string strA();
等价于
string strA(void);
返回字符串的无参数函数原型(prototype)。
如果你想显式调用无参数构造函数,试试这个:
string strA=string();
它并不完全等价——它的意思是“使用无参数构造函数创建一个临时字符串,然后将其复制以初始化变量 strA”,但允许编译器对其进行优化并省略复制。
关于C++ 空字符串构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/925513/