当前位置:首页C++程序设计 > 正文

C++98 vs C++11 语法特性对照表(示例版)

作者:野牛程序员:2026-01-27 13:47:56C++程序设计阅读 2008
C++98 vs C++11 语法特性对照表(示例版)

C++98 vs C++11 语法特性对照表(示例版)

1. 类型推导

C++98:

int x = 42;
double y = 3.14;

C++11:

auto x = 42;      // int
auto y = 3.14;    // double

2. 空指针

C++98:

int* p = NULL;

C++11:

int* p = nullptr;  // 类型安全

3. 循环遍历

C++98:

std::vector<int> v;
for(size_t i = 0; i < v.size(); i++) {
    std::cout << v[i] << std::endl;
}

C++11:

for(auto x : v) {
    std::cout << x << std::endl;
}

4. 函数与尾返回类型

C++98:

int add(int a, int b) { return a + b; }

C++11:

auto add(int a, int b) -> int { return a + b; }

5. 模板增强

C++98:

template<typename T>
T add(T a, T b) { return a + b; }

C++11:

template<typename... Args>
auto sum(Args... args) -> decltype((args + ...)) {
    return (args + ...);  // 参数折叠
}

template<typename T>
using Vec = std::vector<T>; // 别名模板

6. 常量表达式

C++98:

const int max = 10;

C++11:

constexpr int square(int x) { return x * x; }
constexpr int max = square(5);

7. 枚举

C++98:

enum Color { Red, Green, Blue };
Color c = Red;

C++11:

enum class Color { Red, Green, Blue };
Color c = Color::Red;

8. 类与对象

C++98:

class Person {
public:
    int age;
    virtual void show() { std::cout << age; }
};

C++11:

class Person {
public:
    int age;
    void show() = default;      // 默认函数
    Person(const Person&) = delete; // 禁止拷贝
};

9. 右值引用与移动语义

C++98: 不支持
C++11:

std::vector<int> v1 = {1,2,3};
std::vector<int> v2 = std::move(v1); // 移动而非拷贝

10. Lambda 表达式

C++98: 不支持
C++11:

auto add = [](int a, int b) { return a + b; };
std::cout << add(2,3) << std::endl;

11. 智能指针

C++98:

int* p = new int(5);
delete p;

C++11:

std::unique_ptr<int> p = std::make_unique<int>(5);

12. STL 容器增强

C++98:

std::vector<int> v;
std::map<int,std::string> m;

C++11:

std::unordered_map<int,std::string> m;
std::array<int,3> arr = {1,2,3};

13. 多线程

C++98: 不支持
C++11:

#include <thread>
#include <mutex>
std::mutex mtx;
void print(int i){
    std::lock_guard<std::mutex> lock(mtx);
    std::cout << i << std::endl;
}
std::thread t(print,1);
t.join();

14. 静态断言

C++98: 不支持
C++11:

static_assert(sizeof(int)==4, "int必须为4字节");

15. 用户字面量

C++98: 不支持
C++11:

long double operator"" _km(long double x) { return x*1000; }
auto distance = 1.5_km;

16. 范围总结

  • 语法简化auto、范围 for、尾返回类型、Lambda

  • 类型安全nullptr、强类型枚举、静态断言

  • 性能优化:右值引用、移动语义、智能指针

  • 模板增强:可变参数模板、别名模板、完美转发

  • 标准库增强:哈希容器、固定数组、多线程库

  • 编译期求值constexpr、静态断言


野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
  • C++98 vs C++11 语法特性对照表(示例版)
  • 相关推荐

    最新推荐

    热门点击