我们可以返回本地const变量C ++的引用吗

时间:2018-08-10 02:40:23

标签: c++ reference const local

因为const变量存储在只读存储器中。我们可以退回的参考 const变量形式函数?

请提出答案。

set serveroutput on;
declare
    cursor c_stud is select stud_no,ans from stud_ans_sheet;
    v_stud c_stud%rowtype;
    v_no stud_ans_sheet.stud_no%type;
    answer varchar(10);
    i number(3);
    v_corr stud_ans_sheet.corr_ans%type;
    v_wrong stud_ans_sheet.wrong_ans%type;
    v_unattempt stud_ans_sheet.unattempt_ans%type;
    score number(5,2);
    v_ans varchar(10);
    str1 varchar(40);
    str2 varchar(40);
    nval stud_ans_sheet.stud_no%type;
    total number(5,2);
begin
    answer:='AACCABAABD';
    open c_stud;
    loop
        fetch c_stud into v_stud;
        exit when c_stud%notfound;  

        for i in 1..10
        loop

            nval:= select seq.nextval from stud_ans_sheet.stud_no;
            select stud_no,ans into v_no,v_ans from stud_ans_sheet where stud_no=nval;
            str2:=substr(v_ans,i,1);
            str1:=substr(answer,i,1);

            if(str2=str1) then
                update stud_ans_sheet
                set corr_ans=v_corr+1;  
            elsif(str2='E') then
                update stud_ans_sheet
                set unattempt_ans=v_unattempt+1;
            else    
                update stud_ans_sheet
                set wrong_ans=v_wrong+1;        
            end if;

        end loop;           
        update stud_ans_sheet
        set score=corr_ans-wrong_ans*0.25+unattempt_ans;            
    end loop;
    close c_stud;
end;
/

也请帮助我处理存储const值的C ++程序中的内存。哪里存在只读数据?

4 个答案:

答案 0 :(得分:3)

“因为const变量存储在只读存储器中”,这是不正确的。并且nswer为“ no”,您不能安全地返回对本地变量的引用-否const。当您从函数返回时,变量将被销毁,引用将不再有效。

答案 1 :(得分:1)

Const仅表示不可修改;它并不总是意味着“在编译时已知”。例如,这是一个const变量,其值在编译时未知:

void fun(int x)
{
    const int b = x;
}

变量的生存时间(以及生存时间)由其存储持续时间定义,而const不是存储持续时间。可能的存储时间为:

  • “ full-expression”:对象存在直到语句结束。在int foo = int(4) + int(5)中,int(4)int(5)都具有完整的表达式存储持续时间。在我所知道的所有实现中,它们都存在于堆栈中。
  • 自动:局部变量和结构字段等。它们的生命周期与其父范围的生命周期相同。 (值得注意的是,局部变量-甚至const-仅在函数执行时有效。)
  • thread_local:仅适用于全局变量;每个线程均查看其唯一版本。它们在线程开始时立即动态分配,并在线程终止时释放。
  • static:在程序的整个生命周期内可用(全局变量)。这些存储在程序启动时由操作系统挂载的内存区域中。这些区域不同于我们通常称为“堆栈”和“堆”的区域。
  • “动态”:由new等获得的内存分配。生活在堆上。

在大多数平台上,const仅在应用于静态存储持续时间变量时才是“真正的常量”(如果尝试对其进行修改,则会使程序崩溃)。无论如何,修改初始声明为const的变量(无论其存储时间长短)都是不确定的行为。

答案 2 :(得分:0)

变量的存储类在执行期间定义程序中变量的存在。在您的示例中,变量的作用域仅在函数和存储类类型中为auto。任何超出函数范围的变量引用都将无效。

答案 3 :(得分:0)

如果要返回该变量作为参考,请使该变量具有“静态”,因为它是全局存储的。