Vin*_*ent 4 c++ runtime sizeof compile-time
考虑:
double data;
double array[10];
std::vector<int> vec(4, 100);
MyClass myclass;
Run Code Online (Sandbox Code Playgroud)
是否有区别:
sizeof(double);
sizeof(double[10]);
sizeof(std::vector<int>);
sizeof(MyClass);
Run Code Online (Sandbox Code Playgroud)
和
sizeof(data);
sizeof(array);
sizeof(vec);
sizeof(myclass);
Run Code Online (Sandbox Code Playgroud)
这两种语法是不同的还是严格等同的?是否所有这些都在编译时进行评估?如果没有,在运行时评估哪一个?
Jer*_*fin 20
唯一的区别在于语法和便利性.
从语法上讲,你可以在一种情况下省略括号,而不是另一种情况:
double d;
sizeof(double); // compiles
sizeof(d); // compiles
sizeof d; // compiles
sizeof double; // does NOT compile
Run Code Online (Sandbox Code Playgroud)
就方便而言,请考虑以下事项:
float a;
x = sizeof(float);
y = sizeof(a);
Run Code Online (Sandbox Code Playgroud)
如果,例如,你的某个时候彻底地改变了a从float一个双,你也只需要修改sizeof(float),以sizeof(double)匹配.如果您sizeof(a)在整个过程中使用,当您a从a 更改float为a时double,您的所有使用也sizeof将自动更改,而无需任何编辑.后者在C中比C++更常出现问题,例如在调用malloc时:
float *a = malloc(10 * sizeof(float));
Run Code Online (Sandbox Code Playgroud)
与
float *a = malloc(10 * sizeof(*a));
Run Code Online (Sandbox Code Playgroud)
在第一种情况下,改变第一float到double将产生编译代码,但有一个缓冲区溢出.在第二种情况下,改变(只)float,以double精品工程.