在声明中显式调用无参数构造函数意味着什么



这个问题听起来有点奇怪,但请检查代码示例

#include <iostream>
using namespace std;
int main() {
    string a, b(), c("test");
    // No problems
    a = c;
    // tester.cpp:9:7: error: assignment of function ‘std::string b()’
    b = c;
    // tester.cpp:10:7: error: invalid conversion from ‘std::string (*)() {aka std::basic_string<char> (*)()}’ to ‘char’
    a = b;
    // No problems
    c = a;
}

您可以看到,它看起来像是用默认构造函数创建的b,但实际上并不是。所以我的问题实际上是,string b()是什么意思?

将您的代码浓缩到string b();,您在这里所做的是向名为b函数声明一个原型,该函数返回string并且不接受任何参数。

"复合声明"中的逗号混淆了这一点。

它实际上是一个函数声明。可以声明局部函数,但不能定义它们。因此,不可能显式地调用默认构造函数。

经典错误,但错误消息已经显示:function std::string b()/。

最新更新