C++学习笔记2——易混淆概念及易忽略知识点
2018-03-07 18:24
253 查看
main函数返回值必须为int类型,0表示成功,非0返回值通常对应错误类型。
“输入输出流”中‘流’的概念:随着时间推移,字符是顺序生成或消耗的。
标准库中的iostream库中的ostream类型还定义了cerr和clog对象,前者用来输出警告和错误消息,后者输出程序运行时一般信息。
类型的含义:不仅定义了数据元素的内容,也定义了这类数据所能进行的运算。
对象的含义:具有某种数据类型的内存空间。
文件结束符:比如停止cin对象从键盘读入数据。在Win系统中,敲Ctrl+Z,然后按Enter;在Unix系统中,敲Ctrl+D
正确的编码习惯:按照编译错误报告的顺序逐个修正错误并且,每修正一小部分错误就立即重新编译代码,即所谓的“编辑-编译-调试”周期,这样可以避免单个错误的向后传递效应。
类(class)也是一种类型。
带符号类型和无符号类型不能混用,比如:
列表初始化形式:
引用的初始值必须是个对象,且引用的类型必须与初始值类型保持一致,注意:引用本身并非一个对象!
指针存放的是某个对象的地址,所以赋值时需要在初始值对象前加上取地址符&,指针类型必须和初始值对象类型保持一致。
符号的多重含义:
void类型的指针可以存放任意对象的地址,然而却无法直接操作所指对象,因为无法确定对象类型。
const限定符:将对象的类型限定为常量,其值不能改变。因为指针也是对象,所以将常量指针称作顶层const、指向常量的指针称为底层const,前者的地址是不能改变。
decltype类型提示符:选择并返回variable的数据类型,注意:decltype((variable)) 即双层括号时,结果永远是引用类型。
using声明与using指示:
前者最安全,表示方法类似 using std::cin; 就可以在代码中直接使用 cin,而不需要显式的写 std::cin了,需要注意的是每个名字都需要独立的using声明,所以相对来说比较繁琐;
后者方便但可能会带来比如二义性这种错误,表示方法类似 using namespace std; 这样就可以直接使用标准库下std命名空间中的所有名字了,如 cin, cout 需要注意的是,using指示不能出现在类作用域中。
“输入输出流”中‘流’的概念:随着时间推移,字符是顺序生成或消耗的。
标准库中的iostream库中的ostream类型还定义了cerr和clog对象,前者用来输出警告和错误消息,后者输出程序运行时一般信息。
类型的含义:不仅定义了数据元素的内容,也定义了这类数据所能进行的运算。
对象的含义:具有某种数据类型的内存空间。
文件结束符:比如停止cin对象从键盘读入数据。在Win系统中,敲Ctrl+Z,然后按Enter;在Unix系统中,敲Ctrl+D
正确的编码习惯:按照编译错误报告的顺序逐个修正错误并且,每修正一小部分错误就立即重新编译代码,即所谓的“编辑-编译-调试”周期,这样可以避免单个错误的向后传递效应。
类(class)也是一种类型。
带符号类型和无符号类型不能混用,比如:
unsigned u = 10; int i = 42; cout<< u - i <<endl;如果机器上int占位是32位的话,那么u-i的运算过程是:首先i转换成无符号类型,运算结果是-32,但由于含无符号类型的表达式运算结果不会小于0,于是 2**32-32 = 4294967264 ,类比可知:如果u-i运算结果是-1,那最终结果就是 2**32-1=4294967295 。这对Python这种弱类型语言学习者来说是很奇怪的,不过值得注意。
列表初始化形式:
int a = 0; int a = {0}; int a{0}; int a(0);自C++11标准后,以上四种初始化语句都是正确的,而利用{}初始化的一个重要特点是,如果初始值存在丢失信息的风险,编译器将报错,比如:
int a = { 2.141414 }; cout << a << endl;结果会是:error C2397: 从“double”转换到“int”需要收缩转换。从某种角度来说,合理利用这个列表初始化可以使得代码更加健全。
引用的初始值必须是个对象,且引用的类型必须与初始值类型保持一致,注意:引用本身并非一个对象!
指针存放的是某个对象的地址,所以赋值时需要在初始值对象前加上取地址符&,指针类型必须和初始值对象类型保持一致。
int i = 1; int *p =&i; cout << *p << endl;即*p的值为1,p的值为i对象的地址,注意!
int arry[5] = { 1,3,5,7,9 }; int *p = arry; std::cout << *p+1 << std::endl; std::cout << *(p+1) << std::endl;结果分别是2,3,因为p指向的是数组的第一个元素的地址,分别是内容加一和地址加一。
符号的多重含义:
int i = 42; int &r = i; // &紧随类型名出现,因此是声明的一部分,r是一个引用 int *p; // *紧随类型名出现,因此是声明的一部分,p是一个指针 p = &i; // &出现在表达式中,是一个取地址符 *p = i; // *出现在表达式中,是一个解引用符,即指针p存放的地址对应的那个对象现在被赋值为i int &r2 = *p; // 将指针p存放的地址对应的对象绑定给引用r2
void类型的指针可以存放任意对象的地址,然而却无法直接操作所指对象,因为无法确定对象类型。
const限定符:将对象的类型限定为常量,其值不能改变。因为指针也是对象,所以将常量指针称作顶层const、指向常量的指针称为底层const,前者的地址是不能改变。
decltype类型提示符:选择并返回variable的数据类型,注意:decltype((variable)) 即双层括号时,结果永远是引用类型。
using声明与using指示:
前者最安全,表示方法类似 using std::cin; 就可以在代码中直接使用 cin,而不需要显式的写 std::cin了,需要注意的是每个名字都需要独立的using声明,所以相对来说比较繁琐;
后者方便但可能会带来比如二义性这种错误,表示方法类似 using namespace std; 这样就可以直接使用标准库下std命名空间中的所有名字了,如 cin, cout 需要注意的是,using指示不能出现在类作用域中。
相关文章推荐
- 深入浅出MFC学习笔记:(第一章:win32基本概念,第二章:C++的重要性质)
- C++学习笔记之零碎知识点(二)
- C++学习笔记31——类的基础概念
- C++学习笔记之零碎知识点(一)
- 【C++学习笔记】继承与派生基础概念
- C++ 学习笔记:不知道的运算符和未知的知识点
- C++开发(2)入门概念学习笔记
- java学习笔记之java基础中那些被忽略的小知识点
- 【linux学习笔记】 linux一些容易忽略的知识点
- C++学习笔记(二)C++primer 部分习题和知识点
- [学习笔记]C和C++中关于字符串的细小知识点
- function template函数模板概念笔记----C++学习之路
- C++ 学习笔记一易忽略的地方
- C++学习笔记之类的基本概念1
- C++基础学习笔记----第七课(面向对象的基本概念)
- C++学习笔记之零碎知识点(三)
- C++知识点辨析 孙鑫讲座笔记学习
- C++学习笔记4-----类的继承基础概念
- 【C++学习笔记】继承与派生基础概念
- C++基础学习笔记----第七课(面向对象的基本概念)