考慮到簽名者std::regex_match( std::string const&, std::smatch& match, std::regex const& re)
的C++ 11函數, 是第一個參數生命週期的約束?我不覺得 任何,但是當我執行以下程序(用VC++ 2010編譯, 迭代器調試有效):對std :: regex_match(和std :: regex_search)參數生存期的約束
int
main()
{
std::string a("aaa");
std::string c("ccc");
std::regex re("aaa(.*)ccc");
std::smatch m;
if (std::regex_match(a + "xyz" + c, m, re)) {
std::cout << m[0] << std::endl;
std::cout << m[1] << std::endl;
}
return 0;
}
崩潰,無疑是因爲在m
的sub_match
只保留 迭代器串,而不是副本。我在找不到我的代碼的標準 中找不到任何東西。
FWIW:它也不在boost::regex
中工作,這就是 std::regex
所依據的。 (當然,升壓沒有記錄與問候壽命任何 約束要麼)
最後,我想我的問題是:我應該在DR發送到 標準組織,或一個錯誤報告到微軟?
我會發送DR。現在,DR應該是另一個問題。這些選項可能只是記錄或提供一個需要右值引用的重載,以便*看起來*正確的簡單代碼行爲正確。 [我傾向於文檔方法] – 2012-08-16 17:00:57
@DavidRodríguez-dribeas在什麼基礎上?標準中有許多函數需要引用,並且所需的生命週期永遠不會超過函數本身。基於什麼(除了Boost的做法),我們是否假設這不是這個意圖? – 2012-08-16 17:05:03
好的,所以你在說這可能是實現中的一個錯誤,並且標準可能被設計成複製參數。是的,這是第三種方法:) – 2012-08-16 17:10:08