ماذا تعني عبارة "(الفراغ) الجديد" يعني في C ++؟

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

  •  06-07-2019
  •  | 
  •  

سؤال

ولقد كنت أبحث في كيو تي تعليمي الذي يستخدم بناء I لم أر من قبل:

 (void) new QShortcut(Qt::Key_Enter, this, SLOT(fire()));
 (void) new QShortcut(Qt::Key_Return, this, SLOT(fire()));
 (void) new QShortcut(Qt::CTRL + Qt::Key_Q, this, SLOT(close()));

ولقد حاول هذا دون (void) وأنه لا يزال يجمع ويعمل، فما هو الغرض من (void)؟

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

المحلول

وصب تعبير ل(الفراغ) يروي في الأساس مترجم تجاهل نتيجة لهذا التعبير (بعد حساب عليه).

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

إذا كنت مهتما في الجوانب التقنية (نقلا عن المعيار C ++، فقرة 5):

<اقتباس فقرة>   

وأي تعبير يمكن تحويلها صراحة لكتابة السيرة الذاتية الفراغ. يتم تجاهل قيمة التعبير. [ملاحظة: ومع ذلك، إذا كانت القيمة في متغير مؤقت (12.2)، لا يتم تنفيذ المدمر لهذا المتغير حتى الوقت المعتاد، والحفاظ على قيمة المتغير لغرض تنفيذ المدمر. -end ملاحظة]
  وrvalue lvalue إلى (4.1)، مصفوفة لمؤشر (4.2)، والوظائف لمؤشر لا يتم تطبيق (4.3) التحويلات القياسية إلى التعبير.

وإذا كنت تتساءل كيف يتم الحصول على حذف هذه الكائنات (اذا كان يتم الحصول على حذفها)، فإن الجواب هو أن 'هذا' المؤشر داخل منشئ QShortcut يجب أن يكون نفس قيمة أن عاد من جديد، وذلك يمكن أن تنتقل إلى ShortcutManager. ملاحظة، و 'هذا' داخل منشئ ليست هي نفسها باسم 'هذا' المؤشر التي يتم تمريرها إلى منشئ QShortcut.

نصائح أخرى

وبعض المجمعين C ++ سوف تعطي تحذيرا إذا كنت تتخلص من قيمة الإرجاع وظيفة من هذا القبيل. في هذه الحالة، يبدو رمز مثل ذلك تسرب الذاكرة، حتى تحصل على إنذار. و(void) يقول المترجم لا تنبعث منها التحذير: "علاج هذه الوظيفة كما لو أنه عاد void"

وأعتقد لم يتم تعيين المرجع عاد من البيان new إلى مؤشر. أرى يجري تمريرها أن this لذلك يجب QT تفعل شيئا مع أن الإشارة.

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