【发布时间】:2020-01-21 16:55:41
【问题描述】:
假设我有这个功能
void foo() noexcept
{
// Safely noexcept code.
}
然后是这个类:
class Bar
{
Bar(const Bar&) { ... } // Is not noexcept, so might throw
// Non movable:
Bar(Bar&&) = delete;
};
现在,我需要修改 foo() 以按值接收 Bar:
void foo(Bar bar) // noexcept?
{
// Safely noexcept code
}
我假设 Bar 的副本是在调用 foo 之前完成的,所以 foo 的代码理论上仍然可以是 noexcept, 但我不确定在 C++ 级别是如何定义的。 foo 是否需要删除 noexcept 或者是在应对 Bar 时可能抛出的调用者? 它是否取决于调用模式(stdcall、farcall 等)或编译器? 更新:在其他问题中,我没有发现对调用约定的任何引用。这应该会对行为产生影响。我想。
【问题讨论】:
-
foo可以保留noexcept。复制(如果有)发生在调用之前。 -
@jarod42 但这不取决于编译器的调用约定吗?
标签: c++ exception copy-constructor pass-by-value noexcept