是什麼static const
和const
之間的區別? 例如:
static const int a=5;
const int i=5;
它們之間有什麼區別嗎? 你什麼時候使用一個?
是什麼static const
和const
之間的區別? 例如:
static const int a=5;
const int i=5;
它們之間有什麼區別嗎? 你什麼時候使用一個?
區別在於聯動。
// At file scope
static const int a=5; // internal linkage
const int i=5; // external linkage
如果i
對象沒有定義它的轉換單元之外使用,你應該用static
符聲明。
這使得編譯器能夠(可能)執行進一步優化並通知讀者該對象不在其翻譯單元之外使用。
+1如果你還可以添加它的含義,如果這些聲明是在一個函數內,那將會很棒。 – Praetorian
你確定'const int i = 5;'有外部連接嗎?在C++中它不... –
@KerrekSB在文件範圍,是的。 *(C99,6.2.2p5)「如果對象的標識符的聲明具有文件範圍並且沒有存儲類說明符,則其鏈接是外部的。」* – ouah
static決定函數外的可見性或內部的變量生命期。所以它與const本身無關。
const意味着你沒有改變初始化後的值。
函數內部的靜態意味着變量將在函數結束之前和之後存在。
函數外部的靜態意味着標記爲靜態的符號範圍僅限於該.c文件,並且無法在其外部看到。
技術上(如果你想查看這個),static是一個存儲說明符,const是一個類型限定符。
簡單的解釋謝謝! – Alec
這取決於這些定義是否在函數內部。 以外的答案函數由上面的ouah給出。 內部函數效果是不同的,通過下面的例子說明:
#include <stdlib.h>
void my_function() {
const int foo = rand(); // Perfectly OK!
static const int bar = rand(); // Compile time error.
}
如果你想有一個局部變量是「真常,」你必須定義它不僅僅是「常量」,而是「靜常量」。
它爲我完美編譯......但我知道在這種情況下有一個靜態常量變量是愚蠢的。 – DrumM
@EtiennedeMartel「靜態是默認行爲」當然不是。無論給你什麼想法? –
相關:http://stackoverflow.com/questions/6381088/const-vs-static-const – halex
投票重新開放。 「重複」是問一個完全不同的問題,具體到內存使用情況。這個問題提出了一個關於差異的更一般的問題。 – rmaddy