不同平台上比较方法中的 C++ 常量引用
Posted
技术标签:
【中文标题】不同平台上比较方法中的 C++ 常量引用【英文标题】:C++ constant reference in compare method on different platforms 【发布时间】:2015-12-15 19:46:20 【问题描述】:我有这段用于对结构进行排序的 c++ 代码,
const bool operator<(P& p) const
//...
它在带有“gcc 4.9.2”的 linux 设备上编译没有任何问题。 但是,如果在带有“gcc 4.7.1”(Code::Blocks 13.12 附带的那个)的 Windows 机器上尝试它,它会产生令人讨厌的错误,您可以在此处看到 http://pastebin.com/S28tD9kc
在这两种情况下我都使用了编译:“g++ -std=c++11”
如果我将“operator
一个example。
【问题讨论】:
应该是const bool operator<(P const & p) const
顺便说一句,您可以并且应该将更高版本的 gcc 与 C::B 一起使用。
@M.M 不需要const bool
,你走得太远了。
@MarkRansom 没有实际意义,它损害了可读性,但仅此而已
我不知道为什么这会吸引反对票,这似乎是一个合理的问题。
【参考方案1】:
这可能是因为在那些 gcc 版本中,排序的实现方式不同。我在 VS2005 下检查过,它也产生了这样的错误,但是从我的 stl 实现来看 - 我看到排序时使用了很多 const T&
参数。如果在没有 const& 参数的情况下使用 operator
struct my_comp
bool operator() (const P& a, const P& b) const
return const_cast<P&>(a).operator<(const_cast<P&>(b));
;
std::vector<P> pp(10);
std::sort(pp.begin(), pp.end(), my_comp());
我不确定这是否是正确的代码,只是为了编译实验而写的。
另一方面,在 Visual Studio 2015 下,使用 operator
【讨论】:
以上是关于不同平台上比较方法中的 C++ 常量引用的主要内容,如果未能解决你的问题,请参考以下文章