为了账号安全,请及时绑定邮箱和手机立即绑定

C++11 语法入门:轻松上手的现代 C++ 编程基础

标签:
杂七杂八
概述与引入

C++11,亦称 C++0x,是 C++ 标准的最新修订版,于2011年发布了最终草案。自 C++98 标准以来,C++ 语言一直在演进,引入了许多新的特性、功能和功能改进,以增强语言的现代性、安全性以及与 C、C++ 兼容性。C++11 标准的引入标志着 C++ 进入了一个新的纪元。对于现代编程实践而言,理解 C++11 的新特性是不可或缺的,它提供了更安全、简洁、高效的编码方式。

现代 C++ 概念

在 C++11 中,语言对作用域解析运算符 ::、模板的增强以及泛型编程进行了优化和扩展。这些改进使得 C++ 能够更加灵活地处理类和函数的命名空间,以及创建类型安全且可重用的模板代码。

作用域解析运算符 ::

在 C++ 中,作用域解析运算符 :: 用于从全局命名空间或类的作用域中引用成员。以下是一个示例:

#include <iostream>

class MyClass {
public:
    void myFunction() {
        std::cout << "Inside MyClass::myFunction" << std::endl;
    }
};
int main() {
    MyClass obj;
    obj.myFunction(); // 直接使用成员函数名无需作用域解析
    std::cout << MyClass::myFunction; // 输出成员函数的地址
    return 0;
}

模板与泛型编程

C++11 提供了更强大的模板系统,允许创建类型可变的函数和类,增强了代码的重用性和灵活性。通过模板实例化、模板元编程以及类型别名的引入,泛型编程成为可能。

以下是一个使用泛型编程的示例:

template <typename T>
void print(T t) {
    std::cout << t << std::endl;
}

int main() {
    print(10); // 对整数进行打印
    print("Hello"); // 对字符串进行打印
    return 0;
}
C++11 引入的新特性

自动类型推断

C++11 引入了 RValue 引用和自动类型推断,简化了语法并能推断出更精确的类型。下面是一个使用自动类型推断的示例:

#include <iostream>

void swapRValue(int& a, int&& b) {
    std::swap(a, b);
}

int main() {
    int x = 10;
    int y = 20;
    swapRValue(x, y); // 参数类型被自动推断为 RValue 引用
    return 0;
}

改进的语法和类型

C++11 引入了新容器类型,如 std::array,以及增强的初始化语法,如范围初始化和迭代器。

以下是一个使用 std::array 的示例:

#include <array>
#include <iostream>

int main() {
    std::array<int, 5> arr = {1, 2, 3, 4, 5}; // 使用范围初始化
    for(int i : arr) {
        std::cout << i << " ";
    }
    return 0;
}

智能指针

std::unique_ptrstd::shared_ptr 的引入提供了自动内存管理和垃圾回收,避免了内存泄露和悬空指针的问题。

下面是一个使用 std::unique_ptr 的示例:

#include <memory>
#include <iostream>

int main() {
    std::unique_ptr<int> ptr(new int(10)); // 使用智能指针初始化和管理内存
    std::cout << *ptr << std::endl;
    return 0;
}
类与结构体

C++11 对类和结构体进行了增强,引入了构造函数初始化列表、默认参数和析构函数。

以下是一个使用默认参数初始化的类示例:

#include <iostream>

class MyClass {
public:
    int value;
    MyClass(int val = 0) : value(val) {} // 默认参数初始化
    ~MyClass() {} // 析构函数
};

int main() {
    MyClass obj1; // 使用默认构造函数
    MyClass obj2(10); // 使用带参数的构造函数
    return 0;
}
范围-based for 循环

C++11 的范围-based for 循环允许更简洁地遍历容器,如 std::vectorstd::array 和自定义迭代器。

以下是一个使用 std::vector 和范围-based for 循环的示例:

#include <vector>
#include <iostream>

int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};
    for(auto& elem : vec) {
        std::cout << elem << " ";
    }
    return 0;
}
总结与练习

C++11 引入的这些特性不仅提高了代码的可读性和可维护性,也增强了 C++ 作为一种现代编程语言的地位。学习并应用这些新特性,将使你能够编写出更安全、高效且具有竞争力的代码。

练习题

  1. 使用 RValue 引用和自动类型推断编写一个函数,交换两个整数的值。
  2. 创建一个使用 std::arraystd::unique_ptr 的程序,演示内存管理。
  3. 实现一个类,使用默认参数初始化和析构函数。
  4. 编写一个使用范围-based for 循环遍历 std::vector 的程序,并添加条件语句进行元素过滤。

通过实践这些练习,你将能更深入地理解 C++11 的特性如何在实际编程中应用,为你的 C++ 编程技能打下坚实的基础。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

举报

0/150
提交
取消