C++ 参考传递与整体推广
为什么编译器不能将C++ 参考传递与整体推广,c++,type-conversion,pass-by-reference,overloading,integer-promotion,C++,Type Conversion,Pass By Reference,Overloading,Integer Promotion,为什么编译器不能将char升级到int&,但通过引用const(char到int-const&)传递它时没有问题 示例代码: #include <iostream> using namespace std; void func1(int & i) { cout << "int & " << i << endl; } void func2(int const & i) { cout <<
char
升级到int&
,但通过引用const(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;
}
#包括
使用名称空间std;
void func1(int&i){cout升级和转换将创建新的临时对象。非常量引用无法绑定到临时对象。这是允许的:
char c = 'X';
const int& i = c;
我们隐式地将c
提升到int
并将i
绑定到该临时项。这不会真正导致任何混淆行为。i
具有与c
相同的值,只是不同的类型
但是,如果非常量允许使用相同的逻辑,会发生什么情况呢
char c = 'X';
int& i = c;
i = 'J';
i
不能直接绑定到c
-这是错误的类型。我们仍然需要将c
升级到和int
并将i
绑定到该临时对象。但是当我们分配i
时,我们只是在修改我们绑定的临时对象-c
仍然是X
。这将是令人难以置信的混乱g、 不直观,容易出错。所以语言禁止这样做