【发布时间】:2014-03-03 21:20:04
【问题描述】:
我已经调试了一段时间的程序,最终发现错误是由于引用没有像我想象的那样更新。
这是一个显示我遇到的问题的示例:
#include <iostream>
using namespace std;
struct Test {
Test& set(int& i){ i = 10; return *this; }
Test& print(const int& i){ cout << i << endl; return *this; }
};
int main(void){
int i = 0;
Test t;
t.set(i).print(i + 5);
return 0;
}
我原以为这里的 print() 方法会输出 15,结果却输出了 5。
编辑:10 天后,我才意识到使用 clang 输出 15!这是 GCC 中的错误吗?
【问题讨论】:
-
为什么要编写这样既难看又总是容易出错的代码?为什么需要链接方法?
-
@EdHeal 我有一个包含许多方法的类,每个方法都做的很少,并且需要连续调用很多方法。我选择允许这样的链接以节省相当多的打字时间。现在我发现了这种行为,我会考虑删除链接。
-
速度太快了。
-
您将
0 + 5传递给print(),然后直接打印。下次调试你的代码。 -
@StoryTeller 那为什么g++和clang++的输出不同呢?
标签: c++ gcc compiler-bug