家里有语言律师吗?
下面的代码应该编译吗?
include <set>
bool fn( const std::set<int>& rSet )
{
if ( rSet.find( 42 ) != rSet.end() ) return true;
return false;
}
在其中一个平台 (Sun Workshop) 上,这不会编译。它报告 find 函数返回了一个迭代器,end 函数返回了一个 const_iterator,并且它在这些类型之间没有有效的比较运算符。
以下编译:
include <set>
bool fn( std::set<int>& rSet )
{
if ( rSet.find( 42 ) != rSet.end() ) return true;
return false;
}
最佳答案
它应该编译。 Set 包括 2 个 find() 函数和 2 个 end() 函数(常量和非常量版本)。听起来好像 Sun 的 STL 以某种方式被破坏了。由于您传递的是常量引用,因此编译器应该能够选择正确的 find() 和 end() 函数。
关于c++ - const set& 的问题。编译器/STL 错误或不可移植的用法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/546993/