相关疑难解决方法(0)

C++中的默认参数vs重载

例如,而不是

void shared_ptr::reset() noexcept;
template <typename Y>
void shared_ptr::reset(Y* ptr);
Run Code Online (Sandbox Code Playgroud)

人们可能会想到

template <typename Y = T>
void shared_ptr::reset(Y* ptr = nullptr);
Run Code Online (Sandbox Code Playgroud)

我认为这里的性能差异可以忽略不计,第二个版本更简洁.有没有具体的原因C++标准是第一种方式?

同样的问题已经被问了科特林语言,默认参数为首选那里.

更新:

std::unique_ptr::reset()遵循默认参数设计(参见此处).所以我认为std::shared_ptr::reset()使用重载的原因是因为它们有不同的异常规范.

c++ api-design overloading language-lawyer default-arguments

16
推荐指数
3
解决办法
1459
查看次数