c++备忘1
2017-01-18 21:24
316 查看
1. c++之所以伟大是因为它同时支持三种编程模式:面向过程,面向对象,范型编程,从而满足程序员的各种需求。
++表明c的超级、扩展。
2.计算机需要处理:数据和算法。
其中,面向过程注重算法。面向对象注重数据的属性及操作。范型注重数据类型
3.c++11特性,从4.3版本g++需要增加标记-std=c++0x
g++ -std=c++0x test.cpp
4. c++头文件没有.h,而保留的c库函数则包含.h或者前缀c
5.cin>> 其中的>>实现了操作符的重载,不然表明的是移位
6. using namespce std;
using std::cout;
7. 变量名尽量不要以_或者__开头,属于保留名称。合法,但不建议
8.int data={} c++11的初始化,不包含内容则为0
int data{}
int data{1}
char c{31325} 错误,不允许缩窄
char c{x} 错误,x必须为常量
int data[10]{1}第一个元素初始化为1,其余为0
string st{"test string"}
9. short sam=SHORT_MAX;
sam++;
超出范围,sam由32767变为-32768
10. 42 表示十进制
042表示八进制
0x42表示十六进制
cout<<hex
cout<<oct
11常量后缀
2l表示long
2u表示unsinged int
2ul表示unsigned long
2ll表示long long
2ull表示unsigned long long
12 cout.put 可以代替cout<<
13 \a 为振铃符
\b为退格符,光标后退,如果签名输出____,则可以实现下面功能:
请输入姓名:_l__
14 char 默认既不是无符号,也不是有符号的,需要显示制定,signed char 或者unsigned char
有时字符不能8位表示,则使用wchar_t,则输入输出为wcin,wcout
wchar_t c = L'P';
前缀L表示宽字符
c++11 增加了char16_t, char32_t.
前缀u表示16的char,U表示32位的char
15 尽量使用const替换#define
16.float的精度位小数点后6位
double为小数点后15位
a=2.34e+022
a++没有意义
17. 11.17+50.25=61.42
但是输出时结果为61.419998,因为保证6位精度
18. int a[2];
sizeof(a)返回字节数,8
19. cin>> 遇到换行符停止,丢弃空格和换行符
cin.getline 遇到换行符停止,丢弃换行符
cin.get 遇到换行符停止,保留,需要再次调用cin.get吸收掉空白符
检测EOF
cin.fail()==true
cin.eof()==true
if(!cin.get())返回istream对象,转换后为true或false
ch==EOF
20. 原始字符串
cout<<R"(test "string" here)"
test "string" here
cout<<R"+*("(test "string" here)",test)+*"
"(test "string" here)",test
21. c++允许声明结构体变量时省略struct 关键字
22 struct test{
int type;
union{
int aa;
}
}
匿名公用体,则test tt;
tt.aa
23 指定占用特定位数的结构体成员
struct ts{
unsigned int SN:4;
bool goodIn:1
}
24 指针+1,增加量为指向的类型的字节数
25 自动存储: 栈
静态存储:函数外定义,或者static定义,整个生命周期
动态存储:堆
26 vector与string使用堆,动态数组
array为栈array<int ,5> data;
int aa[4]={1,3,2,4};
aa=aa+3;
aa[-3]; 等价与 *(aa-3)即aa[0]
array的at()方法将在运行期间捕捉非法索引。出错则中断。
27. cout.setf(ios_base::boolalpha) 设置后续显示内容的格式
28. y=(4+x++)+(6+x++);
不确定表达式,因为分号为此语句的顺序点,顺序点后为后续语句。c++规定自增子语句会在后续语句执行前自增,但是是否每个子语句执行后处理不确定。因此不建议此表达式。
29. 逗号为顺序点,从左到右执行。整个表达式的值为最右边
cat=17,240
表达式值为240
计算顺序(cat=170),240
30. 延迟程序while计数浪费cpu
使用ctime的clock()函数,但是该函数返回不一定为秒,返回时钟时间
start=clock()
clock_t delay=5*CLOCKS_PER_SEC
clock()-start<delay
31. c++11 基于范围的for
double prices[3]={1.0,2.0,2.0}
for(double &x:prices)
x=x*0.5 可以修改,因为引用
32.
ifstream inFile;
inFile.good() 无错误,且不是EOF
inFile.fail()
inFile.eof()
inFile.bad()
33.
c++
int test(...) 暂时不指定参数列表
int test(void) 参数为空
int test() 同上
c中
int test() 暂时不指定
int test(void) 参数为空
34. int const *p 指针指向的内容不变
int * const p 指针本身不变
double (*pf)(int) 函数指针
double *pf(int) 返回double指针的函数
调用方法:pf(2), (*pf)(2) 两大阵营观点,均支持
35. 感谢auto
const double *(*(*pd)[3])(const double *, int) =&pa
等价于
auto pc = &pa
36.
int rat;
int &aa;
aa=rat; 错误,必须声明引用时初始化
double &&a=std::sqrt(2.0) 右值引用,当右边为表达式时
double &a=x+y 错误
double &&a=x+y 正确
const double &a=x+y正确,见11,const引用生成临时变量,然后赋值
函数返回局部变量,没问题,拷贝副本
函数返回局部变量的引用,错误,内存不存在
37
const可以接收非const参数
const 引用,必要时生成临时变量
38
int func(int a, int b=1, double c) 错误,从右往左设置默认值,c需要先赋值
39
函数重载看特征标,参数个数类型,返回不看。
const返回或者参数,均属于特征标。
40
函数模板
正常模板
template<typename(class) T>
void func(T &a, T &b)
{
body.
}
模板可以重载,处理方法一样
有时模板无法处理某些数据类型。算法可能不一样,此时需要显示具体化。
template<> void funct<int>(int &a, int &b); 遇到int时,优先调用这个模板
显示实例化,遇到下面int类型时,则调用模板的int版本。
template void funct<int>(int ,int); 遇到char时,优先实例化此模板
显示具体化:属于模板
显示实例化:属于实例,模板的一个实例
41
auto 结合 decltype
template<class T1, class T2>
auto funct(T1 a, T2 b)->decltype(a+b)
auto表明函数有返回值
decltype表明返回类型为括号表达式返回的类型
42
. 作用域:文件外,文件内,函数或者语句块内
持续性:自动变量,静态存储,线程存储,动态存储
43
. 静态变量在运行期间保持不变,因此不需要栈来管理,编译器分配固定内存,默认初始化为0.
分三种:1. 全局变量(外部使用需要extern) 2 文件内函数外的static变量 3. 函数内的static
未执行已经在内存中。
44.
说明符:
register,static,extern,thread_local,mutable 同一声明只允许有一个说明符,thread_local除外,可与static,extern结合
cv限定符:
const:全局变量链接性为内部的,类似static
volatile:即使代码没有对修饰的变量没有改动,其值也可能被修改,一般编译器第二次访问某个变量会优先访问缓存,这是一种优化。此关键字将避免这种优化。
mutable:即使结构体或者类为const,其修饰的某个成员也可以被修改。
45. 定位new运算符
char buffer[BUF]
double *p1 = new double
; --------heap
double *p2 = new (buffer)double
;---------use buffer place
p1[0]=p2[0]=1.0;
double *p3 = new double
;--------new heap
double *p4 = new (buffer)double
; ---------overwirite old place
double *p5=new (buffer+N*sizeof(double))double
;-----new place
46. cin>>fetch;----局部变量
cin>>::fetch;-----全局变量
cin>>Tom::fetch;------Tom命名空间成员
47
namespace
{
int cnt;
}
等价与static int cnt;
匿名空间替换内部静态变量
48. using 指令,声明的函数为重载时,则导入所有版本。
49. oop编程,不仅考虑如何表示数据,而且考虑如何使用数据
50
Stock food=Stock("111");//显示调用构造函数,且产生临时对象后复制
Stock food("111"); //隐式调用
Stock *food = new Stock("111");
Stock food{"111"}//C++11初始化
Stock food();错误
Stock food = Stock();错误
如果调用默认构造函数应使用Stock food; Stock food = Stock; Stock food{};
51.
class stu{
public:
void show();
}
const stu s;
s.show();错误,因为show函数可能会改变s
弥补方法:定义show为const,位于函数右边
class stu{
public:
void show() const;//注意时括号后面,其他位置不行
}
只要类方法不修改调用对象,就应该定义为const类型。
52
class stu
{
private:
const int N=10;
double data
;//错误,因为const初始化需要空间,而类声明时没有空间
}
解决方法a
class stu
{
private:
enum{N=10};
double data
;//正确,因为枚举作用域为整个类,枚举不再对象的空间中
}
方法b
class stu
{
private:
static const int N=10;
double data
;// static不存储在对象中,而是在静态数据区
}
53
c++11提供了作用域内的枚举
enum class egg{small, middle, large};
就保证了egg::small这个枚举量的范围,不会与其他同名枚举量冲突。
++表明c的超级、扩展。
2.计算机需要处理:数据和算法。
其中,面向过程注重算法。面向对象注重数据的属性及操作。范型注重数据类型
3.c++11特性,从4.3版本g++需要增加标记-std=c++0x
g++ -std=c++0x test.cpp
4. c++头文件没有.h,而保留的c库函数则包含.h或者前缀c
5.cin>> 其中的>>实现了操作符的重载,不然表明的是移位
6. using namespce std;
using std::cout;
7. 变量名尽量不要以_或者__开头,属于保留名称。合法,但不建议
8.int data={} c++11的初始化,不包含内容则为0
int data{}
int data{1}
char c{31325} 错误,不允许缩窄
char c{x} 错误,x必须为常量
int data[10]{1}第一个元素初始化为1,其余为0
string st{"test string"}
9. short sam=SHORT_MAX;
sam++;
超出范围,sam由32767变为-32768
10. 42 表示十进制
042表示八进制
0x42表示十六进制
cout<<hex
cout<<oct
11常量后缀
2l表示long
2u表示unsinged int
2ul表示unsigned long
2ll表示long long
2ull表示unsigned long long
12 cout.put 可以代替cout<<
13 \a 为振铃符
\b为退格符,光标后退,如果签名输出____,则可以实现下面功能:
请输入姓名:_l__
14 char 默认既不是无符号,也不是有符号的,需要显示制定,signed char 或者unsigned char
有时字符不能8位表示,则使用wchar_t,则输入输出为wcin,wcout
wchar_t c = L'P';
前缀L表示宽字符
c++11 增加了char16_t, char32_t.
前缀u表示16的char,U表示32位的char
15 尽量使用const替换#define
16.float的精度位小数点后6位
double为小数点后15位
a=2.34e+022
a++没有意义
17. 11.17+50.25=61.42
但是输出时结果为61.419998,因为保证6位精度
18. int a[2];
sizeof(a)返回字节数,8
19. cin>> 遇到换行符停止,丢弃空格和换行符
cin.getline 遇到换行符停止,丢弃换行符
cin.get 遇到换行符停止,保留,需要再次调用cin.get吸收掉空白符
检测EOF
cin.fail()==true
cin.eof()==true
if(!cin.get())返回istream对象,转换后为true或false
ch==EOF
20. 原始字符串
cout<<R"(test "string" here)"
test "string" here
cout<<R"+*("(test "string" here)",test)+*"
"(test "string" here)",test
21. c++允许声明结构体变量时省略struct 关键字
22 struct test{
int type;
union{
int aa;
}
}
匿名公用体,则test tt;
tt.aa
23 指定占用特定位数的结构体成员
struct ts{
unsigned int SN:4;
bool goodIn:1
}
24 指针+1,增加量为指向的类型的字节数
25 自动存储: 栈
静态存储:函数外定义,或者static定义,整个生命周期
动态存储:堆
26 vector与string使用堆,动态数组
array为栈array<int ,5> data;
int aa[4]={1,3,2,4};
aa=aa+3;
aa[-3]; 等价与 *(aa-3)即aa[0]
array的at()方法将在运行期间捕捉非法索引。出错则中断。
27. cout.setf(ios_base::boolalpha) 设置后续显示内容的格式
28. y=(4+x++)+(6+x++);
不确定表达式,因为分号为此语句的顺序点,顺序点后为后续语句。c++规定自增子语句会在后续语句执行前自增,但是是否每个子语句执行后处理不确定。因此不建议此表达式。
29. 逗号为顺序点,从左到右执行。整个表达式的值为最右边
cat=17,240
表达式值为240
计算顺序(cat=170),240
30. 延迟程序while计数浪费cpu
使用ctime的clock()函数,但是该函数返回不一定为秒,返回时钟时间
start=clock()
clock_t delay=5*CLOCKS_PER_SEC
clock()-start<delay
31. c++11 基于范围的for
double prices[3]={1.0,2.0,2.0}
for(double &x:prices)
x=x*0.5 可以修改,因为引用
32.
ifstream inFile;
inFile.good() 无错误,且不是EOF
inFile.fail()
inFile.eof()
inFile.bad()
33.
c++
int test(...) 暂时不指定参数列表
int test(void) 参数为空
int test() 同上
c中
int test() 暂时不指定
int test(void) 参数为空
34. int const *p 指针指向的内容不变
int * const p 指针本身不变
double (*pf)(int) 函数指针
double *pf(int) 返回double指针的函数
调用方法:pf(2), (*pf)(2) 两大阵营观点,均支持
35. 感谢auto
const double *(*(*pd)[3])(const double *, int) =&pa
等价于
auto pc = &pa
36.
int rat;
int &aa;
aa=rat; 错误,必须声明引用时初始化
double &&a=std::sqrt(2.0) 右值引用,当右边为表达式时
double &a=x+y 错误
double &&a=x+y 正确
const double &a=x+y正确,见11,const引用生成临时变量,然后赋值
函数返回局部变量,没问题,拷贝副本
函数返回局部变量的引用,错误,内存不存在
37
const可以接收非const参数
const 引用,必要时生成临时变量
38
int func(int a, int b=1, double c) 错误,从右往左设置默认值,c需要先赋值
39
函数重载看特征标,参数个数类型,返回不看。
const返回或者参数,均属于特征标。
40
函数模板
正常模板
template<typename(class) T>
void func(T &a, T &b)
{
body.
}
模板可以重载,处理方法一样
有时模板无法处理某些数据类型。算法可能不一样,此时需要显示具体化。
template<> void funct<int>(int &a, int &b); 遇到int时,优先调用这个模板
显示实例化,遇到下面int类型时,则调用模板的int版本。
template void funct<int>(int ,int); 遇到char时,优先实例化此模板
显示具体化:属于模板
显示实例化:属于实例,模板的一个实例
41
auto 结合 decltype
template<class T1, class T2>
auto funct(T1 a, T2 b)->decltype(a+b)
auto表明函数有返回值
decltype表明返回类型为括号表达式返回的类型
42
. 作用域:文件外,文件内,函数或者语句块内
持续性:自动变量,静态存储,线程存储,动态存储
43
. 静态变量在运行期间保持不变,因此不需要栈来管理,编译器分配固定内存,默认初始化为0.
分三种:1. 全局变量(外部使用需要extern) 2 文件内函数外的static变量 3. 函数内的static
未执行已经在内存中。
44.
说明符:
register,static,extern,thread_local,mutable 同一声明只允许有一个说明符,thread_local除外,可与static,extern结合
cv限定符:
const:全局变量链接性为内部的,类似static
volatile:即使代码没有对修饰的变量没有改动,其值也可能被修改,一般编译器第二次访问某个变量会优先访问缓存,这是一种优化。此关键字将避免这种优化。
mutable:即使结构体或者类为const,其修饰的某个成员也可以被修改。
45. 定位new运算符
char buffer[BUF]
double *p1 = new double
; --------heap
double *p2 = new (buffer)double
;---------use buffer place
p1[0]=p2[0]=1.0;
double *p3 = new double
;--------new heap
double *p4 = new (buffer)double
; ---------overwirite old place
double *p5=new (buffer+N*sizeof(double))double
;-----new place
46. cin>>fetch;----局部变量
cin>>::fetch;-----全局变量
cin>>Tom::fetch;------Tom命名空间成员
47
namespace
{
int cnt;
}
等价与static int cnt;
匿名空间替换内部静态变量
48. using 指令,声明的函数为重载时,则导入所有版本。
49. oop编程,不仅考虑如何表示数据,而且考虑如何使用数据
50
Stock food=Stock("111");//显示调用构造函数,且产生临时对象后复制
Stock food("111"); //隐式调用
Stock *food = new Stock("111");
Stock food{"111"}//C++11初始化
Stock food();错误
Stock food = Stock();错误
如果调用默认构造函数应使用Stock food; Stock food = Stock; Stock food{};
51.
class stu{
public:
void show();
}
const stu s;
s.show();错误,因为show函数可能会改变s
弥补方法:定义show为const,位于函数右边
class stu{
public:
void show() const;//注意时括号后面,其他位置不行
}
只要类方法不修改调用对象,就应该定义为const类型。
52
class stu
{
private:
const int N=10;
double data
;//错误,因为const初始化需要空间,而类声明时没有空间
}
解决方法a
class stu
{
private:
enum{N=10};
double data
;//正确,因为枚举作用域为整个类,枚举不再对象的空间中
}
方法b
class stu
{
private:
static const int N=10;
double data
;// static不存储在对象中,而是在静态数据区
}
53
c++11提供了作用域内的枚举
enum class egg{small, middle, large};
就保证了egg::small这个枚举量的范围,不会与其他同名枚举量冲突。
相关文章推荐
- C++ const 类对象相关备忘
- C++学习的备忘
- 【备忘】c++重载的一些知识
- C++学习备忘——来自csdn论坛
- C++基础备忘:字符串的输入输出
- C++代码功能块备忘
- C/C++ 数组变量声明备忘
- C++各数据类型取值范围(备忘)--32位操作系统
- C++各数据类型取值范围(备忘)--32位操作系统
- [初]snail关于C++指针与内存管理的一些备忘
- C++备忘(更新中...)
- C++ 备忘
- 今天又用c++builer写了个风机模拟软件,贴出来备忘,协议我的上传资源里有
- 备忘:C++各数据类型取值范围(备忘)--32位操作系统
- c/c++备忘(持续更新)
- [C++]基础知识备忘(1)
- C++备忘 STL释放内存 ,weka使用备忘
- 利用rational rose做c++的逆向工程之备忘
- C++箭头操作符重载(记录下,备忘)
- 基础备忘之c++内存分布:代码段、全局数据区、栈、堆