美文网首页
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++ 新特性

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