为了账号安全,请及时绑定邮箱和手机立即绑定

静态ConstVS#定义

静态ConstVS#定义

C++ C
jeck猫 2019-07-08 16:20:14
静态ConstVS#定义用它更好吗?static const瓦尔斯#define预处理器?或者这取决于背景?每种方法的优缺点是什么?
查看完整描述

3 回答

?
德玛西亚99

TA贡献1770条经验 获得超3个赞

就我个人而言,我讨厌预处理器,所以我总是和康斯特一起去。

#Definition的主要优点是它不需要在程序中存储内存,因为它实际上只是将一些文本替换为一个文字值。它还具有没有类型的优点,因此可以在不生成警告的情况下用于任何整数值。

“Const”的优点是它们可以限定作用域,并且可以在需要传递指向对象的指针的情况下使用它们。

不过,我不知道你对“静态”部分到底做了些什么。如果是全局声明,我会将它放在一个非命名空间中,而不是使用静态名称空间。例如

namespace {
   unsigned const seconds_per_minute = 60;};int main (int argc; char *argv[]) {...}


查看完整回答
反对 回复 2019-07-08
?
长风秋雁

TA贡献1757条经验 获得超7个赞

如果这是一个C+问题并提到#define作为另一种选择,它是关于“全局”(即文件范围)常量,而不是关于类成员的。当涉及到C+中的这些常量时static const是多余的。在C+中const默认情况下有内部链接,没有必要声明它们static..所以这真的是关于constv.V.#define.

最后,在C+中const更好。至少因为这些常量是类型和作用域的。根本没有理由喜欢#define过关const除了少数例外。

字符串常量BTW就是这种异常的一个例子。带着#defined字符串常量可以使用C/C+编译器的编译时级联特性,如

#define OUT_NAME "output"#define LOG_EXT ".log"#define TEXT_EXT ".txt"const char *const log_file_name = OUT_NAME LOG_EXT;
const char *const text_file_name = OUT_NAME TEXT_EXT;

又一次,以防万一,当有人提到static const作为替代#define,这通常意味着他们谈论的是C,而不是C+。我想知道这个问题是否有适当的标记.。


查看完整回答
反对 回复 2019-07-08
  • 3 回答
  • 0 关注
  • 601 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信