c++ - 为什么 ++ 运算符触发器返回对局部变量警告的引用
问题描述
和之间的主要区别很明显[link]。++var
var++
我的问题是关于它们对参考文献的影响。这是详细信息:我有一个参考,cuDF::multimap
如下所示:
found = map->find(key)
当我尝试增加该引用时,使用++found
效果很好。但是,使用found++
会返回此警告:
警告:返回对局部变量的引用
我理解警告的含义。有人可以解释为什么我会收到此警告吗?
更多细节
也就是说,以下代码片段将生成上述警告。
found = map->find(key);
while (found != map->end() && found->first != unusedKey) {
std::cout << found->second << std::endl;
found++;
}
但是,这不会产生任何警告:
found = map->find(key);
while (found != map->end() && found->first != unusedKey) {
std::cout << found->second << std::endl;
++found;
}
解决方案
好的,已经深入了解了库的源代码cuDF
。
map->find(key)
返回一个迭代器,它是模板类的一些实例化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;
}
这里的返回类型是cycle_iterator_adapter&
,它是一个引用。由于old
是局部变量,因此通过引用返回它会生成您看到的警告。
推荐阅读
- vector - 从坐标系原点画线到特定点
- r - 使用 R 代码进行新的概率模型拟合
- scala - 依赖关系解析失败了 Circle CI 的构建过程:androidx.annotation
- javascript - HTML5 getUserMedia 不适用于科学显微镜相机 Lumenera
- google-play-console - 如何将封闭轨道中的应用程序发布定位到组织?
- django - 将请求模块与 Django APITestCase 和 APIClient 一起使用?
- marklogic - 从 Apache Nifi 运行 MarkLogic Data Hub 5 流
- python - 将我的第一个 Django 应用程序部署到 Heroku:错误消息“h12”状态“503”
- postgresql - 授予对所有数据库中所有表的只读权限
- java - WifiManager 不适用于使用 Java 的 Android Q API 29?