0

次のコード例では、std::string A::str_inAの初期化子リストを、関数からの戻り値 ( を返す可能性があるNULL) またはconst char*. しかし、2回呼び出されるのは好きではありませんFunc()

#include <iostream>

const char* Func()
{
  char* p = NULL;
  // Assign p: may be NULL or non-NULL
  return p;
}

class A
{
public:
  A() : str_( Func() ? Func() : "NULL" ) {}

  std::string str_;
};

int main( int argc, char* argv[] )
{
  A a;
  std::cout << a.str_ << std::endl;
  return 0;
}

私はこのようなことをしたいと思います:

A() : str_( ( const char*& tmp = Func() ) ? tmp : "NULL" ) {}

しかし、一時変数を使用して、寿命を延ばすために参照であっても、この方法では違法に思えます(私の現在の理解によると)。

グローバル/静的変数を使用せずに、1 回だけA::str_呼び出して、初期化子リストでの初期化を可能にする C++03 構文はありますか? Func()一時変数を使用する解決策があれば、その構文を学びたいです。

4

2 に答える 2