我有这样的 C++ 代码(请不要问为什么它看起来这么难看;)——你必须相信,由于代码的更多部分,它确实有意义):
IntSet temp;
SuperSet superSet;
for (uint i = 0; i < noItems; i++) {
temp.insert(i);
superSet.insert(temp);
temp.clear();
}
它用于准备 noItems
整数集合(IntSet
,每个包含一个整数值)并将其插入到其他集合(SuperSet
)。两个集合定义如下:
typedef unsigned int DataType;
typedef std::set<DataType> IntSet;
typedef std::set<IntSet> SuperSet;
对我来说,这段代码不应该按预期工作,因为在插入之后temp
我superSet
正在清除temp
,并且我发现它insert
得到了一个引用作为它的参数pair<iterator,bool> insert ( const value_type& x );
:(http://www.cplusplus.com/reference/stl/设置/插入/)
因此,作为上述代码的结果,我应该得到一个SuperSet
只包含 clearIntSet
的。但是“不幸的是”这段代码有效——所有IntSet
的都充满了正确的值……所以我的问题是——STL集合中的insert方法在它的主体中真正做了什么?它只是复制通过引用传递给它的对象吗?传递对象或原始类型之间的这种方法的行为有什么区别?
谢谢您的回答!