0

次のコードがあるとします。

std::vector<std::string> foo({"alice", "bob"});
for (const std::string &f : foo)
    std::cout << f.size() << std::endl;

間違えて に変更f.size()するとf->size()、GCC から次のエラーが表示されます。

エラー: '->' のベース オペランドに非ポインター型 '<strong>const string {aka const std::basic_string} があります

なぜ(参照)const std::basic_string<char>ではなく実際の型なのですか?const std::basic_string<char> &

4

1 に答える 1

1

->演算子の左側は式です。参照型を持つ式のようなものはありません:

5p5 式が最初に「T への参照」型 (8.3.2、8.5.3) を持っている場合、その型は、さらなる分析の前に T に調整されます。式は参照によって示されるオブジェクトまたは関数を指定し、式は式に応じて左辺値または x 値です。

于 2013-08-13T20:14:06.467 に答える