C++17/14/11 个人备忘

给自己看的。

我的情况:从 C++ Primer 第五版 入门,该版基于C++11,但不是专门讲C++11的,只提到了部分相关内容。后来自己看过一些介绍 C++11相关的书,查过一些资料。14/17没去了解过。




从17开始,再到14,再到11



17

// 似乎正式标准还发没出来

// 这里应该算是draft吧,N4640目前是最新的?

http://www.open-std.org/JTC1/SC22/WG21/

https://github.com/cplusplus/draft


//

https://www.meetingcpp.com/blog/items/final-features-of-c17.html


// 这个好

http://geek.csdn.net/news/detail/228484C++17


// 这个里面的链接可以点的。。。

http://blog.csdn.net/fesdobat/article/details/75154004?locationNum=2&fps=1


// 这个就列举了一下名字。。

http://c.tedu.cn/kbsk/224822.html


// 维基百科,应该算比较新的吧?

https://en.wikipedia.org/wiki/C%2B%2B17


// 知乎大神  蓝色   的专栏

// 应该还会有新的发出来

https://zhuanlan.zhihu.com/p/25434012

https://zhuanlan.zhihu.com/p/25855097

https://zhuanlan.zhihu.com/p/26920039


// 这个一大堆,也不知道是不是大部分都砍掉了

// 但是每个都附上了openstd的提案,建议看这个

http://blog.jobbole.com/111801/


// module似乎已经砍掉了

https://www.zhihu.com/question/37330979/answer/73595024


// 知乎大神 蓝色 的演讲

// 相关的module,concept 已经砍掉

https://github.com/FrozenGene/presentation/blob/master/pdf/C%2B%2B17%E6%96%B0%E7%89%B9%E6%80%A7%E5%B8%A6%E6%9D%A5%E7%9A%84%E6%94%B9%E5%96%84%E5%92%8C%E5%BD%B1%E5%93%8D.pdf


// auto配大括号初始化的规定,上面 知乎 蓝色 的专栏也提到了

// 没有 蓝色 的写的全,不如看蓝色的,因为还有几种禁用的

http://blog.csdn.net/zwvista/article/details/53812819


// fold expression折叠表达式,讲到了默认值

// 看这个吧

http://blog.csdn.net/zwvista/article/details/53981696


// structured binding declaration 结构化绑定声明

// 一次声明和初始化多个变量

http://blog.csdn.net/zwvista/article/details/78111346


// 基于区间的for循环

// 以前默认使用begin(),end(),类型要一样,现在可以不用了,但是也要begin(),end(),类型可以不一样,需要提供operator!= ( BEGIN_TYPE,END_TYPE)

// 具体的看文章里写的for循环展开成什么样就懂了

http://blog.csdn.net/zwvista/article/details/52304605


// 这里提到了理由

// 认为过去的for区间循环是 over-constrained,也就是说有不必要的约束条件

// end在过去只需要和begin比一比,不需要递增递减等各种操作,没必要约束其为iterator

https://stackoverflow.com/questions/39117330/how-the-new-range-based-for-loop-in-c17-helps-ranges-ts


// 允许嵌套的命名空间

// 。。。说实话这个戳到我痛点了,写N层命名空间,光说对齐都受不了


//  从标准上保证了某些情况下的copy elision

// wiki上的一条

https://en.wikipedia.org/wiki/C%2B%2B17


// if constexpr,似乎也没说清楚,这里的constexpr如果不是编译期可得怎么办,内部是否求值?这些问题

// 用最新版g++试了试, 必须提供编译期可得的值,所以求值不求值没什么所谓了?

// 似乎也不对,哪怕运行constexpr也有可能有副作用的吧?

// 试试,哦发现了。。标准里提了一句,constexpr内部可以使用生命期开始于函数之后的变量,所以副作用别人也看不到。。。无所谓了



// any

http://www.cnblogs.com/thinkway/p/6743772.html

http://en.cppreference.com/w/cpp/utility/any

// any_cast也要注意一点的,直接cast到右值,就被当右值用了,比如说下面这个例子

http://en.cppreference.com/w/cpp/utility/any/any_cast


// variant,可以看做类型安全的union

// 注意类型转换,里面提到了std::variant 用 char*的话, 自动转bool而不是string?

http://en.cppreference.com/w/cpp/utility/variant

http://www.cnblogs.com/thinkway/p/6743684.html


// std::in_place, std::in_place_type, std::in_place_index,std::in_place_t , std::in_place_type_t, std::in_place_index_t这些

见cppreference里面单独的那一章,还有optional,variant,any的相关构造方式部分

http://en.cppreference.com/w/cpp/utility/in_place

还有我在知乎的提问和自问自答。。

https://www.zhihu.com/question/66032208/answer/237524884


