私は本からコードスニペットを読んでおり、これを見つけます:
const char* const & a = "hello"; //can compile
const char*& a = "hello"; //cannot
私が知っているのは、参照を初期化するときに、配列からポインターへの変換が行われないことです。
const char* const &
、const pointer
への参照、ポインターはconst char
を指します。
const char*&
、pointer
への参照、ポインターはconst char
を指します。
それでは、ポインタがconst
であることを示す余分なconst
を追加してコンパイルできるのはなぜですか?
それは本質的にこの式に固執しています
T const & a = something_convertible_to_T;
Tはconst char*
です。最初のケースでは、一時ポインターを具体化し、リテラルのアドレスを割り当て、それ自体を参照にバインドできます。 2番目の場合、左辺値参照はconstではないため、発生しません。同じものの別の例
const char* && a = "hello"; // rvalue ref makes a no into a yes.
これで、一時ポインターが右辺値参照にバインドされました。