在Visual Studio上,这段代码就像魅力一样:
auto child = node.childs.begin();
while (child != node.childs.end()) {
vector<int> siblings;
for (auto it : node.childs){
if (it != *child._Ptr)siblings.push_back( it );
}
if (CheckSomething( tree, *child._Ptr, siblings ) > 0) {
//delete that child
child = node.childs.erase( child );
}
else ++child;
}
但是在XCode上使用相同的代码我遇到了_Ptr不存在的错误?是不是具有相同结构的std库?为什么会这样?
File.cpp:1745:22: No member named '_Ptr' in 'std::__1::__wrap_iter<int *>'
提前致谢
答案 0 :(得分:1)
规范没有定义这样的成员变量。 _Ptr
是特定于实现的(在本例中为特定于MSVC的)成员变量,在其他实现中可能存在也可能不存在。
通常,以下划线开头的名称是指特定于实现的成员。如果您希望您的代码可以移植或不在编译器版本之间中断,那么就不要访问它们。
答案 1 :(得分:0)
确切地说,它不是同一个库。通过访问VS中的_Ptr
,您依赖于实现行为,可以随时更改,包括更新VS时。
我不知道_Ptr
是什么(记住:那个实现是定义的,应该永远不会被访问过,所以可能没有记录),但看看std::vector
(如果是类型的话) node.childs
),看看你是否能找到与_Ptr
完全相同的东西。
根据经验,不要使用以一个或两个下划线开头的名称。