// 标准库容器允许不完全类型,不确定是否写进标准了

https://www.zhihu.com/question/32222337?sort=created


// inline variable

// inline可以用在变量上了

见草案N4640  7.16

https://stackoverflow.com/questions/38043442/how-do-inline-variables-work


// lambda捕获this的一些新规定

// 以前是默认捕获this,访问成员也是使用默认捕获的this。

// 为了复制*this,以前需要使用一些绕弯子的做法,而且有一些弊端(见下面网页详述)

//现在可以选择 以传值方式捕获  *this,配合c++14 lambda可以在捕获列表那里使用初始化,用起来很舒服

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0018r3.html


// byte类型

// byte不允许数学运算,只允许位运算。专注于内存方面。将以前char , unsigned char类型的大杂烩职责 分离。

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0298r3.pdf

http://en.cppreference.com/w/cpp/types/byte

https://www.zhihu.com/question/56607671


// optional类型

// 举例来说,以前用std::pair 表示函数返回成功或者失败和返回的对象。

// 现在可以用optional  (类似variant 但是有专门的接口)

// 一个优点是,如果失败了就不必构造T了



14


//

https://news.cnblogs.com/n/503451/


//

http://blog.csdn.net/u012234115/article/details/47209679


// constexpr 函数不一定总是返回编译期结果。 这个以前还真没注意,想了想有道理,如果参数在编译期不可得,那肯定没法编译期计算

// 如果传了编译期无法得到的参数进去,不知道会怎么样

// 有说报错的,有说运行期计算的

https://www.zhihu.com/question/35614219


// constexpr变量一定是顶层const ?



// constexpr 更加易用

// 注意constexpr编译期和运行期代码统一

http://blog.csdn.net/zwvista/article/details/54429416


// constexpr 类成员函数不再默认const 等一些细节

// 官方


// 非官方,不确定正确与否

http://blog.csdn.net/yhl_leo/article/details/50864210


// 标准库允许提供 两个参数类型不同的比较函数了

// 详见,蓝形参的回答。

https://www.zhihu.com/question/22765983



// 这个人的博客,有一堆新特性的尝试

// 写的貌似不错

http://blog.csdn.net/zwvista/article/list/2


// 尤其是这个decltype decltype(auto)这篇

http://blog.csdn.net/zwvista/article/details/54571821


11


// 有助于理解lambda和各种类似作用的其他方法

// 注意里面用的是11正式出来之前写的0x标准

// 现在不仅11出来了,更新的14,17都有了。。。而且lambda许多方面都被修改的更易使用了

http://blog.csdn.net/zdy0_2004/article/details/50278819


// 这个直接转载的wiki。。。

http://blog.csdn.net/u012234115/article/details/47209625


// wiki c++11的比c++17长太多了哈哈哈

https://zh.wikipedia.org/wiki/C%2B%2B11#.E7.B7.92.E7.A8.8B.E6.94.AF.E6.8F.B4



// 线程、锁、原子类型、 。。。 这一大堆东西都不算熟悉,primer没怎么讲过。都是在别的地方陆陆续续看得,不成体系

// 一些基本概念都在上面几个有,详细的话,再找找


// cpp reference 就不错,比如说thread就那几个接口,概念也挺简单的

// 这个是cpp reference的 thread support ilbrary总览

http://en.cppreference.com/w/cpp/thread


// thread的构造函数里,args默认传值了,所以如果需要传给function的参数是引用, 注意用std::ref,std::cref包一下

// thread的静态函数成员, hardware_concurrency可以运行期获得硬件支持的并行数(比如4核就是4,提示说并不准,毕竟有很多现实问题,比如说以前见到过什么一个核可以当两个核用什么的。。。)

http://en.cppreference.com/w/cpp/thread/thread


// mutex

// 一般用RAII, 见

http://en.cppreference.com/w/cpp/thread/mutex/lock


// ...太多了,不一一记了。

// 反正就是把cpp reference的所有相关部分看一遍


// 基本上就是搜索出来的前几个吧,详细的我觉得应该看本专门的书

http://www.cnblogs.com/zhuyp1015/archive/2012/04/08/2438288.html


// 系列,这个挺好的

http://www.cnblogs.com/haippy/p/3284540.html


// 还有上面那个系列的详细版,更棒

https://github.com/forhappy/Cplusplus-Concurrency-In-Practice


// 注意C++17有了新的mutex类型,

// 据说std::scoped_lock在个方面均严格优于lock_guard,

// 现在应该用新的mutex了

// 是在C++17的那个网页里看到的  http://blog.jobbole.com/111801/

// cppreference也有了http://en.cppreference.com/w/cpp/thread/scoped_lock

你可能感兴趣的:(c++)