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++的知识,整理不易,多多关注谢谢

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-03 14:32
点赞 评论 收藏
分享
06-27 12:54
已编辑
门头沟学院 Java
累了,讲讲我的大学经历吧,目前在家待业。我是一个二本院校软件工程专业。最开始选专业是觉得计算机感兴趣,所以选择了他。本人学习计算机是从大二暑假结束开始的,也就是大三开始。当时每天学习,我个人认为Java以及是我生活的一部分了,就这样持续学习了一年半,来到了大四上学期末,大概是在12月中旬,我终于找的到了一家上海中厂的实习,但我发现实习生的工作很枯燥,公司分配的活也不多,大多时间也是自己在自学。就这样我秋招末才找到实习。时间来到了3月中旬,公司说我可以转正,但是转正工资只有7000,不过很稳定,不加班,双休,因为要回学校参加答辩了,同时当时也是心高气傲,认为可以找到更好的,所以放弃了转正机会,回学校准备论文。准备论文期间就也没有投递简历。然后时间来到了5月中旬,这时春招基本也结束了,然后我开始投递简历,期间只是约到了几家下场面试。工资也只有6-7k,到现在我不知道该怎么办了。已经没有当初学习的心劲了,好累呀,但是又不知道该干什么去。在家就是打游戏,boss简历投一投。每天日重一次。26秋招都说是针对26届的人,25怎么办。我好绝望。要不要参加考公、考研、央国企这些的。有没有大佬可以帮帮我。为什么感觉别人找工作都是顺其自然的事情,我感觉自己每一步都在艰难追赶。八股文背了又忘背了又忘,我每次都花很长时间去理解他,可是现在感觉八股、项目都忘完了。真的已经没有力气再去学习了。图片是我的简历,有没有大哥可以指正一下,或者说我应该走哪条路,有点不想在找工作了。
码客明:太累了就休息一下兄弟,人生不会完蛋的
如果实习可以转正,你会不...
点赞 评论 收藏
分享
牛客38347925...:9,2学生暑期实习失利开始投小厂,给这群人整自信了
点赞 评论 收藏
分享
评论
1
3
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务