相关疑难解决方法(0)

为什么std :: unique_ptr :: reset()总是noexcept?

最近的一个问题(特别是我对它的回答)让我想知道:

在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 ,应该可以声明它使得它完全没有.我在这里遗漏了什么,或者这是标准中的疏忽(因为这无疑是一个高度学术化的情况)?

c++ destructor language-lawyer noexcept c++11

32
推荐指数
2
解决办法
2202
查看次数

默认参数vs重载,何时使用哪个

在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)

在哪种情况下首选哪种方式?

这种功能的消费者有什么区别?

overloading optional-parameters kotlin

7
推荐指数
2
解决办法
1010
查看次数