C++笔记(1):C++比C多的特性
C++比C多的一些特性
命名空间
贴一个ai写的,太多了😉
C++中的命名空间(Namespace)是一种机制,用于组织代码元素(如变量、函数、类等),以避免名称冲突并提供一种控制作用域的方式。命名空间帮助开发者在大型项目或使用外部库时,能够有效地管理标识符的可见性和访问权限。以下是关于C++命名空间的一些关键点:
为什么需要命名空间?
- 解决命名冲突:当不同的库或者程序的不同部分使用相同的名称时,命名空间可以用来区分这些同名的标识符。例如,你可能在自己的代码中定义了一个叫做log的函数,同时又想使用标准库中的std::log数学函数,这时命名空间就显得尤为重要。
- 组织代码:命名空间有助于将相关的代码元素组织在一起,提高代码的可读性和可维护性。比如,所有与输入输出相关的函数和类都在std::iostream命名空间中。
如何定义和使用命名空间?
- 定义命名空间:使用 - namespace关键字后跟命名空间的名称,并以一对花括号- {}包裹其中的成员。例如:- 1 
 2
 3
 4
 5
 6- namespace MyNamespace {
 int value = 10;
 void myFunction() {
 // ...
 }
 }
- 使用命名空间成员:有两种主要方式访问命名空间内的成员: - **作用域解析运算符 ::**:在标识符前加上命名空间名称和作用域解析运算符。例如,MyNamespace::value或MyNamespace::myFunction()。
- using 指令:- using声明:可以在局部作用域内引入特定的命名空间成员,如 using MyNamespace::myFunction;之后可以直接调用myFunction()。
- using指令:using namespace MyNamespace;这会在当前作用域中展开命名空间,之后可以直接使用命名空间内的所有成员,但需谨慎使用,因为它可能导致名称冲突。
 
- using声明:可以在局部作用域内引入特定的命名空间成员,如 
 
- **作用域解析运算符 
- 命名空间嵌套:命名空间可以嵌套定义,形成层次结构,进一步细化代码的组织。 
- 匿名命名空间:在文件范围内定义的匿名命名空间中的标识符具有文件范围内的唯一性,相当于静态作用域,不会与其他文件中的同名标识符冲突。 
注意事项:
- 尽管using namespace std;可以让代码看起来更简洁,但在较大的项目中,直接展开整个命名空间可能会导致名称冲突,推荐只导入具体需要的标识符。
- 当项目规模扩大或涉及多库集成时,良好的命名空间管理策略对于维护代码的清晰度和可维护性至关重要。
命名空间是C++语言中一个非常重要的特性,正确使用它可以有效提升代码的质量和可维护性。
控制程序流程
for循环的单个数据遍历
| 1 |  | 
输入输出
cout cin的基本输入输出
与C不同,Cpp有独特的输入输出方式,更简洁方便(但是在特别大的数据量下会更更加耗时)
| 1 |  | 
输出不同进制
十进制输出:
默认情况下,std::cout以十进制形式输出数值。
| 1 |  | 
十六进制输出:
使用std::hex控制符来改变输出格式为十六进制。注意,在输出后应使用std::dec恢复到十进制输出模式,除非你需要连续输出多个十六进制数。
| 1 |  | 
八进制输出:
使用std::oct控制符来改变输出格式为八进制。
| 1 |  | 
二进制输出:
C++标准库没有直接的控制符用于二进制输出,但可以使用std::bitset来实现。
| 1 |  | 
控制符的使用
- 上述的std::hex、std::oct和std::dec都是操纵符,它们改变了std::cout的后续输出格式,直到下一个相应的操纵符出现或作用域结束。
- 使用完特定进制输出后,最好使用std::dec恢复到十进制输出模式,以避免影响后续的输出。
控制输出长度
自动补空
使用std::setw来设定输出的宽度,std::setfill来指定填充字符。例如,让输出的int型数据始终占据5个字符宽,不足的部分用空格填充:
| 1 |  | 
自动补零
只需将std::setfill的参数改为'0':
| 1 |  | 
整数、浮点数对齐
- setw: 设置输出的宽度。
- setfill: 设置填充字符。
- right, left, internal: 分别表示右对齐、左对齐和内部对齐(数字前填充)。
示例代码:
| 1 |  | 
C++笔记(1):C++比C多的特性
      https://bromikey.github.io./2024/04/29/C++笔记(1)C++比C多的特性/