没有参数的构造函数不起作用

Constructor without arguments doesn't work

我想知道为什么构造函数在第一种情况下没有 work/get 调用。

#include <iostream>
#include <typeinfo>

class Test{
public:
    Test(){ std::cout << "1\n"; };
    Test(int){ std::cout << "2\n"; };
};


int main()
{
    Test a(); // actually doesn't call the constructor
    Test b(1); // "2"
    std::cout << (typeid(b).name()) << std::endl; // "4Test"
    std::cout << (typeid(a).name()); // "F4TestvE"
    return 0;
}

我还发现创建的变量的类型名很奇怪。谁能解释这种行为?


我使用 mingw gcc 4.7.2 for Windows 来编译我的项目

非常感谢。

Test a();

哦,那是a的实例化,一个Test类型的对象。

Test a();

哦,这是一个 returns 类型 Test.

无参数函数的声明

哦,等等...

如果您改为构建 new a(),或使用(空的)初始化列表,则可以避免这种歧义。

有关更多信息,请参阅 Herb Sutter's excellent article

Test a(); 被解释为名为 a 的函数的声明,该函数不带任何参数,returns 是类型为 Test.

的对象

要创建对象,请删除括号:

Test a;

去掉Test a()后的括号; 它应该像测试 a; 它将自动触发不带参数的构造函数