IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++11新增的重要的知识点讲解和测试 -> 正文阅读

[C++知识库]C++11新增的重要的知识点讲解和测试

这里主要是对C++11比较重要的一些的东西的使用进行讲解和如何去使用。
C++11

// C++11.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <string>
#include <vector>
#include <complex>      //复数
#include <set>
using namespace std;

//(2).自动推到函数
double f() { return 1.0; }//定义了函数
auto d = f();//自动推到函数
//1.tuto自动类型的推导
void test01()
{
    //1.自动推到基础类型
    auto i = 42;//自动推到变量

    //3.对复杂类型的推到,迭代器
    vector<string>v;
    v.push_back("123456");
    auto pos = v.begin();

    //4.推导lamuda表达式
    auto l = [](int x)->bool {
        cout << "输入的参数为" << x << endl;
        cout << "lamuda表达式" << endl;
        return true;
    };


    {
        cout << i << endl;

        cout << d << endl;

        cout << *pos << endl;//如果容器中的数据为空,引用会报错

        cout << l(1) << endl;
    }
    //注意:类中的成员变量式不能够进行类型推导的,因为类只是声明,初始化才赋值
    //类中不能使用auto
}


//2.一致性初始化和初值列
class Test02
{
public:
    //一致性初始化,就是使用大括号进行初始化{}
    int values[3]{ 1,2,3 };
    std::vector<int>v{ 2,3,4,5,8 };
    std::vector<std::string>cities{
        "Berlin","New York","London","Cairo","Cologne"
    };
    std::complex<double>c{ 4.0,3.0 };

    //初值列,即没有指定的值的变量,自动赋值为0或者nullptr
    int i;
    int j{};
    int* p;
    int* q{};
    void test() {
    cout << "i的值:" << i << endl;
    cout << "j的值:" << j << endl;
    cout << "p的值:" << p << endl;
    cout << "q的值:" << q << endl;
    }

    //窄化:精度降低或者是数值类型不匹配,对大括号来说都是不可以的
    //int x3{ 5.0 };//错误
    char c1{ 7 };
    //char c2{ 99999 };
    std::vector<int>v1{ 1,2,3,4,5 };
    //std::vector<int>v2{1,2.3,4,5.6}

    //用户的自定义的类型的初值列class template::initializer_list<>
    void print(std::initializer_list<int>vals)
    {
        for (auto p = vals.begin(); p != vals.end(); ++p) {
            cout << *p << "\n";
        }
    }
};
void test02()
{
    Test02 test;
    test.test();
    test.print({ 12,3,5,7,11,13,17 });
}

//3.增加类似for_each()的循环
void test03()
{
    //打印集合中的元素
    for (int i : {2, 3, 5, 7, 9, 13, 17, 19})
    {
        cout << i << endl;
    }

    //容器中每个数乘以3
    std::vector<double>vec{ 2.3,5.5,2.6,4.2,3.6 };
    for (auto& elem : vec)
    {
        elem *= 3;
    }
}
template<class T>
void printElements(const T& coll)
{
    for (const auto& elem : coll)
    {
        std::cout << elem << std::endl;
    }

    //等同于
    //for (auto pos = coll.begin(); pos != coll.end(); pos++)
    //{
    //    std::cout << elem << std::endl;
    //}
}

//4.move搬迁语句,避免非必要的拷贝和临时对象
template<class X>
void createAndInsert(std::set<X>& coll)
{
    X x;
    coll.insert(x);
    coll.insert(std::move(x));
}

//5新式的字符串字面常量Raw String
void test05()
{
    //Raw String
    string a = "\\\\n";//表示两个反斜线和一个n
    string b = R"(\\n)";

    //如果要在R中出现括号),使用定义符,16个基本的字符,不可以含有反斜线,空格,和小括号
    string c = R"nc(\dfg  dfj\fd p90()(000))()())nc";

    //编码的字符串,使用不同的编码完成国际化
    cout << u8"hello" << endl;//utf8,字符类型是const char
    cout << u"hello" << endl;//string literal,类型char16_t的字符
    cout << U"hello" << endl;//string literal,类型char32_t的字符
    cout << L"hello" << endl;//wide string literal,类型wchar_t的字符
}

//6关键字noexcept,用来指明某个函数无法或不打算抛出异常
void foo() noexcept;

//7关键字constexpr,用来让表达式核定于编译期
constexpr int square(int x)
{
    return x * x;
}
void test07()
{
    float a[square(9)];
    cout << sizeof(a) / sizeof(float) << endl;
}

//9Lambda;语法[](){}(),指定返回值的类型[](参数)->类型 {};(就等于函数里面嵌套函数了)
void test09()
{
    [] {cout << "hello lambda" << endl; }();//直接调用
    //把他转递给对象
    auto l = [] {cout << "hello lambda2" << endl; };
    l();

    char16_t q='a';//两个字节的char
    cout << sizeof(q) << endl;
}

int main()
{
    test09();
}


已经分小点测试了,需要学习的直接拿走,自己动手实践一下就能够加深印象和理解的,希望都不要觉得C++难。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-09-14 13:08:38  更:2021-09-14 13:08:42 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 14:04:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计