2013-04-13 8 views
6

की आवश्यकता नहीं है क्यों getline() स्थानीय दायरे में हैडर स्ट्रिंग से है और इस्तेमाल किया जा सकता:सी ++ getline() नाम स्थान घोषणा

#include <iostream> 
#include <string> 

int main() { 
    std::string str; 
    getline(std::cin, str); 
    std::cout << str << "\n"; 
    return 0; 
} 

कि जीसीसी के साथ काम करता है। पर क्यों? इसे हेडर स्ट्रिंग में परिभाषित किया गया है, जो मुझे std :: getline()getline() के बजाय उपयोग करने की आवश्यकता होनी चाहिए।

+0

इससे पहले कि आप पागल कहें, साइड नोट: 'ऑपरेटर <<' को 'std' में परिभाषित किया गया है। आप 'std :: cout <<" hi "कहते हैं;' std :: ऑपरेटर << 'का स्पष्ट रूप से संदर्भित किए बिना। शायद यह बेहतर के लिए है। – chris

+0

धन्यवाद! तर्क-निर्भर-लुकअप के बारे में पढ़ा जाएगा! – Peter

उत्तर

8

आप Argument Dependent Lookup (ADL, और कोएनिग लुकअप के रूप में भी जाना जाता है) का अनुभव कर रहे हैं। चूंकि एक या अधिक तर्क std नामस्थान में परिभाषित एक प्रकार है, इसलिए यह std नामस्थान में फ़ंक्शन की खोज करता है, जहां कहीं भी यह खोजेगा। इसके बारे में अधिक जानने के लिए और सामान्य रूप से लुकअप नाम देने के लिए मैं आपको Stephan T. Lavavej's video पर इंगित करता हूं।

संबंधित मुद्दे