0
#include <iostream>

using namespace std;

struct POD
{
    int i;
    char c;
    bool b;
    double d;
};

void Func(POD *p) { ... // change the field of POD }    

void ModifyPOD(POD &pod)
{
    POD tmpPOD = {};
    pod = tmpPOD; // first initialize the pod
    Func(&pod);   // then call an API function that will modify the result of pod
                  // the document of the API says that the pass-in POD must be initialized first.
}

int main()
{
    POD pod;
    ModifyPOD(pod);    

    std::cout << "pod.i: " << pod.i;
    std::cout << ", pod.c: " << pod.c;
    std::cout << " , pod.b:" << pod.b;
    std::cout << " , pod.d:" << pod.d << std::endl;
}

質問> パスイン変数を変更する関数を設計する必要がありますpod。上記の ModifyPOD という名前の関数は正しいですか? 最初に、ローカル構造体 (つまり tmpPOD) からの値を使用して構造体 (つまりポッド) を割り当てて、構造体を初期化します。次に、変数が Func に渡されます。ローカル変数を使用してポッドを初期化し、代わりに次のことを回避できるようにします。

pod.i = 0;
pod.c = ' ';
pod.b = false;
pod.d = 0.0;

ただし、この慣行が合法であるかどうかはわかりません。

ありがとうございました

4

1 に答える 1

0

はい、合法です。私はあなたができることを付け加えます

pod = POD();
Func(&pod);

同等でModifyPod()より単純な関数で。

于 2013-05-22T14:45:18.407 に答える