[英]Pass-by-reference and integral promotion
为什么编译器不能将char
提升为int&
但在通过reference-to-const( char
to int const&
)传递它时没有问题?
示例代码:
#include <iostream>
using namespace std;
void func1(int & i) { cout << "int & " << i << endl; }
void func2(int const & i) { cout << "const int & " << i << endl; }
int main() {
char mychar = 'a';
func1(mychar); // compiler-error
func2(mychar); // no error
return 0;
}
这是允许的:
char c = 'X';
const int& i = c;
我们隐含地将c
推广到int
并将i
绑定到那个临时的。 这实际上不会导致任何令人困惑的行为。 i
有相同的价值c
,它只是一个不同的类型。
但是如果非 const
允许相同的逻辑会发生什么:
char c = 'X';
int& i = c;
i = 'J';
i
无法直接绑定到c
- 这是错误的类型。 我们仍然需要提升c
to和int
并将i
绑定到那个临时的。 但是,当我们分配i
,我们只是修改临时我们在一起- c
仍然是X
。 这将是令人难以置信的混乱,非直观和容易出错。 所以语言禁止它。
促销和转化会创建一个新的临时对象。 非const引用不能绑定到临时对象。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.