gpt4 book ai didi

具有标准容器和常量引用的 C++ 代码显示出意外的内存

转载 作者:行者123 更新时间:2023-11-28 08:00:43 26 4
gpt4 key购买 nike

我们在生产中有以下代码(大致相同),并且看到了一些奇怪的行为。标记为“HERE”的部分始终输出最后插入到 accrualRows 字典中的内容。如果我们更改 hash_map 以存储指向“行”的指针,那么一切正常。我有点怀疑在 std 容器中使用 const & ..你不能在标准容器中使用引用,但这些是常量引用,我知道在某些地方处理不同(例如:你可以分配临时变量和常量引用的文字)

#define hash_map std::tr1::unordered_map
//build up a hash map between deal index and the row for ones we care about

typedef hash_map<int, const Row &> RowMap;
RowMap accrualRows;
for( int i = 0; i < listItems.numResults(); ++i )
{
const Row & accrual = listItems.getResult(i);
if( accrual.someVar )
{
accrualRows.insert( std::make_pair( accrual.index, accrual ) );
}
}

//go through every row and if deal index is in our accrualRows, then
//modify

for( int i = 0; i < numResults(); ++i )
{
ExposureRow & exposure = getResult(i);
RowMap::const_iterator it = accrualRows.find( exposure.index );

if( it != accrualRows.end() )
{
// HERE
cout << it->second.someVar << endl;
}
}
}

谁能看出是什么问题?

最佳答案

您不能在容器中存储引用。容器只能存储对象。如果您需要存储“引用”,您可以使用 std::reference_wrapper 或使用指针。

关于具有标准容器和常量引用的 C++ 代码显示出意外的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11555042/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com