c++ 在什么情况下 a[n] 是一个右值?

参考https://en.cppreference.com/w...下面,这一行:
xvaluea[n],thebuilt-insubscriptexpression,whereoneoperandisanarrayrvalue;
那么什么是arrayrvalue呢?
参考https://en.cppreference.com/w...下面说到
对于expr1[expr2]Whenappliedtoanarray,thesubscriptexpressionisanlvalueifthearrayisanlvalue,andanxvalueifitisn't(sinceC++11).
什么时候数组不是一个左值呢?
参考下面代码
structS
{
intiarr[10];
inti;
std::stringsarr[10];
std::strings;
};
Sget(){returnS{};}
template
voidfoo(T&&v){}
intmain()
{
foo(get().iarr[0]);//int&
foo(get().i);//int&&
foo(get().sarr[0]);//std::string&
foo(get().s);//std::string&&
return0;
}
根据cppreference的说法:
get()返回的是prvalue
get().m应该是xvalue
get().m[n]是xvalue吗?
慕虎7371278
浏览 609回答 2
2回答

千万里不及你

简单的,(int[3]){1,2,3}此时这个就是一个右值数组,下标访问返回的为右值(xvalue),但通过偏移间接寻址后得到的恒为左值(以上写法在gcc和clang下正确),还有种写法为usingarryTY=int[3];arryTY{1,2,3}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript