背景: 最近在学习C++STL,出于偶然,在C++Reference上看到了vector下的emplace_back函数,不想由此引发了一系列的“探索”,于是就有了现在这篇博文。 前言: 右值引用无疑是C++11新特性中一颗耀眼的明珠,在此基础上实现了移动语义和完美 ...
见下图: 规律总结: 只要我们传递一个基本类型是A 的左值,那么,传递后,T的类型就是A amp ,形参在函数体中的类型就是A amp 。 只要我们传递一个基本类型是A的右值,那么,传递后,T的类型就是A,形参在函数体中的类型就是A amp amp 。 另外,模板参数类型推导是保留cv限定符 cv qualifier,const和volatile限定符的统称 的,具体例子见 完美转发和标准库for ...
2016-03-16 19:02 0 4692 推荐指数:
背景: 最近在学习C++STL,出于偶然,在C++Reference上看到了vector下的emplace_back函数,不想由此引发了一系列的“探索”,于是就有了现在这篇博文。 前言: 右值引用无疑是C++11新特性中一颗耀眼的明珠,在此基础上实现了移动语义和完美 ...
类模板:通用的类描述(使用泛型来定义类),进行实例化时,其中的泛型再用具体的类型替换。 函数模板:通用的函数描述(使用泛型来定义函数),进行实例化时,其中的泛型再用具体的类型替换。 【1】C++98标准中两者的区别 函数模板和类模板在C++98标准中一起被引入,两者区别主要在于: 在类模板 ...
c++11 函数模板的默认模板参数 ...
c++11 可变参数模板函数 ...
我们定义了一个可以传入右值引用的构造函数的类B,在使用std::move的时候,我们非常容易犯一个错误。看下面的代码: 函数f2返回B的引用,但是B是一个临时对象,马上就会被析构,b0的构造函数传入的参数是一个已经被析构的对象!大家能够非常容易就看出错误所在 ...
【C++11变长参数模板】 C++03只有固定模板参数。C++11 加入新的表示法,允许任意个数、任意类别的模板参数,不必在定义时将参数的个数固定。 实参的个数也可以是 0,所以 tuple<> someInstanceName 这样的定义也是可以的。 若不 ...
【1】左值与右值 在C语言中,常常会提起左值(lvalue)、右值(rvalue)这样的称呼。 而在编译程序时,编译器有时也会在报出的错误信息中包含左值、右值的说法。 不过左值、右值通常不是通过一个严谨的定义而为人所知的。 事实上,之所以只知道一些关于左值、右值的判断而很少听到其真正的定义 ...
一、左值和右值 左值与右值是C++中表达式的属性,在C++11中,每个表达式有两个属性:类型(type,除去引用特性,用于类型检查)和值类型(value category,用于语法检查,比如一个表达式结果是否能被赋值)。值类型包括3个基本类型:lvalue、prvalue与xrvalue。后两 ...