【发布时间】:2016-09-07 01:27:56
【问题描述】:
我有一个小程序:
#include<iostream>
using namespace std;
void f(int) { cout << "int\n"; }
void f(short) { cout << "short\n"; }
int main(void){
char c = 0;
f(c);
return 0;
}
它打印int。我觉得,如果这是因为“整数提升”,为什么不首选short?
我也知道整数提升发生在表达式中(例如 A=B)。但是我在调用f(), 时没有表达对吗?
如果这与重载解析规则有关,为什么将char 传递给 f 会导致编译器更喜欢int 而不是short?
如果我删除f(int),那么f(c) 将调用f(short)!
总而言之,我的问题是,它与“整数提升”还是“重载解析规则”有关?为什么?
【问题讨论】:
-
您是否正在尝试解决某个问题,或者这只是出于好奇?
-
(有点可疑) 理由是,
int被认为是最佳处理器/寄存器大小,short只是一个打包好的内存布局。因此,int(“寄存器”)用于处理char。假设短减法不会比 int 减法更有效。 -
@JoopEggen - 这不是一个基本原理(可疑或其他),这是一个设计决策:在 C 和 C++ 中,
int应该是架构的自然大小,所以它应该是在没有充分理由偏爱其他事物时使用。 -
@PeteBecker 我想为该设计决策制定原因。由于已经有引用引用的答案,我不想要一个合法的声明。
-
好问题+1!!!
标签: c++ type-conversion overloading language-lawyer