为什么 ++ 运算符触发器返回对局部变量警告的引用
Why ++ operator triggers returns a reference to a local variable warning
++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
是一个局部变量,因此通过引用返回它会生成您看到的警告。
相关文章:
- 警告 C4101 未引用的局部变量
- libmysql:警告:返回局部变量"行"的地址(C++/C)
- 为什么 ++ 运算符触发器返回对局部变量警告的引用
- 三元运算符:编译器不发出局部变量警告的返回引用
- 为什么 C++ 编译器不警告返回对局部变量的引用
- 警告:返回局部变量'buffer'地址
- 没有返回对局部变量的引用的编译器警告
- 警告:返回局部变量"角度"的地址 [-Wreturn-local-addr]
- 警告 C4700:未初始化的局部变量
- 为什么编译器在返回对局部变量的局部引用时不警告"returning address of local variable or temporary"?
- 在 catch 块中使用 g++ 或 clang++ 启用未引用的局部变量警告
- 编译器警告 re:对局部变量的引用
- 将未初始化的局部变量传递给函数时,C++编译器警告(?)
- 警告 C4700:使用未初始化的局部变量"p"
- 纯虚函数=未引用的局部变量警告
- 非局部变量在c++中使用匿名类型警告
- 捕获带有未引用局部变量警告的异常
- 禁用局部变量的未初始化警告
- 如何在g++中设置警告,以警告返回指向局部变量的指针
- GCC 中的断言和未使用的局部变量警告不能很好地混合?