我在程序中使用了STL set。
set<string> myStrings;
为了提高代码的效率,我将其改为仅保存指针(我不需要存储实际的字符串副本)。set<string*> myStrings;
我读过,如果可能的话,用引用替换指针是一个好的实践。(当然,仅在指针的实际功能不需要时。)
set<string&> myStrings;
虽然后一种方法更简洁,但会产生很多编译错误。 为什么不能将引用作为容器元素使用?
我在程序中使用了STL set。
set<string> myStrings;
为了提高代码的效率,我将其改为仅保存指针(我不需要存储实际的字符串副本)。set<string*> myStrings;
我读过,如果可能的话,用引用替换指针是一个好的实践。(当然,仅在指针的实际功能不需要时。)
set<string&> myStrings;
虽然后一种方法更简洁,但会产生很多编译错误。 为什么不能将引用作为容器元素使用?
容器存储对象。引用不是对象。
C++11规范明确指出(§23.2.1[container.requirements.general]/1):
容器是存储其他对象的对象。
int
和int*
都是对象(在C++中,“对象是存储区域”(C++03 1.8/1))。引用永远不是对象。引用C++标准的话,“容器是存储其他对象的对象”(23.1/1)。 - James McNellis虽然不直接与“为什么”有关,但为了回答意味着要这样做的暗示,我想提到C++11标准库具有std::reference_wrapper,可以实现这一点。它可以隐式转换为引用并存储在标准容器中。
shared_ptr
(或者,如果您的实现支持右值引用,则使用unique_ptr
,但从您的问题描述来看,似乎不是您要寻找的)。 - James McNellis