您的位置:首页 > 编程语言 > C语言/C++

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

2013-05-30 23:05 197 查看
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]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: