C ++为char分配一个int - 为什么这个没有至少一个警告?

时间:2010-11-30 20:43:46

标签: c++

为什么C ++(也可能是C语言)允许我为char分配和int而不至少给我一个警告?

是否可以直接分配值,例如

int i = 12;
char c = i;

即。进行隐式转换,还是使用static_cast<>

修改

是的,我正在使用gcc

4 个答案:

答案 0 :(得分:7)

在发明显式的强制语法之前,它在C中被允许。 然后它仍然是一种常见的做法,所以C ++继承它是​​为了不破坏大量的代码。

实际上大多数编译器会发出警告。如果您没有,请尝试更改其设置。

答案 1 :(得分:1)

最初设计的C不是真正的strongly-typed language。一般的理念是程序员必须知道你在做什么,而编译器只是帮助你做到这一点。如果你要求在一个表达式中将float,int和unsigned char转换六到七次,那么这一定是你想要的。

C ++有点挑选,只是为了让所有现有的C代码对端口没有太大的影响。尽管如此,他们正在慢慢地试图让它变得更强大。今天几乎任何C ++编译器都会给你一个警告,如果你提高警告级别(我强烈建议你这样做)。

否则,也许你应该研究真正的强类型语言,比如Java和Ada。如果没有显式转换,等效的Ada代码将无法编译。

答案 2 :(得分:0)

简短的回答:你的例子中没有问题(按照c ++标准) 稍微长一点的回答:如果char已经签名并且你试图为它分配一个超出其范围的值,那就不行了。可以,如果它是无符号的(无论char是否签名取决于您的环境),那么您将获得模数算术。编译器通常有一个开关来警告你,因为第一种情况,但只要你保持在界限,它就完全没问题(但是,明确的演员表明你的意图是明确的并没有伤害)。

答案 3 :(得分:-3)

char与short相同。因此,应该有关于可能丢失信息的警告。可能是你关闭了警告,尝试以某种方式配置你的编译器/ ide。