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


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.