c++怎么设置函数的参数是可选的
展开全部
要区分输入、输出、输入/输出参数,以及值和引用参数。
选择如何传递参数时尽量遵循以下准则:
对于输入参数
1.用const修饰作为输入参数的指针或引用;
2.对于原始类型(如char float)和拷贝开销较小的值对象(如Point,complex<float>),应采用值传递参数
3.对于其他用户定义的类型应采用const引用
4.如果函数需要它的参数的一份拷贝,考虑使用传值而不是引用。这在概念上等同于采用const引用加上一次拷贝,有助于编译器更好地优化掉临时变量。
对于输出或输入/输出参数,
1.如果参数是可选的(调用者可以传递null),或如果函数存储参数的一份拷贝以避免函数操纵参数的所有权,应传递(智能)指针。
2.如果需要参数且函数不存储指向参数的指针以避免影响其所有权。这表明了参数确实是需要的,调用者负责提供正确有效的对象。
不要使用C风格的varargs。
26.保持重载操作符的自然语义
重载操作符必须有很好的理由,并保持其自然语义,如果这很难做到,也许是对重载操作符的误用。
对于值类型(不是所有的类型):"When in doubt, do as the ints do."模仿操作符作用于内建类型时的行为和关系能确保不会产生其他令人惊讶的语义。
程序员希望相关操作符一起定义。如果表达式a@b对于定义的操作符@合法,调用者是否可以写b@a,a@=b?如果操作符可以倒转(如+-*/),两者是否都支持?
有一些很特殊的类库(如分析器生成器,正则表达式引擎等),他们为操作符定义了特定于领域的语义,和C++含义完全不同。
选择如何传递参数时尽量遵循以下准则:
对于输入参数
1.用const修饰作为输入参数的指针或引用;
2.对于原始类型(如char float)和拷贝开销较小的值对象(如Point,complex<float>),应采用值传递参数
3.对于其他用户定义的类型应采用const引用
4.如果函数需要它的参数的一份拷贝,考虑使用传值而不是引用。这在概念上等同于采用const引用加上一次拷贝,有助于编译器更好地优化掉临时变量。
对于输出或输入/输出参数,
1.如果参数是可选的(调用者可以传递null),或如果函数存储参数的一份拷贝以避免函数操纵参数的所有权,应传递(智能)指针。
2.如果需要参数且函数不存储指向参数的指针以避免影响其所有权。这表明了参数确实是需要的,调用者负责提供正确有效的对象。
不要使用C风格的varargs。
26.保持重载操作符的自然语义
重载操作符必须有很好的理由,并保持其自然语义,如果这很难做到,也许是对重载操作符的误用。
对于值类型(不是所有的类型):"When in doubt, do as the ints do."模仿操作符作用于内建类型时的行为和关系能确保不会产生其他令人惊讶的语义。
程序员希望相关操作符一起定义。如果表达式a@b对于定义的操作符@合法,调用者是否可以写b@a,a@=b?如果操作符可以倒转(如+-*/),两者是否都支持?
有一些很特殊的类库(如分析器生成器,正则表达式引擎等),他们为操作符定义了特定于领域的语义,和C++含义完全不同。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
要区分输入、输出、输入/输出参数,以及值和引用参数。
选择如何传递参数时尽量遵循以下准则:
对于输入参数
1.用const修饰作为输入参数的指针或引用;
2.对于原始类型(如char float)和拷贝开销较小的值对象(如Point,complex<float>),应采用值传递参数
3.对于其他用户定义的类型应采用const引用
4.如果函数需要它的参数的一份拷贝,考虑使用传值而不是引用。这在概念上等同于采用const引用加上一次拷贝,有助于编译器更好地优化掉临时变量。
对于输出或输入/输出参数,
1.如果参数是可选的(调用者可以传递null),或如果函数存储参数的一份拷贝以避免函数操纵参数的所有权,应传递(智能)指针。
2.如果需要参数且函数不存储指向参数的指针以避免影响其所有权。这表明了参数确实是需要的,调用者负责提供正确有效的对象。
不要使用C风格的varargs。
26.保持重载操作符的自然语义
重载操作符必须有很好的理由,并保持其自然语义,如果这很难做到,也许是对重载操作符的误用。
对于值类型(不是所有的类型):"When in doubt, do as the ints do."模仿操作符作用于内建类型时的行为和关系能确保不会产生其他令人惊讶的语义。
程序员希望相关操作符一起定义。如果表达式a@b对于定义的操作符@合法,调用者是否可以写b@a,a@=b?如果操作符可以倒转(如+-*/),两者是否都支持?
有一些很特殊的类库(如分析器生成器,正则表达式引擎等),他们为操作符定义了特定于领域的语义,和C++含义完全不同。
选择如何传递参数时尽量遵循以下准则:
对于输入参数
1.用const修饰作为输入参数的指针或引用;
2.对于原始类型(如char float)和拷贝开销较小的值对象(如Point,complex<float>),应采用值传递参数
3.对于其他用户定义的类型应采用const引用
4.如果函数需要它的参数的一份拷贝,考虑使用传值而不是引用。这在概念上等同于采用const引用加上一次拷贝,有助于编译器更好地优化掉临时变量。
对于输出或输入/输出参数,
1.如果参数是可选的(调用者可以传递null),或如果函数存储参数的一份拷贝以避免函数操纵参数的所有权,应传递(智能)指针。
2.如果需要参数且函数不存储指向参数的指针以避免影响其所有权。这表明了参数确实是需要的,调用者负责提供正确有效的对象。
不要使用C风格的varargs。
26.保持重载操作符的自然语义
重载操作符必须有很好的理由,并保持其自然语义,如果这很难做到,也许是对重载操作符的误用。
对于值类型(不是所有的类型):"When in doubt, do as the ints do."模仿操作符作用于内建类型时的行为和关系能确保不会产生其他令人惊讶的语义。
程序员希望相关操作符一起定义。如果表达式a@b对于定义的操作符@合法,调用者是否可以写b@a,a@=b?如果操作符可以倒转(如+-*/),两者是否都支持?
有一些很特殊的类库(如分析器生成器,正则表达式引擎等),他们为操作符定义了特定于领域的语义,和C++含义完全不同。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
使用默认参数:
例如:
int sum(int a=8, int b=6);
调用时:
sum();//传进去的值 a默认为8,b默认为6
例如:
int sum(int a=8, int b=6);
调用时:
sum();//传进去的值 a默认为8,b默认为6
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询