没有参数的构造函数不起作用
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;
它将自动触发不带参数的构造函数
我想知道为什么构造函数在第一种情况下没有 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; 它将自动触发不带参数的构造函数