以下回答参考 皆我百晓生、券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。
boost::pointee返回的是std::string::iterator对象的值,所以它返回char类型。而std::point_traits::element_type返回的是std::string::iterator对象指向元素的类型,也就是char。
如果你在使用std::is_same检查这些类型是否相等,那么std::is_same<...>会比较两个类型的值,并且如果它们不相等就会返回false。因此,在这种情况下,这两个函数的结果不同是正常的。
例如:
#include <iostream>
#include <string>
int main() {
std::cout << (std::is_same<char, boost::pointee<std::string::iterator>::type>::value) ? "true" : "false" << std::endl;
std::cout << (std::is_same<char, std::point_traits<std::string::iterator>::element_type>::value) ? "true" : "false" << std::endl;
}
输出:
true
false