C++ C/C++;-建议使用const static还是#define

C++ C/C++;-建议使用const static还是#define,c++,c,global-variables,C++,C,Global Variables,可能重复: 我的第一个想法是,这是隐含的,但是有没有理由使用const而不是#define 如果您设置了一个全局变量,为什么要更改它,并且不想全局保护它呢?Const通常会替换\define #define是一个预处理器宏,可以执行文本替换。您可以使用它来定义常量或宏,或执行各种其他操作 const是定义编译时常量的一种类型安全的方法 这两种机制在编译过程中的不同时间出现,但一般来说,创建const是为了纠正#define的问题 我很少看到有人这样做 #define CONSTINT con

可能重复:

我的第一个想法是,这是隐含的,但是有没有理由使用
const
而不是
#define


如果您设置了一个全局变量,为什么要更改它,并且不想全局保护它呢?

Const通常会替换
\define

#define
是一个预处理器宏,可以执行文本替换。您可以使用它来定义常量或宏,或执行各种其他操作

const是定义编译时常量的一种类型安全的方法

这两种机制在编译过程中的不同时间出现,但一般来说,创建const是为了纠正
#define
的问题

我很少看到有人这样做

#define CONSTINT  const int

但是它是合法的。

const
仅与运行时传递的变量相关,以确保子例程无法更改它们
#define
是一个预处理器编译时指令,它用您定义的内容替换您定义的内容。因此,它们的用途不同。

编辑这是对您最初的问题的回答,即您是否将
常量
定义一起使用。。。现在你已经编辑了这个问题,问了一些不同的问题,这真的没有意义

#define
没有定义变量,因此您无法更改它,因此这个问题没有意义

这甚至是不可能的:

#define FOO 99

int main()
{
    FOO = 98;
}
因为预处理器用宏
FOO
代替替换的
99
,所以编译器会看到以下代码:

int main()
{
    99 = 98;
}

显然这是胡说八道。你不能给一个文字赋值,它不是一个变量(const或not),它只是一个值。

你能举一个你要问的定义的例子吗?用const加上#define是什么意思?为什么用const代替#define是个错误的问题。它应该是“为什么你要用C++定义而不是const?”,答案是“完全没有理由”,而且,对于这个问题,你应该区分C或C++。C++总是偏爱静态const,或者const to y*定义。在绝对必要时,C++只使用预处理器。另一方面,C将使用预处理器,因此需要一个例子来给出一个“正确”的答案。@ JoshPetitt,C必须使用预处理器更多,因为 const int <代码>不是有效的常量表达式,所以不能在C++中的许多地方使用。