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]
如果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]
相关文章推荐
- [每日一学]MFC学习笔记——线程中控制窗口内容
- 每日学习心得:SharePoint 为列表中的文件夹添加子项(文件夹)、新增指定内容类型的子项、查询列表中指定的文件夹下的内容
- 每日学习心得:SharePoint 为列表中的文件夹添加子项(文件夹)、新增指定内容类型的子项、查询列表中指定的文件夹下的内容
- php学习笔记:读取文档的内容,利用php修改文档内容
- 每日学习笔记(5)
- 微软企业库5.0学习笔记(00)企业库主要内容
- Java每日学习笔记1
- [cpp]c++11学习笔记-std bind
- JSP 学习笔记(1) -- 基础内容总结
- C++学习笔记16,C++11中的显式的默认构造函数以及显示删除默认构造函数
- Django 开发学习笔记(8)- 开发表单页面,让用户添加内容
- Java 8 中新增Streams 学习笔记
- 新增代码关联Sonar分析学习笔记一
- VBA二次学习笔记(2)——两个Excel表内容比较
- 31天重构学习笔记15. 移除重复内容
- WPF and Silverlight 学习笔记(十一):WPF控件内容模型
- C++11新特性学习笔记
- HTML5 学习笔记2-新增的主体结构元素
- Android 内容提供者、解释者和观察者学习笔记
- Maven相关内容学习笔记一:基本配置和使用