验证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的操作系统。