C++的输入和输出:
cin:对象(变量) >> 输入流
cout:对象(变量) << 输出流
cerr:输出(错误信息)
clog:输出日志信息,没有缓冲区。
cout vs cerr
- 输出正常打印信息用cout;异常信息用cerr;
- cout是有缓冲区的,类型是行缓冲;cerr没有缓冲。
for语句的升级:解决循环变量浪费时间。
关键字的升级:
C语言中的:static、const、register、extern、typedef、inline;
register: 将修饰变量,尽可能的保存到cpu内部寄存中; 从而省去了从内存抓取数据的时间, 提高程序运行效率。
C++:register关键字的升级:如果使用&获取一个register修饰的变量的地址,那么就将该变量保存到内存中。
1.使用注意事项 :①只能修饰局部变量 不能修饰函数和全局变量 ;②修饰的变量不能再用&获取该变量的地址 ;③register修饰的变量一定是cpu所接受数据类型。
2.使用场景 :频繁访问的变量 。
3.注意 :凡是在类内实现的方法 编译器会尽可能优化成inline函数 ;方法函数尽量类外实现 。
4.编码规范 :
.h文件定义类;
.cpp文件实现类的成员函数 ;
C++中的bool类型
C++在C语言的基本类型系统之上增加了bool
C++中的bool可取的值只有true和false
理论上bool只占用一个字节,
如果多个bool变量定义在一起,可能会各占一个bit,这取决于编译器的实现
true代表真值,编译器内部用1来表示
false代表非真值,编译器内部用0来表示
bool类型只有true(非0)和false(0)两个值
C++编译器会在赋值时将非0值转换为true,0值转换为false
#include <stdio.h>
int main()
{
bool b = true;
printf ("%d, %d\n", b, sizeof(b));
int a = 10;
b = 3;
a = b;
printf ("a = %d, b = %d\n", a, b);
b = -5;
a = b;
printf ("a = %d, b = %d\n", a, b);
b = 0;
a = b;
printf ("a = %d, b = %d\n", a, b);
b++;
printf ("a = %d, b = %d\n", a, b);
b += 1;
printf ("a = %d, b = %d\n", a, b);
return 0;
}
-
typedef关键字的升级:启用新的关键字using;
typedef:给数据类型重命名; 提高代码可读性 ,移植性, 编程效率; -
auto关键字
C语言auto关键字 :自动变量(所在函数结束之后释放空间)
C++:类型推导; 高效编程 ; -
C++:static :修饰成员变量 ,修饰成员方法;
语法作用 :①修饰的成员叫类成员变量,属于类 ,被这个类的所有对象共享 ;可以使用类名::名字访问 ;
使用注意事项 :static修饰的成员必须在类外初始化;
②static修饰方法 ,该方法属于类 不属于对象, 没有this,只能访问static修饰的成员 ,不能访问非static修饰的成员;可以通过类名::函数名访问;
工程应用 :static修饰成员作用 :实现对象通信 ;
static修饰方法 :为了兼容C/C+T混合编程的 ; -
C++:const:修饰成员变量, 修饰方法, 修饰对象;
①修饰的对象必须在初始化列表初始化 ;
②修饰成员方法, 该成员方法只能使用成员变量的值,不能修改 ;但加mutable就可以修改 ;
mutable告诉编译器 该成员可以在const方法中修改 ;
③const修饰的对象只能调用const成员方法;
注意事项 :const指针对const指针 ;
应用场景 :修改函数形参:保证函数实参在函数执行过程中不被修改 ;
#include <stdio.h>
int main()
{
const int a= 10;
int*p= (int *)&a;
*p= 20;
printf("&a= %p, p = %p\n", &a, p);
printf("a= %d, *p= %d\n",a, *p);
return 0;
}
运行结果为:
&a = 00EFFB50, p 00EFFB50
a=10,*p= 20
引用 :给变量起别名,操作别名就相当于操作这个变量 ;
注意 :定义必须初始化 ;
引用的使用场景:函数形参,返回值:他说调用可以作为左值 。
传值 VS 传地址:
①传实参变量名,只能使用实参的值 ,不能修改;
②传实参变量的地址 ,即能使用也能修改 ;
③都需要修改实参变量的值, 传实参变量的地址 ;
④当只使用是实参变量的值,传实参变量 。
#include <iostream>
using namespace std;
{
//值传递
void swap1(int a, int b)
{
int tmp = a;
a = b;
b = tmp;
}
//地址传递
void swap2(int *pa, int *pb)
{
int tmp = *pa;
*pa = *pb;
*pb = tmp;
}
//引用传递
void swap3(int &a, int &b)
{
int tmp = a;
a=b;
b = tmp;
}
int main()
{
int numl = 10;
int num2 = 20;
swapl(numl, num2);
printf ("num1 = %d, num2 = %d\n", num1, num2);
swap2(&numl, &num2);
printf ("numl = %d, num2 = %d\n", numl, num2);
swap3(numl, num2);
prinf ("numl = %od, num2 = %dIn", numl,
num2);return 0;
}
运行结果为:
numl = 10, num2 = 20
numl = 20, num2 = 10
numl = 10, num2 = 20