द्वारा संरेखित प्रकार और गुजरने वाले तर्क मूल्य से गठबंधन प्रकारों के साथ गठबंधन प्रकार या संरचनाओं को पास करना कुछ कार्यान्वयन के साथ काम नहीं करता है। यह एसटीएल कंटेनर तोड़ता है, क्योंकि कुछ विधियों (जैसे आकार बदलने) उनके तर्कों को मूल्य से लेते हैं।मूल्य
मैं विजुअल स्टूडियो 2008 के साथ कुछ परीक्षण चलाता हूं और पूरी तरह से सुनिश्चित नहीं करता कि मूल्य कब और कैसे विफल हो जाता है। मेरी मुख्य चिंता foo है। ऐसा लगता है कि यह ठीक काम करता है, लेकिन क्या यह इनलाइनिंग या कुछ अन्य संयोग का परिणाम हो सकता है? क्या होगा अगर मैं शून्य फू (कॉन्स्ट __m128 &) पर अपना हस्ताक्षर बदलूं?
आपके इनपुट की बहुत सराहना की जाती है। धन्यवाद।
struct A
{
__m128 x;
int n;
};
void foo(__m128);
void bar(A);
void f1()
{
// won't compile
// std::vector<A> vec1(3);
// compiles, but fails at runtime when elements are accessed
std::vector<__m128> vec2(3);
// this seems to work. WHY???
std::vector<__m128, some_16_byte_aligned_allocator<__m128> > vec3(3);
__m128 x;
A a;
// passed by value, is it OK?
foo(x);
// won't compile
//bar(a);
}
संपादित करें। एसटीएल गठबंधन आवंटक के साथ भी विफल रहता है, क्योंकि मूल्य समस्या से गुजरती रहती है।
इस लिंक pass __m128 by value
आपके द्वारा प्राप्त संकलन त्रुटियों/चेतावनियां क्या हैं? मुझे लगता है जैसे "औपचारिक पैरामीटर ... गठबंधन नहीं किया जाएगा"? – celion
यह मुझे मिलता है। त्रुटि C2719: 'अज्ञात-पैरामीटर': __declspec (align ('16 ') के साथ औपचारिक पैरामीटर – watson1180
संरेखित नहीं किया जाएगा x64 में, फ़ंक्शन तर्क 16-बाइट संरेखण का समर्थन करते हैं, इसलिए यह समस्या दूर हो जाती है। मुझे पता है कि आपकी तत्काल समस्या हल नहीं होती है, लेकिन हे, यह कुछ भी नहीं है। ;) – jalf