C++标准库第二版笔记 2.1

时间:2023-03-09 05:54:04
C++标准库第二版笔记 2.1

C++标准库第二版笔记 2.1


1 Range-Based for 循环

for ( decl : coll ) {
statements;
}
// collaborate

类似C# foreach?

2 新式的字符串字面常量(String Literal)

常用于正则表达式(regular expression)

R"(\\n)"
// 相当于
R"\\\\n"

当你想在字符串中写出一个右括号“)”,则使用定义符(delimiter) 换而言之,如果你想在字符串中添加括号,使用定义符。

R"NC(any stuff NC())NC"
// Equals
"any stuff NC()"

2.1 编码的(encoded)string literal

L"" // wide string literal "wchar_t"
U"" // string literal char32_t
u"" // string literal char16_t
u8"" // UTF-8 const char

16章介绍如何使用不同的编码(encoding)完成国际化(internationalization)

3 关键字 noexcept

异常是一个尚未能理解的大话题,另起一篇文章详细讨论异常。

4 崭新的 template 特性

模版是一个尚未能理解的大话题,另起一篇文章详细讨论模版。

5 lambda 表达式

同上

6 关键字 decltype

decltype(declared type)

是一个可以让编译器找出表达式类型的关键字。

std::map<std::string, float> coll;
decltype(coll)::value_type elem;

应用之一是声明返回类型,另一个用途是metaprogramming(超编程;元编程)或是用来传输一个lambda类型。

7 新的函数声明语法(New Function Declaration Syntax)

template<typename T1, typename T2>
auto add(T1 x, T2 y) -> decltype(x+y) // Equals Pseudocode decltype(x+y) add(T1 x, T2 y)

这种写法和“为lambda声明返回类型”是一样的。

8 带领域的(scoped)枚举常量(enumeration)

又称strong enumeration或enumeration class,这是enumeration value(或称为enumerator)的一个较干净的实现。

 enum class Salutation : char { mr, ms, co, none };

好处: 1、绝不会隐式自、至int 2、如果数值不再enumeration被声明的作用域内,你必须改写为salutation::mr 3、通过定义一个底层类型来确保每一个值的大小。 4、有提前声明(forward declaration)可供使用,以避免新的值而重新编译。

type trait std::underlying_type 你可以核定(evaluate)一个枚举类型。

error condition value也是一个scoped enumerator???