在下面的示例代碼中,重載的運算符<不是const限定的,它在Visual C++(所有版本直到2013 Preview)下編譯,但是在Clang ,它會拋出一個錯誤 - 注意:候選函數不可行:'this'參數的類型爲'const Entry',但方法未標記爲const bool運算符<(常量條目&其他)。Visual C++關係運算符重載const正確性(使用std :: sort)
#include "stdafx.h"
#include <vector>
#include <algorithm>
struct Entry
{
unsigned int age;
bool operator<(const Entry& other) // !!! no const qualification here !!!
{
return age < other.age;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
std::vector<Entry> entries;
for(unsigned int i = 0; i < 100; ++i)
{
Entry entry;
entry.age = i;
entries.push_back(entry);
}
// Sort by age
std::sort(entries.begin(), entries.end());
return 0;
}
是否Visual C++在執行比較/關係運算符的const正確性時不符合標準?或者這與std :: sort有關?
可能是'std :: sort'實現問題:clang比較'const'上下文中的對象,而VC++不是。作爲一般規則,當clang和VC++不同意時,這是因爲VC++的實現有錯誤。 :) – Yakk