C++入门(namespace/输入输出)
C++入门
- 一.C++起源
- 二.C++的第一个程序
- 三.命名空间(namespace)
- 一、什么是namespace?
- 二、namespace的价值
- 三.namespace的定义
- 四.命名空间的使用
- 四.C++的输入与输出
- 总结

一.C++起源
- 发展历程:
C++ 由美国 AT&T 贝尔实验室的本贾尼・斯特劳斯特卢普博士在 20 世纪 80 年代初开发。它最初被称为 “C with Classes”,后来逐渐发展成为一种独立的编程语言,并在 1985 年正式定名为 C++。C++ 是在 C 语言的基础上进行了扩展和改进,保留了 C 语言的高效性和底层控制能力,同时增加了面向对象编程的特性。 - 语言特点:
- 高效性
C++的高效性是众所周知的。C++直接操作硬件资源,能够实现高效的内存管理和高性能计算。这使得它在需要高性能的应用场景中表现出色,例如游戏引擎和实时系统。 - 面向对象
C++ 支持面向对象编程,这意味着它将数据和操作数据的方法封装在类中,通过创建类的对象来实现对数据的操作和管理。这种编程方式使得代码更易于维护、扩展和复用。 - 兼容性:
C++ 与 C 语言有着良好的兼容性,许多 C 语言的代码可以在 C++ 环境中直接编译和运行。
废话不多说,直接开始技术介绍部分。
二.C++的第一个程序
第一个程序也是老朋友hello world
.
#include<iostream>using namespace std;int main()
{cout << "hello world\n" << endl;return 0;
}
以上程序作为C++模板,基本上日后绝大部分C++程序都可以看得到。
以上内容依旧涉及太多知识盲区,下面将对其逐步解释。
三.命名空间(namespace)
一、什么是namespace?
namespace是一种逻辑上的分区,用于将标识符(如变量名、函数名、类名等)分组。通过命名空间,可以将不同的标识符放在不同的作用域中,从而避免命名冲突。简单来说,namespace就像一个容器,将相关的代码封装在一起。
例如:
namespace MyNamespace {int a = 1;int b = 2;
}
以上例子namespace就是一个命名空间,其中包含着a,b变量。
• C++标准库都放在⼀个叫std(standard)的命名空间中。
using namespace std;
上述代码所使用到的cout的函数,就是包括在std这个命名空间当中。
二、namespace的价值
- 避免命名冲突
在大型项目中,代码可能由多个开发者编写,或者使用了多个第三方库。这些代码中可能会出现相同的标识符名称,从而导致冲突。namespace通过为标识符提供一个唯一的上下文,有效避免了这种冲突。
三.namespace的定义
-
定义命名空间,需要使⽤到namespace关键字,后⾯跟命名空间的名字,然后接⼀对{}即可,{}中即为命名空间的成员。命名空间中可以定义变量/函数/类型等。
-
namespace本质是定义出⼀个域,这个域跟全局域各⾃独⽴,不同的域可以定义同名变量。
-
C++中域有函数局部域,全局域,命名空间域,类域;域影响的是编译时语法查找⼀个变量/函数/类型出处(声明或定义)的逻辑,所有有了域隔离,名字冲突就解决了。局部域和全局域除了会影响编译查找逻辑,还会影响变量的⽣命周期,命名空间域和类域不影响变量⽣命周期。
-
namespace只能定义在全局,当然他还可以
嵌套定义
。 -
项⽬⼯程中多⽂件中定义的同名namespace会认为是⼀个namespace,不会冲突。
-
命名空间的别名
如果某个命名空间的名称较长,可以为其定义一个别名,以简化代码。
namespace MY = mynamespace
四.命名空间的使用
编译查找⼀个变量的声明/定义时,默认只会在局部或者全局查找,不会到命名空间⾥⾯去查找。
所以我们要使⽤命名空间中定义的变量/函数,有三种⽅式:
- 指定命名空间访问,项⽬中推荐这种⽅式。
namespace N
{int a = 0;int b = 1;
}int main()
{printf("%d\n", N::a);return 0;
}
在未展开命名空间的情况下,可以用 ::
来对命名空间内的变量进行访问。
如上述代码,在::
前加上命名空间,后面跟上命名空间的所属变量,就可以对其进行访问。
- using将命名空间中某个成员展开,项⽬中经常访问的不存在冲突的成员推荐这种⽅式。
// using将命名空间中某个成员展开 using N::b;int main()
{printf("%d\n", N::a);printf("%d\n", b);return 0;
}
在全局中,可以只展开命名空间中的其中一个变量。如上述,将命名空间中的b展开后,下面可以直接对b进行输出。
- 展开命名空间中全部成员,项⽬不推荐,冲突⻛险很⼤,⽇常⼩练习程序为了⽅便推荐使⽤。
// 展开命名空间中全部成员 using namespce N;int main()
{printf("%d\n", a);printf("%d\n", b);return 0;
}
通过using
可以将整个命名空间展开,展开后可以直接对命名空间中的变量进行使用。using namespace std;
也同理是将C++本身所含的标准库当中的函数展开了。
四.C++的输入与输出
在C++的第一个代码中,我们可以看到cout
这个符号,这是C++中的输出函数。
下面将进行详细说明。
- 是Input Output Stream 的缩写,是标准的输⼊、输出流库,定义了标准的输⼊、输出对象。
• std::cin是 istream类的对象,它主要⾯向窄字符
(narrow characters(of type char))的标准输⼊流。
• std::cout 是 ostream 类的对象,它主要⾯向窄字符的标准输出流。
• std::endl 是⼀个函数,流插⼊输出时,相当于插⼊⼀个换⾏字符加刷新缓冲区。
• <<是流插⼊运算符,>>是流提取运算符。(C语⾔还⽤这两个运算符做位运算左移/右移) - 自动识别变量类型
使⽤C++输⼊输出更⽅便,不需要像printf/scanf输⼊输出时那样,需要⼿动指定格式,C++的输⼊输出可以⾃动识别变量类型,其实最重要的是C++的流能更好的⽀持⾃定义类型对象的输⼊输出。 - std库
• cout/cin/endl等都属于C++标准库,C++标准库都放在⼀个叫std(standard)的命名空间中,所以要通过命名空间的使⽤⽅式去⽤他们。
• 这⾥我们没有包含<stdio.h>,也可以使⽤printf和scanf,在包含间接包含了。(此条取决于编译器类型)
总结
此章作为C++的入门博客,主要在介绍C++的第一个程序中所涉及到的知识。
主要有命名空间和输入输出两个方面,当然这里介绍的还是太片面了些,在日后学习中还会完善。