相关疑难解决方法(0)

具有by-value参数&noexcept的构造方法

在此示例代码中:

explicit MyClass(std::wstring text) noexcept;
Run Code Online (Sandbox Code Playgroud)

noexcept这里的使用是否正确?wstring可能会抛出构造,但抛出是在我们在构造函数之前还是在构造函数中时?

编辑:假设这可以推广到任何采用按值参数的函数.

c++ noexcept c++11

20
推荐指数
1
解决办法
332
查看次数

复制返回值和noexcept的省略

我有一个这样的功能模板:

template <typename T>
constexpr auto myfunc() noexcept
{
    return T{};
}
Run Code Online (Sandbox Code Playgroud)

由于复制省略,此功能模板是否保证是noexcept?如果在构造函数中抛出异常,这是在函数内部还是外部发生?

c++ optimization exception noexcept

5
推荐指数
1
解决办法
83
查看次数

谁管理副本构造函数在参数中引发的异常?

假设我有这个功能

void foo() noexcept
{
   // Safely noexcept code.
}
Run Code Online (Sandbox Code Playgroud)

然后这个课:

class Bar
{
   Bar(const Bar&) { ... } // Is not noexcept, so might throw
   // Non movable:
   Bar(Bar&&) = delete;
};
Run Code Online (Sandbox Code Playgroud)

现在,我需要修改foo()以通过值接收Bar:

void foo(Bar bar) // noexcept?
{
   // Safely noexcept code
}
Run Code Online (Sandbox Code Playgroud)

我假设Bar的复制是在调用foo之前完成的,因此从理论上讲foo的代码仍然可以是noexcept,但是我不确定在C ++级别上是如何定义的。foo是否需要删除noexcept或在应对Bar时可能抛出的调用方?它取决于调用模式(stdcall,farcall等)还是编译器?更新:在其他问题中,我没有找到任何有关调用约定的引用。那应该改变行为。我吃了

c++ exception pass-by-value copy-constructor noexcept

5
推荐指数
1
解决办法
66
查看次数