C++学习笔记4
2017-03-21 19:20
162 查看
包括C++ primer 5th edition第2章的一些问题
1.不同的初始化方式 int num=0;
int num(0);
int num{0};//列表初始化
int num={0};//列表初始化注意如果存在丢失数据的风险,列表初始化将不会成功
如: double num1=3.1415926;
int num2;
num2={num1};//报错!!!
num2{num1};//报错!!! 2.关于const:
(1)使用const定义的变量必须初始化!
例如const int i;//错误!没有初始化!
(2)const定义的变量只在文件内有效,如果想共享可以在前面加extern:
extern const double pi=3.1415926
(3)初始化对常量的引用时允许赋予它任意值(只要能正确地类型转换),但是: double pi=3.14159;
int& num=pi;// 错误,不是对常量的引用(4)对常量的引用不允许通过修改引用来修改绑定的值。
(5)指向常量的指针和常量指针不一样。一个叫pointer to const另一个叫const pointer,后者是说指针本身是常量。
3.读定义的诀窍是从右往左读,这招对理解复杂的定义很有效: int p;//p是整型
int* p;//p是指向整型的指针类型
int* const p;//p是一个常量且p是指向整型的指针,p的地址不可修改,指向的值可以修改
const int* p;//p是一个指向整型的指针,且指向的值不可修改,p是指向常量的指针
const int* const p;// p是一个常量,p是指向整型的指针,且指向的值不可修改,是常量指针注意:对于int *const p,如果用常量的地址去初始化它会报错,因为常量的地址会被“解读”成一个指向常量的指针,而p并不是指向常量的指针,只是它的值(就是p自己的地址)是常量(即p是常量指针),所以编译器会说:[Error] invalid conversion from 'const int*' to 'int*'[-fpermissive]
4.C++11新引入的东西:constexpr
如果认定某个变量是常量,就把它申明为cosntexpr。所谓constexptr(常量表达式)是有初始值和类型两方面来确定的,它是在编译之前就明确知道是什么值的变量。
5.C++11新引入的:using a=b;可以起到typedef b a;的效果,a是b的类型别名。
1.不同的初始化方式 int num=0;
int num(0);
int num{0};//列表初始化
int num={0};//列表初始化注意如果存在丢失数据的风险,列表初始化将不会成功
如: double num1=3.1415926;
int num2;
num2={num1};//报错!!!
num2{num1};//报错!!! 2.关于const:
(1)使用const定义的变量必须初始化!
例如const int i;//错误!没有初始化!
(2)const定义的变量只在文件内有效,如果想共享可以在前面加extern:
extern const double pi=3.1415926
(3)初始化对常量的引用时允许赋予它任意值(只要能正确地类型转换),但是: double pi=3.14159;
int& num=pi;// 错误,不是对常量的引用(4)对常量的引用不允许通过修改引用来修改绑定的值。
(5)指向常量的指针和常量指针不一样。一个叫pointer to const另一个叫const pointer,后者是说指针本身是常量。
3.读定义的诀窍是从右往左读,这招对理解复杂的定义很有效: int p;//p是整型
int* p;//p是指向整型的指针类型
int* const p;//p是一个常量且p是指向整型的指针,p的地址不可修改,指向的值可以修改
const int* p;//p是一个指向整型的指针,且指向的值不可修改,p是指向常量的指针
const int* const p;// p是一个常量,p是指向整型的指针,且指向的值不可修改,是常量指针注意:对于int *const p,如果用常量的地址去初始化它会报错,因为常量的地址会被“解读”成一个指向常量的指针,而p并不是指向常量的指针,只是它的值(就是p自己的地址)是常量(即p是常量指针),所以编译器会说:[Error] invalid conversion from 'const int*' to 'int*'[-fpermissive]
4.C++11新引入的东西:constexpr
如果认定某个变量是常量,就把它申明为cosntexpr。所谓constexptr(常量表达式)是有初始值和类型两方面来确定的,它是在编译之前就明确知道是什么值的变量。
5.C++11新引入的:using a=b;可以起到typedef b a;的效果,a是b的类型别名。
相关文章推荐
- C++学习笔记二 —— 3.3 指针类型
- more effective c++学习笔记 ---- 条款31
- unix_c++学习笔记1
- c++学习笔记
- c++学习笔记 2005-9
- 一个C++程序员的Delphi学习笔记
- C++ 学习笔记 I/O流的常用控制符
- 高质量C++/C编程指南学习笔记(上)
- c++入门学习笔记指针篇
- C++学习笔记-类的继承(派生类)
- 不能空着,发篇以前的C++学习笔记,不过现在在学C#
- C++学习笔记(1)——基类、派生类的对象空间
- C++学习笔记
- C++学习笔记(5)
- 从今天开始每天写C++或其他学习的知识的笔记,以激励自己
- C++ :学习Proxy Class之笔记2
- 一个C++程序员的Delphi学习笔记
- C++的学习笔记
- c++学习笔记
- C++ 学习笔记