和之间的主要区别是显而易见的[link]。++varvar++
我的问题是关于参考文献的影响。这是详细信息:我参考cuDF::multimap了以下内容:
found = map->find(key)
Run Code Online (Sandbox Code Playgroud)
当我尝试增加该引用时,使用++found效果很好。但是,使用found++将返回以下警告:
警告:返回对局部变量的引用
我了解警告的含义。有人可以解释为什么我收到此警告吗?
更多细节
也就是说,以下代码段将生成上述警告。
found = map->find(key);
while (found != map->end() && found->first != unusedKey) {
std::cout << found->second << std::endl;
found++;
}
Run Code Online (Sandbox Code Playgroud)
但是,这不会产生任何警告:
found = map->find(key);
while (found != map->end() && found->first != unusedKey) {
std::cout << found->second << std::endl;
++found;
}
Run Code Online (Sandbox Code Playgroud)
好的,已经研究了库的源代码cuDF。
map->find(key)返回一个迭代器,该迭代器是template类的实例化cycle_iterator_adapter。
它的后缀增量运算符定义如下:
__host__ __device__ cycle_iterator_adapter& operator++(int)
{
cycle_iterator_adapter<iterator_type> old( m_begin, m_end, m_current);
if ( m_end == (m_current+1) )
m_current = m_begin;
else
++m_current;
return old;
}
Run Code Online (Sandbox Code Playgroud)
这里的返回类型是cycle_iterator_adapter&,这是一个引用。由于old是局部变量,因此按引用返回它会生成您看到的警告。
| 归档时间: |
|
| 查看次数: |
131 次 |
| 最近记录: |