码迷,mamicode.com
首页 > 编程语言 > 详细

C++ Primer 读书笔记整理(一)

时间:2015-09-03 00:37:25      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:

1.读取数量不定的输入数据时可以把cin语句放到条件判断语句中,如果流的状态有效则读取成功,否则读取失败。

例如:

while(cin>>value)
       /* do something */

2.顶层const与底层const的区别

1)顶层const表示任意的对象是const(即常量)

例如:

const int value = 0;  // i是顶层const常量
int i= 0;
int *const ptr = &i;  //ptr是顶层const常量

2)底层const一般用在引用和指针中,表示指针所指的对象或引用所绑定的对象是常量

例如:

const int ci = 42;    //顶层const
const int &ref = ci   //ref是底层const
const int *ptr = &ci; //ptr是底层const

3.常量表达式和constexpr

      常量表达式是指其值不会改变并且在编译过程中就能得到计算结果的表达式。允许将变量声明为constexpr类型以便由编译器来验证变量

的值是否是一个常量表达式,如果不是将会报错。

      在constexpr声明中如果定义了一个指针,限定符constexpr仅对指针有效,而对指针所指的对象无关。

例如:

const int *p = nullptr; //p是一个指向整型常量的指针
const int *q = nullptr; //q是一个指向整型的常量指针

      要注意以上两者的区别。

4.const与类型别名

     看以下代码:

typedef char *pstring;
const pstring cstr = 0; //cstr是指向char的常量指针
const pstring *ps;       //ps是一个指针,它的对象是指向char的常量指针

pstring本来是一个char型指针,但加上typedef后就表示一个类型,即char*类型,记住:const是对给定类型的修饰

 const pstring cstr = 0;的const修饰的是cstr,而 const pstring *ps; 中 的const修饰的是派生所指向的对象,ps本身不是常量,

如果为 const pstring * const ps; 则ps是一个常量指针,它指向的对象是指向char的常量指针,即ps为二重指针。

5.decltype

 decltype(表达式) 中,如果表达式的内容是解引用操作,则decltype将得到引用类型,例如:

int i = 12,*p = &i;
//则decltype(*p)的结果类型是int&,而非int 

切记:1) decltype((表达式)) (双层括号)的结果永远是引用而 decltype(表达式) 结果只有当表达式本身是引用时才是引用。

2)decltype作用于数组(或函数名)时得到的类型是数组(或函数)而非指向数组(或函数)的指针。(这句话在C++Primer中出现不下5次)

6.getline函数

      getline函数有成员版本和非成员版本,成员版本在标准库容器之中,这里介绍非成员版本。非成员版本形式为:

 getline(输入流,string对象,指定分隔符) ,函数从一个给定的输入流中读取对象,存入string对象中,直到遇到指定的分隔符为止,指定

的分隔符一般为换行符。

7.范围for语句

      形式为:

for(declaration:expression)
    {/* do something */}

其中expression部分是一个可迭代对象,declaration部分负责定义一个变量用于逐个访问可迭代对象中的每个元素,每次迭代,declaration部分

的变量都会被初始化为expression部分的下一个元素,例如:

vector<int> vec = {1,2,3,4};
for(int i:vec)
    std::cout<<i<< ;
/* 将输出1 2 3 4 */

范围for语句的定义来源于与之等价的传统for语句:

for(auto beg = v.begin(),end = v.end();beg!=end;++beg)
      { /* do something */}

注意:1)不能通过范围for语句增加vector或其他容器的元素。因为在范围for语句中预存了end()的值,一单在序列中添加元素,end函数的值可能就变得无效了。

2)范围for语句也可以用来遍历数组中的元素。

 

未完待续...

 

C++ Primer 读书笔记整理(一)

标签:

原文地址:http://www.cnblogs.com/yibo141/p/4779662.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!