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

