GCC 4.8.1 C ++ 11完成了吗?

时间:2013-12-12 03:50:56

标签: c++ c++11 mingw codeblocks

操作系统是Windows。

我首先要说的是我没有使用过C ++或其他任何编译语言的经验。我已经使用了CPython并且熟悉它,但是,直到今天早些时候,我甚至都没有看过C ++源代码。

我正在尝试自学C ++,所以我一直在玩它,我遇到的一个问题是错误:

error: 'to_string' was not declared in this scope

显然,to_string是一个C ++ 11的东西, 应该没问题。我下载了最新的MinGW,将其添加到我的路径中 - 我已经检查并运行

g++ - v

确实告诉我我安装了4.8.1版本。我正在使用的IDE,Code :: Blocks发现它没有问题,但它根本不会使用任何C ++ 11的东西,给我错误,如上面的那个。不是C ++ 11独有的东西编译得很好。

在编译器标志下有一个部分“遵循C ++ 11语言标准”,我已经检查过了,但即使这样,我也会遇到同样的错误。我真的不确定发生了什么 - 我看了这个,所有的建议是更新IDE或MinGW(两者都是最新的),或选择那个标志,就像我一样说,已经被选中了。

对C ++有更多经验的人是否知道可能会发生什么?b

4 个答案:

答案 0 :(得分:10)

我的理解是,除regex支持外,G ++的C ++ 11支持在很大程度上完成了4.8.1。

以下两个链接突出显示了G ++ 4.8.1和libstdc ++中C ++ 11支持的状态:

但是,要编译C ++ 11代码,需要在编译时包含命令行标志-std=c++11

答案 1 :(得分:1)

std :: string不符合规定;它仍然使用遗留(以及特别是线程的bug)' copy on write'行为。您可以使用__gnu_cxx :: __ vstring作为解决方法。

"类模板basic_string部分不合规的写时复制实现"

http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.200x https://gcc.gnu.org/bugzilla/show_bug.cgi?id=21334

相关:Does g++ meets std::string C++11 requirements

答案 2 :(得分:0)

关于核心语言,g ++ 4.8系列并不完整。以下编译和运行g ++ 4.9及更高版本(以及clang ++ 3.3及更高版本),但不适用于g ++ 4.8.5(或g ++ 4.8系列的任何先前成员)。

#include <iostream>

void ordinary_function (int&)  { std::cout << "ordinary_function(int&)\n"; }   

void ordinary_function (int&&) { std::cout << "ordinary_function(int&&)\n"; }   

template<class T>
void template_function (T&)  { std::cout << "template_function(T&)\n"; }   

template<class T>
void template_function (T&&) { std::cout << "template_function(T&&)\n"; }   

int main () {   
    int i = 42; 
    ordinary_function(42); // Not ambiguous.
    ordinary_function(i);  // Not ambiguous.
    template_function(42); // Not ambiguous.
    template_function(i);  // Ambiguous in g++4.8.
}   

答案 3 :(得分:0)

std::liststd::function的行为不符合C ++ 11标准。 libstdc ++的文档在[[https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dual_abi.html]中 名为_GLIBCXX_USE_CXX11_ABI的宏可以控制它们在GCC5 /更高版本中的行为。

此外,GCC-4.8中的C ++ 11 std::function与GCC-5和更高版本不同,并且没有宏可以控制while random != 4.0的行为。 [Undocumented ABI changes of std::function between GCC-4 and GCC-5/6/7/8/9, how to make a .so working with devtoolset-4/6/7/8/9?]

GCC-4.8中的C ++ 11被认为是实验性支持,因此不必太依赖它。