سؤال

هل يمكن لأي شخص أن يخبرني بما أن هذا المصبوب له تأثير (إلى جانب وضع HappyNumber to 1337)، إن وجدت على الإطلاق، وإذا لم يكن له تأثير آخر، فكيف يمكنني كتابة رمز مثل هذا ؟؟؟ هل هذا خطأ مترجم، أو بعض "ميزة مخفية بعيدا" من C ++؟

int happyNumber = static_cast<int>(123.456, TRUE, "WTF" , false , "IS" , NULL , "GOING" , 0xff , "ON???" , 1337);

لقد فوجئت أن هذا سوف يترجم على الإطلاق. لقد وجدت ذلك من خلال خطأ حيث قمت بطريق الخطأ بتعيين المعلمة الثانية إلى شيء كان من المفترض أن تذهب في دعوة وظيفة للتعبير الذي يجري يلقيه. أدى ذلك إلى وجود علة سيئة حيث تم وضع الكائن من المعلمة الثانية، استدعاء الوظيفة بوسيطة واحدة فقط. تم تجميعها ... ولم ترد في البداية ...

أنا أستخدم Microsoft Visual C ++ 2008.

هل كانت مفيدة؟

المحلول

يلقي المصبوب ثابت حجة واحدة، لكن حجتها تعبيرا، ويمكن أن تشمل التعبيرات مشغل فاصلة. وبعد يتم استخدام فاصلة في المواقف التي تريد فيها تقييم تعبيرين أو أكثر في وقت واحد لآثارها الجانبية، على سبيل المثال:

int i, j;
for (i=0, j=0; i < 10; i++,j++) {
    // do stuff
}

إنه مفيد إلى حد ما لأنه بدون ذلك، يمكنك فقط تقييم تعبير واحد لكل منهما للتهيئة والشرط ومتابعة أجزاء من حلقة (أو أي مكان آخر يتوقع التعبير). لا يصنع عادة للحصول على رمز أوضح، وأن الدراسات غرابة. كما لاحظت، يقيم تسلسل مفصولة بفواصل قيمة تعبيره الأخير.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top