c++11 最全新特性介绍!!!

自动类型推导(auto)

用途:允许编译器根据初始化表达式推断变量的类型。

示例:auto x = 5; // x 的类型为 int

初始化列表({})

用途:用于数组和容器的初始化,也可以用于类的构造函数。

示例:std::vector<int> v = {1, 2, 3};

引用别名(decltype 和 using)

用途:定义类型别名。

示例:

int i;

using IntRef = decltype(i); // IntRef 类型为 int&

统一初始化语法

用途:使用花括号 {} 进行对象的初始化。

示例:

struct S { int x, y; };

S s{1, 2}; // 统一初始化

右值引用和移动语义

用途:支持高效的临时对象处理和移动构造/赋值。

示例:

class MoveOnly {

public:

MoveOnly(MoveOnly&& other) noexcept : data_(other.data_) { other.data_ = nullptr; }

private:

int* data_;

};

Lambda 表达式

用途:在代码中定义简洁的一次性使用的匿名函数。

示例:

auto add = [](int x, int y) { return x + y; };

显式转换运算符(explicit)

用途:防止非显式的构造函数调用。

示例:

struct MyInt {

explicit MyInt(int i) : value(i) {}

int value;

};

委托构造函数

用途:一个构造函数可以调用另一个构造函数。

示例:

struct Point {

Point(int x, int y) : x_(x), y_(y) {}

Point(int x) : Point(x, x) {} // 委托构造函数

private:

int x_, y_;

};

非静态数据成员初始化

用途:在类定义时初始化成员变量。

示例:

struct Person {

int age = 20; // 直接初始化

};

nullptr 关键字

用途:替代 NULL 宏,提供更清晰的空指针表示。

示例:

int* p = nullptr;

线程支持(<thread>)

用途:提供了线程管理的基础功能。

示例:

#include <thread>

void hello() { std::cout << "Hello from thread" << std::endl; }

int main() {

std::thread t(hello);

t.join();

return 0;

}

原子操作(<atomic>)

用途:提供了原子操作的支持。

示例:

#include <atomic>

std::atomic<int> ai(0);

列表初始化(std::initializer_list)

用途:处理可变数量的参数列表。

示例:

void print(std::initializer_list<int> il) {

for (auto i : il) std::cout << i << " ";

std::cout << std::endl;

}

用户定义文字量(User-defined literals)

用途:允许用户扩展文字量。

示例:

namespace literals {

long operator"" _s(long x) { return x * 1000; }

}

int main() {

auto ms = 10_s;

return 0;

}

可变模板参数(template<typename... Ts>)

用途:支持可变数量的类型参数。

示例:

template<typename T, typename... Args>

void print(T first, Args... args) {

std::cout << first << " ";

print(args...);

}

局部类型别名(auto 和 using)

用途:局部作用域内定义类型别名。

示例:

auto sum = [](auto x, auto y) -> auto { return x + y; };

对齐属性(alignas)

用途:控制变量或类型的对齐方式。

示例:

alignas(16) int array[10];

noexcept 规格符

用途:指定函数抛出异常的可能性。

示例:

void safe_function() noexcept {}

标准文件系统库(<filesystem>)

注意:虽然 <filesystem> 在 C++17 中正式成为标准库的一部分,但在 C++11 中有一些实现作为实验性库存在。

用途:提供了文件系统操作的接口,如路径处理、文件创建、删除等。

示例:

#include <experimental/filesystem>

namespace fs = std::experimental::filesystem;

fs::path p("example.txt");

if (fs::exists(p)) {

std::cout << "File exists." << std::endl;

}

内嵌命名空间(namespace)

用途:允许在现有命名空间内部定义新的命名空间。

示例:

namespace my_namespace {

namespace inner_ns {

void func() {}

}

}

constexpr 函数

用途:声明可以在编译期计算的函数。

示例:

constexpr int square(int x) {

return x * x;

}

static_assert(square(5) == 25, "square function failed");

局部类(Local Classes)

用途:允许在函数内部定义类。

示例:

void func() {

class LocalClass {

public:

void print() const { std::cout << "Hello from local class!" << std::endl; }

};

LocalClass lc;

lc.print();

}

枚举类(Enumerated Class)

用途:提供了更强类型的枚举,防止与其他整数或不同枚举混用。

示例:

enum class Color { Red, Green, Blue };

