哪種方法可以聲明一個字符串const更值得推薦?靜態全局變量V靜態全局類變量
- 是在文件範圍聲明全局變量。
- 將其聲明爲全局的類。
該變量將僅用於類成員函數中。我傾向於認爲2更好,因爲它只針對集體成員職能。
A.cpp
---------------------
static const std::string hello_str = "Hello";
void A::print()
{
std::cout << hello_str;
}
(OR)
A.h
---------------------
class A{
public:
static const std::string hello_str;
void print();
}
A.cpp
---------------------
const std::string A::hello_str = "Hello";
void A::print()
{
std::cout << A::hello_str;
}
編輯-1:
讓我說,串hello_str的內容可以更改。例如。每當他對文件進行更改時,該字符串都由開發人員手動更新。
在這種情況下,將變量初始化保存在函數中是否有意義? 用戶更新字符串可能並不明確。如果它被全局保存到文件(1)或類(2)中,則其他開發人員可以「識別」&修改此字符串。
鑑於上述用例,你還建議有一個函數返回字符串?或者我可以使用類級別的靜態變量(使用私有訪問說明符)?
我可以解釋「一方有效私密,另一方公開可見」。 - 我認爲兩者都是公開的。 「我贊成在班級內宣佈,但私人。」 - 理解這部分,只有成員func訪問它,而不是從主(其他類的成員函數) 「我發現這更容易維護在事件實現轉移。當然,如果cpp中的靜態是以某種方式外部實現可訪問,那麼你可能也想在類中聲明它是私有的,這樣其他人就無法訪問它。「 - 我可以解釋這個和/或提供一個例子嗎? –
@KingkongJnr這只是一個明顯的例子:在#1中,'static'可以被A.cpp中的任何內容訪問,而不是前面的內容。如果A.cpp只包含A類的定義,那麼它就是我所說的「有效的私人」。可見性和對靜態的訪問是* restricted *。 C程序員使用它的私有函數/數據是一種常見的方法。例如:'main()'無法訪問該靜態,除非主要在A.cpp中定義。 – justin
@KingkongJnr'print',聲明'private'和foo在這裏公開:'class A {\ n public:void foo(); \ n私人:\ n void print(); \ n};' – justin