请考虑以下代码,其中一个变量默认构造,而另一个值构造:
#include <iostream>
#include <typeinfo>
struct A
{
A() : m_() {}
A(int m) : m_(m) {}
int m_;
};
int main()
{
A a, b(), c(5);
std::cout << typeid(a).name() << std::endl;
std::cout << typeid(b).name() << std::endl;
std::cout << typeid(c).name() << std::endl;
return 0;
}
对于GCC 4.8,输出为
A
A()
A
尽管a,c
和b
引用相同的结构/类,但它们具有不同的类型。怎么会这样?
(当然,这是从复杂代码问题中衍生出来的一个最小示例。在那里,我得到了A
和A(int)
之类的东西,但是我现在还不能重现。)< / p>
答案 0 :(得分:0)
声明A b()
表示b
是签名A ()
的函数,尽管它与变量a
和c
的声明混合在一起输入A
。对示例代码的以下修改使其更加清晰:
struct X {};
struct A
{
A() : m_() {}
A(X m) : m_(m) {}
X m_;
};
int main()
{
X x;
A a, b(x), c(X);
...
}
输出为
A
A
A(X)
因此a
和b
是默认值和构造的值,但是c
是一个函数声明,因此具有不同的类型。