assigning char to int reference and const int reference in C++

社会主义新天地 提交于 2019-11-28 12:06:33
int& x = c;

Here an implicit conversion from char to int is being performed by the compiler. The resulting temporary int can only be bound to a const reference. Binding to a const int& will also extend the lifetime of the temporary result to match that of the reference it is bound to.

This behaviour is justified in the standard N4527 at 8.5.3/p5.2 References [dcl.init.ref]

5 A reference to type “cv1 T1” is initialized by an expression of type “cv2 T2” as follows:

...

5.2 Otherwise, the reference shall be an lvalue reference to a non-volatile const type (i.e., cv1 shall be const), or the reference shall be an rvalue reference. [ Example:

double& rd2 = 2.0; // error: not an lvalue and reference not const
int i = 2;
double& rd3 = i; // error: type mismatch and reference not const

— end example ]

The fact that the line

const int& y = c; 

creates a temporary and y binds to the temporary can be verified by the following:

#include <iostream>

int main()
{
   char c = 10;
   const int& y = c;

   std::cout << (int)c << std::endl;
   std::cout << y << std::endl;

   c = 20;

   std::cout << (int)c << std::endl;
   std::cout << y << std::endl;

   return 0;
}

Output:

10
10
20
10

The value of y did not change when the value of c was changed.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!