2

これが出力として「演算子 + 演算子 +」を出力するのはなぜですか? 私の期待は「演算子+二重演算子+」でした。誰かがこれに光を当ててもらえますか?

#include<iostream>
using namespace std;


     struct mydata{
        int mx;
        mydata(int x = 0){}
        mydata operator+(const mydata& rhs){
                cout<<" operator + ";
                mydata temp(rhs);
                return temp;
        }
        operator int() const{cout<<" int "; return mx; }
        operator double() const{cout<" double "; return mx; }
};


int main(){
        mydata d;
        mydata r = d + mydata(5); // L1
        5 + (double)d; // L2
        d + d; // L3
}
4

2 に答える 2

1

cout<" double "する必要がありますcout << " double "。それがそのままコンパイルされることに驚いています。

于 2013-02-19T08:06:47.450 に答える
0

奇妙なことに、これはコンパイルして実行しVS2008、OP の回答と、この見落としやすい警告を生成します。

warning C4552: '<' : operator has no effect; expected operator with side-effect

ただし、GCC はコンパイル時に大成功を収めます (これは実際には素晴らしいことです)。

test.cpp: In member function 'mydata::operator double() const':
test.cpp:14: error: no match for 'operator<' in 'std::cout < " double "'
test.cpp:14: note: candidates are: operator<(const char*, const char*) <built-in>
test.cpp:14: note:                 operator<(void*, void*) <built-in>

したがって、OP が使用している場合VSは、警告に注意することをお勧めします。

于 2013-02-19T08:13:40.930 に答える