为什么a a();不会调用构造函数? 以及为什么sizeof(C)是1?C++为什么“A a();”将不会调用构造函数
class C
{
public:
C(){
cout << "C default" << endl;
}
};
int main() {
C a();
cout << sizeof(C) << endl;
return 0;
}
做“C一();”成为一个函数声明
为什么a a();不会调用构造函数? 以及为什么sizeof(C)是1?C++为什么“A a();”将不会调用构造函数
class C
{
public:
C(){
cout << "C default" << endl;
}
};
int main() {
C a();
cout << sizeof(C) << endl;
return 0;
}
做“C一();”成为一个函数声明
C a();
这并不是创建一个名为a
的C
一个实例,即声明了一个名为a
函数,它不带任何参数和?返回C
。
为了得到你想要的东西,你有两个主要选择:
C a;
C a{}; //c++11
sizeof(C)
是1
因为每对象在C++中占据了至少一个字节,即使没有任何有意义的存储在那里。考虑一下你是否有一组C
;如果sizeof(C)
是0
,则c_array[0]
将与c_array[10]
处于相同的地址。 C++不允许两个不同的对象具有相同的地址。
1.如果你想打电话的时候,一个新的对象被创建的构造, 的代码应该是这样的:
下的;
C * a = new C();
2.因为没有对象的内存地址与其他变量的地址相同。
因此,如果类或结构没有变量或函数,的sizeof(类)= 1
对于第2号,当没有成员变量时,他问*为什么*它的大小是1。不是它是否。 – CoffeeandCode
是的,我会编辑它 – gdreamlend
[最令人烦恼的解析](https://en.wikipedia.org/wiki/Most_vexing_parse)。 – 101010
什么是'A'?我只看到'C'。 – Downvoter