gpt4 book ai didi

c++ - 将右值引用参数转换为右值引用?

转载 作者:行者123 更新时间:2023-11-30 01:46:31 26 4
gpt4 key购买 nike

我目前正在尝试在我的代码中实现一个非常小的嵌套异常机制,因为 std::nested_exception 并非适用于我必须用来编译我的代码的所有编译器。

我在 gcc implementation source code 中遇到了以下有用的嵌套包装器:

template<typename _Except>
struct _Nested_exception : public _Except, public nested_exception
{
explicit _Nested_exception(_Except&& __ex)
: _Except(static_cast<_Except&&>(__ex))
{ }
};

它允许将已抛出的异常与 throw_with_nested 中的 nested_exception 类结合起来,以便可以 dynamic_cast 来测试异常是否我们捕获的实际上是一个嵌套的异常或不是稍后。

我不明白的是这里的static_cast。我想我遗漏了一些关于移动语义的东西,它真的需要吗?

最佳答案

尽管__ex是一个 _Except&& , 一旦你进入这个范围 __ex是一个左值——它是一个局部变量。在 _Except 中强制使用移动构造函数他们做_Except(static_cast<_Except&&>(__ex))给力__ex成为一个右值(它实际上可能是一个 xvalue)。

关于c++ - 将右值引用参数转换为右值引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33106567/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com