在我最近的一个项目中,我在 Ubuntu (cmake+gcc 4.8.4) 上进行了开发工作。代码构建良好。但是,当我尝试在 cygwin (cmake + gcc 5.3) 中构建相同的代码时,我收到了 std::bind 的编译器错误。这在执行 #include <functional>
时消失了.然而,这让我有点担心。我希望我的代码能够在相同或非常相似的编译器上正常工作。
我刚刚发布了一段将在 CentOS 上使用的代码。我只是假设因为我的代码在 Ubuntu 上构建得很好,所以其他具有类似编译器的 linux 发行版应该不是问题。但是,我不再确定我的代码是否可以在 CentOS 上正常构建。
我的问题是这样的。我可以假设如果我的代码在我的 Ubuntu 机器上使用特定版本的 gcc 构建良好,它也可以在具有相同或更高版本 gcc 的其他 linux 发行版上构建良好吗?还是我过于乐观,应该依赖更多测试?或者这与 std::bind 本身有关?
最佳答案
不能保证所有 gcc 编译器版本的行为都相同。特别是 w.r.t. C++ 11 特性在编译器版本之间存在一些不兼容的变化。 gcc 4.8 仍然只有实验性的 C++ 11 支持。标准说 std::bind 带有 <functional>
,因此 gcc 5.3 正确地要求您包含它:
http://en.cppreference.com/w/cpp/utility/functional/bind
旧版本的 gcc 可能包含 <functional>
在您拥有的其他一些包含中,或者该绑定(bind)是在另一个包含中提供的。
在不同的编译器版本甚至完全不同的编译器(如 clang)上测试软件总是一个好主意。否则,您可能会在不知情的情况下使用 C++ 标准的扩展或小偏差,从而被绑定(bind)到特定的编译器版本。
关于c++ - std::bind 编译器错误 gcc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38306389/