std::basic_stringの「&foo[0]」は何を返すか
とあるコードを読んでいたら、
std::string foo = "abc"; printf("[%s]\n", &foo[0]); // [abc]
みたいな書き方をしていて「ん?stringなのに??」と思ったので、きちんと調べてみました。結論を書いてしまうと、
- 配列添字の演算子「
[]
」は、アドレス取得の演算子「&
」よりも優先度が高い std::basic_string
型の配列添字演算子はc_str()
の返す値を0番目としたi
番目の要素を返すよう、演算子オーバーロードされている
というルール2つによって、正しくC文字列のアドレスが返せているとわかりました。
…でも、こういう場合はstd::basic_string::c_str()
を使うべきですよね、見にくいったらありません。