Typo with “cout < myint”. Why does it work?

后端 未结 4 1644
Happy的楠姐
Happy的楠姐 2020-12-28 14:41

I have this code and I searched for hours why it fails to print my income

int const income = 0;
std::cout << \"I\'m sorry, your income is: \" < inco         


        
相关标签:
4条回答
  • 2020-12-28 15:18

    When I compile this code using GCC 4.3.4, I see a warning:

    prog.cpp: In function ‘int main()’:
    prog.cpp:6: warning: right-hand operand of comma has no effect
    

    ...though why it's a warning rather than an error, I don't know.

    EDIT: In fact, I don't know which comma it's referring to either, because this code:

    int const income = 0;
    std::cout << "I'm sorry your income is: " < income;
    

    ...generates the same warning (see here).

    0 讨论(0)
  • 2020-12-28 15:32

    It does compile with g++ 4.4.3

    #include  <iostream>
    
    int main (void)
    {
       int const income = 0;
       std::cout << "I'm sorry, your income is: " < income;
    }
    

    However, when running it with -Wall (good practice!), I got a funny message:

    :~/stack$ g++ test.cpp -o temp
    :~/stack$ g++ -Wall test.cpp -o temp
    test.cpp: In function 'int main()':
    test.cpp:5: warning: right-hand operand of comma has no effect
    

    No clue what it actually does (or tries to do)...

    0 讨论(0)
  • 2020-12-28 15:39

    integral constant 0 is also a null pointer constant - it can be compared to the result of ostream's operator void *. Note that it'll fail if the constant has any value but 0.

    0 讨论(0)
  • 2020-12-28 15:39

    The prototypes of the < operator are like :

        ​bool T::operator <(const T& b) const;
    

    So I guess the compiler transtype the argument as the type of this instance. Did you enabled all the warnings like -Wall

    0 讨论(0)
提交回复
热议问题