-
异常也是一个类
class exception { ... } class logic_error : public exception { ... } class domain_error : public logic_error { ... }
-
引用
std::vector<int> a; // 原始变量 std::vector<int>& b = a; // b是a的一个替代名,对b的改动就是对a的改动,对a的改动就是对b的改动 const std::vector<int>& c = b; // c是b的一个**只读**替代名 std::vector<int>& d = c; // 这里会报错,因为c被const修饰只能只读,d不被const修饰代表它可以改,产生了矛盾所以报错
总结:
(1) 常量引用可以指向非常量引用(例如c) (2) 非常量引用不能指向常量引用(例如d) (3) **与非常量引用参数对应的参数,必须是左值** eg. istream& read_hw(istream& in, std::vector<double>& hw)函数,hw要传入一个左值才行
-
引用作为函数的返回值
-
函数返回时不复制对象
-
返回引用可以作为左值,可以链式运算
左值:可以放在运算符左边的变量(可以被赋值的值)
-
-
原则:一条语句中的副作用个数不会超过一个
例如:抛出异常的那条语句,不太适合放在输入/输出语句中,因为异常是一个副作用,输入/输出也是副作用
-
谓词
-
定义:一个函数,可以产生真值(一般是bool)
-
示例
<algorithm>中的std::sort方法
template<typename _RAIter, typename _Compare> void sort(_RAIter, _RAIter, _Compare);
的第三个参数需要一个谓词
-
-
分块编译
-
#include “xxx” 代表编译器把此名称对应的头文件中的所有内容都复制到程序中
-
#include <yyy> 代表使用系统环境提供的头文件
#ifndef xxx #define xxx ... #endif ifndef是预处理命令,作用是,如果xxx未被定义,就做和 #endif 之间的动作,否则跳过; 作用是防止一个头文件被多次#include,造成**重复包含**。 重复包含的意思是:每次#include,都会把这个文件复制一份,相当于一个程序中定义了同一作用域下两个名字相同的类,所以会*编译期报错*
-
-
-
在头文件中尽量不要使用 using,因为它可能被#include,而用户可能不需要真的用 using,比较乱
-
在源文件中可以使用 using,因为只影响到局部
-
-
inline
-
作用:请求编译器把调用扩展成内联子过程——为了避免函数调用的额外开销,编译器会用函数体的一个复制来替换对函数的每一个调用,并根据需要进行修正
-
要想实现内联,编译器必须看到函数体 --> inline函数通常在头文件中定义,而非源文件中定义
-
inline只是提示编译器,编译器有权不内联
-
chapter4_组织程序和数据
猜你喜欢
转载自blog.csdn.net/captxb/article/details/103038840
今日推荐
周排行