小编Sha*_*nov的帖子

为什么来自匿名对象的 std::pair 复制该对象而不是移动?

我试图std::pair用这种风格制作:

#include <iostream>

struct A {
    A() noexcept {
        std::cout << "Created\n";
    }
    A(const A&) noexcept {
        std::cout << "Copy\n";
    }
    A(A&&) noexcept {
        std::cout << "Move\n";
    }
};

int main() {
    std::pair<A, A> a{ {},{} };
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

并得到这样的输出:

Created
Created
Copy
Copy
Run Code Online (Sandbox Code Playgroud)

代替

Created 
Created
Move
Move
Run Code Online (Sandbox Code Playgroud)

但是如果我定义我的匿名对象类型(例如std::pair<A, A> a{A{}, A{}})或使用std::make_pair<A, A>({}, {})我得到正确的结果。

std::pair构造函数必须使用std::forward<U1>std::forward<U2>来初始化对象,因此我认为我的配对使用了错误的构造函数。为什么?

c++ stl std-pair

45
推荐指数
1
解决办法
1753
查看次数

标签 统计

c++ ×1

std-pair ×1

stl ×1