最近的一个问题(特别是我对它的回答)让我想知道:
在C++ 11(和更新的标准)中noexcept,除非另有说明(即noexcept(false)),否则析构函数总是隐式的.在这种情况下,这些析构函数可能合法地抛出异常.(请注意,这仍然是你应该知道你在做什么 - 情况!)
但是,所有重载
std::unique_ptr<T>::reset()都被声明为noexcept(参见cppreference),即使析构函数T不是,如果析构函数在此期间抛出异常,也会导致程序终止reset().类似的事情适用于std::shared_ptr<T>::reset().
为什么reset()总是noexcept,而不是条件noexcept?
noexcept(noexcept(std::declval<T>().~T()))如果析构函数T是noexcept ,应该可以声明它使得它完全没有.我在这里遗漏了什么,或者这是标准中的疏忽(因为这无疑是一个高度学术化的情况)?
在Kotlin中,有两种表达可选参数的方法,可以通过指定默认参数值:
fun foo(parameter: Any, option: Boolean = false) { ... }
Run Code Online (Sandbox Code Playgroud)
或引入过载:
fun foo(parameter: Any) = foo(parameter, false)
fun foo(parameter: Any, option: Boolean) { ... }
Run Code Online (Sandbox Code Playgroud)
在哪种情况下首选哪种方式?
这种功能的消费者有什么区别?