因为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 ++程序中的内存。哪里存在只读数据?
答案 0 :(得分:3)
“因为const变量存储在只读存储器中”,这是不正确的。并且nswer为“ no”,您不能安全地返回对本地变量的引用-否const
。当您从函数返回时,变量将被销毁,引用将不再有效。
答案 1 :(得分:1)
Const
仅表示不可修改;它并不总是意味着“在编译时已知”。例如,这是一个const变量,其值在编译时未知:
void fun(int x)
{
const int b = x;
}
变量的生存时间(以及生存时间)由其存储持续时间定义,而const
不是存储持续时间。可能的存储时间为:
int foo = int(4) + int(5)
中,int(4)
和int(5)
都具有完整的表达式存储持续时间。在我所知道的所有实现中,它们都存在于堆栈中。const
-仅在函数执行时有效。)thread_local
:仅适用于全局变量;每个线程均查看其唯一版本。它们在线程开始时立即动态分配,并在线程终止时释放。static
:在程序的整个生命周期内可用(全局变量)。这些存储在程序启动时由操作系统挂载的内存区域中。这些区域不同于我们通常称为“堆栈”和“堆”的区域。new
等获得的内存分配。生活在堆上。 在大多数平台上,const
仅在应用于静态存储持续时间变量时才是“真正的常量”(如果尝试对其进行修改,则会使程序崩溃)。无论如何,修改初始声明为const
的变量(无论其存储时间长短)都是不确定的行为。
答案 2 :(得分:0)
变量的存储类在执行期间定义程序中变量的存在。在您的示例中,变量的作用域仅在函数和存储类类型中为auto。任何超出函数范围的变量引用都将无效。
答案 3 :(得分:0)
如果要返回该变量作为参考,请使该变量具有“静态”,因为它是全局存储的。