12.19 CPP初学

发布于 2024-12-19  117 次阅读


C与Cpp有什么关系呢?

具体来说:

Cpp包含了C的绝大部分语法,也就是说Cpp兼容C的大部分语法

(<iostream.h>这个头文件兼具<stdio.h>这个头文件的作用,这就是众多例子中的一个)

Cpp针对C的缺陷,在C的基础上增加了许多用法和规则

(仅从关键字上,Cpp就比C多了一倍,这也是一个例子)


Cpp的第一个程序:

#include <iostream> //如果加上.h,则报错,显示没有这样的源文件
using namespace std; //还多出了个这
int main(){
    cout<<"hello,world"<<endl;
    return 0;
}

我们先看看两者的命名空间的区别

C语言中有域的概念,域又分为局部域和全局域;在局部域里面定义的变量是局部变量,在全局域里面定义的变量是全局变量

在C语言中,如果局部变量和全局变量重名会发生什么?

如果重名,也即多处地方使用变量定义,局部变量会遮蔽全局变量这意味着在局部作用域内,使用变量名时将优先使用局部变量,而不是全局变量

#include<stdio.h>
int a = 10;
int main() {
	int a = 1;
	printf("%d\n", a);
}
//输出1而不是10

而当你在局部作用域中对该变量进行修改时,实际上你只是在修改局部变量的值,而全局变量的值保持不变

在C语言中,条件语句 和 循环语句 都可以作为作用域

而在Cpp中,你可以忽略局部域内部定义的变量a,正常使用定义在全局域的一个重名的变量a。我们引入域作用限定符(::即可

域作用限定符,也就是两个冒号连用

域作用限定符的左侧是特定的域,右侧则是变量名

它的作用是在操作符左侧的域中 寻找 操作符右侧的变量

#include <iostream>
using namespace std;
int a = 10;

int main() {
	int a = 1;
	printf("%d ", a);
	printf("%d\n", ::a);
	return 0;
}
//输出1 10

域作用符左侧不写任何域,表示在全局域中找变量a = 1;

Cpp通过域作用限定符 让局部域内 也可以使用全局域中的同名变量名

 Cpp对于重命名的局部和全局变量,用::操作符来解决冲突,而C回避了这一问题。这也是Cpp相对于C的优势之一


我们再来看看using namespace std;的作用

using namespace,也就是使用命名空间

//这也反映了C语言的特殊:没有命名空间。所有的标识符(变量名、函数名等)都在一个全局命名空间中。这意味着在同一个文件或链接的多个文件中,标识符必须是唯一的。也是由于没有命名空间,C语言程序员通常会使用前缀来区分不同模块或库的标识符。例如,库A中的函数可能命名为 A_function,而库B中的函数命名为 B_function


iostream头文件就位于std命名空间中。其实,几乎所有的 CPP 标准库组件都位于 std 命名空间下

//但不是所有,比如printf、scanf就不是在std中

在使用这些组件时,通常需要在前面加上 std:: 前缀

using namespace std; 这条语句的作用可以理解为 允许直接使用 std 命名空间中的标识符

届ける言葉を今は育ててる
最后更新于 2025-01-20