繁体   English   中英

通过参考和整体推广

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM