【发布时间】:2014-01-24 10:54:42
【问题描述】:
我应该在 C++11 中始终对 getter 使用 noexcept 方法修饰符吗?
我的意思是简单的 getter,只返回成员。 至少在我所有的吸气剂中,我这里不可能有一个例外 被抛出。一个缺点是 getter 过于冗长:
const std::string& getName() const noexcept{ return name; }
Stroustrup 书中指出的好处是编译器 可能会在这里和那里做一些优化。
【问题讨论】:
-
这与通常的“我应该编写(琐碎的)getter 和 setter 吗?”非常相关。问题。如果你的 getter 真的那么简单,你可以保证它会保持
noexcept,那么你真的需要它吗? -
@juanchopanza 这是另一个很好的论点,是的。你建议我有公共成员?
-
一般来说,这些琐碎的getter/setter是内联的,所以编译器可以很容易地推断出它们是
noexcept。 -
目前我的看法是只值得添加
swap和特殊成员函数。 -
@bames53 & juanchopanza:老问题,但我会质疑这个说法。琐碎的 getter 和 setter 可能是一个问题的迹象,但单独的琐碎的 getter 很自然地发生了。例如。想想
isOpen()、size()、operator[]、getID之类的事情,一般来说,如果你想保护对象中的数据成员不被修改,那会破坏某些不变量,但仍然需要对它们进行读取访问。