const和constexpr的区别?

两者之间的区别 if constexpr if是表达式是否总是可以在编译时执行。在您的示例中,您使用的是一个模板参数,所以您编写哪一个并不重要。如果您有以下代码,可以注意到差异:

对于上述代码,编写 如果constexpr 不会起作用。可以使用运行时值调用函数。

同样,这并不重要,因为这两个代码路径都是有效的。当使用带有常量值的函数时,通常的编译器优化应该开始。

真正的兴趣 如果康斯特雷普 只有一个路径有效时:

如果t是int,则代码路径 *t 是无效的,因为您不能取消对int的引用。但是,因为一个int使用 如果康斯特雷普 而不是 if ,如果代码依赖于模板参数,则错误路径中的代码只需要在语法上正确。

在搜索准则时,编译器已经要求:使用 如果康斯特雷普 当其中一个代码路径无效时。使用 如果 取决于参数。

对于在编译时可以使用两个有效路径计算if条件的情况,请使用 如果康斯特雷普 要要求即使在调试版本中也对其进行优化,请使用 如果 如果您想在调试版本中逐步完成它。

如果走极端,表达式可能变得过于复杂,编译器无法在生产构建中对其进行优化,在这种情况下 如果康斯特雷普 在这条热门的道路上可能会再次变得有趣。就我个人而言,我还没有遇到这种情况,但是我没有用那么多。

}

文字:数字、字符、字符串等不能更改的值。 单引号中的是文字字符,双引号中的是文字字符。

文字值类型(literal type )算术类型、引用、指针等。

常数表达式(const experssion ):)1)值不变,)2)编译时生成计算结果的表达式。 文字是常量表达式,用常量表达式初始化的const对象也是常量表达式。

对象(或表达式)是否为常量表达式取决于其数据类型和初始值。

C 11新标准将变量声明为constexpr类型,以便编译器可以验证变量是否为常量表达式。

声明为constexpr的变量必须是常量,必须用常量表达式初始化。

应遵循的规则:函数的返回类型和所有参数的类型都是文字值类型,必须存在于函数主体中,只有一个return语句。

constexpr函数可以包含其他语句,除非在运行时执行任何操作。 例如,空语句、类型别名、using声明等)

constexpr函数隐式指定为内联函数。

a为常数式时,fun(a )为常数式。 如果a不是常数表达式,则fun(a )是常规函数。

如果constexpr函数是常量表达式,则可用于初始化constexpr变量。

),但只有0、nullptr和固定地址中的对象是用constexpr声明的指针的初始值。 因为是常数表达式。 (常数表达式定义)2)。

}

以上所述就是小编给大家介绍的《c++ constexpr const char * vs constexpr const char []》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 的支持!

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请。

}

我要回帖

更多关于 derive与originate的区别 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信