Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.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
如果使用引用的目的是更改原始变量的值,为什么要使用pass by const reference?[C++]_C++_Constants_Pass By Reference - Fatal编程技术网

如果使用引用的目的是更改原始变量的值,为什么要使用pass by const reference?[C++]

如果使用引用的目的是更改原始变量的值,为什么要使用pass by const reference?[C++],c++,constants,pass-by-reference,C++,Constants,Pass By Reference,C++: 例如,如果我们想要更改实际变量的值,则使用passby引用 那么,passbyconst引用有什么用途呢?它说它不允许我们改变变量的值 嗯。那么为什么不首先使用传递值呢?:/传递值也不会更改变量的值。它将更改临时副本的值 那么为什么要使用常量引用呢?欧欧?我希望你能理解我 请帮我澄清我的疑问。我想你是说为什么 int foo(int const& bar) 而不是 int foo (int bar) 如果这是您的问题,则使用按引用传递,这样就不需要制作副本。在上面的例子中,

C++:

例如,如果我们想要更改实际变量的值,则使用passby引用

那么,passbyconst引用有什么用途呢?它说它不允许我们改变变量的值

嗯。那么为什么不首先使用传递值呢?:/传递值也不会更改变量的值。它将更改临时副本的值

那么为什么要使用常量引用呢?欧欧?我希望你能理解我


请帮我澄清我的疑问。

我想你是说为什么

int foo(int const& bar)
而不是

int foo (int bar)

如果这是您的问题,则使用按引用传递,这样就不需要制作副本。在上面的例子中,它很简单,因为参数是一个int。但是如果它是一个大的向量或映射,您肯定不想通过值传递,因为它会生成一个副本


因此,如果您只想通过引用传递以避免复制,但又不希望变量是可变的,则应将其设置为常量引用。

如果通过值传递,则必须调用复制构造函数。对于像int这样的东西,它确实很简单,但是像数千字节的字符串这样的东西很难复制,而如果传入引用,从技术上讲,只传入指向该内存的指针,并且具有更好的语法,那么您肯定不想按值传递,因为它会生成一个副本。但有时候你需要一份。嗨。非常感谢您这么快的回复。我还有一个问题。编辑:我想我明白了。我今天太糊涂了。在写这篇文章之前,我也读过其他类似的问题。