为什么要警告默认参数?

时间:2018-07-11 17:58:56

标签: c++ c++17

在C ++ 17中使用ReSharper,我启用了许多警告,只是为了查看我的项目警告我什么。我明白了:

Declaring a parameter with a default argument is disallowed[fuchsia-default-arguments]

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

class Point2D
{
public:
    explicit Point2D(double x = 0.0, double y = 0.0);
};

我想知道为什么默认参数会被认为是不良/不良/值得警告?有没有人提供任何代码示例来证明这是可行的警告?

Here is the documentation.

1 个答案:

答案 0 :(得分:3)

关于函数参数的默认参数,有几种奇怪的情况。

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

总结要点:

  • 重新声明会引起潜在的混乱行为
  • 虚拟函数调用中使用的默认参数不是由调用的函数决定的,而是由静态类型决定的。
  • 函数模板上的默认参数可能看起来格式不正确,但只要不实例化就可以编译。

当然,对于您使用非模板构造函数的情况,它们是相当无害的。不能覆盖或重新声明它(尽管过分定义可能会给您带来麻烦)。