これはなぜコンパイルされますか?参照でC++ const lost
struct A {};
struct B {
B(A& _a) : a(_a) {}
A &a;
};
void f1(A&) {}
void f2(const B &b) { f1(b.a); }
int main() {
A a;
B b{a};
f2(b);
return 0;
}
f2()内はconstなので、私の理解ではb.aもconstでなければなりません。しかし、それはコンパイルし、コンパイラはf1()を呼び出すことができます。
'A & a;'を置き換えます。構造体Bで 'A a;'もはや機能しません。確かにb.a F1で今 は()constは次のとおりです。
invalid initialization of reference of type 'A&' from expression of type 'const A'
私が...おかげでこれを理解するのに役立ちます。
エラー: 'const'修飾子は 'A&'には適用できません – Jarek
誰がそれを言っていますか? (どのような文脈で?)はい、完全に冗長です(https://isocpp.org/wiki/faq/const-correctness#const-ref-nonsense)。とにかく、思考実験としてもっと意味があった;) –