无参数构造函数在声明时显式调用时的含义

时间:2014-09-19 07:55:58

标签: c++

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

#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;
}

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

3 个答案:

答案 0 :(得分:1)

将您的代码压缩到string b();,您在此处所做的是将函数的原型声明为b,返回string并取消参数。

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

经典错误,但错误消息已经说明了:function std::string b() /.