Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 传递常量参考参数的意义是什么?它会产生很大的影响吗?_C++_Oop - Fatal编程技术网

C++ 传递常量参考参数的意义是什么?它会产生很大的影响吗?

C++ 传递常量参考参数的意义是什么?它会产生很大的影响吗?,c++,oop,C++,Oop,e、 g.Person(常量字符串和aName){…} 一个程序会仅仅因为我们不按引用传递而占用大量内存吗?我知道如何使用const reference,但我很难理解为什么要使用它们 一个程序会仅仅因为我们不按引用传递而占用大量内存吗 字符串的副本(如果按值传递参数[除非调用是内联展开的,在这种情况下,参数的传递方式无关紧要])将使用与原始字符串相同的内存。因此,这样的程序对字符串及其副本使用的内存是另一个程序对未复制的字符串使用的内存的两倍 差异不限于使用的内存量。复制内存比不复制内存花费更多

e、 g.
Person(常量字符串和aName){…}

一个程序会仅仅因为我们不按引用传递而占用大量内存吗?我知道如何使用const reference,但我很难理解为什么要使用它们

一个程序会仅仅因为我们不按引用传递而占用大量内存吗

字符串的副本(如果按值传递参数[除非调用是内联展开的,在这种情况下,参数的传递方式无关紧要])将使用与原始字符串相同的内存。因此,这样的程序对字符串及其副本使用的内存是另一个程序对未复制的字符串使用的内存的两倍

差异不限于使用的内存量。复制内存比不复制内存花费更多的时间。通过引用传递的开销在速度和内存使用方面都是恒定的,而复制字符串的开销随着字符串长度的增加而线性增加

如果不能保证字符串很小,那么复制字符串的线性复杂度可能会很高。即使字符串很小,如果经常调用函数,分配开销也会很大

传递常量参考参数的意义是什么

当您使用常量而不是非常量引用时,您将更容易推断程序的正确性,因为您仅通过函数声明隐式地知道它不会修改引用的对象。它还允许您将常量对象和临时对象传递给函数

传递值具有这些相同的优点,但它需要一个副本,正如我在前面的段落中解释的那样,该副本可能会对性能产生重大影响。如果函数本身无论如何都要复制字符串,那么最好按值传递,以便读者能够清楚地看到副本

一个程序会仅仅因为我们不按引用传递而占用大量内存吗

字符串的副本(如果按值传递参数[除非调用是内联展开的,在这种情况下,参数的传递方式无关紧要])将使用与原始字符串相同的内存。因此,这样的程序对字符串及其副本使用的内存是另一个程序对未复制的字符串使用的内存的两倍

差异不限于使用的内存量。复制内存比不复制内存花费更多的时间。通过引用传递的开销在速度和内存使用方面都是恒定的,而复制字符串的开销随着字符串长度的增加而线性增加

如果不能保证字符串很小,那么复制字符串的线性复杂度可能会很高。即使字符串很小,如果经常调用函数,分配开销也会很大

传递常量参考参数的意义是什么

当您使用常量而不是非常量引用时,您将更容易推断程序的正确性,因为您仅通过函数声明隐式地知道它不会修改引用的对象。它还允许您将常量对象和临时对象传递给函数


传递值具有这些相同的优点,但它需要一个副本,正如我在前面的段落中解释的那样,该副本可能会对性能产生重大影响。如果函数本身无论如何都要复制字符串,那么最好按值传递,以便读者能够清楚地看到副本。

复制对象所需的时间不是内存(通常),而是内存。不按引用传递可能不会占用大量内存。相反,您必须遍历整个字符串并复制数据,但不使用任何需要复制的内容。作为一个现实生活中的例子,我写了一些代码,其中我无意中得到了一个无用的副本,我所有的数据都通过了它,而我的程序(运行速度非常快)的速度大约是我修复iTunes时的一半,使用const是为了数据安全,所以你不会更改值。通过引用传递也可以节省内存。通过引用传递表示将不进行复制。引用为
const
,因为接口表示不会修改引用。另外,使用引用表示该项已经存在,而传递指针并不满足这一保证。通过引用传递是一种性能改进,因为没有副本。通过
const
reference传递有两种效果:它约束方法实现不改变对象,并且允许编译器在调用站点构造临时变量,这可以简化调用代码。这不是内存(通常)复制对象所需的时间。不通过引用传递可能不会占用大量内存。相反,您必须遍历整个字符串并复制数据,但不使用任何需要复制的内容。作为一个现实生活中的例子,我写了一些代码,其中我无意中得到了一个无用的副本,我所有的数据都通过了它,而我的程序(运行速度非常快)的速度大约是我修复iTunes时的一半,使用const是为了数据安全,所以你不会更改值。通过引用传递也可以节省内存。通过引用传递表示将不进行复制。引用为
const
,因为接口表示不会修改引用。另外,使用引用表示该项已经存在,而传递指针并不满足这一保证。通过引用传递是一种性能改进,因为没有副本。通过
const