为什么我不能在最新版本的 GCC 中使用 auto 关键字
why i cannot use the auto keyword in the last version of gcc
All,最近我尝试使用 c++11 支持的新功能,我写了这样的语句,但编译器运行失败。
auto x = 1;
下面列出的报告错误:
D:DEVCBCppTestmain.cpp||In function 'int main()':|
D:DEVCBCppTestmain.cpp|22|warning: 'auto' changes meaning in C++11; please remove it [-Wc++0x-compat]|
D:DEVCBCppTestmain.cpp|22|error: 'x' does not name a type|
||=== Build finished: 1 errors, 1 warnings ===|
为什么 MinGW 上的最后一个 gcc 版本 4.7.0 不能支持这个说法。但是 vs10 的编译器通过了。谁能知道这个问题的原因?
"GCC 为 2011 ISO C++ 标准提供实验性支持。可以使用 -std=c++11 或 -std=gnu++11 编译器选项启用此支持;前者禁用了GNU扩展。
它来自这里:c+11 支持
解释编译器实际上在抱怨什么: auto
曾经是一个旧的 C 关键字,声明此变量具有自动存储。这些关键字与类型系统关系不大,它们指定变量在内存中的表示方式:它们的存储位置(处理器寄存器与主内存/堆栈)以及如何回收内存。 auto
意味着变量存储在堆栈上(尽管处理器可能会将其优化为处理器寄存器),并且当变量超出范围时,内存会自动回收 - 这几乎是任何情况的正确选择1,因此是默认值,因此几乎没有人使用过这个旧的auto
关键字。然而,C++03
仍然为具有它的代码提供了向后兼容性;今天的编译器仍然希望支持遗留代码。
1虽然您通常希望对象驻留在堆上,但您仍然会通过堆栈上的变量访问这些对象;C++有自己的使用堆分配内存的方法(new
、std::vector
等),你不需要不安全的C式malloc
的东西。
编译时,需要将-std=c++11
添加到 g++ 命令行。
这是由于 GCC 编译器默认未启用该功能。如果您使用的是代码块,请转到"设置"--"编译器">并启用该功能,如下所示 - https://i.stack.imgur.com/e4Wq6.jpg
将"-std=c++0x"添加到g ++命令行解决了这个问题。
- C++/11 auto 关键字是在更有效时推导参数进行按引用传递,还是始终按值传递?
- auto 关键字在 Dev c++ 中不起作用
- 为什么我需要明确编写"auto"关键字?
- 在C++中使用 auto 关键字
- 在 VS Code 中编码时不能在 C++ 中使用 auto 关键字
- 避免使用 auto 关键字从字面上复制 const 和非 const 的代码?
- 省略C++可变参数 lambda 中的"auto"关键字?
- 我可以在动态知道其类型的模板类对象中使用 auto 关键字吗?我不能在没有初始值设定项的情况下使用 auto 关键字吗?
- 使用 auto 关键字初始化字符数组
- auto*在编译时有用吗?auto关键字足够了吗
- lambda 中的跨平台"auto"关键字用法:integral_constant作为函数参数
- 使用 C++11 auto 关键字声明两个(或多个)变量
- C++11: "auto"关键字会检索到cv限定符吗?我有矛盾的样本
- 为什么 auto 关键字不能与指向函数的指针的初始化列表一起使用?
- 遍历多维向量(使用 Auto 关键字?
- 返回指向 const 数据成员和 'auto' 关键字的 const 指针。有点困惑
- 使用 auto 关键字时不遵守对齐方式 16
- 使用auto关键字填充双索引向量
- C++11中的auto关键字奇怪行为
- 在 C++ 中使用 Lambda 表达式和 auto 关键字时出现问题