当前位置: 首页 > article >正文

C++11特性简述

Lambda表达式

        捕获列表+参数列表(没有参数可以省略)+返回值+函数体

        类成员函数中定义lambda表达式可以捕获this指针,但是没有捕获函数参数的时候捕获this也不能访问函数参数

        自动推导返回值:必须是唯一形式的返回值类型才能推导出来,也就是不能出现二义性,比如返回列表时,由于数组和链表都可以以列表的形式返回,所以无法自动推导出返回值类型,这时就需要自己手动声明一下返回值类型 "->返回值类型"

foreach和lambda表达式的联系

        foreach 和 lambda 的联系在于,lambda 经常作为回调函数在 foreach 循环中使用。通过将 lambda 表达式与 foreach 结合使用,可以在循环中直接处理每一个元素,简化代码并使其更具表达力。

#include <iostream>
#include <vector>
#include <algorithm>

int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};

    // 使用 std::for_each 和 lambda 表达式
    std::for_each(vec.begin(), vec.end(), [](int& num) {
        num *= 2;  // 对每个元素执行操作
    });

    // 输出修改后的容器
    for (auto num : vec) {
        std::cout << num << " ";  // 输出:2 4 6 8 10
    }

    return 0;
}

final关键字

修饰类:类不能被继承

修饰虚函数:虚函数不能被重写

(虚函数表是编译阶段生成的,所有对象共享一个虚函数表)

右值引用

匿名对象:只存在在当前行

使用右值引用引用右值后,右值的生命周期延长了

右值引用是左值,左值引用也是左值

引用折叠:当在模版中使用自动推导时,如果是auto&&类型,传入左值就是左值引用,传入右值就是右值引用

C/C++中空指针的区别 (nullptr_t类型的引入)

        nullptr和NULL和0和(void*)0

        C语言中void*0可以隐式转换成其他类型的指针,C++中不可以,在C++11之前,通常使用NULL或者0代表空指针,但是当0或者NULL作为函数参数时可能会造成歧义,因为编译器无法分辨到底是指针类型还是整数类型,所以C++11引入了nullptr_t类型,此类型的唯一值是nullptr,代表空指针,避免了二义性。

void display(int value) {
    cout << "Integer: " << value << endl;
}

void display(char* str) {
    if (str)
        cout << "String: " << str << endl;
    else
        cout << "Null String" << endl;
}
display(0);  // 输出 "Integer: 0"
display(NULL);  // 有可能引发歧义
display(nullptr);  // 输出 "Null String"

 在模版编程中,nullptr可以帮助我们为了处理类型为空指针时的模版特化

template<typename T>
void debug(T ptr) {
    cout << "General template" << endl;
}

template<>
void debug(nullptr_t) {
    cout << "Specialized template for nullptr" << endl;
}

debug("Hello");  // 输出 "General template"
debug(nullptr);  // 输出 "Specialized template for nullptr"

判断程序是C还是C++

#ifdef __cplusplus
printf("C++");
#else
printf("C");
#endif

http://www.kler.cn/a/508008.html

相关文章:

  • 【MySQL】数据库约束和多表查询
  • DNS介绍与部署-Day 01
  • 建造者模式(或者称为生成器(构建器)模式)
  • Ondo SIP Server
  • HarmonyOS Next 实现登录注册页面(ARKTS) 并使用Springboot作为后端提供接口
  • RK3568平台(音频篇)lineout无声调试
  • 恒生科技OK吗?低频量化日报(明日涨停预测,指数数据,可转债上市价格预测)...
  • 2025.1.15——八、ua注入
  • SpringBoot入门实现简单增删改查
  • 基于springboot的快速集成多数据源的启动器
  • 数据结构-栈队列OJ题
  • C语言的循环实现
  • Spring6.0新特性-HTTP接口:使用@HttpExchange实现更优雅的Http客户端
  • 6G移动通信技术:相较于5G的改进点与技术实现
  • 【Python】函数 超全总结及练习案例
  • PHP:写接口与接口的调用(完整版,封装公共方法)
  • 【Docker系列】SpringBoot 项目如何动态指定配置文件
  • 国家统计局湖北调查总队副总队长张小青一行调研珈和科技农业遥感调查智能化算法
  • 环境变量设置之后,pycharm 中程序获取不生效?
  • MES设备日志采集工具
  • Git的基本命令以及其原理(公司小白学习)
  • springboot指定外置配置文件(没有docker)
  • 互联网黑话大全
  • 【Flink系列】10. Flink SQL
  • Zabbix实战第一步:完成在Ubuntu Server的安装部署
  • Docker部署MySQL 5.7:持久化数据的实战技巧