void printColor(Color c) {

switch (c) {

case Color::Red: std::cout << "Red"; break;

case Color::Green: std::cout << "Green"; break;

case Color::Blue: std::cout << "Blue"; break;

}

}

override 和 final 关键字

用途:override 指明派生类中的虚函数覆盖基类中的虚函数;final 防止进一步的继承。

示例:

class Base {

public:

virtual void func() {}

};

class Derived : public Base {

public:

void func() override {}

};

class FinalDerived : public Derived {

public:

void func() final {}

};

基于范围的 for 循环

用途:简化了迭代容器的过程。

示例:

std::vector<int> v = {1, 2, 3, 4, 5};

for (int x : v) {

std::cout << x << " ";

}

noexcept 规格符

用途:指定函数是否可能抛出异常。

示例:

void safe_function() noexcept {}

static_assert 断言

用途:确保编译时条件成立,否则编译失败。

示例:

template<typename T>

void ensure_is_integral() {

static_assert(std::is_integral<T>::value, "T must be an integral type.");

}

alignof 运算符

用途:获取类型的对齐要求。

示例:

int alignment = alignof(double);

外部模板(External Templates)

用途:允许模板的定义和实现分离到不同的文件中。

示例:

template<typename T>

T min(T a, T b);

extern template T min<int>(int, int);

可变模板参数(Variadic Templates)

用途:允许函数或类接受可变数量的模板参数。

示例:

template<typename T, typename... Args>

void print(T first, Args... args) {

std::cout << first << " ";

print(args...);

}

[[noreturn]] 属性

用途:标记不会返回的函数。

示例:

[[noreturn]] void exit_function() {

std::exit(EXIT_FAILURE);

}

__func__ 预处理器宏

用途:获取当前函数的名字。

示例:

void myFunction() {

std::cout << "Inside " << __func__ << std::endl;

}

_Pragma 运算符

用途:允许预处理器指令被包含在字符串中。

示示例:

#pragma once

#define MY_MACRO(x) _Pragma(#x)

MY_MACRO(message("This is a message"))

__cplusplus 宏

用途:获取当前使用的 C++ 标准版本的年份。

示例:

if (__cplusplus >= 201103L) {

std::cout << "Using C++11 or later." << std::endl;

}

alignas 和 alignof 关键字

用途:alignas 控制变量或类型的对齐方式;alignof 获取类型的对齐要求。

示例:

alignas(16) int array[10];

int alignment = alignof(double);

用户定义的文字量(User-defined Literals)

用途:允许用户扩展文字量。

示例:

namespace literals {

long operator"" _s(long x) { return x * 1000; }

}

int main() {

auto ms = 10_s;

return 0;

}

static_assert 断言

用途:确保编译时条件成立,否则编译失败。

示例:

template<typename T>

void ensure_is_integral() {

static_assert(std::is_integral<T>::value, "T must be an integral type.");

}

[[noreturn]] 属性

用途:标记不会返回的函数。

示例:

[[noreturn]] void exit_function() {

std::exit(EXIT_FAILURE);

}

noexcept 规格符

用途:指定函数是否可能抛出异常。

示例:

void safe_function() noexcept {}

thread_local 关键字

用途:指定变量在每个线程中具有单独的副本。

示例:

thread_local int thread_count = 0;

void increment() {

++thread_count;

}

__has_include 和 __has_cpp_attribute 预处理器宏

用途:检查头文件是否存在以及特定属性是否可用。

示例:

#if __has_include(<iostream>)

#include <iostream>

#endif

#if __has_cpp_attribute(noreturn)

[[noreturn]] void exit_function() {

std::exit(EXIT_FAILURE);

}

#endif

[[deprecated]] 属性

用途:标记即将废弃的函数或类型。

示例:

[[deprecated("Use new_function instead")]] void old_function() {}

[[fallthrough]] 属性

用途:明确指示 fall-through 在 switch 语句中是预期的行为。

示例:

void printColor(int color) {

switch (color) {

case 0:

std::cout << "Red";

[[fallthrough]];

case 1:

std::cout << "Green";

[[fallthrough]];

default:

std::cout << "Blue";

}

}

[[maybe_unused]] 属性

用途:抑制未使用的警告。

示例:

void func([[maybe_unused]] int x) {}

#c++##C++11新特性##c++后端##c++面经##c++新特性#
c++知识库 文章被收录于专栏

不定时更新一些学习c++的知识,整理不易,多多关注谢谢

全部评论

相关推荐

1 3 评论
分享
牛客网
牛客企业服务