C++14 我应该多久使用一次 constexpr?

问题描述 投票:0回答:2

我一直在读一本关于 C++14/11 的书。我刚刚读完关于

constexpr
关键字的章节。我知道它的用途,但我应该多久使用一次
constexpr
?我是否应该在我知道永远不会用于创建
contstexpr
对象的类的代码中使用它? (以防万一,因为它不需要我花任何钱,对吧?)

c++ c++14 constexpr
2个回答
8
投票

C++14 我应该多久使用一次 constexpr?

Scott Meyer Effective Modern C++ 的第 15 项(尽可能使用 constexpr)中有广泛的讨论。

本项目的概述是,应尽可能使用

constexpr
,因为
constexpr
函数和对象比非
constexpr
函数和对象可以在更广泛的上下文中使用。

然而,在同一篇文章中,作者提到了过度使用

constexpr
的警告。也就是说,如果您决定将某个对象或函数限定为
constexpr
,您的客户将被允许在
constexpr
内容中使用它。但是,如果您后来决定此代码不能是
constexpr
并删除
constexpr
,这可能会导致您的代码无法编译,包括这会给您的客户带来的副作用。

引用原文:

“尽可能使用 constexpr”是指您愿意对其施加于对象和对象的约束做出长期承诺 您将其应用到的功能。


0
投票

Google 的 C++ 风格指南 建议:

使用 constexpr 指定真正的常量以及支持其定义的函数。 consteval 可用于不得在运行时调用的代码。避免复杂化函数定义以使其能够与 constexpr 一起使用。不要使用 constexpr 或 consteval 强制内联。

需要注意的是,如果没有

static
关键字,在局部变量上使用
constexpr
可能会导致大型数组出现一些性能问题。它们可能在运行时初始化,而不是将它们作为数据存储在可执行文件中。 constexpr
并不
暗示static
,只是
const

一份名为

Don’t constexpr All The Things 的白皮书提到了更多缺点,包括将函数标记为 constexpr

 所需的复杂规则集。

一种务实的方法可能是将

constexpr

 关键字的使用限制为仅编译时间函数和支持这些函数的变量声明。将编译时函数中未使用的变量标记为 
constexpr
 而不是 
const
 的用处有限,除非可以证明编译器将输出更好的汇编语言。

© www.soinside.com 2019 - 2024. All rights reserved.