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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值