gpt4 book ai didi

c++11 - constexpr 与 Define 的用例

转载 作者:行者123 更新时间:2023-12-02 23:37:23 25 4
gpt4 key购买 nike

我使用 C++ 已经有一段时间了,但从未真正深入了解过细节。最近发现了 constexpr,我认为它在微优化方面具有巨大的潜力,尽管我很难了解如何正确使用它。考虑以下因素:

#define squared(n) (n * n)

constexpr int squared(int n) {
return n * n;
}

它们都输出相同的内容,但我确信它们非常不同。据我所知,define 指令会在编译时被替换,因此任何 squared(n) 实例都会变成 (n * n)

显然这是一个简单的例子,但我想知道constexpr在哪里发挥作用?它是否意味着用于比简单文本替换更复杂的操作?使用它的主要优点是什么?它与普通表达式有何不同?

最佳答案

它们根本不输出相同的内容。考虑这个调用:

squared(x++);

或者这个类:

struct Number
{
float value() const;
float squared() const;
// ... other members
};

如果 squared 是一个类似函数的宏,那么这两种方法都会严重失败。

所以,一如既往:不要使用该语言的其他功能也可以工作的宏。您可以说 constexpr 只是允许我们在更少的地方使用宏 - 这是一件好事。

还有一个非常重要的区别:constexpr 函数可以(而且实际上经常是)递归的。类似函数的宏不能。

关于c++11 - constexpr 与 Define 的用例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26583700/

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