为什么会出现默认参数的警告?

kee*_*r12 3 c++ c++17

将 ReSharper 与 C++17 结合使用,我启用了许多警告,只是为了看看我的项目警告了我什么。我明白了:

Declaring a parameter with a default argument is disallowed[fuchsia-default-arguments]
Run Code Online (Sandbox Code Playgroud)

有问题的代码是构造函数:

class Point2D
{
public:
    explicit Point2D(double x = 0.0, double y = 0.0);
};
Run Code Online (Sandbox Code Playgroud)

我想知道为什么默认参数会被认为是坏/差/值得警告?有人有任何代码示例证明这是一个可行的警告吗?

这是文档。

Mic*_*ice 5

当涉及到函数参数的默认参数时,存在一些奇怪的极端情况。

\n\n

这是 CppCon 2017 的演示,详细介绍了许多棘手的行为。 https://youtu.be/NeJ85q1qddQ

\n\n

总结一下要点:

\n\n
    \n
  • 重新声明会导致潜在的令人困惑的行为
  • \n
  • 虚函数调用中使用的默认参数不是由调用的函数决定的,而是由静态类型决定的。
  • \n
  • 函数模板上的默认参数可能看起来格式不正确,但只要它们没有实例化就可以编译。
  • \n
\n\n

当然,对于非模板构造函数的情况,它们是相当无害的。它不能被覆盖或重新声明(尽管超出范围的定义可能会给您带来痛苦)。

\n