微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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} 都是 prvalues,并且您不能将引用直接绑定到纯右值。相反,当引用被初始化时,编译器 materializes the temporary variable 并绑定一个引用到它。但是,没有为 const_cast 实现临时变量的规则 - 所以没有什么可以绑定引用。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。