400 028 6601

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

C++中什么时候传递const参照

本篇内容介绍了“C++中什么时候传递const参照”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

创新互联是一家专注于成都网站设计、网站建设与策划设计,江岸网站建设哪家好?创新互联做网站,专注于网站建设十年,网设计领域的专业建站公司;建站业务涵盖:江岸等地区。江岸做网站价格咨询:18980820575

对于输入参数来说,拷贝代价小的传值,其他传递const参照

Reason(原因)

两种方式都可以让调用者知道函数不会修改参数并且都可以通过右值初始化。

什么是“拷贝代价小”和机器架构有关,但是2到3个字(双精度数,指针,引用)通常最适合传值。如果拷贝代价小,没有方法可以超过拷贝的简单和安全,另外,对于小对象(不超过2到3个字)来说,由于函数不需要额外间接访问,因此传值会比传址的速度更快。

Example(示例)

void f1(const string& s);  // OK: pass by reference to const; always cheap
void f2(string s);         // bad: potentially expensive
void f3(int x);            // OK: Unbeatable
void f4(const int& x);     // bad: overhead on access in f4()

(只)对于高级的用法,需要优化为向输入参数传递右值引用的情况有:

Example(示例)

int multiply(int, int); // just input ints, pass by value
// suffix is input-only but not as cheap as an int, pass by const&string& concatenate(string&, const string& suffix);
void sink(unique_ptr);  // input only, and moves ownership of the widget

避免使用“只有高手才懂的技术”,例如:

Example(示例)

假设Matrix实现了移动操作(例如使用std::vector保管元素)

Matrix operator+(const Matrix& a, const Matrix& b){    Matrix res;    // ... fill res with the sum ...    return res;}
Matrix x = m1 + m2;  // move constructor
y = m3 + m3;         // move assignment
Notes(注意)

返回值优化不会处理赋值的情况,但是移动赋值会。

可以假设引用参照的是有效对象(语言准则)。不存在(合理的)“空引用”。如果需要可选值概念,使用指针,std::optional或者特殊值表示“没有值”。

Enforcement(实施建议)

“C++中什么时候传递const参照”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联网站,小编将为大家输出更多高质量的实用文章!


文章标题:C++中什么时候传递const参照
当前URL:http://mbwzsj.com/article/goeodj.html

其他资讯