不同平台上比较方法中的 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&lt;(P const &amp; p) const 顺便说一句,您可以并且应该将更高版本的 gcc 与 C::B 一起使用。 @M.M 不需要const bool,你走得太远了。 @MarkRansom 没有实际意义,它损害了可读性,但仅此而已 我不知道为什么这会吸引反对票,这似乎是一个合理的问题。 【参考方案1】:

这可能是因为在那些 gcc 版本中,排序的实现方式不同。我在 VS2005 下检查过,它也产生了这样的错误,但是从我的 stl 实现来看 - 我看到排序时使用了很多 const T&amp; 参数。如果在没有 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++ 常量引用的主要内容,如果未能解决你的问题,请参考以下文章

C++ 数组array与vector的比较

C++二级指针和指针引用

c++中的左值和右值,右值引用到底是啥?关于引用这一节看得很迷糊。

java基础知识

如何自己编写Arduino支持的C++类库

Java中不同对象调用该实例方法返回值是同一个地址空间吗?