سؤال

أنا إعادة نشر أ comp.الأمراض المنقولة جنسيا.c++ كأول موضوع المناقشة هنا لأن الفريق أصبح غير موثوق بها للغاية.المشاركات القليلة الماضية لقد قدمت هناك ذهبت إلى الفراغ ، و النشاط قد توقف.أشك لقد تم حظر و/أو شخص آخر فقط فقدت الاهتمام.نأمل من جميع المهتمين الناس سوف تجد هذه المناقشة ، وسوف يكون هناك عام الهجرة.ربما بعد ذلك سوف تعيين مشرف.


مرحبا!

مع تفسير الحالية من مشروع N3126 ث.r.t.الشرطي مشغل xvalues أتوقع التالية تأكيدات عقد:

 int i = 0;
 int& j = true? i : i;
 int&& k = true? std::move(i) : std::move(i);   // #2
 assert(&i == &j); // Holds since C++98
 assert(&i == &k); // Should this hold as well?

5.16/4 يقول:

إذا كان الثاني والثالث المعاملات [إلى الشرطي مشغل] هي glvalues من نفس القيمة الفئة ولها نفس النوع ، والنتيجة هي من هذا النوع و القيمة فئة [...]

على الرغم من أنها لا نقول بوضوح أن الناتج glvalue يشير إلى واحدة من الأشياء glvalue المعاملات المشار إليها-أو هو هذا ضمني لأن خلاف ذلك سوف يعود prvalue?باستخدام دول مجلس التعاون الخليجي 4.5.1 في C++0x الوضعية الثانية تأكيد فشل.الإشارة k يبدو أشير إلى بعض كائن مؤقت.يمكن توضيح ما إذا كان شخص ما comiler يسمح لإنشاء مثل هذا مؤقت في حالة كل المعاملات حول القولون هي xvalues من نفس النوع ؟

أنا حاليا على افتراض دول مجلس التعاون الخليجي هو عربات التي تجرها الدواب و/أو لا يصل إلى موعد مع الاحترام إلى xvalues.

متابعة السؤال هو:لن يكون من الجميل أن تكون قادرة على الكشف عن قيمة الفئة من التعبير ؟ إذا كان لنا أن نتجاهل عامل شرطي يمكننا الكشف عن قيمة الفئة من تعبير مع decltype.ولكن ما هو

 bool xvalue = std::is_rvalue_reference<
   decltype( true ? std::move(i) : std::move(i) ) >::value;

من المفترض أن العائد ؟ باستخدام دول مجلس التعاون الخليجي 4.5.1 ، xvalue تهيئة متغير مع كاذبة.هذا هو مطابقة للمواصفات القياسية الحالية مشروع ؟

تيا ، سيباستيان

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

المحلول

أعتقد أن دول مجلس التعاون الخليجي 4.5.1 هو غير المطابقة wrt §5.16/4.هل قدم تقرير الشوائب?

على أي حال, أعتقد أنها تتفق مع هذا الثلاثي رمز المشغل. decltype ويعرف §7.1.6.2/4:

نوع تدل decltype(هـ) على النحو التالي:

  • إذا ه هو unparenthesized id-التعبير أو فئة الأعضاء الدخول (5.2.5), decltype(e) هو نوع من الكيان اسمه عن طريق البريد.إذا كان هناك أي هذا الكيان ، أو إذا ه أسماء مجموعة من مثقلة وظائف البرنامج سوء تشكيلها ؛
  • خلاف ذلك ، إذا ه استدعاء دالة (5.2.2) أو الاحتجاج من مثقلة المشغل (بين قوسين حول ه يتم تجاهلها) ، decltype(هـ) عودة نوع ثابت اختار وظيفة ؛
  • خلاف ذلك ، إذا ه هو lvalue, decltype(e) هو& T حيث T هو نوع من ه ؛
  • وإلا decltype(e) هو نوع e.المعامل decltype محدد هو مقيم المعامل (المادة 5).

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

  • وإلا إذا كان e هو xvalue, decltype(هـ) T&&, حيث T هو نوع من e

قد يكون في النظام ، خاصة كما هو مكتوب ، xvalues الحصول على معاملة prvalues.وعلاوة على ذلك التعبير الخاص بك يتوافق تماما مع تعريف std::common_type (§20.7.6.6/3).

واحد ومباشر الحل (العملة عبارة :vP ):

template< typename T1, typename T2 >
struct common_type_and_category {
    typedef typename std::conditional<
        std::is_same< T1, T2 >::value,
        T1,
        typename std::common_type< T1, T2 >::type
    >::type type;
};
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top