在"C的完整参考"一书中,提到char默认情况下是无符号的.
但我试图用GCC和Visual Studio验证这一点.它默认签名.
哪一个是正确的?
究竟什么是C/C++中的类型转换?编译器如何检查是否需要显式类型转换(并且是否有效)?它是否比较了值所需的空间?如果我有例如:
int a;
double b = 15.0;
a = (int) b;
Run Code Online (Sandbox Code Playgroud)
如果我没记错的话,double值需要更多的空间(是8字节?!)而不是整数(4字节).并且两者的内部表示完全不同(在两个/尾数上的补码).那么内部会发生什么?这里的例子非常简单,但在C/C++中有很多类型.
如果我可以将例如FOO转换为BAR,编译器如何知道(或程序员)?
以下是明确定义的:
char* charPtr = new char[42];
int* intPtr = (int*)charPtr;
charPtr++;
intPtr = (int*) charPtr;
Run Code Online (Sandbox Code Playgroud)
将intPtr(在这两种情况至少之一)没有正确对齐.只是把它放在那里是非法的吗?是UB在任何阶段使用它吗?你怎么能用它,怎么不能?