2016年11月2日
摘要: void test(string &tmp) // lvalue { dout<<"string& fun:"<<tmp<<endl; } template<typename T> void test(T& para, typename std::enable_if<std::is_same<T, 阅读全文
posted @ 2016-11-02 19:40 abelian 阅读(94) 评论(0) 推荐(0)
摘要: 一般的教材上讲到引用时,都是说“引用是对象的一个别名”。我认为这种定义是不清晰的,不利于初学者理解引用。至少我自己曾经被这个定义困扰了一段时间。到底什么是“别名”? 实际上,引用的实质是位于xxxxxx地址上的一个xxxx类型的对象。比如教科书上常用的例子: int a = 5; //不妨假设编译器 阅读全文
posted @ 2016-11-02 17:00 abelian 阅读(165) 评论(0) 推荐(0)
摘要: 1 左值指的是可以取地址的变量,右值指的是非左值. 二者的根本区别在于能否获取内存地址,能否赋值不是区分的依据. 通常临时量均为右值. 2 C++03标准中只有const左值引用与non-const左值引用. a) const左值引用即常量左值引用,表现形式为:cosnt T & b) non-co 阅读全文
posted @ 2016-11-02 16:16 abelian 阅读(123) 评论(0) 推荐(0)
摘要: 在C++中,下面三种对象需要调用拷贝构造函数(有时也称“复制构造函数”): 1) 一个对象作为函数参数,以值传递的方式传入函数体; 2) 一个对象作为函数返回值,以值传递的方式从函数返回; 3) 一个对象用于给另外一个对象进行初始化(常称为复制初始化); 临时对象大多数会被编译器优化掉的(RVO), 阅读全文
posted @ 2016-11-02 15:49 abelian 阅读(166) 评论(0) 推荐(0)
摘要: PT expr PT结果 T T& int int& int T& int& int& int T& const int const int& const int T& const int& const int& const int T& int* int *& int* T& const int* 阅读全文
posted @ 2016-11-02 15:39 abelian 阅读(178) 评论(0) 推荐(0)
摘要: std::result_of 模板参数只能是函数指针类型,函数引用类型,function-like class(仿函数类)三者之一;不能是函数类型,函数数类型是不具有调用call特性的. result_of内部是把函数调用拆成函数类型和函数参数两部分处理的int fn(int) {return in 阅读全文
posted @ 2016-11-02 15:37 abelian 阅读(718) 评论(0) 推荐(1)