Hirdetés

Új hozzászólás Aktív témák

  • mepet
    addikt

    C++-ban a character literal típusa char, mégpedig azért, hogy működjenek az overload-ok (pl. operator<<). Az unáris operator+ igazából semmit nem csinál, csakis azért van, hogy le tudd írni:
    int i = +5;
    Illetve mégis csinál valamit: minden egész művelet operandusai minimum int-re kasztolódnak fel, és a végeredménye is minimum int. Ezért +'a' már int típusú. Tehát az output C++-ban 14.

    C-ben a character literal típusa int, az unáris operator+ esetén ugyanúgy megvan az upcast, csak ugye int-ről int-re. C-ben a végeredmény 44.

    %zu csak C99-ben és C++-ban van, így C-ben kell az -std=c99. MSVC-t ne használj C-re :P
    Fogadjunk, hogy te a C++-os megoldást mondtad :)

    C++-ul nem értek, de legalább ma is tanultunk valamit. Kézzel pötyögtem a kódot, és én nem literal méretét néztem, az életben eszembe nem jutott volna ilyen, hogy "visszafelé kompatibilitás miatt" ugyanaz a típus több byte-ot foglalhat csak azért, mert literal...

    char a='a';
    printf("%zu", sizeof(a));
    printf("%zu", sizeof(+a));

    Ez pedig 14-et dob C-ben, és itt az a magyarázat, amit én mondtam, de persze mint kiderült a két kód között is van különbség...

    [szerk] PellesC built-in complier LCC alapokon, -std:C11

Új hozzászólás Aktív témák