可能重复:
static const vs #define
大家好,在C ++中,要定义一个在整个应用程序中使用的常量,你们通常的做法是什么?
#define WINDOWS_HEIGHT 1024
或
const int WINDOWS_HEIGHT = 1024;
感谢。
答案 0 :(得分:8)
如何使用enum
而不担心链接?
答案 1 :(得分:7)
根据使用情况,对一切事物的利弊:
template <typename T> void f(T t) { cout << ++t; }
将无法编译)template <typename T> void f(T)
在从不同枚举传递相同数值时获得不同的实例化,所有这些都与任何实际的f(int)实例化不同。#define X "x"
和一些客户端使用ala "pre" X "post"
,如果你想要或需要使X成为运行时可更改的变量而不是常量,那么你会遇到麻烦,而那个过渡是更容易从const char*
或const std::string
,因为他们已经强制用户合并连接操作。{ 1, 2 }
可用于初始化数组,或#define MICROSECONDS *1E-6
等(绝对不推荐这个!)< / LI>
__FILE__
和__LINE__
等特殊内容可以合并到宏替换作为一般规则,我使用consts并认为它们是一般用法的最专业选项(尽管其他人对这个老惰性程序员有一种简单的吸引力)。
答案 2 :(得分:3)
enum
效果很好。类似的东西:
struct Constants {
enum {
WindowHeight = 8,
WindowWidth = 8,
// ...
};
};
...
int h = Constants::WindowHeight;
答案 3 :(得分:3)
使用常数整数;它将显示在调试器中,#define值可能不会。或使用枚举;这也有效。
答案 4 :(得分:2)
我的投票是在一个只有一个翻译单元中定义的'namespace scope extern const'变量。命名空间范围'const'变量具有内部链接。
答案 5 :(得分:2)
我使用命名空间范围extern const。
答案 6 :(得分:1)
使用define只需用该值替换代码中的所有实例。 const全局变量几乎相同,只能显式定义类型。这几乎是唯一的区别。
就个人而言,我更喜欢使用定义,只是出于品味。
但是,我认为没有任何区别。