static修飾的變量和函數只能在定義它的cpp源文件中使用,如果在頭文件中定義,則需要注意
在頭文件中定義static變量和static函數:
變量
如果在頭文件中定義了static變量,那么,所有包含這個頭文件的源文件都會定義自己的static變量,而不是使用該頭文件中的static變量。這樣會造成其他包含此頭文件的源文件也能使用該變量的假象。
函數
源文件中定義的static函數只供源文件使用,而頭文件中的static函數則會供所有包含它的源文件使用,與static變量類似。
在頭文件中定義的被static修飾的函數,與未被static修飾的函數存在的區別是,static函數在內存中只維持一份,而普通函數每次調用都會維持一份拷貝。
在cpp源文件中定義static函數,需要將static函數放在前面,調用static函數的非static函數放在后面,否則會出現函數未聲明的情況。
總結
只有在源文件中使用static關鍵字,其修飾的變量或函數被其他文件調用時才會出現未聲明的情況。盡量避免在頭文件中使用static。