1
int g_myInt = 0;
int& getIntReference() { return g_myInt; }

void myVarArgFunction( int a, ... ) {
  // .........
}

int main() {
  myVarArgFunction( 0, getIntReference() );
  return 0;
}

上記の (コンパイルもテストもされていない) C++ コードではint&、可変引数リストに を渡すことは有効ですか? それとも、値渡しのみが安全ですか?

4

3 に答える 3

2

C++03 標準のセクション 5.2.2.7 は、左辺値から右辺値への変換が最初に実行されるため、関数は参照ではなく int のコピーを受け取る必要があると述べています。

g ++ 4.6.3を使用してこのプログラムで試しました:

#include <iostream>
#include <stdarg.h>

int g_myInt = 7;
int& getIntReference() { return g_myInt; }

void myVarArgFunction( int a, ... )
{
  va_list ap;
  va_start(ap,a);
  int value = va_arg(ap,int);
  va_end(ap);
  std::cerr << value << "\n";
}

int main(int,char **)
{
  myVarArgFunction( 0, getIntReference() );
  return 0;
}

そして7の出力を得ました。

于 2012-09-27T04:26:45.567 に答える
0

いいえ、POD 型ではないため、参照を渡すことはできません。

仕様から:

引数が非 POD クラス型の場合、動作は未定義です。

非 POD である std::string の受け渡しに関するこの関連する質問を参照してください。
参照用コード: http://codepad.org/v7cVm4ZW

于 2012-09-27T04:17:37.067 に答える
-1

はい、ここのように int への参照を渡すことができます。関数 myVarArffunction でそのパラメーターを変更した場合、グローバル変数 g_myInt を変更することになります...

于 2012-09-27T04:17:23.027 に答える