gpt4 book ai didi

c++ - 什么时候应该在 C++11 中使用 constexpr 功能?

转载 作者:bug小助手 更新时间:2023-10-28 01:31:47 24 4
gpt4 key购买 nike

在我看来,拥有一个“总是返回 5 的函数”会破坏或淡化“调用函数”的含义。必须有一个原因,或者需要这种能力,否则它不会出现在 C++11 中。为什么会在那里?

// preprocessor.
#define MEANING_OF_LIFE 42

// constants:
const int MeaningOfLife = 42;

// constexpr-function:
constexpr int MeaningOfLife () { return 42; }

在我看来,如果我编写了一个返回文字值的函数,并且我进行了代码审查,那么有人会告诉我,我应该声明一个常量值而不是写 return 5。

最佳答案

假设它做了一些更复杂的事情。

constexpr int MeaningOfLife ( int a, int b ) { return a * b; }

const int meaningOfLife = MeaningOfLife( 6, 7 );

现在,您可以将某些东西评估为常数,同时保持良好的可读性,并允许比仅将常数设置为数字更复杂的处理。

它基本上为可维护性提供了很好的帮助,因为您正在做的事情变得更加明显。以 max( a, b ) 为例:

template< typename Type > constexpr Type max( Type a, Type b ) { return a < b ? b : a; }

这是一个非常简单的选择,但它确实意味着如果您使用常量值调用 max,它会在编译时而不是在运行时显式计算。

另一个很好的例子是 DegreesToRadians 函数。每个人都发现度数比弧度更容易阅读。虽然您可能知道 180 度是 3.14159265 (Pi) 的弧度,但它更清楚地写成如下:

const float oneeighty = DegreesToRadians( 180.0f );

这里有很多很好的信息:

http://en.cppreference.com/w/cpp/language/constexpr

关于c++ - 什么时候应该在 C++11 中使用 constexpr 功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4748083/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com