为什么A a();不会打电话给构造函数? 为什么sizeof(C)是1?
class C
{
public:
C(){
cout << "C default" << endl;
}
};
int main() {
C a();
cout << sizeof(C) << endl;
return 0;
}
“C a();”成为函数Statement吗?
答案 0 :(得分:4)
C a();
这不会创建一个名为C
的{{1}}实例,它声明一个名为a
的函数,该函数不带参数并返回a
。
要获得您想要的东西,您有两个主要选择:
C
C a;
C a{}; //c++11
是sizeof(C)
,因为 C ++中的每个对象至少占用一个字节,即使那里没有存储任何有意义的内容。想想你是否有一个1
数组;如果C
为sizeof(C)
,则0
与c_array[0]
位于同一地址。 C ++不允许两个不同的对象具有相同的地址。
答案 1 :(得分:-1)
1.如果要在创建新对象时调用构造函数, 代码应该是这样的:
C a;
C * a = new C();
2.因为没有对象在内存中的地址与任何其他变量相同。
因此,如果类或结构没有变量或函数,则sizeof(class)= 1。