C++ Move 构造函数无法编译

问题描述 投票:0回答:1

我有一个不幸的问题。我的 GCC 4.6.3 编译器拒绝编译我的移动构造函数。 将示例中的第 6 行替换为“MemoryBlock(const MemoryBlock & other)”将使其编译,但不使用下面的移动构造函数声明。编译器似乎不支持 C+11,尽管它应该使用 4.6.3。对吗?

#include <cstddef>

class MemoryBlock
{
public:
   MemoryBlock(MemoryBlock && other) //<----------- RAD 6.
    {
    }

private:
   size_t _length; // The length of the resource.
   int* _data; // The resource.
};

int main() {

}

编译器输出:

prog.cpp:6:28:错误:在“&&”标记之前应有“,”或“...”

prog.cpp:6:36:错误:构造函数无效;你的意思可能是“MemoryBlock (const MemoryBlock&)”

make: * [slask] 错误 1

海湾合作委员会版本:

g++ (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3(来自 labbsal 和 skolan)

生成文件:

%.out:    %.cpp
    g++ -g -W -Wall -std=c++0x $*.cpp -o $*.out;
c++ c++11 move
1个回答
1
投票

尝试使用 -std=c++11 而不是 -std=c++0x。 虽然您的编译器知道用法,但 -std=c++0x “关闭”这些新规则。

© www.soinside.com 2019 - 2024. All rights reserved.