3

私はこのコードを持っています:

class LazyStream {
    ostream& output;
    std::list<string> pending;
public:
    //...
    LazyStream operator++(int n = 0){
        LazyStream other(output);
        if (n>0) output << "<#" << n << ">";
        output << pending.pop_front();
        return other;
    }

operator++ の int 値を取得する意味がわかりません。演算子が接尾辞であることを示すだけだと思いました。オペレーターはどのようにして番号を取得できますか? 誰かが例を挙げることができますか?

ありがとう

4

2 に答える 2

2

関数呼び出し構文を使用してその演算子を呼び出すと、その引数を渡すことが明らかに可能です。このコードは、gcc と出力できれいにコンパイルされます42

#include <iostream>

struct Stream {
    Stream operator++(int n)
    {
        std::cout << n;
        return *this;
    }
};

int main()
{
    Stream s;
    s.operator++(42);
}

ただし、デフォルト値を指定すると、(-pedantic フラグを使用して) 値を指定できないという警告が表示されます。s.operator++()プレフィックスの増分も定義すると、呼び出しがあいまいになるため、これは理にかなっています。ただし、デフォルト値を明示的に禁止している標準は見つかりませんでした。

于 2013-07-30T10:37:43.673 に答える