C/C++-建议使用const-static还是#define
C/C++ - Is it Recommended to use const static or #define
可能重复:
C 中的"static const"与"#define">
我的第一个想法是这是隐含的,但有没有理由使用const
而不是#define
?
如果你设置了一个全局变量,你为什么要改变它,难道不想在全局范围内保护它吗?
Const通常取代#define
#define
是一个预处理器宏,可以执行文本替换。你可以用它来定义一个常量或宏,或者做其他各种事情。
const是定义编译时常量的一种类型安全的方法
这两种机制在编译过程中出现在不同的时间,但总的来说,创建const是为了纠正#define
的问题。
我很少看到人们做类似的事情
#define CONSTINT const int
但这是合法的。
const
仅与在运行时传递的变量相关,以确保子例程不会更改它们。#define
是一个预处理器compiletime指令,它用您定义的内容替换您定义的任何内容。因此,它们有不同的用途。
编辑这是对您最初的问题的回答,即您是否将const
与define
一起使用。。。现在你编辑了这个问题来问一些不同的问题,这真的没有意义。
#define
没有定义变量,所以无论如何都不能更改它,所以这个问题没有意义。
这是不可能的:
#define FOO 99
int main()
{
FOO = 98;
}
因为预处理器将宏FOO
替换为替换的99
,所以编译器看到以下代码:
int main()
{
99 = 98;
}
显然这是无稽之谈。你不能赋值给一个文字,它不是一个变量(无论是否为常量(,它只是一个值。
相关文章:
- C++ - 确定 const char* 是指向字符串文本对象还是动态对象
- 你能初始化unique_ptrs "static const vectors"吗?(C++17 与 GCC 7.3)
- 不可变的全局对象应该声明为"const my_result_t BLAH"还是"extern const my_result_t BLAH;"?
- 明确定义'static const variable in a struct'对C++ 11 及以上有什么影响吗?
- 如何在班级成员中初始"static const char * []"?[C++]
- constexpr static std::array<const char *,5> 无法使用 MSVC2013 进行编译
- "static const char array"可以在 C 语言上包含变量成员吗
- 继承自 std::true_type vs static constexpr const bool 成员
- 使用 #defines、枚举值还是 const int 来定义常量值更好
- 在方法/函数中使用"static const std::string"还是只使用"cons
- 如何将static const struct从类中使用作为真实的const-即阵列大小
- 类方法与static和const的交互
- static const std::map<string, int> vs if-elseif
- 为什么static void method()const是编译错误
- 抛出错误的是static还是const
- 如何在头文件中定义const-static std::string
- const/static关键字是否在变量声明中传播
- 所有lambda声明都应该是const-static
- const-static auto lambda与引用捕获一起使用
- C/C++-建议使用const-static还是#define