c++ - const set& 的问题。编译器/STL 错误或不可移植的用法?

标签 c++ stl constants set standards

家里有语言律师吗?

下面的代码应该编译吗?

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/

相关文章:

c++ - 将数据打印到文件

c++ - 将通用结构作为接口(interface)中的参数传递

c++ - Windows - 使用可视化库 FMXMain 获取参数

c++ - std::optional::value_or() - 惰性参数评估

c++11 - C++ std::set upper_bound 迭代器行为

c++ - 在 C++ 中使用堆栈

const 指针指向 const 指针

c++ - 关键部分是否确保由一个线程修改的任何数据类型的共享变量对其他线程可见?

string - 空间复杂度 O(1) 存储字符串

具有延迟初始化的 C++ const getter 方法