想象一下你有这个功能:
void foo(long l) { /* do something with l */}
现在您在呼叫站点这样称呼它:
foo(65); // here 65 is of type int
为什么,(从技术上讲)当您在函数声明中指定您期望 along
并且您只传递一个没有L
后缀的数字时,它是否被视为 a int
?
现在,我知道这是因为 C++ 标准是这样说的,但是,技术上的原因是什么,它65
不仅被提升为类型long
,从而为我们节省了忘记L
后缀以使其明确地变成 long 的愚蠢错误?
我在 C++ 标准中发现了这一点:
4.7 积分转换[conv.integral]
5 作为积分促销允许的转换不包括在积分转换集中。
我可以想,缩小转换不是隐式进行的,但这里的目标类型显然比源类型更宽。
编辑
这个问题是基于我之前看到的一个问题,当你没有指定L
后缀时,它的行为很有趣。 示例,但也许它是 C 的东西,而不是 C++?!