C++ 基础教程涵盖命名空间机制与输入输出流使用。内容解析命名空间解决标识符冲突原理,演示定义、访问方式及多文件合并规则。对比 C 语言函数式 IO,详解 cin/cout 运算符重载特性与 endl 缓冲区刷新机制,提供跨平台兼容建议。
栈溢出17 浏览
前言
C++ 是一门高效、灵活且功能强大的通用编程语言,由 Bjarne Stroustrup 于 1979 年在贝尔实验室开发。它通常被视为 C 语言的延伸,在 C 语言的基础上增加了面向对象编程(OOP)和泛型编程的支持。如果追求极致的程序运行效率,或者需要深入理解计算机底层运作原理,C++ 是必修课。
#include<stdio.h>namespace mount {
int a = 0;
int b = 1;
}
intmain(){
// 编译报错:error C2065: 'a': 未声明的标识符printf("%d\n", a);
return0;
}
如果我们想要使用命名空间中定义的 变量 / 函数,有三种方式:
指定命名空间访问,大型项目中推荐这种方式。
using 将命名空间中某个成员展开,项目中经常访问的不存在冲突的成员推荐这种方式。
展开命名空间中全部成员,项目不推荐,冲突风险很大,日常小练习程序为了方便推荐使用。
' : : ' 为域作用限定符,左边无命名空间名时,默认为全局
当域作用限定符左边有命名空间名时,在该命名空间中寻找并调用
当域作用限定符左边没有有命名空间名时,默认在全局中寻找并调用
2.4.1 指定命名空间访问
代码示例:
#include<stdio.h>namespace mount {
int a = 10;
voidf(){
printf("func N\n");
}
intadd(int a, int b){
return a + b;
}
// 可以定义结构体变量structNode {
structNode* next;
int val;
};
}
int c = 10; // 全局变量intmain(){
// 调用命名空间中的变量printf("%d\n", mount::a);
// 调用命名空间中的无参函数
mount::f();
// 调用命名空间中的有参函数
mount::add(1, 2);
// 声明命名空间中的结构体变量structmount::Node n1;
// 调用全局域的变量printf("%d\n", ::c);
return0;
}
2.4.2 展开命名空间中某个成员
#include<stdio.h>namespace mount {
int a = 10;
voidf(){
printf("func N\n");
}
intadd(int a, int b){
return a + b;
}
// 可以定义结构体变量structNode {
structNode* next;
int val;
};
}
using mount::a;
using mount::f;
intmain(){
// 展开后无需使用域限定符进行访问printf("%d", a);
f();
return0;
}
2.4.3 展开命名空间中全部成员
#include<stdio.h>namespace mount {
int a = 10;
voidf(){
printf("func N\n");
}
intadd(int a, int b){
return a + b;
}
// 可以定义结构体变量structNode {
structNode* next;
int val;
};
}
usingnamespace mount;
intmain(){
// 展开命名空间中全体成员后// 所有成员都无需使用域空间名进行访问printf("%d", a);
f();
add(1, 2);
structNode n1;
return0;
}
这样我们也就理解了为什么出现了 using namespace std;
因为 C++ 标准库都放在一个叫 std(standard) 的命名空间中,我们通过将其展开,无需通过加上前缀 std::,就可以便捷地使用。
2.5 namespace 的嵌套定义
命名空间的嵌套就像电脑文件夹里的'子文件夹'。
当项目变得非常巨大时,仅仅一层命名空间可能不够用了。比如:一个大型游戏引擎,可能所有的代码都在 Game 命名空间下,但里面又分'图形'、'音频'、'网络'等模块。
namespace Game {
// Game 下的 Graphics 模块namespace Graphics {
voidrender(){
printf("正在渲染画面...\n");
}
}
// Game 下的 Audio 模块namespace Audio {
voidplaySound(){
printf("正在播放声音...\n");
}
}
}