#include
头文件 io流(输入输出,文件读写)
c 到 c++升级1:
命名空间:
作用:防止命名冲突(多人协同开发出现命名冲突:全局变量,函数命名冲突)
using namespace std;
命名空间定义:namespace 名字{}
(在主函数之前)
命名空间可以嵌套定义
A::B::C
namespace A
{
int count = 5;
}
namespace B
{
int count = 6;
}
int main{
return 0;
}
命名空间的使用:
方式一:名字::(作用域限定符)
cout << "count = " << A::count << endl;
方式二:using 关键字
using namespace 名字 或 using 名字::成员
using namespace A;
using A::count;
#include
using namespace std;
namespace A {
int a = 100;
void show1(){
cout << "111 = " << a << endl;
}
}
namespace B {
int a = 999;
void show1(){
cout << "222 = " << a << endl;
}
namespace C{
using A::a;
void show1(){
cout << "333 = " << a << endl;
}
}
}
using B::a;
using B::C::show1;
int main()
{
cout << "a = " << a << endl;
show1();
return 0;
}
输出结果:
a = 999
333 = 100
#pragma once
头文件访问一次
源文件不能访问其它源文件的命名空间(命名空间中存在定义)
using namespace std;(存在使用风险,容易与系统命名空间std里的变量冲突)
总结:防止自己编译的全局变量和函数与其它文件冲突,那么你应该将这些全局变量和文件放在自己定义的命名空间中。
C语言如何解决命名冲突的问题的?
static(将函数或变量锁定在本文件中使用)
工程应用的作用:限定作用域防止命名冲突
修饰一个局部变量,延长它的生命周期,全局变量是危险的(多线程多通道会用共享问题),应尽量减少使用,尽量使用静态局部变量。
输入与输出
(包含头文件)
标准输出流cout
行缓冲(满一行输出,刷新缓冲区)
cout << “hello world” << endl;
endl (不是换行’\n’,实际执行刷新缓冲区)
刷新缓冲区fflush
cout << “hello world”;
fflush(stdout);仍可输出
设置缓冲区setbuf(行缓冲,无缓冲,全缓冲(大小))
标准输入流cin
#include
using namespace std;
int main()
{
int a;
int b;
cout << “please input number for a:”;
cin >> a;
cout << “please input number for b:”;
cin >> b;
cout << a << " " << b << endl;
return 0;
}
输出结果:
111 222
cin无scanf的垃圾存在问题
连续输入 cin >> a >> b >> c;
int buf[1024];
输入hello world
cin.getline(buf, 1024 - 1, ‘w’);
cout << buf << endl;
输出hello(停止到w前)
cerr/clog(错误/日志输出,无缓冲区)
for的升级
foreach(只适用遍历)
char buf[15] = “hello world”;
for(char ch : buf)
{
cout << ch << endl;
}
关键字的升级
register
C:将变量尽可能存储在cpu的内部寄存器中,从而省去了从内存抓取数据的时间,提高了程序的运行效率。
使用场景:优化程序(当某个变量需要频繁访问)
注意事项:1.只能修饰局部变量,不能修饰全局变量和函数。
2.register修饰的变量不能使用取地址获取该变量的地址。
3.register修饰的变量一定是cpu所能接受的数据类型。(有些cpu不支持浮点型)
C++升级:当对register修饰的变量取地址操作时,c++编译器会将该变量保存 到内存中。
typedef
C:给变量重命名,提高程序的可读性和移植性。
typedef重命名函数指针
typedef int (* P_FUNC)(int,int);
P_FUNC p_func = add;
c ----- c++:using 重命名数据类型
using Int = int;
Int a;
using P_FUNC = int (*)(int,int);
auto
C:自动变量,离开作用域释放。
c----c++:类型推导(注意:存在推导规则)高效运算
auto a = 5;//自动推导为整型
auto b = add;自动推导为函数指针
bool布尔类型(true与false)