क्या होगा: सी ++ में करते हैं?


89

मैं हाल ही में कुछ कोड को संशोधित कर रहा था, और एक फ़ंक्शन के भीतर एक लाइन पर पहले से मौजूद बग पाया गया:

std:;string x = y;

यह कोड अभी भी संकलित है और अपेक्षित रूप से काम कर रहा है।

स्ट्रिंग परिभाषा काम करती है क्योंकि यह फ़ाइल है using namespace std;, इसलिए std::पहली जगह में अनावश्यक थी।

सवाल यह है कि क्यों std:;संकलन कर रहा है और क्या, अगर कुछ भी, क्या कर रहा है?


1
@ Xeo: उन्होंने कहा कि वह सवाल में कहा है using namespace std;
फ्रेड लार्सन

@ तैयार: Derp! उस भाग को कोड के रूप में चिह्नित नहीं किया गया था, इसलिए मैंने इसे अनदेखा कर दिया। :) मैं फिर भी इस सवाल की ओर इशारा करना चाहूंगा ।
Xeo

23
समान कारण जो http://www.stackoverflow.comसंकलित करता है ...
केरेक एसबी

19
अभी तक उपयोग नहीं करने का एक और कारण using namespace std;:)
डेविड रॉड्रिग्ज़ -

@KerrekSB रेडिट ब्राउज़ करते समय मेरे एक मित्र के साथ हुआ! लिंक निकला होना करने के लिए इस : डी
mmirzadeh

जवाबों:


90

std:इसका एक लेबल, एक लक्ष्य के रूप में प्रयोग करने योग्य है goto

जैसा कि @Adam Rosenfield ने एक टिप्पणी में कहा है , यह एक कानूनी लेबल नाम है।

C ++ 03 ++6.1 / 1:

लेबल का अपना नाम स्थान है और अन्य पहचानकर्ताओं के साथ हस्तक्षेप नहीं करते हैं।


4
AFAIK लेबल का अपना नाम स्थान है, इसलिए वे कीवर्ड या मैक्रोज़ के अलावा किसी और चीज़ से कभी टकराते नहीं हैं।
रॉडरिगो

11
C ++ 03 ++6.1 / 1 कहता है "लेबल का अपना नाम स्थान है और अन्य पहचानकर्ताओं के साथ हस्तक्षेप नहीं करते हैं।"
एडम रोसेनफील्ड

6.1 / 1: "लेबल का अपना नाम स्थान है और अन्य पहचानकर्ताओं के साथ हस्तक्षेप नहीं करते हैं"
जॉन डिबलिंग



8
(expression)std: (end of expression); (another expression)string x = y;

4
व्याकरण-वार, यह वास्तव में एक है (label-)statement, नहीं expression
GManNickG

1

संकलक आपको बताता है कि क्या हो रहा है:

#include <iostream>
using namespace std;
int main() {
  std:;cout << "Hello!" << std::endl;
}

दोनों gcc और clang एक बहुत स्पष्ट चेतावनी देते हैं:

std.cpp:4:3: warning: unused label 'std' [-Wunused-label]
  std:;cout << "Hello!" << std::endl;
  ^~~~
1 warning generated.

इस कहानी से दूर ले जाएं: हमेशा सक्षम (जैसे -Wall) चेतावनियों के साथ अपने कोड को संकलित करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.