【问题标题】:Location of C++ function default parametersC++ 函数默认参数的位置
【发布时间】:2013-08-20 18:30:39
【问题描述】:
// Case A
class Point {
private:
    int x;
    int y;
public:
    Point(int i = 0, int j = 0);  // Constructor
};

Point::Point(int i, int j)  {
    x = i;
    y = j;
    cout << "Constructor called";
}

// Case B:
class Point {
private:
    int x;
    int y;
public:
    Point(int i, int j);  // Constructor
};

Point::Point(int i = 0, int j = 0)  {
    x = i;
    y = j;
    cout << "Constructor called";
}

问题> Case A 和 Case B 用 VS2010 编译都没有问题。

原来我假设只有案例 A 有效,因为我记得应该在声明函数的地方引入默认参数,而不是在函数定义的位置引入。有人可以纠正我吗?

谢谢

【问题讨论】:

标签: c++ visual-studio-2010


【解决方案1】:

如果将默认参数放入方法定义中,那么只有看到定义的人才能使用默认参数。唯一的问题是如果你尝试这样的事情:

public:
    Point(int i = 0, int j = 0);

(...)

Point::Point(int i = 0, int j = 0) { ... }

然后你会得到一个构建时错误。

// 编辑:但我很好奇 Mark B. 会发现什么,正如您问题下的评论中提到的那样。

// EDIT2:而且显然clang编译器不喜欢案例B。

【讨论】:

  • 默认参数的目标之一是记录默认值是什么。因此,将它放在标头(声明)中比将它放在实现中(例如,如果创建静态库可能看不到)更有用。该标准允许两者,但我强烈反对将其放在实现中。
  • 是的,我的意思是 - 可以做到,但如果你真的做到了,那就太傻了。
猜你喜欢
  • 2013-04-15
  • 1970-01-01
  • 2013-04-15
  • 2017-10-23
  • 2014-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多