C++标准库第二版笔记 2
C++标准库第二版笔记 2
微小但重要的语法提升
template表达式内的空格:
vector< list<int> >; // OK in each C++ version
vector<list<int>>; // OK since C++11
取消二异性的nullptr std::nullptr_t
void f(int);
void f(void*);
f(0) // calls f(int)
f(NULL) //calls f(int) if NULL is 0, ambiguous otherwise.
f(nullptr) // calls f(void*)
注意std::nullptr_t被视为一个基础类型。
以auto完成类型自动推导
auto i; // ERROR: cant deduce the type of i
auto l = [] ( int x )-> bool {...,}; // lambda type
// auto& 将尽可能保存原来的类型
const int a2 = 10;
auto &b2 = a2; // b2 is a const type
int a3 [] { 1, 2, 3 };
auto b3 = a3; // b3 is a pointer
auto & b7 = a3; // b7 is an array
一致性初始化(Uniform initialization)与初始列(Initializer List)
如今,C++标准化了初始行为。它依赖实际值(actual value)而非依赖类型。若不造成精度损失,则不算为窄化。浮点数到整数永远是一种窄化。
type var { 1, 2, 3 };
type var[] { 1, 2, 3 };
vector<string> var{ "Berlin", "New York", "Shanghai" };
// 而默认行为可以强迫造成初始赋值
int j{}; // j is initialized by 0
int * q{}; // q is initialized by nullptr
// 窄化(narrowing),也就是精度降低或造成数值变动丢失,对大括号不成立。
int x1(5.3); // OK
itn x2 = 5.3; // OK
int x3{ 5.0 } //ERROR
char c2{999999}; // ERROR if 99999 doesnt fit into a char
vector<int> v2 { 1, 2.3, 4, 5.6 }; // ERROR
std::initializer_list<>
void print( std::initializer_list<int> vals ) {
for (auto p = vals.begin(); p!=vals.end; ++p) {
std::cout<<*p<<"\n";
}
}
print( { 1, 2, 3, 4, 5, 6, 7 } );
class p {
public:
P(int,int); // cons 1
P(std::initializer_list<int>); // cons 2
};
P p( 77, 5 ); // calls cons1
P q{ 77, 5 }; // calls cons2
P r{ 77, 5, 42 }; // calls cons2
P s = { 77, 5 }; // calls cons2
由于初始列的出现,现在explicit关键词已不局限于单个构造函数出现时的隐式转化。
class p {
public:
explicit P(int,int,int); // cons 1
P(std::initializer_list<int>); // cons 2
};
P w = { 77, 5, 42 }; // ERROR
// 同下失去隐式转化能力
void fp(const P&);
fp({11,22,3}); // ERROR
C++标准库第二版笔记 2的更多相关文章
- C++标准库第二版笔记 3 和异常的理解 1
C++标准库第二版笔记 3 和异常的理解 1 差错和异常(error and exception)的处理 标准异常类(exception class) 定义于 分为: 1.语言本身支持的异常 2.标准 ...
- C++标准库第二版笔记 2.1
C++标准库第二版笔记 2.1 1 Range-Based for 循环 for ( decl : coll ) { statements; } // collaborate 类似C# foreach ...
- C++标准库第二版笔记 1
C++标准库第二版笔记 1 C++ std历史 第一份标准化文档: C++98 & C++03 & TR1 TR1 Information Technology- Programmin ...
- python核心编程第二版笔记
python核心编程第二版笔记由网友提供:open168 python核心编程--笔记(很详细,建议收藏) 解释器options:1.1 –d 提供调试输出1.2 –O 生成优化的字节码(生成 ...
- 《C标准库》学习笔记整理
简介 <C标准库>书中对 C 标准库中的 15 个头文件的内容进行了详细的介绍,包括各头文件设计的背景知识.头文件中的内容.头文件中定义的函数和变量的使用.实现.测试等. 我学习此书的目的 ...
- Python高级编程第二版--笔记
不只是CPython Stackless Python Jython(与java集成) IronPython(与net集成) PyPy python真正出众的领域在于围绕语言打造的整个生态系统. Py ...
- 《C++ 标准库》读书笔记 - 第二章 Introduction to C++ and the Standard Library
1. History of the C++ Standards 1.1 History of the C++ Standards C++98 -> C++03 -> TR1 -> C ...
- JavaPersistenceWithHibernate第二版笔记-第四章-Mapping persistent classes-003映射实体时的可选操作(<delimited-identifiers/>、PhysicalNamingStrategy、PhysicalNamingStrategyStandardImpl、、、)
一.自定义映射的表名 1. @Entity @Table(name = "USERS") public class User implements Serializable { / ...
- JavaPersistenceWithHibernate第二版笔记-第四章-Mapping persistent classes-002identity详解
一.简介 1.You now have three methods for distinguishing references: Objects are identical if they occ ...
随机推荐
- Python日志模块logging&JSON
日志模块的用法 json部分 先开一段测试代码:注意 str可以直接处理字典 eval可以直接将字符串转成字典的形式 dic={'key1':'value1','key2':'value2'} ...
- 1、根"/"目录结构
1.目录结构 FSH [root@localhost /]# tree -L . ├── bin -> usr/bin #普通用户使用的命令 ├── boot #存放系统启动相关文件,例如ker ...
- C语言数据结构基础学习笔记——C语言基础
抽象数据类型(ADT)是指一个数学模型以及定义在该模型上的一组操作,通常用(数据对象,数据关系,基本操作集)这样的三元组来表示抽象数据类型. 数据结构是相互之间存在一种或多种特定关系的数据元素的集合, ...
- vue+窗格切换+田字+dicom显示_02
环境:vue+webpack+cornerstone ide:vs code 需求:窗格设置+拼图设置 分析: 由于时间的原因,我也没有Baidu更好的显示窗格的方法,所以使用比较笨的方法,通过组件显 ...
- Java性能调优(一):调优的流程和程序性能分析
https://blog.csdn.net/Oeljeklaus/article/details/80656732 Java性能调优 随着应用的数据量不断的增加,系统的反应一般会越来越慢,这个时候我 ...
- Vim 命令、操作、快捷键
打开单个文件:vim file 同时打开多个文件:vim file1 file2 file3 ... 在vim窗口中打开一个新文件 : :open file 在新窗口中打开文件: :split fi ...
- IDEA常用快捷键,收藏以备后用
IntelliJ Idea 常用快捷键列表 Ctrl+Shift + Enter,语句完成“!”,否定完成,输入表达式时按 “!”键Ctrl+E,最近的文件Ctrl+Shift+E,最近更改的文件Sh ...
- python中的多进程与多线程(一)
进程是一个执行中的程序,每个进程有自己的地址空间.内存.数据栈以及其他用于跟踪执行的辅助数据.操作系统管理其上所有进程,并合理分配时间. 进程也可以通过fork或spawn派生新的进程,每个新进程有自 ...
- 尚硅谷springboot学习32-整合druid
使用druid数据源 配置druid数据源 这里配置的数据源参数并不会生效,因为在DataSourceProperties中并没有这些字段,如果想要生效,必须自己配置druid数据源 @Configu ...
- python中类与对象及其绑定方法的定义
面向对象编程 什么是面向对象? 面向过程:将需要解决的问题按步骤划分,一步一步完成每一个步骤,而且 步骤之间有联系. 优点:复杂问题可以分步完成 缺点:扩展性很差,维护性差.如果中间 ...