[原创]C++98升级到C++20的复习旅途-“作用域规则“

[简介]
常用网名: 猪头三
出生日期: 1981.XX.XX
QQ: 643439947
个人网站: 80x86汇编小站 https://www.x86asm.org
编程生涯: 2001年~至今[共22年]
职业生涯: 20年
开发语言: C/C++、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python
开发工具: Visual Studio、Delphi、XCode、Eclipse、C++ Builder
技能种类: 逆向 驱动 磁盘 文件
研发领域: Windows应用软件安全/Windows系统内核安全/Windows系统磁盘数据安全/macOS应用软件安全
项目经历: 磁盘性能优化/文件系统数据恢复/文件信息采集/敏感文件监测跟踪/网络安全检测


[序言]
最近在努力地学习C++20的相关知识点, 给自己订下一个小目标: 把自身已掌握的陈旧C++98, C++03逐步升级到C++20. 以适应现代C++开发的要求. 在学习和复习的过程中, 顺便记录疑惑点.


[复习和巩固][作用域规则][下面这句话有点绕口, 所以亲自写代码验证一下]
在嵌套块中, 如果外层块中的标识符与内层块中的标识符同名, 那么外层块中的标识符将被"隐藏", 直到内层块结束. 内层块"看到"的是自己的局部变量的值, 而不是包围它的那个块的同名变量值. 如果不小心为内层块中的标识符使用了和外层块的标识符相同的名称,  而事实上你想让外层块中的标识符延续到内层块, 那么通常都是一个逻辑错误. 
 

[下面的代码, 主要体验和验证块作用域的延续规则. 同时写一个非常规的嵌入套, 已验证作用域延续规则]
具体解释就不用多说了, 代码已经详细的注释了, 希望对初学者有帮助.

#include 
#include 

int int_x{1} ;

void fun_useGlobal() ;

int _tmain(int argc, _TCHAR* argv[])
{
	// 让控制台程序支持显示中文
	std::locale::global(std::locale("")) ;

	int int_x{2} ;

	{// 嵌套层: 在该层之外(也就是上面)同样有一个变量int_x{2}, 如果把下面int_x{3}变量注释掉, 那么变量int_x{2}的有效作用域可以延续到当前的嵌套层,
	 //         也就是说, 当注释掉int_x{3}之后, 打印出的数值是2,而不是3

		int int_x{3} ;

		std::wcout << L"变量 x 是: " << int_x << L" 在嵌入块中." << std::endl;
	}

	fun_useGlobal();

}

void fun_useGlobal()
{
	// 当进入该函数时, 但前内层块没有声明int_x变量, 那么根据"块作用域"规则, 变量int_x{1}的有效作用域会延续到此处.
	std::wcout << L"变量 x 是: " << int_x << L" 在fun_useGlobal()函数中." << std::endl;

}// End fun_useGlobal()

你可能感兴趣的:(C/C++语言,c++,c++20,开发语言)