c++ - std::bind 编译器错误 gcc

标签 c++ linux c++11 gcc

在我最近的一个项目中,我在 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/

相关文章:

c++ - C++ 数据结构对象的生命周期是多少?

linux - 递归遍历文件夹和删除文件的 Bash 脚本

Linux 查找重复项将附加文件发送到新目录

c++ - 为什么 1ll << i 确实给出了正确答案,但没有给出 long long i ; 1<<我?

c++ - 非尾随函数模板参数包的合法使用?

c++ - Qpushbutton 图标出现在实际按钮的左侧,如何居中或拉伸(stretch)它?

c++ - 如何从 C++ 中的枚举返回随机元素

C++ lambda 函数 - 如何返回与目标相比最近的 vector 元素

c++ - 如何防止 std::string 使用 initializer_list 构造函数?

linux-shell : renaming files to creation time