如果我包含“-ansi”,为什么我的 C++0x 代码无法编译?编译器选项?
我遇到了一个非常奇怪的错误,只有当我使用 ansi
标志时才会弹出该错误。
#include <memory>
class Test
{
public:
explicit Test(std::shared_ptr<double> ptr) {}
};
这是使用 gcc 4.5.2 和 4.6.0 (20101127) 进行测试的编译:
g++ -std=c++0x -Wall -pedantic -ansi test.cpp
test.cpp:6:34: error: expected ')' before '<' token
但是不使用 -ansi
进行编译也可以。为什么?
I've come across a really weird error that only pops up if I use the ansi
flag.
#include <memory>
class Test
{
public:
explicit Test(std::shared_ptr<double> ptr) {}
};
Here's the compilation, tested with gcc 4.5.2 and 4.6.0 (20101127):
g++ -std=c++0x -Wall -pedantic -ansi test.cpp
test.cpp:6:34: error: expected ')' before '<' token
But compiling without -ansi
works. Why?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
对于 GNU C++ 编译器,
-ansi
是-std=c++98
的另一个名称,它会覆盖-std=c++0x
> 你之前在命令行上。您可能只需要(
-pedantic
在 C++ 中默认处于启用状态,因此无需再说一遍。如果您想要更挑剔的警告,请尝试添加-Wextra
。)For the GNU C++ compiler,
-ansi
is another name for-std=c++98
, which overrides the-std=c++0x
you had earlier on the command line. You probably want just(
-pedantic
is on by default for C++, so it's unnecessary to say it again. If you want pickier warnings, try adding-Wextra
.)std::shared_ptr
在 c++98 中不存在。尝试以下更改:std::shared_ptr
doesn't exist in c++98. Try these changes:嗯,因为 C++0x 还没有 ANSI 标准? ANSI 标志检查是否符合现有标准,而不是未来的标准。
Um, because there is not yet an ANSI standard for C++0x? The ANSI flag checks for conformance with existing standards, not future ones.