我是一名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;
Run Code Online (Sandbox Code Playgroud)
除strA外,所有这些都有效.它打印"1".为什么?在这种情况下,strA的类型是什么?当我不确定时,如何检查东西的类型?
我注意到这是正确的方法(顺便说一句,这似乎与其他构造函数不一致,有时候parens有时没有parens):
string strA;
Run Code Online (Sandbox Code Playgroud)
ps:大胆的问题,通常不相关的答案将被低估.
Tad*_*pec 32
这是一个非常受欢迎的问题.C++语法含糊不清.解决歧义的规则之一是"如果某些事情看起来像宣言那就是宣言".在这种情况下,您不是定义变量,而是声明了函数原型.
string strA();
Run Code Online (Sandbox Code Playgroud)
相当于
string strA(void);
Run Code Online (Sandbox Code Playgroud)
返回字符串的无参数函数的原型.
如果你想显式调用no-arg构造函数,试试这个:
string strA=string();
Run Code Online (Sandbox Code Playgroud)
它不完全等价 - 它意味着'使用no-arg构造函数创建一个临时字符串,然后将其复制到初始化变量strA',但允许编译器对其进行优化并省略复制.
Căt*_*tiș 13
它认为
string strA();
Run Code Online (Sandbox Code Playgroud)
作为功能声明.
对于默认构造函数使用:
string strA;
Run Code Online (Sandbox Code Playgroud)
小智 6
在C++中,就像在C中一样,有一条规则说任何看起来像声明的东西都会被视为声明.
string strA();
Run Code Online (Sandbox Code Playgroud)
看起来像一个函数声明,所以它被视为一个.你需要:
string strA;
Run Code Online (Sandbox Code Playgroud)