操作系统是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
答案 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
答案 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::list
和std::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被认为是实验性支持,因此不必太依赖它。