是什么阻止了这个初始化工作?
#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' ) };
}
看起来 P
中的转换运算符不能在花括号初始化列表中隐式应用?还是其他原因?
最佳答案
请注意 std::map
的关键部分是常量,所以 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_); }
或
operator std::map<char, char>::value_type () { return make_pair(a_, b_); }
代码可以正常工作。
关于c++ - 使用转换运算符初始化 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40360311/