wjl*_*wjl 17 c++ initializer-list rvalue-reference c++11
std::initializer_list我所看到的大多数C++ 11代码都是按值来获取的,但有时它是由右值引用获取的.这样做有什么好的理由吗?
例如,我遇到的几乎所有例子都是这样的:
class A {
public:
A(std::initializer_list<int>);
};
Run Code Online (Sandbox Code Playgroud)
但我偶尔会看到这件事:
class B {
public:
B(std::initializer_list<int> &&);
};
Run Code Online (Sandbox Code Playgroud)
我理解一般的rvalue引用的用途和目的,但为什么在a的情况下,其中一个优先于另一个std::initializer_list?我唯一能想到的是class A允许初始化列表单独构建,并class B防止这种情况发生.
std::initializer_list<int> values {1,2,3,4};
A a(values); // valid
B b(values); // error
Run Code Online (Sandbox Code Playgroud)
但我想不出一个很好的理由,为什么要防止这是一件令人满意的事情.
那么,为什么会std::initializer_list采用右值参考而不是值?