为什么constexpr不是所有函数的默认值?

z

放松了constexpr的规则后,似乎这些函数可以在任何地方使用。可以在常量(constexpr)和局部(可变)变量上调用它们。因此对我来说,这似乎只是编译器的提示(如内联)。我只是一直在各处编写它,如果编译器抱怨,请将其删除。因此,编译器似乎知道什么都可以在编译时求值。为什么不是默认行为,为什么我必须将任何内容标记为constexpr?

塞巴斯蒂安·雷德尔(Sebastian Redl)

constexpr是接口保证。这意味着您可以在常量表达式中使用该函数。

一旦人们可以在常量表达式中使用它们,他们就会使用。但是,如果您不打算那样使用函数怎么办?如果您以前有一个可能实现constexpr的简单实现,但是在以后的版本中您需要更改它(例如,因为现在需要添加日志输出),该怎么办?

如果删除constexpr标记,则常量表达式中的用法将在以前工作时停止编译,并且该函数的用户将不高兴。最好不要一开始就使用constexpr函数,这样您以后可以自由更改它。

但是,如果编译器自动使您的函数成为constexpr,则您别无选择。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么nullglob不是默认值?

为什么函数的默认值是1?

为什么constexpr不能只是默认值?

为什么默认的构造函数在这里不是constexpr?

为什么Groovy中的invokedynamic不是默认值?

为什么`ffmpeg`的`-hide_banner`不是默认值?

为什么`-fvisibility-inlines-hidden`不是默认值?

为什么需要“-人类可读”而不是默认值?

当对象的所有字段都设置为默认值时,为什么实例常量具有值?

为什么没有生成/插入默认值?

为什么Mockito verifyNoMoreInteractions的Scala默认值有问题

为什么在指定所有模板参数都具有默认值的模板类时需要<>?

为什么我可以使用默认的<=>而不是用户提供的默认值调用==?

为什么我的表单在页面加载后立即验证所有默认值(未触及的字段)?

为什么具有单个参数值的函数之后必须为每个参数指定默认值?

ObservedObject仅传递其默认值。不是其分配的值。为什么?

为什么需要默认值呢?

Spring Integration DSL Scatter-Gatherer:为什么 applySequence(true) 不是默认值?

为什么字符串类型的默认值是null而不是空字符串?

为什么$ params从配置文件中获取值,而不是从默认值中获取值?

SAS:为什么宏中的IN运算符不是默认值?

使用G1收集器时,为什么-XX:+ ExplicitGCInvokesConcurrent不是默认值?

为什么switch语句中不是默认值的每种情况都属于例外情况?

为什么 sys.stdout(在 python 中)没有恢复到默认值的默认方法

如何绘制特定属性而不是时间序列中所有属性的默认值

分解参数,为某些但不是所有字段提供默认值

使用BeautifulSoup获取所有表行,而不是默认值

为什么C ++不允许将函数参数用作默认值?

在C#中,如果未定义默认值,为什么还要调用this()构造函数?