如果函数具有通过副本传递的参数,我可以用 noexcept 标记该函数吗?

问题描述 投票:0回答:1

所以我想改进代码中一些运算符和函数的

noexcept

我可以标记这个功能吗

noexcept

std::string remove_suffix(/*passed by copy*/ std::string s) 
/*noexcept*/
// is noexcept allowed here?
{
    if(s[s.size()-1] == '0')
       s[0] = 'B';
    else
       s[0] = 'X';
    return s;
}

我可以标记这个函数吗

noexcept
,如果它碰巧抛出异常,它会调用
std::terminate
吗?

我想确保这一点,以便我可以将我的课程的加法运算符标记为

noexcept
进行更正。

c++ c++11 operator-keyword noexcept
1个回答
0
投票

这个函数不能抛出:正如评论中所讨论的,初始化参数不是函数执行的一部分,并且返回隐式是一个move(尽管它不能被省略,因为它来自函数参数)。

© www.soinside.com 2019 - 2024. All rights reserved.