为啥我会收到带有 std::bind() 的“本地临时返回地址”警告?
Posted
技术标签:
【中文标题】为啥我会收到带有 std::bind() 的“本地临时返回地址”警告?【英文标题】:why do I get a 'returning address of local temporary' warning with std::bind()?为什么我会收到带有 std::bind() 的“本地临时返回地址”警告? 【发布时间】:2013-11-21 12:24:06 【问题描述】:我正在尝试使用标准代码 (Josuttis) 将树的键绑定到函数, 但是 Visual Studio 2010 会发出警告(当我运行它时会崩溃):
.../functional(447): 警告 C4172: 返回本地临时地址
代码是:
void print(int x) ...
using namespace std;
map<int, float> m;
for_each(m.begin(), m.end(),
bind( print,
bind( &map<int,float>::value_type::first, placeholders::_1) ) );
这段代码似乎在其他编译器中运行良好。
在windows的bind实现中是否有任何隐藏的东西会导致这个错误?
【问题讨论】:
lambda 可能更简单:[](map<int,float>::value_type pair)print(pair.first);
vs2012 说错误 C2780: 'enable_if::value,std::_Bind代替:
&map<int,float>::value_type::first
使用:
&m::value_type::first
虽然它不应该有所作为,但这样你就不会使用本地临时。
【讨论】:
这会有什么不同?您正在尝试形成指向成员的指针。 不,这是编译器错误:error C2510: 'm' : left of '::' must be a class/struct/union
以上是关于为啥我会收到带有 std::bind() 的“本地临时返回地址”警告?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 __sysChangeTxBsn 会收到带有本地更新但不是远程更新的值?