1. ホーム
  2. c++

[解決済み] void *a = &a はどのように合法なのですか?

2023-04-10 20:08:12

質問

以下のC++のコードを考えてみましょう。

void* a = &a;

なぜコンパイラは未宣言の識別子を使用しても文句を言わないのでしょうか?

また、コンパイラは変数 a をどう考えるか?void オブジェクトへのポインタなのか、それとも void* のポインタでしょうか?

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

C++の変数の宣言の範囲は、かなり驚くことがあります。

void* a =               &a;
         ^~~~~~~~~~~~~~~~~
          a declared as `void*` from here on

したがって &avoid** に変換されますが、どのポインタ型も暗黙のうちに void* ...