随笔分类 -  C++ primer

摘要:隐式转换被设计得尽可能避免损失精度 static_cast 任何具有明确定义的类型转换,只要不包含底层const,都可以使用static_cast;const_cast只能改变运算对象的底层const,不能改变表达式的类型;reinterpret_cast通常为运算对象的位模式提供较低层次上的从新解 阅读全文
posted @ 2021-12-07 20:13 80k 阅读(75) 评论(0) 推荐(0) 编辑
摘要:对数组执行sizeof运算得到整个数组所占空间的大小(不会把数组转换成指针处理)对string或vector对象执行sizeof运算只返回该类型固定部分的大小,不会计算对象中的元素占用了多少空间 阅读全文
posted @ 2021-12-07 20:13 80k 阅读(33) 评论(0) 推荐(0) 编辑
摘要:c++11新标准允许使用花括号括起来的初始值列表作为赋值语句右侧的运算对象vector<int> v1;v1={0,1,2,3,4,5,6};赋值运算符满足右结合律,这一点与其他二元运算符不太一样。赋值运算符返回其左侧运算对象。 阅读全文
posted @ 2021-12-07 20:12 80k 阅读(47) 评论(0) 推荐(0) 编辑
摘要:表达式求值之前,小整数类型的运算对象被提升成较大的整数类型bool值不应该参与运算bool b=true;bool b2=-b;//b2是true,true->1->-1->(-1!=0)->truem和n是整数,则m/n向0取整(舍弃小数部分),m%n与m符号相同(!!!),(m/n)*n+m%n 阅读全文
posted @ 2021-12-07 20:11 80k 阅读(42) 评论(0) 推荐(0) 编辑
摘要:decltype作用于左值表达式时得到一个引用类型。int *p;decltype(*p);//结果为int &decltype(&p);//结果为int ** 阅读全文
posted @ 2021-12-07 20:11 80k 阅读(29) 评论(0) 推荐(0) 编辑
摘要:多维数组的外层范围for语句的循环控制变量必须用引用,否则会被退化成指针 using int_array = int[4];//类型别名的声明typedef int int_array[4];//等价的typedef声明using myRef = int&;//引用类型的别名typedef int& 阅读全文
posted @ 2021-12-07 20:10 80k 阅读(23) 评论(0) 推荐(0) 编辑
摘要:string可用字符串字面值或以'\0'结尾的字符数组进行初始化 阅读全文
posted @ 2021-12-07 20:09 80k 阅读(24) 评论(0) 推荐(0) 编辑
摘要:auto推断数组的结果为指针,而decltype()可以返回大小正确的数组int ia[]={1,2,3,4};decltype(ia) ia2={1,2,3};//ia2={1,2,3,0};begin()和end()函数(不是容器的成员函数,定义在iterator有头文件中)可以返回数组首元素和 阅读全文
posted @ 2021-12-07 20:08 80k 阅读(23) 评论(0) 推荐(0) 编辑
摘要:内置类型的变量未被显式初始化时,它的值由其定义的位置决定。定义于任何函数体之外的变量被初始化为0,定义在函数体内部的内置类型将不被初始化,其值是未定义的,如果试图拷贝或访问将引发错误。 阅读全文
posted @ 2021-12-07 19:57 80k 阅读(28) 评论(0) 推荐(0) 编辑
摘要:利用字符串字面值初始化字符数组时,末尾会加'\0'不允许将数组的内容拷贝给其他数组作为其初始值,也不能用数组为其他数组赋值。int a[]={1,2,3};int a2[]=a;//错误a2=a;//错误 复杂数组的声明int *ptrs[10];//ptrs含是有10个整形指针的数组,类型修饰符从 阅读全文
posted @ 2021-12-07 19:55 80k 阅读(30) 评论(0) 推荐(0) 编辑
摘要:标准容器的迭代器都支持++、--、==和!=改变vector对象容量的操作会使vector的迭代器失效vector和string的迭代器支持加减运算iter+n;迭代器指示的位置比原迭代器相比向前移动n个元素iter-n;迭代器指示的位置比原迭代器相比向后移动n个元素iter+=n;迭代器加法复合运 阅读全文
posted @ 2021-12-07 19:43 80k 阅读(49) 评论(0) 推荐(0) 编辑
摘要:列表初始化会尽可能地把花括号内的值当成元素初始值来处理,只有无法执行列表初始化时才会考虑其他初始化方式;vector<int> v1{10};//一个元素;vector<int> v2{10,2};//两个元素vector<string> v5{"hi"};//一个元素"hi",列表初始化vecto 阅读全文
posted @ 2021-12-07 19:43 80k 阅读(29) 评论(0) 推荐(0) 编辑
摘要:string的操作。 string s; os<<s;//s写到输出流os,返回osis>>s;//is中读取字符串赋给s,字符串以空白分割(包括空格),返回isgetline(is,s);//从is中读取一行赋给s,返回is,注意会读取进换行符,但不存储换行符。s1+s2;//字符串连接字面值和字 阅读全文
posted @ 2021-12-07 19:42 80k 阅读(25) 评论(0) 推荐(0) 编辑
摘要:头文件不应包含using声明 阅读全文
posted @ 2021-12-07 19:40 80k 阅读(13) 评论(0) 推荐(0) 编辑
摘要:typedef char *pstring;const pstring cstr=0;//此时cstr为指向char的常量指针const char *cstr=0;//此时cstr为指向char常量的指针 auto一般不保留顶层const,保留底层const,忽略引用。 decltype选择并返回操 阅读全文
posted @ 2021-12-07 19:38 80k 阅读(22) 评论(0) 推荐(0) 编辑
摘要:对于一个普通变量,可以仅在声明时加extern关键字,而定义不需要;extern int i;//声明int i;//声明并定义int i=1;//定义并初始化包含了显式初始化的声明即成为定义;extern double pi=3.1416//定义 对于const变量,默认仅在当前文件有效;若要令c 阅读全文
posted @ 2021-12-07 19:35 80k 阅读(22) 评论(0) 推荐(0) 编辑
摘要:注意!头文件中仅可以定义inline函数, 普通函数若在头文件中定义,并被多个cpp文件包含,会造成重定义问题。 (函数默认extern) 内联函数的编程风格(摘自高质量C++/C 编程指南) 关键字inline 必须与函数定义体放在一起才能使函数成为内联,仅将inline 放在函数声明前面不起任何 阅读全文
posted @ 2021-11-28 18:50 80k 阅读(28) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示