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

时间:2015-03-30 12:48:14

标签: c++ class constructor

我想知道为什么构造函数在第一种情况下不会被调用/调用。

#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来编译我的项目

非常感谢。

3 个答案:

答案 0 :(得分:2)

Test a();

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

Test a();

哦,那是一个没有参数的函数的声明,返回Test类型的东西。

哦,等等......

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

有关详情,请参阅Herb Sutter's excellent article

答案 1 :(得分:0)

Test a();被解释为名为a的函数的声明,该函数不接受任何参数并返回类型为Test的对象。

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

答案 2 :(得分:0)

在测试a()之后删除括号; 它应该像测试一样; 它会自动触发没有参数的构造函数