4

次のコードが、それ自体を参照する循環 const 変数でコンパイルされるのはなぜですか?

#include <iostream>

extern int main(int argc, char* argv[])
{
  const int foo = foo * 60;
  std::cout << foo << std::endl;
  return 0;
}

SUNWspro コンパイラを使用して、Solaris 5.10 x86 ホストでコンパイルしています。

/opt/SUNWspro/bin/CC test.cpp

完全を期すために、これはそれが出力するものです:

$ ./a.out
-519270512
4

1 に答える 1

5

C++ では、変数はスコープ内にあり、独自の初期化子の一部として使用できます。たとえば、次のコードも有効です。

int x = x;

初期化される前の値を参照しているため、これを行うと未定義の動作が発生しxます。ただし、これは完全に合法的なコードです。この背後にある理論的根拠は、場合によっては、オブジェクトの構築中にオブジェクト自体を参照したい場合があるためだと思います。たとえば、次のようなことが考えられます。

MyObject x(137, &x); // Pass a pointer to x into its own constructor

正直なところ、なぜこれをやりたいのかわかりません。

お役に立てれば!

于 2012-07-27T02:24:46.783 に答える