我现在正在通过 Accelerated C++ 工作,并且我遇到了对我的范围和代码块的根本缺乏理解。
第 1 章末尾有一个练习,希望你决定这段代码是否会运行:
#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;
}
我确信它不会,但它确实如此。我的业余编程经验是,在一个块中声明的变量可用于其中包含的其他块,但不能用于块外的其他块。
这必须至少是对的,因为删除 s 的第二个声明将输出两次“字符串”,给我的印象是第二个块中声明的 s 也出现在第三个块中。
我还尝试完全删除第三个块的大括号,导致我最初预期的编译错误。但这与声明一个已经存在于第三个块范围内的常量有什么不同呢?如果在较小的范围内没有第二个声明,则常量的声明是否仅延续到较小的范围?
直到此时,我再次浏览了本书中的所有内容,看看我是否遗漏了什么,但我找不到任何关于变量和 const 声明如何受花括号影响的信息。