C ++函数,我可以为一个对象提供什么默认值?

时间:2012-03-28 14:18:28

标签: c++ function object default

我是C ++编程的新手,所以请不要太苛刻了:)以下示例说明了我的问题的最小描述。假设我在头文件中有这个函数声明:

int f(int x=0, MyClass a); // gives compiler error

编译器会抱怨,因为带有默认值的参数后面的参数也应该有默认值。

但是我可以给第二个参数提供什么默认值?

如果其余的与特定情况无关,那么可以使用少于两个args调用该函数,因此以下所有内容应该是:

MyClass myObj; // create myObj as an instance of the class MyClass
int result=f(3,myObj); // explicit values for both args

int result=f(3); // explicit for first, default for second arg

int result=f(); // defaults for both

5 个答案:

答案 0 :(得分:4)

您可能还想考虑提供重载而不是默认参数,但对于您的特定问题,因为MyClass类型具有默认构造函数,如果它在您的设计中有意义,则可以默认为:< / p>

int f(int x=0, MyClass a = MyClass() ); // Second argument default 
                                        // is a default constructed object

如果您愿意,可以通过手动添加重载来获得用户代码的更大灵活性:

int f( MyClass a ) {      // allow the user to provide only the second argument
   f( 0, a );
}

此外,您应该考虑在界面中使用引用(通过const引用取MyClass

答案 1 :(得分:1)

我认为您可以执行以下任一操作:

int f(MyClass a, int x=0); // reverse the order of the parameters
int f(int a=0, MyClass a = MyClass()) // default constructor

答案 2 :(得分:0)

你能做的最好的事情是

int f(MyClass a, int x=0);

在这种情况下,您可以使用一个参数(MyClass)和默认的第二个参数调用该函数,或使用两个显式参数(MyClass,int)调用该函数。

答案 3 :(得分:0)

int f(int x=0, MyClass a = MyClass());

答案 4 :(得分:0)

你可以做一个

int f(int x=0, MyClass a = MyClass());

并根据需要添加构造函数参数。