【发布时间】:2020-06-10 05:56:20
【问题描述】:
为什么下面的代码可以编译(即元素的值可以修改)而vector<bool> 的引用是prvalue?如果能在这个问题上得到一些帮助,我将不胜感激。
下面是相关代码:
#include <vector>
#include <iostream>
int main()
{
std::vector<bool> v(10,true);
for (auto&& e : v)
{
std::cout << e << std::endl;
e = false; //I wonder why this expression works whereas the ref of vector<bool> is a prvalue?
}
for (auto&& e : v)
{
std::cout << e << std::endl;
}
}
【问题讨论】:
-
你知道为什么
v[0] = false;编译吗? -
@HolyBlackCat 如果
v是vector<int>之类的类型,我可以理解为它们的引用是左值。但是vector<bool>的reference是prvalue(通过,我完全看不懂,有高手告诉我,我背了。)。我很困惑。我可以为prvalue做作业真是太神奇了! -
你一直在说“引用”,这通常意味着一个左值引用(使用单个
&),但你拥有的是一个右值引用(双&&),这使得这是一个非常不同的事情。这可能是一个需要语言律师通过参考 C++ 规范中的部分来回答的问题。 -
@Someprogrammerdude 一些专家告诉我
vector<bool>的引用是prvalue。虽然我完全不明白,也没有找到任何证据,但作为他们在 SO 上的高声誉,我相信他们是对的。