Jul*_*ner 24 c++ containers stl reference
在我的程序中,我有一个STL集.
set<string> myStrings;
Run Code Online (Sandbox Code Playgroud)
为了提高代码的效率,我把它改为hold,只有指针.(我不需要存储实际的字符串副本.)
set<string*> myStrings;
Run Code Online (Sandbox Code Playgroud)
我已经读过,在可能的情况下用指针替换指针是一个好习惯.(当然,仅当不需要指针的实际功能时.)
set<string&> myStrings;
Run Code Online (Sandbox Code Playgroud)
但后者给了我很多编译器错误.为什么不能将引用用作容器元素?
Jam*_*lis 45
容器存储对象.引用不是对象.
C++ 11规范明确指出(§23.2.1[container.requirements.general]/1):
容器是存储其他对象的对象.
由于容器存储对象,引用不是对象。如果您使用的是 c++ 11,则可以使用 std::reference_wrapper 将事物包装到可分配对象。
http://en.cppreference.com/w/cpp/utility/functional/reference_wrapper
std::reference_wrapper 是一个类模板,它将引用包装在可复制、可分配的对象中。它经常用作将引用存储在通常不能保存引用的标准容器(如 std::vector)中的机制。
| 归档时间: |
|
| 查看次数: |
14664 次 |
| 最近记录: |