C++的历史最早追溯到1979年,Bjarne Stroustrup创建了带类的C(即C的超集),这就是C++的雏形,直到1983年,才正式成为C++
C++标准委员会在1998年发布了第一个国际标准C++ ISO/IEC 1488,又叫C++ 98
2011年,C++ 11标准发布,boost库诞生,11标准之后,c++每3年发布一个版本,每一个版本保持向后兼任性的同时,还提供新功能以及改进
C++的特点:封装能力强,高性能,低功耗(可在微型设备上运行,例如嵌入式设备)
C++主要用于开发桌面应用程序,后台系统引擎,游戏以及游戏引擎,图像视觉和AI引擎,数据库(例如MongoDB),嵌入式开发
C++是编译型语言,C++程序会经过编译器生成中间的目标程序,再通过链接器,将目标程序和程序库链接到一起,最后生成可执行程序
.cpp程序经过编译器生成汇编程序.asm,再通过汇编器生成目标程序.obj,链接器会将目标程序和其他目标程序以及一些库程序链接到一起,生成可执行文件
Windows下直接安装Visual Studio,选择使用C++的桌面开发和通用Windows平台开发,Visual Studio扩展插件选上
如果需要开发移动设备的开发,也可以选择使用C++的移动开发选项,还有使用C++的Linux开发,根据自己需求选择
第一个C++程序
#include<iostream>
int main()
{
std::cout << "hallo word!\n";
}
运行以及调试程序:生成,生成解决方案,清理解决方案,编译
C++的每一个变量是具备其数据类型的,该数据类型决定了该变量在内存的空间大小以及该内存空间的值范围,该变量能参与哪些运算,例如:
int sum; // 定义整形
int a = 1;
int b = 1;
sum = a + b; // 求和
一些常见的类型的定义:
#include "stdafx.h"
void main(void)
{
char a[6]="qq";
short int a = 88;
long int a = 99;
int a = 99;
float a = 3.14f;
double a = 3.14;
long double a = 3.14;
wchar_t a[] = L'a';
bool a = true;
}
调试后是可以监视变量的值,以及内存分布情况
内存中显示cc表示该内存没有初始化(没有赋值)
C++中的标识符使用大小写字母,下划线开始,后面跟着大小写字母,下划线,数字组成
C++的标识符是大小写敏感的,不能使用C++关键字,不能数字开头,不能出现标点符号,长度不超过32位,标识符用于标识变量,函数,类,以及模块等等
变量和常量
变量:在运行过程中,该值可以被改变的
int a = 1 , b = 2;
常量:在运行过程中,该值是不能被改变的
#define a = 1;
const int b = 2;
注意:#define是不出现在编译过程中的,如果在编译期发生错误,是很难排查的
常量整数,默认是十进制,0X表示十六进制,0表示八进制
U和L分别表示无符合整数(unsigned)和长整数(long),U和L可以大小写,例如:022U
布尔常量,true和false
字符常量是使用单引号的,如果使用L开头表示为宽字符常量(存储在wchar_t类型中),否则为窄字符常量(存储在char类型中)
单行注释和多行注释
// 单行注释
/*
多行注释
xxx
*/
运算符和表达式
算术,关系,逻辑,位,赋值等等
算术运算符:+,-,*,/,%,++,–,例如:
int a = 1;
int b = 2;
cout << a+b << endl;
关系运算符:==,!=,>,<,<=,>=,例如:
cout << (a==b) << endl; // 0
cout << (a!=b) << endl; // 1
逻辑运算符:&&,||,!,例如:
cout << (a==true||b==true) << endl;
与或非
赋值运算符:=,+=,-=,*=,/=,%=,«=,»=,&=,^=,|=,例如:
int c += a
cout << c << endl;
位运算符:&,|,^,~
与,或,异或,取反,为双目运算符,优先级高于逻辑,低于比较
cout << (a|b) << endl; // 0001 & 0010 = 0011 ==>3
移位:«,»
左移,右移
cout << (a<<2) << endl; // 00001 >> 2 = 00100 ==>4
其他运算符:sizeof,a>b ? a:b,,,.,->,Cast,&,*
sizeof返回变量的大小,例如:
cout << (:sizeof(a)) << endl; // 1
a>b ? a:b,假如a>b为真,则为a,否则为b
int d = a>b ? a : b;
,逗号运算符,顺序执行运算,最后的值为逗号列表的最后一个表达式的值,例如:
int e = (a,b,c,d);
.点和->箭头,用来引用类,结构,共同体成员
Cast强制转换,将一个数据类型转换为另一个数据类型,例如:
float f = float(a);
&指针运算符,返回变量的实际地址,例如:
cout << &f << endl;
*指针运算符,指向变量,例如:
float *aa = &f;
cout << &aa<< endl;
补码知识小课堂
在一个二进制的最高为存放0或者1来表示正数,负数
补码法:保留符合位,后面每位取反+1,例如:1111,保留最高位的1,然后取反,得到1000,然后加1,得到10001,表示了负数-1
函数B2T补码(Binary to Two s-complement),还有一个B2W
字节序(Byte Ordering),byte存放的顺序
大端法和小端法(Big Endian(顺序排序),Little Endian(倒序排序),英特尔采用)
例如:int a = 2147483648; // 在英特尔机器上面,内存表示为00000080,因为使用了小端法Little Endian,如果是大端法将表示为80000000