سؤال

هل يسمح خصم نوع الإرجاع لوظائف الأعضاء في C ++ 14 ، أو فقط للوظائف المجانية؟

أسأل لأنني افترضت ضمنيًا أنه سيعمل ، لكن في GCC 4.8.1 أحصل على خطأ مترجم داخلي ("في gen_type_die_with_usage"). لأول مرة حصلت على مثل هذا الخطأ الخفي من هذا القبيل ، لذلك أنا متشكك بعض الشيء ؛ وأنا أعلم أنهم غيروا المواصفات منذ ذلك الحين.

من أجل الوضوح هذا يناسبني:

auto foo() {return 5;}

لكن هذا لا:

class Bar{
auto baz() {return 5;}
}

هل هذا مسموح به في مسودة المعيار؟

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

المحلول

نعم يجب أن يسمح ذلك المعيار وفقًا للورقة N3582. هنا مثال من الورقة.

ليس من الضروري تمامًا السماح بإعلانات الوظائف غير المحددة مع نوع الإرجاع التلقائي ، ولكنه مفيد لأنماط الترميز التي تفضل تحديد وظائف الأعضاء خارج الفصل:

    struct A {
      auto f(); // forward declaration
    };
    auto A::f() { return 42; }

وإذا سمحنا بذلك في هذا الموقف ، فيجب أن يكون صحيحًا في المواقف الأخرى أيضًا. السماح له هو أيضا الخيار المتعامد. بشكل عام ، أعتقد أنه إذا كان الجمع بين ميزتين يمكن أن يعمل ، فيجب أن يعمل.

وفقًا لتعليق Bamboon ، "يتم دعم خصم نوع الإرجاع فقط اعتبارًا من GCC 4.9." هذا من شأنه أن يفسر لماذا لا تملكه.

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