相关疑难解决方法(0)

标准库容器在GCC中的rvalues上生成大量副本

我正在为linux和windows编写一个应用程序,并注意到GCC构建产生了许多对复制构造函数的无用调用.

以下是产生此行为的示例代码:

struct A
{
    A()                { std::cout << "default" << std::endl; }
    A(A&& rvalue)      { std::cout << "move"    << std::endl; }
    A(const A& lvalue) { std::cout << "copy"    << std::endl; }
    A& operator =(A a) { std::cout << "assign"  << std::endl; return *this; }
};

BOOST_AUTO_TEST_CASE(test_copy_semantics)
{
    std::vector<A> vec_a( 3 );
}
Run Code Online (Sandbox Code Playgroud)

此测试仅创建3个元素的向量.我期望3个默认构造函数调用和0个副本,因为没有A左值.

在Visual C++ 2010中,输出为:

default
move
default
move
default
move
Run Code Online (Sandbox Code Playgroud)

在GCC 4.4.0(MinGW)中,( - 02 -std = c ++ 0x),输出为:

default
copy
copy
copy
Run Code Online (Sandbox Code Playgroud)

发生了什么,我该如何解决?副本对于实际类来说是昂贵的,默认构造和移动都很便宜.

c++ gcc mingw rvalue-reference c++11

22
推荐指数
2
解决办法
494
查看次数

使用默认构造函数初始化std :: vector

我有一个类字段,它是一个std :: vector.我知道我希望这个向量包含多少个元素:N.如何用N个元素初始化向量?

c++ c++-standard-library

5
推荐指数
2
解决办法
2万
查看次数

标签 统计

c++ ×2

c++-standard-library ×1

c++11 ×1

gcc ×1

mingw ×1

rvalue-reference ×1