Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.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++ - Fatal编程技术网

C++ 默认情况下,对象是通过引用传递还是通过值传递

C++ 默认情况下,对象是通过引用传递还是通过值传递,c++,C++,当将对象传递给方法或函数时,当对象不是由new关键字启动时,对象是否通过引用或值传递 然后对象是作为引用还是值传递给函数 void my_function(My_object a){ } 或者我需要添加& 对象的传递方式取决于函数的参数,而不是对象的创建方式 我的_对象a表示它是通过值传递的 通过引用传递时,需要使用My_对象&a。如果您不打算更改对象,您可以选择const My_object&a。这将避免意外覆盖 或者,如果是输入参数,最好使用const My_object&aok。。因此

当将对象传递给方法或函数时,当对象不是由new关键字启动时,对象是否通过引用或值传递

然后对象是作为引用还是值传递给函数

void my_function(My_object a){

}
或者我需要添加&


对象的传递方式取决于函数的参数,而不是对象的创建方式

我的_对象a表示它是通过值传递的


通过引用传递时,需要使用My_对象&a。如果您不打算更改对象,您可以选择const My_object&a。这将避免意外覆盖

或者,如果是输入参数,最好使用const My_object&aok。。因此,如果使用const,则无法使用同一对象的新实例更改对象覆盖,但仍可以对该对象进行更改。。例如更改某些属性等?@clarkk const主要是为了避免错误。对于性能,按值和按引用可能会有所不同。但除此之外,您最好相信编译器的优化器-@克拉克取决于班级。如果确实需要,可以使用mutable关键字来允许直接或通过该类的const方法更新对象的某些字段。对于内部有缓存或类似内容的复杂对象,很少需要这样做。除非在该类中使用mutable,否则编译器将阻止您修改const引用传递的对象。通常这是一个好主意,因为它可以防止一类错误,例如,如果您不小心键入了ifa.field=0,那么如果a是常量引用,它就不会编译。指出按值传递和按引用传递之间的区别在某种程度上是技术性的,并不意味着在高级别上,函数中的更改是否反映在对象中。例如,Java只按值传递,但如果按值传递引用,效果与按引用传递值相同。由于您通常通过值传递引用,当然在Java中,它看起来像是通过引用传递的。这可能就是为什么你认为对象是否是用new创建的很重要,即使它没有什么区别。研究主题-形式参数,实际参数
void my_function(My_object a){

}
void my_function(My_object &a){

}