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

C++ 通过引用而不是通过值返回。C++;

C++ 通过引用而不是通过值返回。C++;,c++,visual-c++,C++,Visual C++,如果不通过引用返回某个函数,在什么情况下会产生错误?问题应该是何时通过引用返回不安全。无论何时通过引用将局部变量返回给方法,都是在调用未定义的行为 如果没有正确实现复制构造函数,则按值返回是不安全的 如果复制构造函数被声明为私有,并且试图按值返回,则会出现错误。问题应该是何时按引用返回不安全。无论何时通过引用将局部变量返回给方法,都是在调用未定义的行为 如果没有正确实现复制构造函数,则按值返回是不安全的 如果复制构造函数被声明为私有,并且尝试按值返回,则会出现错误。默认操作应按值返回。主要案例在

如果不通过引用返回某个函数,在什么情况下会产生错误?

问题应该是何时通过引用返回不安全。无论何时通过引用将局部变量返回给方法,都是在调用未定义的行为

如果没有正确实现复制构造函数,则按值返回是不安全的


如果复制构造函数被声明为私有,并且试图按值返回,则会出现错误。

问题应该是何时按引用返回不安全。无论何时通过引用将局部变量返回给方法,都是在调用未定义的行为

如果没有正确实现复制构造函数,则按值返回是不安全的


如果复制构造函数被声明为私有,并且尝试按值返回,则会出现错误。

默认操作应按值返回。主要案例在哪里 当你想公开一些时,你会想要返回一个引用 较大物体的“部分”;e、 g.向量或向量中的元素 地图。重要的是,引用的对象必须具有
生命周期超出调用函数的生命周期

默认操作应该是按值返回。主要案例在哪里 当你想公开一些时,你会想要返回一个引用 较大物体的“部分”;e、 g.向量或向量中的元素 地图。重要的是,引用的对象必须具有
生命周期超出调用函数的生命周期

如果不通过引用返回某个函数,在什么情况下会产生错误?

将答案限制在确切的问题上,
每当您希望函数的返回值充当l值,并且不通过引用返回时,它将生成一个错误

更常见的例子是重载
运算符[]
(数组订阅运算符),必须通过引用返回才能在l.h.s上使用
[]
,或者更正确地将其用作l值

class Myclass 
{ 
     int i;
     public:
     /*Not returned by reference- gives error*/
     int operator[](int idx){ return i;}

     /*Returned by reference- gives no error*/
     //int& operator[](int idx){ return i;}
};

int main()
{
   Myclass  obj;
   obj[1]= 10;
   return 0;
}
输出:

prog.cpp:在函数“int main()”中:
程序cpp:16:错误:赋值的左操作数需要左值


在什么情况下,如果不通过引用返回某个函数,会产生错误?

将答案限制在确切的问题上,
每当您希望函数的返回值充当l值,并且不通过引用返回时,它将生成一个错误

更常见的例子是重载
运算符[]
(数组订阅运算符),必须通过引用返回才能在l.h.s上使用
[]
,或者更正确地将其用作l值

class Myclass 
{ 
     int i;
     public:
     /*Not returned by reference- gives error*/
     int operator[](int idx){ return i;}

     /*Returned by reference- gives no error*/
     //int& operator[](int idx){ return i;}
};

int main()
{
   Myclass  obj;
   obj[1]= 10;
   return 0;
}
输出:

prog.cpp:在函数“int main()”中:
程序cpp:16:错误:赋值的左操作数需要左值


的确与其说是“什么会产生错误”,不如说是在什么情况下我应该通过引用返回。在c中,你将使用指针的地方是可以使用引用的地方。Q是清晰而简洁的&这并不能回答所问的问题。答案很重要,但与所问的问题完全无关。@Als第二段没有回答问题-“如果不通过引用返回函数的内容,在什么情况下会生成错误?”-不实现c-ctor。不实现复制构造函数不会给出错误,编译器会隐式生成一个。和“正确实现的复制构造函数”“在它的意思上留下了很多歧义,Q询问一个会产生错误的场景,一个不正确实现的c-ctor(不遵循三个规则等)最终会给出一个未定义的行为,很可能是一个分段错误,但不像Q询问的那样是一个编译错误。@Als好的,我不认为这是一个编译器错误,因为op没有具体说明。尽管如此,我还是编辑了—如果将c-ctor设置为私有,则会出现编译器错误。无论如何,在我看来,你太随意地使用下一票按钮了。与其说是“什么会产生错误”,不如说是在什么情况下我应该通过引用返回。在c中,你将使用指针的地方是可以使用引用的地方。Q是清晰而简洁的&这并不能回答所问的问题。答案很重要,但与所问的问题完全无关。@Als第二段没有回答问题-“如果不通过引用返回函数的内容,在什么情况下会生成错误?”-不实现c-ctor。不实现复制构造函数不会给出错误,编译器会隐式生成一个。和“正确实现的复制构造函数”“在它的意思上留下了很多歧义,Q询问一个会产生错误的场景,一个不正确实现的c-ctor(不遵循三个规则等)最终会给出一个未定义的行为,很可能是一个分段错误,但不像Q询问的那样是一个编译错误。@Als好的,我不认为这是一个编译器错误,因为op没有具体说明。尽管如此,我还是编辑了—如果将c-ctor设置为私有,则会出现编译器错误。无论如何,在我看来,你使用向下投票按钮太自由了。我的Vector类确实有一个我重载的下标操作符,如果你试图给Vector的某个元素赋值,那么通过引用返回是有意义的。就像我尝试一个[0]=1,返回一个值是不起作用的,因为它会将[0](例如3)中的值与1进行比较,使其为3=1,这是没有意义的。非常感谢。我的Vector类确实有一个我重载的下标运算符,它确实使