MinGW g++ 4.8.1 怎么不支持 auto数据类型

shmiloveyou 2014-04-03 01:09:50
看到C++11标准文档中说支持 自动数据类型 “auto”,于是尝试用了下,代码如下:
#include <iostream>

using namespace std;

auto ret = 3;
int main(void)
{
auto var = 3.14f;
cout << var << endl;
return 0;
}


使用的MinGW工具中的g++ 4.8.1 编译,提示如下错误:
G:\MinGW>g++ -c -o auto.o auto.cpp
auto.cpp:5:6: error: 'ret' does not name a type
auto ret = 3;
^
auto.cpp: In function 'int main()':
auto.cpp:8:10: error: 'var' does not name a type
auto var = 3.14f;
^
auto.cpp:9:10: error: 'var' was not declared in this scope
cout << var << endl;
^


开始怀疑MinGW的g++ 4.8.1不是完全支持C++11标准,但是GCC官网给出如下说明:
GCC 4.8.1 will be C++11 feature-complete [2013-04-01]
Support for C++11 ref-qualifiers was added to the GCC 4.8 branch, making G++ the first C++ compiler to implement all the major language features of the C++11 standard. This functionality will be available in GCC 4.8.1.


GCC 4.8.1版本已经完成支持C++11的特性。实在闹不明!请高手帮忙解决这个问题。




...全文
280 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
FrankHB1989 2014-04-04
  • 打赏
  • 举报
回复
没-std=c++0x(G++4.4+)和-std=c++11(G++4.7+)或者-std=c++1y(G++4.8+)或者对应的gnu方言选项就当-std=gnu++98。 具体默认用了什么选项自己看-dumpspecs。有些distro会自己改,但官方源码里没有设置。
shmiloveyou 2014-04-04
  • 打赏
  • 举报
回复
谢谢各位的解答!
江北百晓生 2014-04-04
  • 打赏
  • 举报
回复
引用 8 楼 qq2399431200 的回复:
[quote=引用 7 楼 huxizero10 的回复:] 无楼正解,其实自己编译GCC的时候就可以用补丁文件修改默认支持的是C++11
请问具体如何修改?[/quote] 补丁文件:
diff -aurN gcc-4.8.0/gcc/c-family/c-common.c gcc-4.8.0-fixed/gcc/c-family/c-common.c
--- gcc-4.8.0/gcc/c-family/c-common.c	2013-03-08 23:54:02 -0800
+++ gcc-4.8.0-fixed/gcc/c-family/c-common.c	2013-03-31 00:01:56 -0700
@@ -238,9 +238,9 @@
 
 int flag_use_repository;
 
-/* The C++ dialect being used. C++98 is the default.  */
+/* The C++ dialect being used. C++11 is the default.  */
 
-enum cxx_dialect cxx_dialect = cxx98;
+enum cxx_dialect cxx_dialect = cxx11;
 
 /* Maximum template instantiation depth.  This limit exists to limit the
    time it takes to notice excessively recursive template instantiations.
diff -aurN gcc-4.8.0/gcc/c-family/c-opts.c gcc-4.8.0-fixed/gcc/c-family/c-opts.c
--- gcc-4.8.0/gcc/c-family/c-opts.c	2013-02-18 11:42:56 -0800
+++ gcc-4.8.0-fixed/gcc/c-family/c-opts.c	2013-03-31 00:01:56 -0700
@@ -210,7 +210,7 @@
   unsigned int i;
   struct cpp_callbacks *cb;
 
-  parse_in = cpp_create_reader (c_dialect_cxx () ? CLK_GNUCXX: CLK_GNUC89,
+  parse_in = cpp_create_reader (c_dialect_cxx () ? CLK_GNUCXX11 : CLK_GNUC89,
 				ident_hash, line_table);
   cb = cpp_get_callbacks (parse_in);
   cb->error = c_cpp_error;
shmiloveyou 2014-04-04
  • 打赏
  • 举报
回复
引用 7 楼 huxizero10 的回复:
无楼正解,其实自己编译GCC的时候就可以用补丁文件修改默认支持的是C++11
请问具体如何修改?
江北百晓生 2014-04-04
  • 打赏
  • 举报
回复
无楼正解,其实自己编译GCC的时候就可以用补丁文件修改默认支持的是C++11
码工许师傅 2014-04-04
  • 打赏
  • 举报
回复
五楼正解。。。
max_min_ 2014-04-03
  • 打赏
  • 举报
回复
楼上正解。。
dbzhang800 2014-04-03
  • 打赏
  • 举报
回复
--std=c++11
  • 打赏
  • 举报
回复
默认是不开启的 编译时需要加上参数 --std=c++0x

64,678

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