tow*_*owi 2 c++ initializer-list implicit-conversion
是什么阻止了这个初始化工作?
#include <map>
using std::map; using std::pair; using std::make_pair;
struct P {
char a_, b_;
P(char a, char b) : a_{a}, b_{b} {}
operator pair<char,char>() { return make_pair(a_, b_); }
};
int main() {
map<char,char> qmap { P( 'a','b' ) };
}
Run Code Online (Sandbox Code Playgroud)
看起来转换运算符 inP不能隐式应用在花括号初始化列表中?或者是别的什么?
注意a的关键部分std::map是const,所以元素的类型std::map<char, char>是std::pair<const char, char>; 类型在这里不匹配。std::pair<char, char>带大括号的返回不能用于构造std::initializer_list<std::pair<const char, char>>, (然后std::map<char, char>进一步构造)。
如果你把它改成
operator pair<const char,char>() { return make_pair(a_, b_); }
Run Code Online (Sandbox Code Playgroud)
或者
operator std::map<char, char>::value_type () { return make_pair(a_, b_); }
Run Code Online (Sandbox Code Playgroud)
代码可以正常工作。
| 归档时间: |
|
| 查看次数: |
108 次 |
| 最近记录: |