相关疑难解决方法(0)

char默认是签名还是未签名?

在"C的完整参考"一书中,提到char默认情况下是无符号的.

但我试图用GCC和Visual Studio验证这一点.它默认签名.

哪一个是正确的?

c signed types char

145
推荐指数
5
解决办法
8万
查看次数

究竟什么是C/C++中的类型转换?

究竟什么是C/C++中的类型转换?编译器如何检查是否需要显式类型转换(并且是否有效)?它是否比较了值所需的空间?如果我有例如:

int a;
double b = 15.0;
a = (int) b;
Run Code Online (Sandbox Code Playgroud)

如果我没记错的话,double值需要更多的空间(是8字节?!)而不是整数(4字节).并且两者的内部表示完全不同(在两个/尾数上的补码).那么内部会发生什么?这里的例子非常简单,但在C/C++中有很多类型.

如果我可以将例如FOO转换为BAR,编译器如何知道(或程序员)?

c c++ types casting

39
推荐指数
2
解决办法
2万
查看次数

在原始类型指针之间进行转换

以下是明确定义的:

char* charPtr = new char[42];
int* intPtr = (int*)charPtr;

charPtr++;
intPtr = (int*) charPtr;
Run Code Online (Sandbox Code Playgroud)

intPtr(在这两种情况至少之一)没有正确对齐.只是把它放在那里是非法的吗?是UB在任何阶段使用它吗?你怎么能用它,怎么不能?

c++ strict-aliasing language-lawyer

5
推荐指数
1
解决办法
794
查看次数

标签 统计

c ×2

c++ ×2

types ×2

casting ×1

char ×1

language-lawyer ×1

signed ×1

strict-aliasing ×1