हम निर्माता यह अभी भी विफल रहता है में एक प्रारंभकर्ता सूची का उपयोग करने के लिए इसे बदल यहां तक कि अगर:
#include <pthread.h>
struct foo {
pthread_mutex_t test;
foo() : test(PTHREAD_MUTEX_INITIALIZER) {}
};
int main() {
foo f;
}
हम देख सकते हैं क्यों यह विफल रहता है और एक ही को देखकर कुछ संदर्भों में initialisation लिए इस्तेमाल किया जा पूर्व processsor से उत्पादन:
struct foo {
pthread_mutex_t test;
foo() : test({ { 0, 0, 0, 0, 0, { 0 } } }) {}
};
ऐसा में सी ++ 03 initialisation के लिए नेस्टेड ब्रेसिज़ उपयोग करने के लिए कानूनी नहीं है, लेकिन क्या अधिक दिलचस्प है शायद कि सी ++ 11 इस वाक्य रचना और पूरी तरह से कानूनी उपयोग करता है ।
A::A()
{
const pthread_mutex_t test = PTHREAD_MUTEX_INITIALIZER; // initialization - fine
mu = test; // assignment - fine
mu = PTHREAD_MUTEX_INITIALIZER; // assignment - C++11 only
}
क्या आपको बताएंगे कि एक काम नहीं एक प्रारंभ है:
अपने मूल कोड में हम कुछ और बातें देख सकते हैं। – Flexo
@ फ्लेक्सो, ओओपीएस, क्षमा करें। – Alcott
माफी माँगने की कोई ज़रूरत नहीं है! – Flexo