में एसडीडी डेक/वेक्टर के बीच अलग-अलग व्यवहार मेरे पास कोड का यह बहुत आसान टुकड़ा है;एमएसवीसीसी/जी ++/आईसीसी
#include <deque>
#include <vector>
using namespace std;
class A
{
public:
A(){};
~A(){};
deque<A> my_array; // vector<A> my_array;
};
int main(void)
{
}
अगर मैं के साथ इस कोड संकलन दोनों जी ++ और आईसीसी/icpc लिनक्स पर यह ठीक संकलित, यहां तक कि -Wall
साथ यह कोई चेतावनी देता है। अगर मैं एक वेक्टर के लिए डेक स्वैप करता हूं तो स्थिति वही होती है।
मैं MSVCC (सीएल) का उपयोग कर खिड़कियों पर इस कोड का निर्माण करना चाहते हैं लेकिन दुर्भाग्य से यह त्रुटि c2027 फेंकता है:
error C2027: use of undefined type 'A'
यदि फिर भी मैं बदल std::deque
एक std::vector
के लिए यह दृश्य स्टूडियो 2010
मेरा प्रश्न है; क्या इस व्यवहार की किसी कारण से उम्मीद की जा सकती है? यदि हां, तो कंपाइलर्स के बीच मतभेद क्यों हैं या क्या यह g ++/icc या MSVCC के साथ कोई गलती है?
+1, हालांकि, मैं केवल 'डेक' के साथ यूबी होने की उम्मीद कर रहा था। – iammilind
"जो भी कार्यान्वयन करता है वह ठीक है, जहां तक मानक का संबंध है" - एक अनुरूप कार्यान्वयन इसे संकलित करने में असफल नहीं होना चाहिए क्योंकि इसमें व्यवहार को अपरिभाषित नहीं किया गया है। यद्यपि यह निश्चित रूप से निदान दे सकता है, और एक कार्यान्वयन मोड में कार्यान्वयन कर सकता है, जहां वे निदान केवल चेतावनियां ही अस्पष्ट हो सकती हैं। –
@SteveJessop मानक (§1.3.12) में _undefined व्यवहार_ की परिभाषा स्पष्ट रूप से कहती है "जिसके लिए यह अंतर्राष्ट्रीय मानक ** कोई ** आवश्यकताएं लागू नहीं करता है" (एम्फिसिस जोड़ा गया)। और नोट के तुरंत बाद, यह "[...] को ** अनुवाद ** या निष्पादन को समाप्त करने के लिए देता है ( डायग्नोस्टिक संदेश जारी करने के साथ)" कार्यान्वयन के उदाहरण के उदाहरण के रूप में। –