سؤال

متى يكون من المناسب استخدام غير موقعة متغير أكثر من توقيع واحد ؟ ماذا عن في for الحلقة ؟

سمعت الكثير من الآراء حول هذا الموضوع و أردت أن أرى إذا كان هناك أي شيء يشبه الإجماع.

for (unsigned int i = 0; i < someThing.length(); i++) {  
    SomeThing var = someThing.at(i);  
    // You get the idea.  
}

أنا أعرف جافا لا غير موقعة والقيم التي يجب أن يكون واعية قرار شركة صن مايكروسيستمز'جزء.

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

المحلول

كنت سعيدا أن تجد محادثة جيدة حول هذا الموضوع ، كما لم أكن قد فكرت في الأمر كثيرا من قبل.

في ملخص, توقيع جيد العامة خيارات متعددة - حتى عندما كنت متأكد من القتلى كل الأرقام الإيجابية - إذا كنت تنوي القيام بعملية حسابية على متغير (مثل نموذجي في حلقة الحالة).

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

شخصيا, أنا أحب وقعت لأنني لا أثق بنفسي البقاء متسقة تجنب خلط نوعين (مثل المادة يحذر).

نصائح أخرى

في المثال أعلاه, عندما " أنا " سوف تكون دائما إيجابية أعلى النطاق من شأنها أن تكون مفيدة, غير المفيد.مثل إذا كنت تستخدم 'تعلن' البيانات ، مثل:

#declare BIT1 (unsigned int 1)
#declare BIT32 (unsigned int reallybignumber)

وخاصة عندما تكون هذه القيم لن يتغير أبدا.

ومع ذلك ، إذا كنت تفعل برنامج المحاسبة حيث الناس غير المسؤول مع المال باستمرار في الحمراء, أنت بالتأكيد سوف ترغب في استخدام "الموقعة".

أنا لا أتفق مع القديس على الرغم من أن هناك قاعدة جيدة من التجربة هو استخدام التوقيع ، الذي ج في الواقع الافتراضي, لذلك كنت تغطيتها.

C و C++ compilers سوف تولد تحذير عند مقارنة الموقعة و غير الموقعة أنواع ؛ في التعليمة البرمجية الموجودة في المثال, لا يمكنك جعل الخاص بك حلقة متغير غير موقعة و يكون مترجم توليد رمز دون تحذيرات (على افتراض قال التحذيرات تشغيل).

بطبيعة الحال أنت تجميع مع تحذيرات من تحول كل وسيلة تصل صحيح ؟

و هل تعتبر ترجمة مع "علاج الأخطاء والتحذيرات" أعتبر ذلك خطوة أخرى إلى الأمام ؟

الجانب السلبي مع استخدام وقعت الأرقام هو أن هناك إغراء الزائد لهم ذلك ، على سبيل المثال ، القيم 0->n يتم اختيار القائمة ، -1 يعني لا شيء مختارة - بدلا من خلق فئة من اثنين من المتغيرات ، واحدة لتحديد ما إذا كان شيء هو اختيار آخر لتخزين ما هذا الاختيار.قبل أن تعرف أنت الاختبار سلبية واحدة في كل مكان و المترجم هو تشكو كيف كنت ترغب في مقارنة اختيار القائمة ضد عدد من التحديدات القائمة لديك - ولكن هذا خطير لأنهم أنواع مختلفة.لذلك لا تفعل ذلك.

أعتقد أنه إذا كان عملك الحالة يفرض أن عدد سالب غير صالح, كنت تريد أن يكون خطأ مبين أو طرح.

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

size_t غالبا ما يكون خيارا جيدا لهذا ، أو size_type إذا كنت تستخدم الخاصة بلبنان الدرجة.

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