私はC++ 11の仕様に何かがあるかどうかを判断しようとしています。次のコード(GitHub link here)のために期待される動作:それはであるべきのように答えがC++評価の順
$ g++ --version
g++ (GCC) 6.2.1 20160830
Copyright (C) 2016 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$ clang++ --version
clang version 3.9.0 (tags/RELEASE_390/final)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
$ g++ -std=c++11 order_of_ops.cpp -o a.out && ./a.out; echo $?
27
$ clang++ -std=c++11 order_of_ops.cpp -o a.out && ./a.out; echo $?
81
ようだ:
struct Scalar {
int data;
Scalar(int x) : data(x) {}
int get() {
return data;
}
Scalar &square() {
scale(data);
return *this;
}
void scale(int rhs) {
data *= rhs;
}
};
int main() {
Scalar v(3);
v.square().scale(v.get());
return v.data;
}
これは、これはg++
とclang++
の間で異なるものをないことを発見のほとんどがアップしますの§5.2.2と§5.2.5しかし、私は具体的な何かを追跡するのに問題があります。
'四角() '(私が正しく物事を読んでいる場合)と'規模 'の呼び出しの前に呼び出されなければならない81と同じでなければなりません() 'を返します。しかし、それらの間の相対的な順序は、規格によって特定されていません。 – StoryTeller
私はこのようなことを試すことを夢見ることはありません。定義されていない振る舞い。 –
あなたがTAをしている生徒に具体的なものを提示したいときは、これが質問の種類です( – Pockets