首页 > 解决方案 > `constexpr` 和 `#define` 之间的区别

问题描述

因此,我阅读了有关 constexpr 和 const 之间有什么区别的有趣答案,但我很好奇 #define 和 constexpr 之间的区别是什么?我觉得 constexpr 只是一个可以选择类型的#define。

标签: c++macrosconstexpr

解决方案


使用定义的语句#define称为宏。宏被用于多种用途。

  1. 我们可以使用它们有条件地编译代码段。
#ifdef ONE
int AddOne(int x) { return x + 1; }

#else
int AddTwo(int x) { return x + 2; }

#endif
  1. 当我们不需要将常量存储在变量中时。
#define MAX_BOUND 1000
#define MIN_BOUND 10
  1. 对于我们可以使用宏来更改数据类型的地方。
#ifdef USE_WIDE_CHAR
#define TEXT(...)    L##__VA_ARGS__

#else
#define TEXT(...)    __VA_ARGS__

#endif
  1. 根据条件定义关键字。
#ifdef BUILD_DLL
#define DLL_API __declspec(dllexport)

#else
#define DLL_API __declspec(dllimport)

#endif

由于它们是在实际编译阶段之前解决的,我们可以根据某些因素(平台、构建系统、架构等)对源代码进行小幅改进。

constexpr本质上表明可以在编译时解析变量或函数,但不能保证。

我觉得 constexpr 只是一个可以选择类型的#define。

它并不完全正确。正如我之前所说,因为它们是在编译阶段之前解决的,所以我们可以利用它。唯一常见的用途是编译器可以轻松替换为优化的常量值。除此之外,用例是不同的。


推荐阅读