gpt4 book ai didi

c++ - 如何理解不同 block 作用域之间的const变量

转载 作者:行者123 更新时间:2023-11-28 04:10:36 25 4
gpt4 key购买 nike

我是 C++ 初学者。我从“accelerated c++”一书中了解到 block 范围内的 const 变量。这意味着“const 变量将在作用域结束于 } 时被销毁。

但在测试中:const 字符串变量 s 定义在第一个 block 中。在第二个 block 中,还定义了 s。当第二个 s 被打印出来时,第一个 block 的 s 还没有被销毁。

我认为这个程序是无效的,但是当我编译这个程序时,结果是完全正确的。我不知道为什么会这样。请帮助我理解代码。

#include <iostream>
#include <string>

int main()
{
const std::string s = "a string";
std::cout << s << std::endl;
{
const std::string s = "another string";
std::cout << s << std::endl;
}
return 0;
}

结果是

a string

another string

最佳答案

按以下方式扩展你的程序

#include<iostream>
#include<string>

const std::string s = "a first string";

int main()
{
std::cout << s << std::endl;

const std::string s = "a string";
std::cout << s << std::endl;

{
const std::string s = "another string";
std::cout << s << std::endl;
}

std::cout << s << std::endl;
std::cout << ::s << std::endl;

return 0;
}

程序输出为

a first string
a string
another string
a string
a first string

内部作用域中的每个声明都隐藏了外部作用域中同名的声明(除了可以重载的函数名)。但是在外部作用域中声明的变量仍然存在。如果变量在命名空间内声明为在 main 之前声明的第一个变量 s 并且属于全局命名空间,那么您可以使用其限定名称来访问该变量。

当使用非限定名称时,编译器会从最近的作用域开始搜索其声明。

关于c++ - 如何理解不同 block 作用域之间的const变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57908504/

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