C++ 常量指针指向常量引用C++;
如何将常量引用或地址存储到C++ 常量指针指向常量引用C++;,c++,list,reference,constants,C++,List,Reference,Constants,如何将常量引用或地址存储到constsometype&对象 #include<iostream> #include<list> const int &foo( int& a) { return a; } int main() { int a = 5; const int& p = foo(a); std::list<const int&> _list; _list.push_back
constsometype&
对象
#include<iostream>
#include<list>
const int &foo( int& a)
{
return a;
}
int main()
{
int a = 5;
const int& p = foo(a);
std::list<const int&> _list;
_list.push_back(p);
return 0;
}
#包括
#包括
康斯特国际及海外(国际及海外)
{
返回a;
}
int main()
{
INTA=5;
const int&p=foo(a);
标准::列表_列表;
_列表。推回(p);
返回0;
}
正如UKMonkey所评论的,您不能将常量引用直接存储在std容器中。然而,有一种方法可以存储在这样的容器中并包装一个常量引用。请注意,您需要使用C++11
编辑:但请注意使用此选项。除非您有非常令人信服的理由使用
std::cref
,否则最好还是使用他提到的替代方法(智能指针)。正如UKMonkey所评论的,您不能将常量引用直接存储在std容器中。然而,有一种方法可以存储在这样的容器中并包装一个常量引用。请注意,您需要使用C++11
编辑:但请注意使用此选项。除非您有非常令人信服的理由使用
std::cref
,否则最好还是使用他提到的替代方法(智能指针)。您的代码无法编译。问题在于:
std::list<const int&> _list;
std::list\u list;
当您声明一个std::list
时T
必须满足CopyAssignable
和CopyConstructible
的要求。但是,常量和引用都不可赋值
除了你的问题之外,我认为建议
std::reference\u wrapper
的解决方案并不好。因为当一个对象被删除时,它在该列表中的引用将悬空。最好的办法是使用智能指针。您的代码无法编译。问题在于:
std::list<const int&> _list;
std::list\u list;
当您声明一个std::list
时T
必须满足CopyAssignable
和CopyConstructible
的要求。但是,常量和引用都不可赋值
除了你的问题之外,我认为建议
std::reference\u wrapper
的解决方案并不好。因为当一个对象被删除时,它在该列表中的引用将悬空。最好的办法是使用智能指针。您面临的确切问题是什么?使用std容器时,容器必须能够移动对象。这意味着您不能有引用的容器。Const或其他。存储的对象应满足可分配的要求。由于引用仅在声明时初始化一次,因此您可以在任何容器中使用它们。如果您需要容器中类似引用的对象,std::reference\u wrapper
可能会重复您面临的确切问题?使用std容器时,容器必须能够移动对象。这意味着您不能有引用的容器。Const或其他。存储的对象应满足可分配的要求。由于引用在声明时只初始化一次,所以您可以在任何容器中使用它们。如果您需要容器中类似对象的引用,std::reference\u wrapper
可能会重复关于使用std::reference\u wrapper
的精彩评论,一定要记住!关于使用std::reference\u wrapper
的好评论,一定要记住!