Ant*_*REL 16 c++ macros constexpr
所以我读了关于constexpr 和 const 之间有什么区别的有趣答案,但我很好奇 #define 和 constexpr 之间有什么区别?我觉得 constexpr 只是一个可以选择类型的#define。
小智 13
你说得很对。
#define(也称为“宏”)只是在实际编译器之前的预处理器阶段发生的文本替换。而且显然不是打字的。
constexpr另一方面,发生在实际解析期间。而且确实是打字的。不用说,只要有可能,使用constexpr都会更安全一些。
使用定义的语句#define称为宏。宏有多种用途。
#ifdef ONE
int AddOne(int x) { return x + 1; }
#else
int AddTwo(int x) { return x + 2; }
#endif
Run Code Online (Sandbox Code Playgroud)
#define MAX_BOUND 1000
#define MIN_BOUND 10
Run Code Online (Sandbox Code Playgroud)
#ifdef USE_WIDE_CHAR
#define TEXT(...) L##__VA_ARGS__
#else
#define TEXT(...) __VA_ARGS__
#endif
Run Code Online (Sandbox Code Playgroud)
#ifdef BUILD_DLL
#define DLL_API __declspec(dllexport)
#else
#define DLL_API __declspec(dllimport)
#endif
Run Code Online (Sandbox Code Playgroud)
由于它们在实际编译阶段之前就已解决,因此我们可以根据某些因素(平台、构建系统、架构等)对源代码进行一些小的改进。
constexpr本质上表明变量或函数可以在编译时解析,但不能保证。
我觉得 constexpr 只是一个可以选择类型的#define。
这并不完全正确。正如我之前所说,因为它们在编译阶段之前就已解决,所以我们可以利用它的一些优势。唯一常见的用途是常量值,编译器可以轻松地将其替换为优化。除此之外,用例也不同。
| 归档时间: |
|
| 查看次数: |
21009 次 |
| 最近记录: |