我使用Boost.Range爲這些數據傳遞一些數據和容器類。數據被加載到不同的線程中,並且在某些情況下可能尚未準備好。在這種情況下,容器使用默認的iterator_range進行初始化,因此包含單數迭代器。我正在做數據容器的分配和複製(因此是iterator_ranges)。但是,iterator_range拷貝構造函數調用begin()和end(),它會在原始單數時聲明。因此,不可能複製空的數據容器。將boost :: iterator_range指定爲單數範圍
有什麼辦法可以避免這個限制嗎?
爲什麼這個限制被實現?下面的工作很好,不應該範圍行爲類似?
typedef std::vector<int>::iterator iterator;
iterator it; // Singular
iterator it2 = it; // Works
boost::iterator_range<iterator> range; // Singular
boost::iterator_range<iterator> range2 = range; // Asserts in debug, but why?
有趣的是,我不知道這是一個限制 - 並沒有看到效果。你知道這種行爲的原因嗎?對於GCC和MSVC來說,它似乎可以正常工作,因爲我們一直在我們的應用程序中執行此操作...:/ – larsmoa 2010-09-06 13:03:24
未定義行爲的原因是它甚至不需要爲普通指針工作。當您查看單數指針值時,實現可能會陷入陷阱。 GCC和MSVC編譯器沒有任何優勢,並生成允許讀取f無效指針值的代碼。 – 2010-09-06 13:19:02
讀取代碼時,也很容易認爲第二個迭代器已初始化。 – UncleBens 2010-09-06 14:39:00