باستخدام "Char Const *" مجانا في وقت التهيئة الثابتة

StackOverflow https://stackoverflow.com/questions/790687

  •  16-09-2019
  •  | 
  •  

سؤال

ترتيب تهيئة الكائنات المجانية غير محددة في C ++. ولكن ماذا عن ما يلي؟

namespace foo {
    char const* str = "hey";
    struct A {
        A() { cout << str; }
    } obj;
}

هل ما زال هذا سلوك غير محدد، أم أن هناك حكم خاص للمؤشرات تهيئة مع حرفي السلسلة؟

بصرف النظر عن ذلك: ماذا لو كان شارع من النوع "char const []؟ وإذا كانت سلسلة STD ::

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

المحلول 2

يتم تعريف أمر التبادعي - يتم تهيئته بالترتيب الذي تظهر به في وحدة تجميع - انظر القسم 3.6.2 من معيار C ++. نوع الأشياء التي يتم الوفاء بها ليس لها أي تأثير.

نصائح أخرى

حتى لو كانت موجودة في وحدات ترجمة مختلفة، لا يزال أمر التبادلي محدد.

هذا بسبب str تتم تهيئته مع تعبير ثابت (address constant expression) و str لديه نوع pod. الأمر لا يزال يحتفظ بهذا إذا كان لديك صفيف. لكن الأمر لن يكون صحيحا بعد الآن إذا كان لديك std::string. وبعد تلك هي تهيئة ديناميكيا (بسبب std::string هو غير جراب).

وبالتالي، إذا الخاص بك str كانت أ std::string, ، سوف تعمل في سلوك غير محدد إذا obj يتم تعريفه في وحدة ترجمة مختلفة، ولكن هذه هي الحالة الوحيدة التي أدرجتها والتي قد تسبب مشكلة.

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