您的位置:首页 > 编程语言 > C语言/C++

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的类型别名。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C