decltype自动类型推定。decltype接受一个表达式,返回表达式的类型。可以接受最高层的修饰符,比如:const int i; decltype(i) c = I; c 类型为const int 类型
如果decltype中的参数被括号括起来,则被定义为,reference类型。
如果decltype((variable))则,定义的类型总是reference类型
constexpr 常量表达式。
int *const p = nullptr; //p is aconst pointer to int
定义别名 :
using SI = int; //SI 为新类型名,和int类型相同。 g++ 调试通过。VS2012不支持
const int *p = nullptr; // p is a pointer to a const int
constexpr int *q = nullptr; // q isa const pointer to int
在g++4.7上调试,int j = 0; constexpr int *p1 = &j; //未调式通过。
constexpr 定义函数时,返回值必须是字面值。
default 关键字
设置默认构造函数时使用。在类中定义了构造函数后,还想继续使用默认构造函数,则可以在函数成员列表后添加 =default ;
struct Sales_data {
// constructors added
Sales_data() = default;
C++ Primer, Fifth Edition
Sales_data(conststd::string &s){}
};//VS2012 调试不通过,g++4.7通过
emplace//在容器中插入元素。后边的元素依次向后移动。
template <class... Args>
iterator emplace (const_iterator position,Args&&... args); 在指定的位置插入元素。
emplace_back(SS);在容器尾部插入元素SS
auto 关键字, 可以直接声明对象,且该对象的类型由对象的初始化表达式推定出来。
使用auto关键字时,必须有初始化式。auto 普通类型不接受最高层修饰符
const int ci =i, &cr = ci;
auto b =ci; // b is an int (top-level const in ci is dropped)
auto c =cr; // c is an int (cr is an alias for ci whose const is top-level)
auto d =&i; // d isan int*(& of an int object is int*)
auto e =&ci; // e is const int* (& of a const object is low-level const)
显式指定删除及显式指定缺省的函数声明 具备如下函数形式:
struct A{
A()=default; //C++11
virtual ~A()=default; //C++11
};
称之为缺省的函数。“=default;”记号部分指示编译器生成函数的缺省实作体。缺省的函数有两处优势:其一,比手工实作出来的代码更有效率,其二,把程序员从手工定义那些函数所引发的琐细事务中解脱出来。
与缺省函数对应,也存在指定删除函数:
int func()=delete;
声明删除的函数在防止复制对象的方面尤其有用。C++类自动声明一个复制构造函数和一个赋值操作。要禁止这种默认行为,使用记号=delete:
struct NoCopy{
NoCopy & operator =( constNoCopy & ) = delete;
NoCopy ( const NoCopy & ) =delete;
};
NoCopy a;
NoCopy b(a); //compilation error,copy ctor is deleted
容器类:
forward_list //前向list
内部实现指向下一个元素只有一个指针。而list有两个。插入,移动,提取元素,比其他顺序容器效率高。确定是不支持随机存取。
vector中增加shrink_to_fit 函数,可以缩小容量,使其和size大小相同。
增加data函数
value_type* data() noexcept;
const value_type* data() const noexcept;
可以利用偏移量进行访问vector中的元素。
int* p =myvector.data();
*p = 10;
++p;
*p = 20;// p 移动到myvector[1]的位置。
p[2] = 100; //相对于p所指位置2单位的偏移量.也就是现在的myvector[3]