سؤال

أثناء قراءة "C++ التمهيدي بالإضافة إلى 5th edition" رأيت قطعة من التعليمات البرمجية:

    cin.get(ch);
    ++ch;
    cout << ch;

لذلك ، سوف يؤدي هذا إلى عرض الأحرف التالية بعد ch.ولكن إذا فعلت ذلك بهذه الطريقة:

    cin.get(ch);
    cout << ch+1;

الآن, cout يعتقدون ch هو الباحث(محاولة بتلبيس).فلماذا cout يفعل ذلك ؟ و لماذا إذا أضفت 1 إلى شار فإنه سوف ينتج الرقم؟.و لماذا هناك فرق بين:ch++ و ch + 1.

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

المحلول

وسبب حدوث هذا هو نوع من 1 الحرفي وكثافة العمليات. عند إضافة int و شار تحصل على كثافة العمليات، ولكن عند زيادة شار، فإنه لا يزال شار.

وجرب هذا:

#include <iostream>

void print_type(char)
{
    std::cout << "char\n";
}
void print_type(int)
{
    std::cout << "int\n";
}
void print_type(long)
{
    std::cout << "long\n";
}

int main()
{
    char c = 1;
    int i = 1;
    long l = 1;

    print_type(c); // prints "char"
    print_type(i); // prints "int"
    print_type(l); // prints "long"

    print_type(c+i); // prints "int"
    print_type(l+i); // prints "long"
    print_type(c+l); // prints "long"

    print_type(c++); // prints "char"

    return 0;
}

نصائح أخرى

يرجى ملاحظة - هذا هو الجواب على السؤال الأصلي الذي تم تحريره.

الآن, cout يعتقدون ch هو الباحث(محاولة بتلبيس).

لا لن.ليس من الممكن تغيير نوع متغير في C++.

++ch;

الزيادات ما هو في الفصل.

ch + 1;

يأخذ القيمة (المحتويات) من الفصل ، ويضيف 1 و يتجاهل النتيجة.كل ما هو في الفصل هو دون تغيير.

ووالزيادات بيان ++ch; ch في حين لا ch + 1;.

وأيضا، تذكر أن "الفصل ++" ستفعل الزيادة قبل تشغيل في الواقع بيان أنه في، لذلك هذا هو السبب في أنها لا تزال شار.

int i = 0;
cout << ++i << endl;
cout << i++ << endl;
// both will print out 1.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top