首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么拥有多行constexpr功能是不正确的?

拥有多行constexpr功能是不正确的,因为constexpr在C++编程语言中是用于定义编译时常量的,它要求所有的代码都必须在编译时就能确定其值。这意味着constexpr函数或变量的计算必须在编译时完成,而不能在运行时进行。

如果允许多行constexpr功能,那么就可能会导致编译时间的增加,因为编译器需要处理更多的代码。此外,多行constexpr功能也可能会使代码更加难以理解和维护,因为它将使得编译时计算的逻辑变得更加复杂。

因此,为了确保代码的可读性和可维护性,以及避免编译时间的增加,C++编程语言规定constexpr函数或变量只能包含一行代码。如果需要实现更复杂的编译时计算,可以考虑使用模板元编程等技术。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

在“古董级” 诺基亚功能机上跑Linux怎样画风?表示想拥有一个

上图使用了诺基亚 168x 系列手机外壳「Notkia」Linux 手机。...Notkia 目前所使用外壳,诺基亚拥有其设计专利,不过此专利将于 2023 年 6 月 23 日到期。...作者表示,专利到期后他们就会根据这个设计重新生产全新塑料外壳,当然前提筹款目标能如愿达成。...▲ 成功运行 Debian 发行版 ▲ 和原版诺基亚 1680 对比,左边原版,右边「Notkia」 「Notkia」主板图如下: 对于这个 “极客” 项目,作者表示自己创造初衷是因为现代智能手机对隐私和...就在今年,他意外地发现了诺基亚 168x 系列手机,并且在查看其 PCB 照片后,发现它拥有巨大空间,作者认为这可以大有作为,于是就有了现在「Notkia」。

42520

拥有更多回头客?为什么前十分钟至关重要

作为一个移动开发者,你拥有的最强大工具之一就是数据。以正确方式利用游戏数据为识别问题、优化性能、为玩家提供价值以及最终拓展业务提供了难以置信机会。...Google Play 游戏平均玩家留存率 留存率安装关键性能指标之一,同时还有买方转换和每次安装平均收入。在很多方面,保留主要指标,因为如果你能留住你新玩家,你总能弄清楚如何赚钱**。...然而,这就是前十分钟,最有趣模式可见。 第一个十分钟至关重要 这个图表放大到前10分钟,这是我们可以看到出现了非常明显不同模式。 ?...前五到十分钟至关重要,它们改变第二天留存率 这些顶级游戏比同等表现较差游戏成功保留了两倍用户。...优化游戏前十分钟一大好处,你可以快速迭代实验变化,并在几天内从 A/B 测试中得到结果。 开始增加你应用留存率 游戏前几分钟应用生命周期中关键时刻。

60320

constexpr和常量表达式

一个constexpr指针初始值必须nullptr或者0,或者存储于某个固定地址中对象(如全局变量、静态变量等)。...()一个constexpr函数时,才是常量表达式,否则语句错误 constexpr指针 需要注意,与const关键字不同,一个指针被定义为constexpr,关键字仅对指针有效,与指针所指对象无关...p 指针p和q类型相差甚远,p一个指向常量指针,而q一个常量指针,其中关键在于constexpr把它所定义对象置为了顶层const。...否则,constexpr构造函数就必须既符合构造函数要求(意味着不能包含返回语句),又符合constexpr函数要求(意味着它能拥有的唯一可执行语句就是返回语句)。...本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

35810

《Effective Modern C++》读书笔记

; 当存在std::initializer_list构造函数时,即使构造代码不正确,编译器也不会转而使用其他构造函数来构造(即使其他构造函数更加match),而是报错。...条款15: 尽可能地使用constexpr 所有的constexpr对象都是常量,但不是所有的const对象都是constexpr。如果确定需要一个编译时期常量,那么得用constexpr。...当你着手代码需要用到编译时期常量时,可以使用constexpr函数,如果你给constexpr函数传递一些编译时期可知参数(这些参数来源于上下文),那么这个constexpr函数很可能会在编译时期被执行...其实就是gcc编译器在编译时期就把constexpr int result = times(a, b);计算了。(然而有些诡异,times仅仅循环100W,就花了一秒。)...总的来说就是,constexpr使得本来在运行期执行工作,可以提前到编译期,只要你加上constexpr声明即可。

1.8K20

c++ 常量表达式_c语言所有函数

大家好,又见面了,我你们朋友全栈君。 constexpr修饰函数。 普通函数/类成员函数。 1.函数必须要有返回值,并且return返回表达式必须常量表达式。...* b; return c - (a + b); } 因为func1()一个常量表达式函数,在函数体内部不允许出现非常量表达式以外操作,因此函数体内部for循环一个非法操作。...C++11语法中,constexpr可以修饰模板函数,但由于模板中类型不确定性,因此模板函数实例化后函数是否符合常量表达式函数要求也是不确定。...如果constexpr修饰模板函数实例化结果不满足常量表达式函数要求,则constexpr会被自动忽略,即该函数就等同于一个普通函数。...本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

