に私がhttp://en.cppreference.com/w/cpp/language/operatorsで読む:オーバーロードされた演算子&&と||の短絡C++ 17
ブール論理演算子、オペレーター& &とオペレータ|| (C++ 17時まで)
内蔵のバージョン とは異なり、オーバーロードは、右1の前に自分の左オペランド の配列を決定し、ませんは短絡 評価を実装することはできません。
(私の強調)。
は||オペレータ& &とオペレータに対して短絡 をサポートするC++ 17のための任意のリソースまたはコード例を見つけることができませんでした。 C++ 17のパラメータパックの折り畳み式に関連していますか?それを再生しようとしましたが、過負荷のオペレータの短絡動作を作成できませんでした& &と|| C++は17倍の発現を示した。
コード:
class A {
bool val;
public:
A(bool b) : val(b) { cout << "A born as " << boolalpha << val << endl;}
template<typename ...Args>
bool operator&&(Args&&... args) {
return (val && ... && args.val);
}
};
int main() {
cout << boolalpha;
cout << (A{false} && A{true}) << endl;
cout << (A{true} && A{false}) << endl;
cout << (A{false} && A{false}) << endl;
}
出力:
A born as true
A born as false
false
A born as false
A born as true
false
A born as false
A born as false
false
http://coliru.stacked-crooked.com/a/f0b5325899c2fe6b
注:右に左の列は、現在のgccのバージョンでは起きていない、C++ 17でコンパイルさフラグ。
あなたが試したことがうまくいかなかったことを示してください。おそらく、[ここ](https://godbolt.org/)で使用したコンパイラとバージョンを選択してリンクを投稿することができます。 – wally
*短絡動作を作成できませんでした。*エラーは何ですか?または、エラーはなく、下流側のオペレータのために自分自身を展示した副作用がありましたか?または、コードをステップ実行して、他の演算子にステップインしましたか? – wally
@Mus問題は、標準で定義されている動作についてであり、動作しないコードについてではありません。 – interjay