如何使用移动构造函数获取g ++来编译c ++ 11代码?

Col*_*lin 21 c++ g++ move-constructor c++11

我似乎无法使用g ++来编译使用移动构造函数的c ++ 11代码.我一直收到这个错误:

collin@Serenity:~/Projects/arraylib$ g++ ./t2.cpp
./t2.cpp:10:27: error: expected ‘,’ or ‘...’ before ‘&&’ token
./t2.cpp:10:38: error: invalid constructor; you probably meant ‘Blarg (const Blarg&)’
Run Code Online (Sandbox Code Playgroud)

我正在编写的程序与此完全不同,但我将其修改为看起来应该绝对可行的部分,但仍会触发错误:

#include <iostream>

using namespace std;

class Blarg {
    public:
        Blarg () {};
        Blarg (const Blarg& original) {}; /* Copy constructor */
        Blarg (Blarg&& original) {}; /* Move constructor */
};

int main(int argc, char *argv[])
{
    Blarg b;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

谁能告诉我我做错了什么?相反,如何解决它?

这是我的gcc版本:

gcc (Ubuntu/Linaro 4.6.2-14ubuntu2) 4.6.2
Run Code Online (Sandbox Code Playgroud)

Ker*_* SB 39

g++ -std=c++0x ./t2.cpp.

当你在它的时候,你也可以做正确的事并启用所有警告:

g++ -W -Wall -Wextra -pedantic -std=c++0x -o t2 t2.cpp
Run Code Online (Sandbox Code Playgroud)

你真的,真的不应该用更少的编译,特别是如果你要在SO上询问关于你的代码的问题:-)应该考虑发布版本的各种优化标志,例如-s -O2 -flto -march=native.

  • "做得对",而-std = c ++ 0x的手册页指出"此选项启用了将来可能删除的实验性功能"他们肯定在这些联机帮助页面中是防御性的:-) (2认同)
  • @CaptainGiraffe:可以肯定的是,方言选项不包含在"正确行事"之下.也就是说,`c ++ 0x`将会支持一段时间,但从4.7开始你也可以说`c ++ 11`. (2认同)

Wil*_*eld 14

您可能忘了添加-std=c++0x到命令行.