为什么C ++(也可能是C语言)允许我为char分配和int而不至少给我一个警告?
是否可以直接分配值,例如
int i = 12;
char c = i;
即。进行隐式转换,还是使用static_cast<>
?
修改
是的,我正在使用gcc
。
答案 0 :(得分:7)
在发明显式的强制语法之前,它在C中被允许。 然后它仍然是一种常见的做法,所以C ++继承它是为了不破坏大量的代码。
实际上大多数编译器会发出警告。如果您没有,请尝试更改其设置。
答案 1 :(得分:1)
C ++有点挑选,只是为了让所有现有的C代码对端口没有太大的影响。尽管如此,他们正在慢慢地试图让它变得更强大。今天几乎任何C ++编译器都会给你一个警告,如果你提高警告级别(我强烈建议你这样做)。
否则,也许你应该研究真正的强类型语言,比如Java和Ada。如果没有显式转换,等效的Ada代码将无法编译。
答案 2 :(得分:0)
简短的回答:你的例子中没有问题(按照c ++标准) 稍微长一点的回答:如果char已经签名并且你试图为它分配一个超出其范围的值,那就不行了。可以,如果它是无符号的(无论char是否签名取决于您的环境),那么您将获得模数算术。编译器通常有一个开关来警告你,因为第一种情况,但只要你保持在界限,它就完全没问题(但是,明确的演员表明你的意图是明确的并没有伤害)。
答案 3 :(得分:-3)
char与short相同。因此,应该有关于可能丢失信息的警告。可能是你关闭了警告,尝试以某种方式配置你的编译器/ ide。