验证C++11的若干特性

从 g++ 4.8 版本开始,该编译器默认支持 C++11 标准。

因此,g++ 8.3.1 的版本将完全支持 C++11 特性和语法。
您可以使用 -std=c++11 编译选项来指定编译器使用 C++11 标准进行编

C++11 是 C++ 语言的一个重要版本,引入了许多新的特性和改进,包括自动类型推导、智能指针、lambda 表达式、右值引用等。

 

eg1:lambda表达式

该程序演示了 lambda 表达式的使用。
在 sum 变量中,我们创建了一个匿名的 lambda 表达式,
它接受两个整数参数,并返回它们的和。
然后,我们调用 lambda 表达式并将结果打印出来。

#include <iostream>

int main() {
    int x = 5;
    int y = 10;

    auto sum = [](int a, int b) {
        return a + b;
    };

    int result = sum(x, y);
    std::cout << "Sum: " << result << std::endl;

    return 0;
}

//g++ -std=c++11 -o lambda_example lambda_example.cpp -pthread


/*
解释:
该程序演示了 lambda 表达式的使用。
在 sum 变量中,我们创建了一个匿名的 lambda 表达式,
它接受两个整数参数,并返回它们的和。
然后,我们调用 lambda 表达式并将结果打印出来。
*/

 

 

eg2:smart_pointer 智能指针

该程序展示了智能指针的使用。
我们定义了一个 MyClass 类,
它具有构造函数和析构函数,
以及一个简单的成员函数 sayHello()。

在 main 函数中,我们使用 std::shared_ptr 创建了一个名为 ptr 的智能指针,
指向 MyClass 的对象。
通过智能指针 ptr,我们可以调用 MyClass 对象的成员函数 sayHello()。

#include <iostream>
#include <memory>

class MyClass {
public:
    MyClass() {
        std::cout << "MyClass constructor called." << std::endl;
    }

    ~MyClass() {
        std::cout << "MyClass destructor called." << std::endl;
    }

    void sayHello() {
        std::cout << "Hello, World!" << std::endl;
    }
};

int main() {
    std::shared_ptr<MyClass> ptr = std::make_shared<MyClass>();

    ptr->sayHello();

    return 0;
}

//g++ -std=c++11 -o smart_pointer_example smart_pointer_example.cpp -pthread


/*
解释:
该程序展示了智能指针的使用。
我们定义了一个 MyClass 类,
它具有构造函数和析构函数,
以及一个简单的成员函数 sayHello()。

在 main 函数中,我们使用 std::shared_ptr 创建了一个名为 ptr 的智能指针,
指向 MyClass 的对象。
通过智能指针 ptr,我们可以调用 MyClass 对象的成员函数 sayHello()。

*/

 

eg3:multi_thread多线程

该程序展示了多线程的使用。
在 printNumber 函数中,
我们通过 std::this_thread::sleep_for 函数暂停500毫秒,
然后打印传入的数字。

在 main 函数中,我们使用 std::thread 创建了一个名为 t 的线程,
并调用 printNumber 函数,
将当前循环变量 i 作为参数传递给该函数。

我们在每次循环后调用 t.join() 等待线程的完成。
这样,在循环中创建和执行线程,就实现了每隔500毫秒打印一个数字的效果。

#include <iostream>
#include <thread>
#include <chrono>

void printNumber(int number) {
    std::this_thread::sleep_for(std::chrono::milliseconds(500));
    std::cout << "Number: " << number << std::endl;
}

int main() {
    for (int i = 1; i <= 10; ++i) {
        std::thread t(printNumber, i);
        t.join();
    }

    return 0;
}

//g++ -std=c++11 -o multithreading_example multithreading_example.cpp -pthread


/*
解释:
该程序展示了多线程的使用。
在 printNumber 函数中,
我们通过 std::this_thread::sleep_for 函数暂停500毫秒,
然后打印传入的数字。

在 main 函数中,我们使用 std::thread 创建了一个名为 t 的线程,
并调用 printNumber 函数,
将当前循环变量 i 作为参数传递给该函数。

我们在每次循环后调用 t.join() 等待线程的完成。
这样,在循环中创建和执行线程,就实现了每隔500毫秒打印一个数字的效果。

*/

 

eg4:来一个浓缩精华版:

g++ -std=c++11 -o main main.cpp -pthread

#include <iostream>
#include <memory>
#include <thread>
#include <chrono>

int main() {
    for (int i = 1; i <= 10; ++i) {
        // 使用智能指针创建一个新的线程
        std::shared_ptr<std::thread> t = std::make_shared<std::thread>([i]() {
            std::this_thread::sleep_for(std::chrono::milliseconds(500));
            std::cout << "Number: " << i << std::endl;
        });

        // 等待线程完成并销毁
        t->join();
    }

    return 0;
}

 

以上代码都是在centos7下面编译。

可以在windows电脑上安装虚拟机,再安装centos7的操作系统。

 

posted @ 2023-07-06 14:27  He_LiangLiang  阅读(40)  评论(0编辑  收藏  举报