gpt4 book ai didi

c++ - 当您多次声明同一个对象/变量时会发生什么(新手)

转载 作者:太空宇宙 更新时间:2023-11-04 15:50:48 27 4
gpt4 key购买 nike

这样的东西有什么作用?

static int i;

// wrapped in a big loop
void update_text()
{
std::stringstream ss; // this gets called again and again
++i;
ss << i;
text = new_text(ss.str()); // text and new_text are defined elsewhere
show_text(text); // so is this
}

是否在堆栈中使用新地址和所有内容创建一个新的 ss 实例?将 sprintf 与 char 数组一起使用会更聪明吗?

最佳答案

每次调用该函数时,都会将 std::stringstream ss 的新本地实例压入堆栈。在函数结束时,这个实例被销毁并从堆栈中弹出。

函数 update_text 的作用域在任何时候都不会在其作用域中包含多个标识符为 ss 的变量。所以,在update_text范围内,只有一个ss标识符。

字符数组没有区别。每次调用该函数时,char 数组(如果是静态分配的)将被压入堆栈并在最后弹出。如果使用动态内存,动态分配字符数组,那么每次函数调用时,newdelete语句仍然会被执行,指向这个字符数组的指针也会仍然被插入并弹出堆栈。 std::stringstream 已经在内部为您处理 newdelete

多次声明一个对象看起来像这样:

void Function()
{
int x;
int x;
}

这会导致编译器错误。

请注意,这是有效的:

void Function()
{
int x;
if(true)
{
int x;
}
}

因为两个变量的作用域不同。第二个 x 仅存在于该 if 语句中。因此,编译器可以推断在该声明之后和该范围内对 x 的任何引用都指的是第二个 x。请注意,类型并不重要,重要的是标识符或“名称”。

关于c++ - 当您多次声明同一个对象/变量时会发生什么(新手),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8888903/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com