2017-09-04 31 views
-4

難道最好使用全局變量如:使用全局變量還是幾個參數?

int bumNum; 
int extraNum; 
bool isIt; 

void setup() 
{ 
    std::cin >> bumNum; 
    std::cin >> extraNum; 
    isIt= false; 
} 

void anotherFunc() 
{ 
    //do something with the global variables 
} 

int main() 
{ 
    setup(); 
    anotherFunc(); 
    return 0; 
} 

或局部變量如:

void setup(int& bumNum, int& extraNum, bool& isIt) 
{ 
    std::cin >> bumNum; 
    std::cin >> extraNum; 
    isIt= false; 
} 

void anotherFunc(int& bumNum, int& extraNum, bool& isIt) 
{ 
    //do something with the global variables 
} 

int main() 
{ 
    int bumNum; 
    int extraNum; 
    bool isIt; 
    setup(bumNum, extraNum, isIt); 
    anotherFunc(); 
    return 0; 
} 

第一個選項是打字少相比其他選項。事情是,全局變量不是真的被認爲是朋友:/哦,並且在第二個選項中有更多的初始化發生。

+7

你真的要問這個?當然使用參數會更好,儘管您可能希望將它們包裝在結構或類中。並且「在第二個選項中發生了更多的初始化」 - 不,不存在.. –

+1

全局變量幾乎不可能是一個好主意。當然,每條規則都有例外,但是「不使用全局變量」的規則非常少,如果你需要打破這個規則,你最好知道該怎麼做,並且有一個非常好的理由。方便「不算)。 –

+0

@JesperJuhl因此,爲相同的結果輸入更多信息真的會更好嗎? :/ – Dip

回答

8

全局變量你介紹一個全球性的狀態,其本身具有的各種問題:

  • 問題併發(當您添加的多線程,你必須開始思考如何保護那些具有某種互斥)

  • 它不適合,作爲其

  • 隨着時間的推移,你增加這些變量的數目,它變得越來越混亂函數使用哪些變量,

只是僅舉幾例。

要回答你的問題 - 儘可能在全局狀態下使用參數。

+7

更不用說了; 「緊耦合」,「靜態初始化失敗」,「導致關閉崩潰的生命期問題」,「全局命名空間的污染」等等。 –

0

利用結構:

struct Foo 
{ 
    int bumNum = 0; 
    int extraNum = 0; 
    bool isIt = false; 
}; 

std::istream& operator >> (std::istream& is, Foo& foo) 
{ 
    std::cin >> foo.bumNum; 
    std::cin >> foo.extraNum; 
    foo.isIt= false; 
    return is; 
} 

void anotherFunc(Foo& foo) 
{ 
    //do something with the global variables 
} 

int main() 
{ 
    Foo foo;  
    std::cin >> foo; 
    anotherFunc(foo); 
}