それで、私はコードゴルフのC++でいつx== x + 2を実行するかについての解決策を考え出そうとしていましたが、このスニペットを思いついたのは、それがどのように機能するかわからないことを理解するためだけでした。これらの条件の両方が真であると評価される理由はわかりません。
line:
x ==&xのため、またはx + 2が==の左側の前に評価されるため、ラベル付けされた行が真であるかどうかを誰かが知っていますか?
#include <iostream>
#include <vector>
std::vector<int>& operator+ ( std::vector<int> &v, int val )
{
v.push_back(val);
return v;
}
int main()
{
std::vector<int> x;
std::vector<int> y = x + 2; // y is a copy of x, and x is [2]
// how are both of these are true?
std::cout << (x==y) << "\n"; // value comparison [2]==[2]
line:
std::cout << (x==x+2) << "\n"; // reference comparison? &x == &(x+2)
// not sure if this is relevant
std::cout << (x+2==x) << "\n"; // also true
return 0;
}
ベクトルは値で比較されているように見えるので、xがx + 2の前に評価された場合、xはx + 2(値で)と等しくないようです。私はおそらく明らかな何かを見逃しています。前もって感謝します。