我想知道一个指针向量是否包含一个NULL的条目,最好使用STL中的代码而不是写一个循环.我试过这个表达式:
std::find(dependent_events.begin(), dependent_events.end(), NULL)
Run Code Online (Sandbox Code Playgroud)
但我得到错误告诉我,我有一个"指针和整数之间的比较." 有一个更好的方法吗?
Kon*_*lph 12
NULL在C++中只是一个整数常量.指针转换隐含在适当的上下文中,但这不是一个.你需要明确地施放:
std::find(dependent_events.begin(), dependent_events.end(), static_cast<P>(0));
Run Code Online (Sandbox Code Playgroud)
P集合中指针的适当类型在哪里.或者,Eddie正确地指出了C++ 11解决方案,该解决方案应该适用于现代编译器(如果已启用C++ 11).
plain NULL不起作用的原因如下:C++禁止将整数隐式转换为指针.只有一个例外,文字值 0在初始化和指针赋值中被视为空指针(文字0充当"空指针常量",§4.10),并且NULL只是0(§18.1.4).
但是,在一个模板实例中使用时(如在上面的调用find),C++需要推断的模板类型为其每个参数和推断的类型0是总是相同的:int.因此find,使用int参数调用(在函数内部,不再是文字),如上所述,int指针之间没有隐式转换.
Edd*_*tes 11
尝试
std::find(dependent_events.begin(), dependent_events.end(), nullptr)
Run Code Online (Sandbox Code Playgroud)
这假设您使用的是新的c ++ 11标准.
就像我在上面的评论中所说的,NULL实际上是一个#define NULL 0,一个更精确的整数.
如果不使用c ++ 11,请尝试:
std::find(dependent_events.begin(), dependent_events.end(), static_cast<void*>(NULL));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2113 次 |
| 最近记录: |