c++11 新增内容每日学习笔记

来源:互联网 发布:蒙文软件下载 编辑:程序博客网 时间:2024/06/05 03:02

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]