質問するログイン新規登録

回答編集履歴

2

追記

2017/12/29 15:04

投稿

Chironian
Chironian

スコア23274

answer CHANGED
@@ -14,4 +14,11 @@
14
14
  > またC++の中stringやvector以外で配列の要素が増えていくものってありますか??
15
15
 
16
16
  配列というかコンテナという意味ではビックリする程たくさんあります。
17
- [ここにリスト](http://www.cplusplus.com/reference/stl/)があります。
17
+ [ここにリスト](http://www.cplusplus.com/reference/stl/)があります。
18
+
19
+ ---
20
+ 【追記】
21
+
22
+ > もし、strがchar*型だった場合、これはpush_backメンバ関数を当然持たないのでコンパイル・エラーになります。
23
+
24
+ 不正確な表現でした。`std::istream::operator>>(char*)`は未定義なのでコンパイル・エラーになります。

1

補足

2017/12/29 15:04

投稿

Chironian
Chironian

スコア23274

answer CHANGED
@@ -3,6 +3,7 @@
3
3
  C++ってC言語ユーザから見ると黒魔法のようにも見えますが、決して魔法ではないです。全部厳密な理屈があります。
4
4
  std::stringもstd::string自身の機能で勝手に領域サイズが増えるのではなく、例えば`std::cin`等で文字列を読み込む時は、`std::istream::operator>>()`という関数がstd::stringの`push_back`などを呼び出しています。
5
5
  `std::cin`は`std::istream`を継承しているので、`std::cin >> str;`と書くと、`std::istream::operator>>()`が呼ばれるのです。
6
+ もし、strが`char*`型だった場合、これは`push_back`メンバ関数を当然持たないのでコンパイル・エラーになります。strが`std::string`型の場合`push_back`メンバ関数を持つのでエラーにならず適切に動作します。
6
7
 
7
8
  > insertやpush_back,resizeでないと大きくなってくれないんですかね??
8
9
  これのどこが動的なのでしょうか??
@@ -12,5 +13,5 @@
12
13
 
13
14
  > またC++の中stringやvector以外で配列の要素が増えていくものってありますか??
14
15
 
15
- 配列というかコンテナといういみではビックリする程たくさんあります。
16
+ 配列というかコンテナという意味ではビックリする程たくさんあります。
16
17
  [ここにリスト](http://www.cplusplus.com/reference/stl/)があります。