你应该始终在构造函数中保留可选参数吗?

时间:2013-05-30 19:06:30

标签: c++

我正在阅读这篇文章Default parameters with C++ constructors,我对构造函数中可选参数的位置有疑问。 例如:

Class TestCode {
private:
      int _length;
      int _width;
      int _height;
public:
     TestCode(int length = 5, int width, int height=3):
             _length(length), _width(width),_height(height){

} } ;

// Using the class

  TestCode testRectangle(2);
  TestCode testRectangle2(2,3);

testRectangle对象是用宽度2构造的,默认长度和高度是?在testRectangle2的情况下会发生什么?参数分配是否正确。鉴于这种歧义,应该只是在构造函数的末尾有所有选项参数?

3 个答案:

答案 0 :(得分:4)

是的,您必须在声明结尾处拥有所有可选参数。你的例子:

TestCode(int length = 5, int width, int height=3)

不会编译。

答案 1 :(得分:2)

事实上,必须让所有默认参数都在C ++中的所有其他非默认参数之后。

答案 2 :(得分:1)

如果你把它们放在一开始,你的代码是否会编译? Afaik它不应该。

是的,在非可选参数之后,最好将它们放在最后。如果没有令人信服的理由不按照它们使用频率的顺序排列它们也是一个好主意。