Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/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++ 从函数中重新引用局部变量不会给出错误 #包括 #包括 使用名称空间std; /*测试类:创建了的引用 函数getRef()中的本地abc类 并返回了引用*/ abc班{ int-var; 公众: abc():var(5){} abc(intv):var(v){} abc&getRef(){ abc-myref(9); 返回myref; } void disp(){ cout_C++_Variables_Reference_Return - Fatal编程技术网

C++ 从函数中重新引用局部变量不会给出错误 #包括 #包括 使用名称空间std; /*测试类:创建了的引用 函数getRef()中的本地abc类 并返回了引用*/ abc班{ int-var; 公众: abc():var(5){} abc(intv):var(v){} abc&getRef(){ abc-myref(9); 返回myref; } void disp(){ cout

C++ 从函数中重新引用局部变量不会给出错误 #包括 #包括 使用名称空间std; /*测试类:创建了的引用 函数getRef()中的本地abc类 并返回了引用*/ abc班{ int-var; 公众: abc():var(5){} abc(intv):var(v){} abc&getRef(){ abc-myref(9); 返回myref; } void disp(){ cout,c++,variables,reference,return,C++,Variables,Reference,Return,编译器不应该标记b.disp();作为一个错误,因为这不是错误所在。错误出现在return myref;,而这不是一个硬错误的原因是,通常很难确定对象的生存期是否在返回后结束。在这种情况下,这很容易,一些编译器会尝试对此发出警告。请检查警告ng水平 编辑:顺便说一句,使用gcc时,警告在默认情况下是启用的,看起来像“警告:引用局部变量'…”。G++将适当地警告您这一点,但它不应该出错,而且肯定不会在b.disp()处;,因为您实际上没有在该行上使用返回值,而是在上面的行上复制了它 #includ

编译器不应该标记
b.disp();
作为一个错误,因为这不是错误所在。错误出现在
return myref;
,而这不是一个硬错误的原因是,通常很难确定对象的生存期是否在
返回后结束。在这种情况下,这很容易,一些编译器会尝试对此发出警告。请检查警告ng水平

编辑:顺便说一句,使用gcc时,警告在默认情况下是启用的,看起来像“警告:引用局部变量'…”。

G++将适当地警告您这一点,但它不应该出错,而且肯定不会在
b.disp()处;
,因为您实际上没有在该行上使用返回值,而是在上面的行上复制了它

#include<iostream>
#include<conio.h>

using namespace std;

 /* test class: created the reference of 
    abc class locally in function getRef() 
    and returned the reference.*/

class abc {
    int var;

    public:
        abc():var(5) {}
        abc(int v):var(v) {}
        abc & getRef() {
            abc myref(9);
            return myref;
        }
        void disp() {
            cout<<var<<endl;
        }       
};

int main() {
    abc a;
    abc b=a.getRef(); 
    b.disp();  /* this statement executed perfectly. 
               I think compiler should throw error here. */
    getch();
    return 0;
}
如果编译器没有就此发出警告,那么

此外:

#包括

但我的问题是,如果这是错误的,并且您的编译器也会抛出警告(我的是visual stuido 2008,没有抛出任何警告),那么为什么我会得到9的输出。我正在使用对象b中的变量存储来让它显示在终端上。@ShashankJain:我已经更新了我的答案,以包含指向的链接“/w、/Wn、/WX、/Wall、/wln、/wdn、/wen、/won(警告级别)”。如果在返回myref期间出现错误,则说明我在终端获得输出的原因为9。输出应具有符合以下条件的垃圾值:me@ShashankJain你怎么会认为“垃圾”“不会是9”,行为不是由C++标准定义的,这意味着在运行时的任何行为都是有效的,包括“正确”行为。(实际上,“垃圾”是从以前写入的相同内存位置加载的,并且偶然碰巧还没有被覆盖)。
: In member function ‘abc& abc::getRef()’:
:17: warning: reference to local variable ‘myref’ returned
#include<conio.h>