您好所有,在C++中,定義整個應用程序中使用的常數,你是什麼人通常的做法?
#define WINDOWS_HEIGHT 1024
或
const int WINDOWS_HEIGHT = 1024;
感謝。
您好所有,在C++中,定義整個應用程序中使用的常數,你是什麼人通常的做法?
#define WINDOWS_HEIGHT 1024
或
const int WINDOWS_HEIGHT = 1024;
感謝。
利弊一切,取決於用途:
template <typename T> void f(T t) { cout << ++t; }
將不會編譯)template <typename T> void f(T)
從不同的枚舉中傳遞相同的數值時會得到不同的實例化,所有這些都與任何實際的f(int)實例不同。#define X "x"
和一些客戶使用阿拉"pre" X "post"
,你就麻煩了,如果你想要或需要做X運行時可改變的變量,而不是一個常數,而這種轉變是從const char*
容易或const std::string
,因爲它們已經強制用戶併入級聯操作。{ 1, 2 }
,或#define MICROSECONDS *1E-6
等(絕對不推薦這個!)__FILE__
和__LINE__
一些特殊的東西可以摻入宏替換作爲一般規則,我用consts並考慮將其用於一般用途最專業的選擇(儘管該有的都有了一個簡單呼籲這個老懶惰的程序員)。
我的投票是'namespace scope extern const'變量在一個ane中定義的只有一個翻譯單元。命名空間範圍'const'變量具有內部鏈接。
嗯,取決於。對於整型常量enum
效果很好。例如:
struct Constants {
enum {
WindowHeight = 8,
WindowWidth = 8,
// ...
};
};
...
int h = Constants::WindowHeight;
使用常量整數;它將顯示在調試器中#define值可能不存在的地方。或者使用枚舉;那也可以。
我使用命名空間範圍extern const。
使用define可以簡單地用您的代碼替換所有出現的值。常量全局變量幾乎相同,只有類型可以明確定義。這幾乎是唯一的區別。
就我個人而言,我寧願使用一個定義,只是出於品味。
但是,我認爲沒有什麼區別。
調試器將無法對宏執行任何操作。 – 2010-09-30 03:34:27
@Martin,這不一定是真的。 gdb支持[宏擴展](http://www.delorie。COM/GNU /文檔/ GDB/gdb_70.html)。 – 2010-09-30 03:37:41
參見[ static const vs #define ](http://stackoverflow.com/questions/1637332/static-const-vs-define)。 – 2010-09-30 03:41:08