मुझे सी ++ के बारे में क्या पता है कि वैश्विक उदाहरणों के निर्माण (और विनाश) का आदेश ग्रहण नहीं किया जाना चाहिए।क्या std :: cout प्रारंभ करने की गारंटी है?
जबकि मैं वैश्विक उदाहरण के साथ कोड लिख रहा हूं जो std::cout
कन्स्ट्रक्टर & विनाशक में उपयोग करता है, मुझे एक प्रश्न मिला।
std::cout
आईस्ट्रीम का वैश्विक उदाहरण भी है। std::cout
किसी भी अन्य वैश्विक घटनाओं से पहले शुरू किया जाने की गारंटी है?
मैंने एक साधारण परीक्षण कोड लिखा और यह पूरी तरह से काम करता है, लेकिन फिर भी मुझे नहीं पता कि क्यों।
#include <iostream>
struct test
{
test() { std::cout << "test::ctor" << std::endl; }
~test() { std::cout << "test::dtor" << std::endl; }
};
test t;
int main()
{
std::cout << "Hello world" << std::endl;
return 0;
}
यह
test::ctor
Hello world
test::dtor
वहाँ किसी भी संभावना है कि कोड अपेक्षित ढंग से नहीं चलता है प्रिंट है?
से संबंधित http://stackoverflow.com/questions/6919593/is-cout-guaranteed-available-during-static-deinitialization जो उत्तर में निर्माण को भी शामिल करता है। – adl
वैश्विक दायरे में स्थिर भंडारण अवधि वस्तुओं का प्रारंभिक क्रम ग्रहण नहीं किया जा सकता है लेकिन प्रारंभिक क्रम को मजबूर करने के लिए चाल हैं। –
पीएस।यह भी ध्यान दें कि विनाश के आदेश की गारंटी है (निर्माण के विपरीत)। –