目录
标准控制台框架
输入输出对象
命名空间
标准控制台框架
-  头文件 -  #include <iostream> - 告诉编译器我们要使用iostream库
- 尖括号中的名字指定了某个头文件(header)
 
 
-  
-  入口函数 - int main(void)
 
-  返回 - return 0;
 
-  输出语句 -  std::cout << "Hello 0xCC" << std::endl; - <<输出运算符
- 运算符左侧为ostream对象
- 运算符右侧为输出内容
- 上述代码等价于std::cout << "Hello 0xCC"; std::cout << std::endl;
- std::endl效果为换行符并且刷新缓冲区
 
 
-  
-  输入语句 -  std::cin >> a; - >>输入运算符
- 运算符左侧为istream对象
- 运算符右侧为输入数据
 
 
-  
-  注释 - / 单行注释 /
- /*多行注释*/
 
输入输出对象
-  C++语言并未定义任何输入输出(IO)语句,取而代之,包含了一个全面的标准库(standard library)来提供IO机制 
-  iostream 库包含两个基础类型istream 和ostream,分别表示输入流和输出流 
-  标准输入(standard input) - cin(istrean)对象 
-  标准输出(standard output) - cout(ostrean)对象 
-  标准错误(standard error) - cerr(警告信息)/clog(运行信息)(ostrean)对象 
-  cerr、clog 和 cout 都是C++中用于输出信息的流对象,它们有一些区别,主要涉及缓冲行为、目标设备和使用场景: -  缓冲行为: - cerr 和 clog 是非缓冲流对象,输出会立即被发送到目标设备,不会被缓冲起来。这意味着它们的输出是即时的,不受缓冲区满或程序结束的影响。
- cout 是缓冲流对象,它的输出会被缓冲起来,直到缓冲区满或程序结束时才发送到目标设备。这可以提高输出效率,但也可能导致输出在一些情况下不立即显示。
 
-  目标设备: - cerr 的默认目标设备是标准错误输出(通常是屏幕)。它主要用于输出错误和警告信息,因此不会被重定向到其他设备或文件。
- clog 的默认目标设备也是标准错误输出(通常是屏幕)。它主要用于输出运行时信息、调试信息或其他日志信息,也可以被重定向到其他设备或文件。
- cout 的默认目标设备是标准输出(通常是屏幕),但它可以通过重定向将输出定向到其他设备或文件。
 
-  使用场景: - cerr 通常用于输出错误和警告信息,它的输出是非缓冲的,以便尽快显示错误信息,不受缓冲区满或程序结束的影响。
- clog 通常用于输出运行时信息、调试信息或其他日志信息,它的输出是缓冲的,以提高输出效率,但可能不会立即显示。
- cout 是最常用的输出流对象,用于一般的标准输出,它的输出是缓冲的,可以在合适的时机进行刷新。
 
 总结: - cerr 用于输出错误和警告信息,非缓冲。
- clog 用于输出运行时信息、调试信息或其他日志信息,缓冲。
- cout 用于一般的标准输出,缓冲。
 在实际使用中,根据需要选择适当的输出流对象,以满足不同类型的输出要求。 #include <iostream>int main() {std::cout; //std::ostream;std::cerr; //std::ostream;std::clog; //std::ostream;std::cin; //std::istream;std::cout << "cout" << std::endl;std::cerr << "cerr" << std::endl;std::clog << "clog" << std::endl;return 0; }
-  

命名空间
-  基本概念 命名空间是 C++ 中用于组织和管理名称的一种机制。它可以将全局作用域分割成不同的区域,每个区域可以包含变量、函数、类和其他命名实体。命名空间提供了一种避免名称冲突的方式,使得我们可以在程序中使用相同名称的实体而不会发生冲突。注意:一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中 
-  命名空间的定义方法 使用 namespace 关键字定义命名空间,语法如下: #include <iostream>namespace CC_STD {int HP;//内部声明void Fun(int add); }//外部定义 void CC_STD::Fun(int add) {CC_STD::HP += add; }int main() {CC_STD::HP = 1;CC_STD::Fun(100);return 0; }
-  命名空间的使用 使用 using 声明或限定符访问命名空间中的成员。 #include <iostream>using namespace std;int main() {cout << "0xCC" << endl;return 0; }使用 using 声明可以将命名空间中的一个或多个成员引入当前作用域,使其可直接使用,语法如下: #include <iostream>void cout() {}int main() {using std::cout;using std::endl;cout << "0xCC" << endl;std::string;return 0; }
-  嵌套命名空间 可以在一个命名空间中定义另一个命名空间,这称为嵌套命名空间。嵌套命名空间可以进一步组织和管理命名空间中的实体。 namespace outer_namespace {namespace inner_namespace {// 嵌套命名空间中的声明和定义} }#include <iostream>namespace CC_TOOLS {int nVer;namespace CC_IO{int nOutput;void Print();} }void CC_TOOLS::CC_IO::Print() {std::cout << nOutput << std::endl; }int main() {CC_TOOLS::CC_IO::nOutput = 123;CC_TOOLS::CC_IO::Print();return 0; }
-  匿名命名空间 匿名命名空间是一个特殊的命名空间,其中的实体在当前文件中具有静态生命周期,并且对其他文件不可见。它可以用于定义在当前文件中具有本地作用域的实体。 -  - 作用范围限定:匿名命名空间中定义的变量、函数或类的作用范围仅限于当前文件。其他文件无法直接访问匿名命名空间中的成员。
- 避免命名冲突:匿名命名空间可以用于避免与其他文件中的定义发生命名冲突。相同名称的成员在不同的匿名命名空间中是独立的,不会相互冲突。
- 匿名命名空间中的成员具有内部链接(internal linkage)的属性,也就是说它们只在当前文件内可见,不会在其他文件中引用到。
 
 namespace {// 匿名命名空间中的声明和定义 }#include <iostream>//匿名命名空间 namespace {int a = 0;void Print(){std::cout << a << std::endl;} }int main() {a = 1;Print();return 0; }
-  
-  命名空间的别名 可以使用 namespace 关键字为命名空间定义别名,方便使用和引用。 namespace alias_name = namespace_name;#include <iostream>namespace CC_STD {int a; }int main() {//typedef//using//namespace newname = oldname;namespace CC = CC_STD;CC::a = 1;CC_STD::a = 2;return 0; }
-  命名空间的合并 - 合并在同一个作用域下:命名空间合并只在同一个作用域下生效。
- 合并相同名称的命名空间:只有具有相同名称的命名空间才能进行合并。
- 合并后成员的可见性:合并后,具有相同名称的命名空间中的成员在合并的作用域内可见。
 //main.cpp #include <iostream> #include "Header.hpp"namespace CC_TOOLS {int nVer;int nKey;namespace CC_IO{int nInput;int nOutput;} }int main() {return 0; }//Header.hpp #pragma once namespace CC_TOOLS {int nNum; }