来自Java和C#世界,我总是喜欢使用
someclass a = someclass();
Run Code Online (Sandbox Code Playgroud)
代替
someclass a();
Run Code Online (Sandbox Code Playgroud)
在C++中初始化一个类变量.但是,我的编译器有时会抱怨
Error C2280: Attempting to reference a deleted function
Run Code Online (Sandbox Code Playgroud)
它们之间有什么区别吗?哪一个更好?
在C中,有符号整数和无符号整数在内存中的存储方式不同.当类型在运行时清除时,C还隐式转换有符号整数和无符号整数.但是,当我尝试以下代码段时,
#include <stdio.h>
int main() {
unsigned int a = 5;
signed int b = a;
signed int c = *(unsigned int*)&a;
signed int d = *(signed int*)&a;
printf("%u\n", a);
printf("%i\n", b);
printf("%i\n", c);
printf("%i\n", d);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
预期产量:
5
5 //Implicit conversion occurs
5 //Implicit conversion occurs, because it knows that *(unsigned int*)&a is an unsigned int
[some crazy number] //a is casted directly to signed int without conversion
Run Code Online (Sandbox Code Playgroud)
然而,实际上,它输出
5
5
5
5
Run Code Online (Sandbox Code Playgroud)
为什么?