设为首页 加入收藏

TOP

C++ Standard Library(一)
2016-04-23 14:09:08 】 浏览:648
Tags:Standard Library

*注:内容主要是对参考1的学习记录,知识点与图片大都来源于该书,

部分知识点与图片来源于参考2。具体参考信息,见最下方参考。*

C++98中新支持的语言特性

非类型模板参数 template class bitset; 。 模板类中的默认模板参数 template > calss vector 。 关键字typename用来表示随后的标识符是一个类型。 支持类的成员函数是成员模板函数,然而该成员函数不能是虚函数。 支持嵌套类模板。 基本类型的显示初始化 int x = int();,该特性可以确保模板代码中任意类型的值都有一个初始化的默认值。

C++11中新支持的语言特性

模板尖括号之间不再需要空格符了, vector > // since c++11 关键字 nullptr // since c++11 关键字 auto // since c++11,自动类型推导,从变量的初始化器中推导出该变量的类型。 c++11支持统一的初始化形式,使用大括号。注意的是,{}初始化不能进行类型缩小转换。例如 int x{2.0}; // is wrong。 c++11支持初始化列表,如 int std::vector v{2, 3, 4, 65}; // initializer list 。注意,如果一个类声明了
显示构造函数,则不可使用初始化列表。 c++11支持foreach循环。 c++11支持移动语义和右值引用,简单的说就是值传递的过程中不用再copy了,而是直接使用该值。
namespace std {
    template
   
     class set { public: ... insert(const T& x); // for lvalues, copies the value ... insert(T&& x); // for rvalues, moves the value }; }
   
返回一个非静态的局部对象的右值引用时错误的。 c++11支持原生字符串(raw string)和多字节/宽字节字符串(multibyte/wide-character string)。
R"(\\n)"; // raw string, begin with R(", and end with )"。为了能够在原生字符串中使用 )",需要使用
分隔符。原生字符串的完整语法是 R"delim(...)delim",其中delim是一个至多16个基本字符的字符序列,并且delim中
不能有反斜杠backslash,空白符whitespaces,与括号parentheses。如:
R"nc(a\
    b\nc()"
    )nc";

//等价于
"a\\\n   b\\nnc()"\n     "

多字节/宽字节字符串字面值

u8定义UTF-8字符串字面值
u定义cha16_t字符串字面值
U定义char32_t字符串字面值
L定义wchar_t字符串字面值

c++提供关键帧noexcept,指定一个函数不会抛出异常或不准备抛出异常,有异常必须在函数中处理完。c++异常规范是在
运行时检查,而不是在编译时检查异常。运行时检查异常需要编译器产生额外的代码,从而可能会妨碍编译器优化。在泛型代码中,
很难知道对模板参数的操作会产生什么样的异常。

关键字constexpr使表达式能过在编译期被计算出来。

c++11支持可变参数模板。

template
   
     void Test(T& x, Types& ... args) { ... }
   

在变参模板内,使用sizeof…(args),会返回参数的数目。

c++11使用模板的别名
template
   
     using Vec = std::vector
    
     ; Vec
     
       vec; // 等价于 std::vector
      
        vec;
      
     
    
   

c++11函数模板支持默认模板参数;c++11支持局部类型作为模板参数;c++11支持内部链接的函数
作为非类型模板的函数指针或函数引用。

c++11支持Lambda表达式。
[capture-list] (params) mutable exception attribute -> ret {body}
capture-list: 逗号分割的捕获列表,[a, &b]a以值的形式被捕获,b以引用的形式被捕获;[this]以值的形式
捕获this指针;[&]以引用的形式捕获所有的自动变量;[=]以值的形式捕获所有的自动变量;[]不捕获任何值。

c++11支持关键字decltype,编译器可以推导出表达式的类型。
新的函数声明语法

template
   
     auto add(T1 x, T2 y) -> decltype(x + y);
   
c++11支持作用域枚举
enum struct|class name {enumerator = constexpr, enumerator = constexpr, ...};
enum struct|class name : type {enumerator = constexpr, enumerator = constexpr, ...};
c++11支持新的基本数据类型: char16_t, char32_t, long long, std::nullptr_t

C++中都有哪些命名空间

std
std::tr1
std::rel_ops
std::chrono
std::placeholders
std::regex_constants
std::this_thread
std::posix  // 未使用,保留

C++异常继承框架

异常继承框架

语言级支持的异常类
bad_cast:定义在头文件 中。在运行时,dynamic_cast将一个类型转换为引用类型失败时,抛出该异常。
bad_typeid:定义在头文件 。在运行时,typeid的参数是0或者是null指针时,抛出该异常。
bad_exception:定义在头文件 ,用来处理不可预料的异常错误。当函数抛出了一个异常,而该异常不在异常规范列表中时,
会调用unexpected()函数抛出bad_exception异常。注意,c++11中已经不推进使用异常规范了。

逻辑错误(logic_error)
domain_error, invalid_argument, length_error, out_of_range(定义在头文件 );
future_error(定义在头文件 , c++11新支持的异常类)。

运行时错误(runtime_error)
range_error:范围错误,计算的结果不能由目的类型所完成表示。在c++标准库中只有std::wstring_convert::from_bytes
std::wstring_convert::to_bytes会抛出该异常。定义在头文件
overflow_error:用来报告算术运算溢出(上溢)错误,在标准库中只有std::bitset::to_ulongstd::bitset::to_ullong
会抛出该异常。定义在头文件
underflow_error:定义在头文件
system_error:用来报告有操作系统引起的错误,该异常的抛出通常是由并发操作所引起的,从c++11开始支持。
定义在头文件
bad_alloc:由全局new操作符引起的异常错误,定义在头文件 中。
bad_array_new_length:继承自bad_alloc,从c++11开始提

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇BestCoder Round #81 (div.2) 100.. 下一篇BestCoder Round #81 (div.2) 100..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目