我指出了一個奇怪的gcc行爲: 當同一個指令使用同一個變量,並且當這個變量被一個函數調用(變量通過引用或指針傳遞)時,變量更改不會爲同一指令的其他函數修改。gcc:在同一條指令中使用相同var時引用參數發生變化
這是一個正常的C++行爲或boggus?
注意:優化(-O)標誌未設置。
注2:與solaris CC編譯器一起工作良好。
示範用gcc 4.5.3(Linux或mingw的/ Cygwin的)
class C {
public:
const C & inc(int & i) const
{
++i;
cout << "inc: i = " << i << endl; return *this;
}
const C & see(int i) const
{
cout << "see: i = " << i << endl; return *this;
}
const C & see2(const int & i) const {
cout << "see2: i = " << i << endl; return *this; }
};
int main()
{
C c;
int i = 0;
c.see(i).inc(i).see(i).see2(i).inc(i).see(i).see2(i);
c.see(i);
return 0;
}
輸出:
見:I = 0
INC中:i = 1
見:ⅰ = 0 :1 expected
see2:i = 1
inc:i = 2
看到:I = 0 :2預期
SEE2中:i = 2
見:I = 2
@ user1863135如果您質疑'see2'的不同行爲,那是因爲參數是一個(const)引用,所以值計算(即讀取'i'的值)發生在函數內部,而不是它的參數列表。 – ecatmur
然後'see(inc(c,i),i)'與'const C&x = inc(c,i)不同。見(x,i);' 對我來說,前者是後者的捷徑。但是我錯了。 – Alcolo47