48230

C++那些事之string_view

C++那些事之string_view 0.问题 string_view为c++17之后出现,其实就是leveldb中slice,其目的在于解决内存拷贝、高效substr。...但是,也引入了指针与引用问题,由于string_view不拥有指向内容所有权,对比于Rust,仅仅是借用,如果拥有内容对象提前释放,便会出现悬挂引用问题。...像Rust在编译时会分析变量生命周期,保证借用资源在使用时不会释放。然而C++没有检查,需要人工保证。...1.内部实现 string_view一个basic_string_view类型,可以看到_Traits采用默认char_traits,这个很重要,后面的一些函数都采用char_traits一些成员函数执行核心操作...char*string_view字面量: constexpr basic_string_view operator "" sv( const char *str, size_t

63210

c++ 常量表达式_c++符号常量

大家好,又见面了,我你们朋友全栈君。 常量表达式主要是允许一些计算发生在编译时,即发生在代码编译阶段而不是代码运行阶段。...使用constexpr,你可以创建一个编译时函数: constexpr int getConst() { return 3; } void test07() { int arr...只能一个常量表达式 //函数中只能有一条return语句,在linux下编译失败,在vs2017上编译通过 constexpr int getconst() { constexpr int i =...// 必须常量表达式 constexpr int foundmonth = PRCfound.GetMonth();// vs2017下失败了,linux下成功 cout << foundmonth...本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

27250

C++之constexpr详解

大家好,又见面了,我你们朋友全栈君。 constexpr表达式指值不会改变并且在编译过程就能得到计算结果表达式。...+ 1; // mf + 1常量表达式 constexpr int sz = size(); //之后当size一个constexpr函数时才是一条正确声明语句 指针和constexpr 必须明确一点...const int*p = nullptr; //p一个指向整形常量指针 constexpr int* q = nullptr; //q一个指向整数常量指针 p一个指向常量指针...,q一个常量指针,其中关键在于constexpr把它所定义对象置为了顶层const。...constexpr函数 constexp在c++17中使用 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

52720

C++那些事之SFINAE

默认情况下提供最佳功能RTTI(Run-time type information)。不仅RTTI并不总是可用,而且它还提供给您不仅仅是操作对象的当前类型。...您可能还想知道为什么它不能与继承一起使用。C ++中继承和动态多态性一个在运行时可用概念,换句话说,就是编译器将不会拥有且无法猜测数据!...constexpr c++ 11还提供了一种执行编译时计算新方法! 新关键字constexpr编译器一个提示,这意味着这个表达式常量,可以在编译时直接求值。...毕竟我们在用c++编程,而不是OCaml lambda (2)函数爱好者功能 c++ 11介绍了lambda。...你已经拥有了所有你需要武器,现在开始与c++战斗吧! 最后! ! !我们有一个工作有效,我们可以使用它序列化!

2.1K20

c++中常量表达式_定义字符串常量

大家好,又见面了,我你们朋友全栈君。 C++中const关键字可以声明运行时常量,但有的时候需要编译时常量。 例如定义数组需要编译时常量。...3; } int a[size()] = { 0 }; 常量表达式一个函数,该函数具有以下限制: 函数中只能有一条return语句 函数必须有返回值 在使用前必须定义 return返回语句表达式中不能使用非常量表达式函数...只能一个常量表达式 一个constexpr函数,只允许包含一行可执行代码,但允许包含typedef、 using 指令、静态断言等。...如果将一个变量或成员函数标记为constexpr,则同样它是const。但相反并不成立,一个const变量或函数,并不是constexpr。...本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

50020

expr_const在函数前与函数后区别

三、constexpr函数 constexpr函数指能用于常量表达式函数。定义constexpr函数有几项约定: 函数返回值类型及所有的类型都得字面值类型。...new_sz函数返回常量表达式,所以可以用new_sz函数初始化constexpr类型变量foo。...一个constexpr指针初始值必须nullptr或者0,或者存储在某个固定地址中对象。 函数体内定义变量一般来说并非存放在固定地址中,因此constexpr指针不能指向这样变量。...注意,函数返回值必须字面值类型,但可以不是一个常量。 和其他类不同,字面值类型类可能含有constexpr函数成员。这样成员必须符合constexpr函数所有要求,它们隐式const。...本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

73530

C++中变量声明与定义规则

其中声明规定了变量类型和名字,定义除此功能外还会申请存储空间并可能为变量赋一个初始值。...C++98中auto用法(C++11已废弃) C++98 auto用于声明变量为自动变量(拥有自动生命周期),C++11已经删除了该用法,取而代之“变量自动类型推断方法”。...Tips:尽管指针和引用都能被定义成constexpr,但它们初始值却受到严格限制。一个constexpr指针初始值必须nullptr、0或者存储于某个固定地址中对象。...2. constexpr对指针限制 在constexpr声明中定义了一个指针,限定符constexpr仅对指针有效,与指针所指对象无关: const int *pi1 = nullptr;...// 底层const: pi1指向整型常量普通指针 constexpr int *pi2 = nullptr; // 顶层const: pi2指向整型常量指针 我们也可以让constexpr指针指向常量

2.2K10

c++常量和常量表达式

大家好,又见面了,我你们朋友全栈君。...字面值和constexpr 常量表达式:字面值常量表达式,用常量表达式初始化const对象也是常量表达式 const int ci = 20;//ci常量表达式 const int cii = ci...+ 90;//cii常量表达式 int iv = 30;//iv不是常量表达式 声明为constexpr变量一定是常量,而且必须用常量表达式初始化 constexpr int cif = 23;...constexpr声明指针,只对指针有效,与指针指向对象无关 constexpr int cvi(12);//必须定义到函数体外部才能被cip使用 constexpr const int * cip...本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

51820

现代C++之SFINAE

默认情况下提供最佳功能RTTI(Run-time type information)。不仅RTTI并不总是可用,而且它还提供给您不仅仅是操作对象的当前类型。...您可能还想知道为什么它不能与继承一起使用。C ++中继承和动态多态性一个在运行时可用概念,换句话说,就是编译器将不会拥有且无法猜测数据!...constexpr c++ 11还提供了一种执行编译时计算新方法! 新关键字constexpr编译器一个提示,这意味着这个表达式常量,可以在编译时直接求值。...毕竟我们在用c++编程,而不是OCaml lambda (2)函数爱好者功能 c++ 11介绍了lambda。...你已经拥有了所有你需要武器,现在开始与c++战斗吧! 最后! ! !我们有一个工作有效,我们可以使用它序列化!

2.9K20

性能优化利器之constexpr

今天,聊聊在升级过程中一个比较重要优化点-编译期优化。 概述 说明符constexpr自C++11引入,我相信很多人跟我一样,在第一次接触这个时候,会很容易和const混淆。...前面提到了constexpr在编译阶段进行求值,那么也就是说在程序运行之前,就已经计算完成,这种无疑大大提升了程序运行效率。...因此提升运行效率就是C++11引入constexpr说明符目的,也就是说能在编译阶段做事情就绝不放在运行期做。...自C++17起,引入了if constexpr语句,在本节中,将借助SFINAE 和 std::enable_if来实现一个简单Square功能,最后借助if constexpr对代码进行优化(如果对...if (true) { return t * t; } else { return t.value * t.value; } } 这样就能很清楚知道为什么编译失败了

25110

NUKE 13 mac(电影特效合成软件)v13.2v4

NUKE 13一款功能强大电影特效合成软件。Nuke拥有超过200个创意节点,提供您处理数字合成各种挑战所需一切。这包括行业标准键控器,旋光仪,矢量绘图工具,颜色校正等等。...NUKE 13 mac图片NUKE mac 13新增功能Bug修复• ID 372721 - 查看带有 Crop 和 VectorBlur 上游 CornerPin 节点导致 Nuke 崩溃。...• ID 429243 - 首选项:路径替换表未按预期扩展以容纳多行。• ID 429245 - 首选项:在首选项填充表行中路径替换中错误地使用/ (斜杠)或空格,导致 UI 无法使用。...• ID 487796 - 仅限 Windows:Nuke Indie 项目文件 ( .hroxind ) 包含不正确注册表值。...• ID 495347 - 读/写:VectorDistort 节点上游动画变换节点导致第一帧在命令行和与 Fame Server 交互会话中渲染不正确

3.4K20

常量表达式函数

大家好,又见面了,我你们朋友全栈君。 我们可以在函数返回类型前加入关键字constexpr来使其成为常量表达式函数,但并非所有的函数都有资格成为常量表达式函数。...事实上,常量表达式函数要求非常严格,总结如下: 函数体只有单一return返回语句。 函数必须返回值,不能void函数。 在使用前必须已有定义。...return返回语句表达式中不能使用非常量表达式函数、全局数据,且必须常量表达式。...return 5; } 2.函数必须返回值,不能void函数 constexpr void GetConstTwo() { //函数必须有返回值,因为无法获得常量常量表达式不被认可 } 3....本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

37110
领券