
结束了C语言的学习,我们开始探索C++这门更强大的编程语言。C++在C语言的基础上发展而来,既保留了其高性能特性,又增加了面向对象和泛型编程等现代化功能。 经过数十年发展,C++通过命名空间解决了标识符冲突问题,提供了丰富的标准模板库,C++11及后续标准更带来了革命性改进。 本文将介绍C++的发展历程、推荐学习资源,并解析核心概念,帮助大家顺利开启C++学习之旅。
纵观C++“发家”史,可谓波澜壮阔,总的可以从以下几个关键发展节点进行概括:

std::filesystem、std::variant等;

首当其冲的就是几个的C++学习网站,在以后的学习中都会用到。
C++学习书籍推荐: –在这里推荐三本书籍。

最开始学习C语言,我们是从"hello world"启程:
#include<stdio.h>
int main()
{
printf("Hello World\n");
return 0;
} 那么也来试着使用C++输出"hello world"吧。
#include <iostream>
using namespace std;
int main()
{
cout << "Hello World" << endl'\n';
cout << "Hello World" << endl'\n';
return 0;
}
虽然C++兼容C语言的大部分语法,C语言形式的"hello world"仍然可以运行,但是C++作为C语言的升级版本,有着自己的一套输入输出。
在上面代码中,像
std、cout、namespace现在肯定是不懂的,但别急,很快学到。
要知道,C/C++中,存在着大量的变量、函数,当然还有后面要学习的类,这些都是需要进行命名的并且作用在全局作用域中,势必会有一些名称冲突。
关键字namespace就是来解决这个问题的:利用命名空间对标识符的名称进行本地化,很好的避免了命名冲突。
提一嘴:命名冲突在C语言的程序中非常普遍
#include <stdio.h>
#include <stdlib.h>
//命名冲突
int rand = 100;//全局变量
int main()
{
printf("%d\n", rand);
return 0;
}报错: 错误 C2365 “rand” : 重定义;以前的定义是“函数”。
这是因为我们包含了头文件<stdlib.h> ,头文件有函数rand,全局变量rand命名就冲突了。
namespace用来定义命名空间,后面跟名称,再加一对’{ }‘。’{ }'中放置命名空间的成员,空间可以定义变量、函数、类型……//命名空间使用
#include <stdio.h>
#include <stdlib.h>
// bit是命名空间的名字,⼀般开发中是⽤项⽬名字做命名空间名。
namespace Tong
{
// 命名空间中可以定义变量/函数/类型
int rand = 10;
int Add(int left, int right)
{
return left + right;
}
struct Node
{
struct Node* next;
int val;
};
}
int main()
{
//默认访问的是全局的rand函数指针
printf("%p\n", rand);
//指定bit命名空间中的rand
printf("%d\n", Tong::rand);
return 0;
}
注意:
'::',用来指定作用域。namespace实质上是定义出一个域,并且与全局作用域各自独立。已经,不同的域可以定义相同的变量,那么命名空间的rand就不冲突了。namespace Tong
{
int a = 1;
}
int a = 2;
int main()
{
int a = 3;
//访问局部域
printf("%d\n", a);
//访问全局域,域作用限制符左侧空白表示:全局域
printf("%d\n", ::a);
//访问命名空间域
printf("%d\n", Tong::a);
return 0;
}
// 命名空间可以嵌套
namespace Tong
{
namespace Chen
{
int rand = 1;
int Add(int left, int right)
{
return left + right;
}
}
namespace jia
{
int rand = 2;
int Add(int left, int right)
{
return (left + right) * 10;
}
}
namespace tong
{
int rand = 3;
int Add(int left, int right)
{
return (left + right) * 10;
}
}
}
int main()
{
printf("%d\n", Tong::Chen::rand);
printf("%d\n", Tong::jia::rand);
printf("%d\n", Tong::tong::rand);
return 0;
}
namespace,会默认为一个(合并)。std(stander)的命名空间中。编译查找一个变量的声明/定义,默认在局部或者全局找,不会到命名空间域中查找。所以有 3 种使用命名空间中的成员的方法:
using将命名空间的某个成员暴露在全局中,在项目中经常要访问并且不冲突的成员推荐。#include<stdio.h>
namespace She
{
int a = 0;
int b = 1;
}
//指定命名空间
using She::a;
int main()
{
int b = 2;
printf("%d\n", She::b);
return 0;
}#include<stdio.h>
namespace She
{
int a = 0;
int b = 1;
}
//命名空间中指定成员展开
using She::a;
int main()
{
printf("%d\n", a);
return 0;
}#include<stdio.h>
namespace She
{
int a = 0;
int b = 1;
}
//展开全部
using namespace She;
int main()
{
printf("%d\n", a);
printf("%d\n", b);
return 0;
}🍓 我是晨非辰Tong!若这篇技术干货帮你打通了学习中的卡点:
👀 【关注】跟我一起深耕技术领域,从基础到进阶,见证每一次成长
❤️ 【点赞】让优质内容被更多人看见,让知识传递更有力量
⭐ 【收藏】把核心知识点、实战技巧存好,需要时直接查、随时用
💬 【评论】分享你的经验或疑问(比如曾踩过的技术坑?),一起交流避坑
🗳️ 【投票】用你的选择助力社区内容方向,告诉大家哪个技术点最该重点拆解
技术之路难免有困惑,但同行的人会让前进更有方向~愿我们都能在自己专注的领域里,一步步靠近心中的技术目标!结语:
C++并非要取代C语言,而是在其基础上进行全面升级和扩展。它完整保留了C语言的高效性和底层控制能力,同时引入了面向对象编程、泛型编程等现代化特性,让我们能够应对更复杂的软件开发需求。 C++的学习是一个循序渐进的过程。建议从基础语法开始,逐步深入理解面向对象思想,最后掌握模板和现代C++特性。多动手实践,结合实际项目,才能真正领略C++的强大威力。