我偶然发现我可以有一个const std::pair<const int, int>&
对std::pair<int,int>
的引用:
#include <utility>
int main()
{
std::pair<int, int> p{1,2};
const std::pair<const int, int>& ref_ok{p}; // why does this work?
std::pair<const int, int>& ref_invalid{p}; // then why does this not work?
}
考虑到const std::pair<const int, int>
和std::pair<int, int>
是不同的类型,没有继承关系,为什么这是可能的?
1条答案
按热度按时间3yhwsihp1#
const std::pair<const int, int>& ref_ok{p};
实际上是物化被初始化为与p
相同的值的临时std::pair<const int, int>
,并且引用初始化是将临时的生存期延长到引用的生存期。不允许使用
std::pair<const int, int>& ref_invalid{p};
,因为非const
引用无法绑定到临时。下面的代码示例演示
ref_ok
实际上不是对p
的引用。对p
的更改不会影响ref_ok
。输出:
示例:https://godbolt.org/z/8bfM7fYbx