Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么++;运算符触发器返回对局部变量警告的引用_C++ - Fatal编程技术网

C++ 为什么++;运算符触发器返回对局部变量警告的引用

C++ 为什么++;运算符触发器返回对局部变量警告的引用,c++,C++,++var和var++之间的主要区别是显而易见的 我的问题是它们对参考文献的影响。以下是详细信息:我有一个对cuDF::multimap的引用,如下所示: found = map->find(key) 当我尝试增加该引用时,使用++found可以很好地工作。但是,使用found++返回以下警告: 警告:返回对局部变量的引用 我理解这个警告的含义。有人能解释为什么我会收到这个警告吗 更多详细信息 也就是说,下面的代码片段将生成上述警告 found = map->find(key);

++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(键);
while(found!=map->end()&&found->first!=unusedKey){

std::cout secondOk,已经深入到库的源代码
cuDF

map->find(key)
返回一个迭代器,它是模板类
cycle\u iterator\u adapter
的一些实例化

其后缀增量运算符定义如下:

\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
{
循环迭代器适配器旧(m_开始、m_结束、m_当前);
如果(m_端==(m_电流+1))
m_电流=m_开始;
其他的
++m_电流;
返老还童;
}

这里的返回类型是
cycle\u iterator\u adapter&
,这是一个引用。由于
old
是一个局部变量,通过引用返回它会生成您看到的警告。

我相信编译器会收到警告,因为您正在返回对函数局部变量的引用。
++found
可能会返回引用ce after inc.
found++
必须返回inc之前的值。因此,您可能得到了一个副本-一个临时副本。返回对它的引用使编译器抱怨合理。顺便说一句,从您公开的代码中,
found++
的相关细节不清楚。a会很好。“当我尝试增加该引用时”不要说,show。什么是cuDF::multimap?@all,有人知道我为什么在这里得到了两个-1吗?当库使用非惯用代码来实现其代码的基本部分时,这是很不幸的。@RSahu是的。我相信这是库中的一个bug。操作符应该返回
cycle\u iterator\u adapter
found = map->find(key);
while (found != map->end() && found->first != unusedKey) {
    std::cout << found->second << std::endl;
    ++found;
}