深入理解C++11 C3
继承构造函数
class A
{
public:
A(int i):m_i(i) {}
A(double d, int i):m_d(d),m_i(i){}
private:
int m_i{0};
double m_d{0};
}; class B : public A
{
using A::A; // C++11 继承构造函数
int m_j{ 0 }; // C++11 成员变量初始化
}; int main()
{
B b1(356);
B b2(2.0, 5);
std::cout << "Hello World!\n";
}
委派构造函数
class Info
{
public:
Info() :type(1), name('a') { Init(); }
Info(int i) :type(i), name('a') { Init(); }
Info(char e) :type(1), name(e) { Init(); }
private:
int type;
char name;
void Init() { cout << "ok" << endl; };
}; class Info2
{
public:
Info2() :Info2(1) {}; // 委派构造函数
Info2(int i) :Info2(i, 'a') {}; // 既是目标构造函数,又是委派构造函数
Info2(char e) :Info2(1, e) {};
private:
int type;
char name;
Info2(int i, char e) :type(i), name(e) { cout << "ok" << endl; } //目标构造函数
};
Explicit operator 的应用
class Convertable
{
public:
explicit operator bool() const { return true; }
};
void func(bool value) {}
int main()
{
Convertable c;
if (c)
cout << "ok" << endl;
func(c); std::cout << "Hello World!\n";
}
列表初始化
#include <initializer_list>
Initialize_list<T>126
POD
平凡:构造、析构、虚函数
标准布局,非静态成员只能出现在一个类中,成员变量权限相同,第一个变量不能是基类类型,不含虚的
template<typename T> struct std::is_trivial;
template<typename T> struct std::is_standard_layout;
template<typename T> struct std::is_pod;
cout << std::is_pod<std::string>::value << endl;
is_same<T1, T2>::value
用户自定义字面量
Inline namepace
SFINAE
移动语义
左值,右值,右值引用
不能取地址,没有名字的,就是右值,包括将亡值&纯右值;
常量左值引用=万金油
常量右值引用没有应用价值,只有非常量右值引用。
#include <type_traits>
struct Copyable
{
Copyable() {}
Copyable(const Copyable& o) { cout << "Copied" << endl; }
Copyable& operator=(const Copyable& o) { cout << "Copied2" << endl; return this;}
Copyable(Copyable&& o) { cout << "Moved" << endl; }
};
Copyable ReturnRvalue() { return Copyable(); }
Copyable&& o = ReturnRvalue();
const Copyable& p = ReturnRvalue();
cout << is_rvalue_reference< decltype(o) >::value << endl;
cout << is_rvalue_reference< decltype(p) >::value << endl;
cout << is_lvalue_reference< decltype(p) >::value << endl;
Std::move
强制转化为右值
Move_if_noexcept
is_move_constructible<UnknownType>::value
完美转发
template <typename T>
void PerfectForward(T &&t)
{
Func(forward<T>(t));
}
template<typename T, typename U>
void PerdectForward(T &&t, U& Func)
{
Func(forward<T>(t));
}
深入理解C++11 C3的更多相关文章
- C++ 11学习和掌握 ——《深入理解C++ 11:C++11新特性解析和应用》读书笔记(一)
因为偶然的机会,在图书馆看到<深入理解C++ 11:C++11新特性解析和应用>这本书,大致扫下,受益匪浅,就果断借出来,对于其中的部分内容进行详读并亲自编程测试相关代码,也就有了整理写出 ...
- 深入理解C++11【5】
[深入理解C++11[5]] 1.原子操作与C++11原子类型 C++98 中的原子操作.mutex.pthread: #include<pthread.h> #include <i ...
- 深入理解C++11【4】
[深入理解C++11[4]] 1.基于范围的 for 循环 C++98 中需要告诉编译器循环体界面范围.如for,或stl 中的for_each: int main() { ] = { , , , , ...
- 深入理解C++11【3】
[深入理解C++11[3]] 1.POD类型 Plain Old Data. Plain 表示 了POD是个普通的类型.C++11将POD划分为两个基本概念的合集: 1)平凡的(trivial) 2) ...
- 深入理解C++11【2】
[深入理解C++11[2]] 1.继承构造函数. 当基类拥有多个构造函数的时候,子类不得不一一实现. C++98 可以使用 using 来使用基类的成员函数. #include < iostre ...
- 深入理解C++11
[深入理解C++11] 1.很多 现实 的 编译器 都 支持 C99 标准 中的__ func__ 预定 义 标识符 功能, 其 基本 功能 就是 返回 所在 函数 的 名字. 编译器 会 隐式 地 ...
- 发现《深入理解C++11》中扩展的friend代码的错误
目前在总结现代C++的新特性,看了<深入理解C++11>这本书. 今天看到扩展的friend语法这一节,遇到了问题.本节电子版内容参见:https://book.2cto.com/2013 ...
- c++学习书籍推荐《深入理解C++11 C++11新特性解析与应用》下载
百度云及其他网盘下载地址:点我 编辑推荐 <深入理解C++11:C++11新特性解析与应用>编辑推荐:C++标准委员会成员和IBM XL编译器中国开发团队共同撰写,权威性毋庸置疑.系统.深 ...
- 理解C++11正则表达式(2)
今天有幸(2016/3/19)在上海参加了C++交流会,见到了梦寐已久想见的台湾C++大神老师侯捷,心情十分的激动.侯老师对C++理解的深刻,让人叹为观止.以为他教学的严谨,说话方式娓娓道来,听着非常 ...
随机推荐
- P1106 删数问题 自己码风好菜
一个人的码风好坏究竟会影响多少
- python 安装 pyHook
下载网站:https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyhook 查看python版本 C:\Users\k\Desktop\file_trans> ...
- c 判断是否为 字母或数字(iswalnum example)
#include <stdio.h> #include <wctype.h> int main () { int i; wchar_t str[] = L"c3p.o ...
- ie8 ajax 跨域问题
最近做了个客服端要通过ocx获得初始化数据就是一个html页面镶嵌在一个c++做的程序里面通过c++做的程序的一个按钮来打开我的这个html页面但是页面中的ajax就是用不了又不报错 后来加入了cro ...
- CF1214B
CF1214B 解法: 暴力枚举,时间复杂度 $ O(n) $ CODE: #include<iostream> #include<cstdio> #include<cs ...
- [题解] [Code+#1]Yazid 的新生舞会
题面 题解 upd : \(cnt_i\) 代表值为 \(i\) 的个数 我们可以暴力枚举众数 \(k\) 把等于 \(k\) 的赋值成 1 , 不等于 \(k\) 的赋值成 -1 这样原序列就变成了 ...
- 查询Oracle正在执行的sql语句及kill被锁的表
查询Oracle正在执行的sql语句及执行该语句的用户SELECT b.sid oracleID, b.username 登录Oracle用户名, b.serial#, spid 操作系统ID, pa ...
- Docker容器数据券
1.是什么? 2.能干嘛? 3.数据卷 ——容器内添加 方式一:直接命令添加 1).命令 2).在宿主机上新建并添加内容 3).查看容器内相应共享文件夹,发现宿主机的文件夹下发生变化,会同步到容器内的 ...
- 启动maven项目时报错Failed to start component [StandardEngine[Tomcat]]: A child container failed during start
详细错误信息:Failed to execute goal org.apache.tomcat.maven:tomcat7-maven-plugin:2.2:run (default-cli) on ...
- win10 下cuda 9.0 卸载
1.首先 对于cuda8.0.cuda7.5的卸载都可以兼容 安装cuda9.0之后,电脑原来的NVIDIA图形驱动会被更新,NVIDIA Physx系统软件也会被更新(安装低版cuda可能不会被更新 ...