C++ 空字符串构造函数

标签 c++ string

我是 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”,但允许编译器对其进行优化并省略复制。

编辑: Here is an appropriate item in C++ FAQ Lite

关于C++ 空字符串构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/925513/

相关文章:

c++ - 将线程对象放入 vector 中,其中函数是成员函数并需要返回值

c++ - ImageList_LoadImage 找不到位图

java - 我可以禁用 JVM 字符串池吗?

c++ - 如何在 C++ 中仅将字符缓冲区中的规则间隔项写入磁盘

C++:绑定(bind)到基类

c++ - 有没有办法不继承子类中函数的 "virtualness"?

c - 12 小时制 AM/PM 格式到军用(24 小时制)时间

c - 我们如何在 C 中通过指针获取整个字符串?

Php 比较字符串并返回常用值

string - 使用空接口(interface)更改函数中的 arg