猿问

静态ConstVS#定义

静态ConstVS#定义

用它更好吗?static const瓦尔斯#define预处理器?或者这取决于背景?

每种方法的优缺点是什么?


jeck猫
浏览 602回答 3
3回答

德玛西亚99

就我个人而言,我讨厌预处理器,所以我总是和康斯特一起去。#Definition的主要优点是它不需要在程序中存储内存,因为它实际上只是将一些文本替换为一个文字值。它还具有没有类型的优点,因此可以在不生成警告的情况下用于任何整数值。“Const”的优点是它们可以限定作用域,并且可以在需要传递指向对象的指针的情况下使用它们。不过,我不知道你对“静态”部分到底做了些什么。如果是全局声明,我会将它放在一个非命名空间中,而不是使用静态名称空间。例如namespace {    unsigned const seconds_per_minute = 60;};int main (int argc; char *argv[]) {...}

长风秋雁

如果这是一个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+。我想知道这个问题是否有适当的标记.。
随时随地看视频慕课网APP
我要回答