int{10} 和 10 之间有什么区别?

8 c++ c++11

作为标题,我有两个表达:

int&& a = const_cast<int&&>(int{10});
int&& a = const_cast<int&&>(10);
Run Code Online (Sandbox Code Playgroud)

第一次编译通过,但第二次没有。为什么会这样?

在我看来,这是因为 10 是一个文字,而 int{10} 是一个未命名的变量。是吗?

Ser*_*eyA 6

第一次转换通过的唯一原因是 g++ 中的错误。这两个代码都不合法,clang 和 icc 都拒绝它。

他们甚至发出了一个好消息:

错误:const_cast 到右值引用类型的操作数不能是非类纯右值

这是有道理的,因为10int{10}都是纯右,并且您不能将引用直接绑定到纯右值。相反,当引用被初始化时,编译器会具体化临时变量并将引用绑定到它。但是,没有用于实现临时变量的规则const_cast- 所以没有什么可以绑定引用。