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

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

int&& a = const_cast<int&&>(int{10});
int&& a = const_cast<int&&>(10);

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

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

回答

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

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

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

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


以上是int{10}和10之间有什么区别?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>