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

标签 c++ function object default

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

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

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

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

想法是,如果其余参数与特定情况无关,则可以使用少于两个参数调用该函数,因此应执行以下所有操作:

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);//第一个显式,第二个参数默认

int result=f();//两者的默认值

最佳答案

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

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

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

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

你还应该考虑在接口(interface)中使用引用(通过const引用获取MyClass)

关于C++函数,我可以为对象提供什么默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9909444/

相关文章:

c++ - 为什么这种令人尴尬的并行算法的性能没有通过多线程提高?

c++ - 如何在 C++ 中创建一个 "default"流插入运算符?

javascript - 在 javascript 中通过对象数组发出 for every 问题

c++ - 为什么我们不能为 map 提供不可变的 operator[] 版本

c++ - C++中一组函数的静态变量

function - Groovy - 检查 param 是否是一个函数

python - 如何遍历不同函数的输出?

检查list2是否包含list1

javascript - 这与 Javascript 中的类名

c++ - 我怎样才能调用另一个类的方法?