मैं वर्तमान में सी ++ 0x की नई वर्दी प्रारंभिक समझने की कोशिश कर रहा हूं। दुर्भाग्य से, मैं संदर्भों के समान प्रारंभिक उपयोग का उपयोग कर stumpled। उदाहरण:संदर्भों का समान प्रारंभ
int main() {
int a;
int &ref{a};
}
यह उदाहरण ठीक काम करता है:
% LANG=C g++ uniform_init_of_ref.cpp -std=c++0x -o uni -Wall -Wextra
uniform_init_of_ref.cpp: In function `int main()':
uniform_init_of_ref.cpp:3:10: warning: unused variable `ref' [-Wunused-variable]
(अद्यतन Comeau कि उदाहरण के लिए एक त्रुटि फेंकता है, तो हो सकता है जीसीसी यह संकलन नहीं करना चाहिए और साथ ही)
अब, अगर मैं एक पूर्णांक के बजाय एक कस्टम डेटा प्रकार का उपयोग करता हूं, तो यह अब काम नहीं करता है:
class Y
{};
int main()
{
Y y;
Y &ref{y};
}
% LANG=C g++ initialization.cpp -std=c++0x -o initialization -Wall -Wextra
initialization.cpp: In function `int main()':
initialization.cpp:9:13: error: invalid initialization of non-const reference of type `Y&' from an rvalue of type `<brace-enclosed initializer list>'
initialization.cpp:9:8: warning: unused variable `ref' [-Wunused-variable]
दुर्भाग्य से, मुझे मानक मसौदे में प्रासंगिक अनुभाग नहीं मिला।
ComeauTest.c(9): error: reference variable "ref" requires an initializer
Y &ref{y};
तो, आप की कोई मुझे सही दिशा में बात कर सकते हैं: के रूप में Comeau इस संदेश के साथ शिकायत मेरा अनुमान है, कि मैं वर्दी आरंभीकरण के उपयोग गलत समझ रहा हूँ?
मामले में है कि आप को पता है क्यों यह सवाल प्रासंगिक है और यही कारण है कि मैं सिर्फ Y &ref(y)
का उपयोग नहीं करना चाहते हैं: मैं एक निर्माता के प्रारंभ सूची में एक समान आरंभीकरण उपयोग करने में सक्षम होना चाहते हैं:
class X { };
class Y {
const X& x;
public:
Y (const X& xx):
x{xx}
{}
};
int main() {
X x;
Y y{x};
}
यह उपर्युक्त त्रुटि संदेश के साथ विफल रहता है।
नोट:
- मैं
LANG=C
उपयोग कर रहा हूँ अंग्रेज़ी त्रुटि संदेश सक्षम करने के लिए। - जीसीसी संस्करण: 4.6.1
जीसीसी 4.4.1 पहला उदाहरण संकलन नहीं करता है या तो: 'uniform_init_of_ref.cpp: 3: त्रुटि: आईएसओ सी ++ मनाही प्रारंभकर्ता सूची के उपयोग के जनमत संग्रह के प्रारंभ करने में ce ' – rmflow
@rmflow ref'': gcc4.4 पूरी तरह से नहीं है समान प्रारंभिक कार्यान्वयन। –
आप अपने कन्स्ट्रक्टर प्रारंभकर्ता सूची में सामान्य 'x (xx)' का उपयोग कर सकते हैं, जहां तक मुझे उस नई भाषा वाली वर्दी सामग्री की आवश्यकता नहीं दिखाई दे सकती :-) –