C ++03§4.2N°1:
「NTの配列」または「Tの未知の境界の配列」タイプの左辺値または右辺値は、「Tへのポインター」タイプの右辺値に変換できます。結果は、配列の最初の要素へのポインターです。
このステートメントで長い間混乱していたのは、配列型の右辺値が何を意味するのかよく理解していなかったということです。つまり、型が配列で結果が右辺値である式を思い付くことができませんでした。私はこのスレッドを読みました。これは基本的に同じ質問をし、受け入れられた答えは「いいえ、配列型の右辺値はありません」です。これには矛盾があるのではないかと思います。
C ++03§5.2.5N°4:(式E1.E2に関するもの)
E2が非静的データメンバーであり、E1のタイプが「cq1vq1 X」であり、E2のタイプが「cq2」である場合vq2 T」、式は、最初の式で指定されたオブジェクトの指定されたメンバーを指定します。E1が左辺値の場合、E1.E2は左辺値です。
それ以外の場合は右辺値であると思います(E2が参照ではない場合、その場合はでカバーされ§5.2.5 N°3
ます)。したがって...
struct A
{
int a[4];
};
A f()
{
A a;
return a;
}
int main()
{
f().a; //I think this is an rvalue of array type...
}
ここに2つのオプションがあります。オプション1
:正解です、万歳、イェーイ、かっこいいです。この場合、問題は次のとおりです。他の例はありますか?
オプション2:私は間違っています。この場合の質問は次のとおりです。これは標準の欠陥ですか?
1についてはわかりませんが、2については本当に疑問です。なぜなら、関数からポインターへの変換について話すとき、関数型の左辺値だけに言及しているからです(明らかに、そのような右辺値がないことを認めています)。したがって、彼らは配列型の右辺値を考えていた可能性が非常に高いです。
ですから、基本的に私の質問は、配列型の右辺値の例を思いついたかどうかです。そうでない場合は、有効なものを提供してください。