Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 常量指针指向常量引用C++;_C++_List_Reference_Constants - Fatal编程技术网

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
的好评论,一定要记住!