通过引用和整体推广
Pass-by-reference and integral promotion
本文关键字:引用 更新时间:2023-10-16
为什么编译器不能将char
提升到int&
,但在通过引用到常量(char
到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
和int
,并将i
绑定到那个临时。但是当我们分配i
时,我们只是在修改我们绑定的临时 - c
仍然是X
。这将是令人难以置信的混乱,不直观且容易出错。所以语言禁止它。
升级和转化会创建新的临时对象。非常量引用不能绑定到临时引用。
相关文章:
- 将对象数组的引用传递给函数
- 什么时候在C++中返回常量引用是个好主意
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 何时在引用或唯一指针上使用移动语义
- 如何在c++中使用引用实现类似python的行为
- 编译C++时未定义的引用
- Ctypes wstring通过引用传递
- c++r值引用应用于函数指针
- 理解c++中的引用
- C++取消引用指针.为什么会发生变化
- 如何修复此错误:未定义对"距离(浮点数,浮点数,浮点数,浮点数,浮点数)"的引用
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- 强制转换为引用类型
- 引用一个已擦除类型(void*)的指针
- 向量元素的引用地址与它所指向的向量元素的地址不同.为什么
- 具有默认值的引用获取函数
- 如何使用基类指针引用派生类成员
- 使用取消引用的指针的多态性会产生意外的结果.为什么?
- 如何引用基类的派生类?