美文网首页
C++ 新特性

C++ 新特性

作者: hjm1fb | 来源:发表于2023-11-07 01:43 被阅读0次
  • constexpr
    C++ 11引入constexpr ,但有很多限制,比如不能用于set成员函数/不能有if-else for循环等语句/只能有一个return语句/除了构造函数修饰的成员函数返回值不能为void等。后面解除了这些限制
    C++17新支持了constexpr lambda表达式
    建议尽量多使用constexpr 以提高程序性能
    注意:constexpr修饰的函数只有赋值给constexpr变量(构造函数除外),才能确保为编译时运行
    举例:
#include <iostream>
using namespace std;
class Foo
{
public:
    constexpr explicit Foo(int i) : _i(i) {}
    
        constexpr int getValue() const
    {
        return _i;
    }

    constexpr int valuePlusOne() const
    {
        const_cast<Foo *>(this)->_i = _i + 1;
        return _i;
    }
    
private:
    int _i;
};

int main()
{
    printf("__cplusplus is %d \n", __cplusplus);
    constexpr Foo foo(1);// 编译时:
    printf("foo is %d", foo.getValue()); //运行时 第一行打印为1
    foo.valuePlusOne();//Run Time 
    printf("foo is %d", foo.getValue());//运行时 第二行打印为2
    constexpr int v = foo.getValue();// 编译时 说明constexpr修饰的函数只有赋值给constexpr变量(构造函数除外),才能确保为编译时运行
    printf("v is %d", v);// 编译时 第三行输出为1
    static_assert(foo.getValue() == 1, "a");// 无报错
}

相关文章

  • C++新特性

    异常处理 运行时刻类型识别(RTTI) 名字空间 内置布尔数据类型 新的强制转换方式

  • C++ 新特性

    内联函数(inline) 内联函数其实是声明,只能放在头文件里,不能放在实现(定义)里。类在头文件里声明函数时直接...

  • C++ 新特性

    lamda C/C++:lambda_无聊科技-CSDN博客[https://blog.csdn.net/qq_2...

  • c++新特性

    一元作用域解析运算符 局部变量名与全局变量名相同时,可使用 ::访问全局变量,::这个运算符被称为一元作用域解析运...

  • C++新特性

    1.auto类型推导 编译器在编译期间通过初始值推导出变量的类型,auto定义的变量必须有初始值。 ❗ 编译器推导...

  • C++ 11 语言特性介绍

    C++ 11 语言特性 新特性说明nullptr,autoNAfor-each区间迭代shared_ptr uni...

  • c语言和c++的纠葛,你需要知道哦

    C++ 读作“C加加”,是“C Plus Plus”的简称。顾名思义,C++是在C语言的基础上增加新特性,玩出了新...

  • 学C++之前要先学C语言吗?

    C++ 读作“C加加”,是“C Plus Plus”的简称。顾名思义,C++是在C语言的基础上增加新特性,玩出了新...

  • C++从入门到大神的过程!

    C++ 读作”C加加“,是”C Plus Plus“的简称。顾名思义,C++是在C语言的基础上增加新特性,玩出了新...

  • 学C++之前要先学C语言吗?程序员反问:你有胆子直接学C++?

    C++ 读作“C加加”,是“C Plus Plus”的简称。顾名思义,C++是在C语言的基础上增加新特性,玩出了新...

网友评论

      本文标题:C++ 新特性

      本文链接:https://www.haomeiwen.com/subject/hpgxwdtx.html