1. ホーム
  2. c++

[解決済み] const char*, char const*, const char const* & 文字列ストレージの違い

2022-02-19 20:59:16

質問事項

まず、何が違うのか。

(1) const char*
(2) char const*
(3) const char const*

私はこれを完全に理解していると確信していますが、私の頭に定着させるために、誰かそれぞれについて具体的に文章を与えて欲しいのです。 誰かに突っ込まれるまではいいんだけど、突っ込まれると曖昧になっちゃうんだよねー。

また、文字列リテラルはコンパイラによってどのように格納されるのでしょうか? これは宿題ではなく、面接のためにC言語をブラッシュアップしているのですが、気になる方がいらっしゃいましたら教えてください。

どのように解決するのですか?

1と2は同等であり、ポインタの型を指定することで、const char . ポインタ自体は const ではありません。3は"const"を繰り返しているので、無効です。これは、次のようなものです。 const const int . 順番は関係ないので、次のように言うこともできます。 int const int .

C99 では、次のように繰り返すことが有効です。 const というように。しかし、C++では、それを繰り返すことはできません。

また、文字列リテラルはコンパイラによってどのように保存されるのでしょうか?

保存方法は不特定多数です。しかし、コンパイラはプログラムの読み取り専用部分に格納することが許されています。そのため、文字列リテラルに書き込むことはできません。文字列リテラルは、プログラムのライフタイム全体を通じて割り当てられたままであることが保証されています(言い換えれば、静的な保存期間を持つということです)。

<ブロッククオート

これは宿題ではなく、面接のためにC言語をブラッシュアップしているのですが、気になる方はいらっしゃいますか?

CとC++の微妙な違いを意識した方がいい。C99では、上で説明したように const const int が許可されています。C89とC++では禁止されています。しかし、C++では、それ自体が const である typedef に適用された場合、冗長な const を導入することができます。

typedef int const cint;
cint const a = 0; // this const is redundant!

テンプレート・パラメーターも同様です。