《C++Primer》复习——with C++11 [2]

1.数组引用形参,C++允许将变量定义成数组的引用,给予同样的道理,形参也可以是数组的引用,此时引用形参绑定到对应的实参上,也就是绑定到数组上

1 void print(int (&arr)[10])
2 {
3   for (auto elem : arr)
4         cout << elem << endl;
5 }

包含有可变形参 的函数,C++11提供了两种主要的方法:如果所有的实参类型相同,可以传递一个名为initializer_list的标准库类型;如果实参的类型不同,可以编写一种特殊的函数,也就是所谓的可变参数模板。initializer_list是一种标准库类型,用于表示某种特定类型的数组,这种类型定义在同名的头文件中,和vector一样,它也是一种模板类型,定义对象时,必须说明列表中所含元素的类型,和vector不一样的是,initializer_li9st对戏那个中的元素永远是常量值,无法改变对象中元素的值。

1 void err_msg(initializer_list<string> il)
2 {
3    for (auto beg = il.begin(); beg != il.end(); ++beg)
4        cout << *beg << " ";
5    cout << endl;
6 }

如果想向initializer_list形参中传递一个值得序列,则必须把序列放在一对花括号内;

1 if (expected != actual)
2    error_msg({"functionX"", expected, actual});
3 else
4    error_msg({"functionX", "okay"});

而另一种方法是省略符形参,她是为了便于C++程序访问某些特殊的C代码而设置的,这些代码使用了名为varargs的C标准库功能。通常,省略符形参不应用于其他目的。

2.函数可以返回花括号保卫的值得列表,类似于其他返回结果,此处的列表页用来对表示函数返回的临时两进行初始化,如果列表为空,临时两知性初始化;否则,返回的值有函数的返回类型确定,在下面例子中,返回一个vector队形,用他存放信息。

1 vector<string> process()
2 {  if (expected.empty))
3       return {};
4    else if (expencted == actual)
5       return {"functionX", "OK"};
6    else
7       return {"functionX", expected, actual};
8 }
1 int arr[10];
2 int *p1[10];
3 int (*p2)[10] = &arr; //p2是一个指针, 它指向含有10个整数的数组

3.assert预处理宏,其实是一个预处理变量,他的行为类似于内联函数,assert宏使用一个表达式作为他的条件:assert(expr);。首先对expr求职,如果表达式为假,那么assert输出信息并中止程序的知性,如果为真,那么assert什么也不做。assert用于检查“不能发生”的条件

1 assert(word.size() > threshold);

。当不需要assert在运行中起作用时候,通过定义NDEBUG的预处理变量可以取消这个assert的作用,或者通过给编译器选项 /d 或者-d。其等价于在主文件中第一行写下#define NDEBUG

时间: 2024-11-01 22:35:07

《C++Primer》复习——with C++11 [2]的相关文章

0801-----C++Primer听课笔记----------C++11新特性 function 和 bind 的简单使用

1.function 和 函数指针 1.1 function有函数指针的功能,但是使用起来明显比函数指针更加灵活和方便. 1.2 函数指针和function的用法实例. 1.2.1 函数指针首先要清楚函数指针的类型,如void (*)(int, char)等,然后声明一函数指针变量直接调用即可. #include <iostream> using namespace std; /* * 函数指针的用法 */ void test(int i,double j){ cout << i

《C++Primer》复习——with C++11 [1]

1.头文件中不应包含using声明,因为头文件的内容会拷贝到所有引用到他的文件中去,如果头文件里有谋个using声明,那么每个使用了该头文件的文件就会有这个声明,由于不经意间包含了一些名字,反而可能产生始料未及的名字冲突. 2.string对象的拷贝初始化和直接初始化.string str1 = "Hello";是拷贝初始化,编译器吧等号右侧的初始值拷贝到新创建的对象中去.使用getline读取一行, getline(cin, line),函数从给定的输入流中读取内容,知道遇到换行符为

《C++Primer》复习——with C++11 [3]

1.我们的程序经常使用很多IO库,用来输入输出例如:istream(输入流)类型,提供输入操作. ostream(输出流)类型, 提供输出操作. cin, 一个istream对象,从标准输入读取数据. cout,一个ostream对象,向标准输出写数据. cerr, 一个ostream对象,通常用于输出程序错误消息,写入到标准错误. >>/<<运算符,用来从一个istream/ostream对象输入输出数据. 不能对IO对象拷贝和赋值,由于不能拷贝IO对象,因此不能将形参或返回类型

2019年造价工程师考试复习必备之11项费用速记顺口溜

日子一天天在过,不知道考生们是否有坚持每天学习,每天提升自己,备考造价要经过好几个月的时间,千万不要懈怠,备考状态在线,也要找到科学的学习方法,让复习变得轻松起来.小编特搜集整理了11项费用速记顺口溜,报考2019年一级造价工程师的小伙伴们快来学习吧! (1)特殊--特殊设备安全监督检验费:注意是按项目所在省规定标准取费,不是在按企业所在省取费. (2)环境--环境影响评价费:在工程项目投资决策阶段,由建设单位承担. (3)建--建设管理费:建设单位采用工程总承包方式,其总包管理费从建设管理费中

c++primer复习(六)—面向对象编程

1 C++中,通过基类的引用(或指针)调用虚函数时,发生动态绑定,两个条件(基类引用或指针.虚函数)缺一不可 虚函数的默认实参将发生静态绑定 2 继承层次的根类一般都需要定义虚析构函数 3 任意非static成员都可以是虚析构函数,static成员函数不能是虚析构函数(应为static成员不是属于某个对象的,而是属于整个类的) 4 protected成员:派生类只能通过派生类对象访问基类的protected成员,派生类对其基类类型对象的protected成员没有特殊的访问权限 private成员

《C++primer》v5 第11章 关联容器 读书笔记 习题答案

11.1 map是关联容器,vector是顺序容器 11.2 略 11.3 int main() { map<string,int> word; string s; while(cin>>s) word[s]++; for(auto i:word) cout<<i.first<<" "<<i.second<<endl; return 0; } 11.4 void convers(string &s) { s

【C语言学习】《C Primer Plus》第11章 字符串和字符串函数

学习总结 1.字符串(character String)是以空字符串(\o)结尾的char数组. 2.gets()方法代表get String,它从系统的标准输入设备(通常是键盘)获取一个字符串,当字符串遇到换行符(\n)时就结束输入,丢弃\n符号,然后在字符串后添加空字符(\0)然后把这个字符串交给调用它的程序.Gets方法的构造原型是 char *gets(char *s){ … If(EOF) return NULL;//伪代码,说明用 … return s; } 从函数原型可以看,get

C++ Primer学习总结 第11章 关联容器

第11章 关联容器 1.    使用map的简单例子: 运行结果为: 2.    初始化map和set: 3.    set与multiset的区别: 4.    使用map和set时,其元素类型必须是定义了严格弱序的(即定义了<号比较的),如果元素类型没有定义<号操作也可以通过外部函数来比较: 5.    pair类型:pair是一个用来生成特定类型的模板. pair的默认构造函数对数据成员进行值初始化. 6.    遍历map和set关联容器: 7.    如何往set和map中添加指定元

c++primer复习(一)

1 const对象默认为文件的局部变量(P50) a.cpp const int a = 1; b.cpp extern int a;//undefined reference to "a" a.cpp int a = 1; b.cpp extern int a;//OK a.cpp extern const int a = 1; b.cpp extern int a;//OK 即非const变量默认为extern,const变量要在其他文件中被访问,必须显式指定为extern 2 c