看看下面簡單的代碼:爲什麼string :: append操作行爲奇怪?
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s("1234567890");
string::iterator i1 = s.begin();
string::iterator i2 = s.begin();
string s1, s2;
s1.append(i1, ++i1);
s2.append(++i2, s.end());
cout << s1 << endl;
cout << s2 << endl;
}
你所期望的輸出是什麼?
,你會和我一樣,希望它是:
1
234567890
錯了! 它是:
234567890
即第一個字符串是空的。
前綴增加運算符的接縫對迭代器有問題。或者我錯過了什麼?
I我不是這裏的downvoters之一,但我建議他們從你的建議中找到你找到了一個編譯器錯誤。每個人都有一個「我發現了一個<真正重要的東西>的錯誤?」很早的時候(在我的情況下,這是libm),他們都是錯的。如果你確實發現了一個大量使用它的bug,那麼在你對這個工具有很多經驗之後你會發現一個bug。 – dmckee 2010-02-09 17:51:27
爲什麼downvotes?海灣合作委員會的開發人員是否充滿個人暗示? (我的意思是* GCC的開發者*) – Manuel 2010-02-09 17:51:56
@Manuel:因爲問題的方式而下降。請參閱http://catb.org/~esr/faqs/smart-questions。html#id382249。即使這是一個錯誤,但這不是錯誤報告的正確論壇。標題是無用的通用名稱。至少有一個很好的repro配方。 – user9876 2010-02-09 17:55:57