2011-09-13 21 views
4

を取得関数にNULLを送りますか?あなたはconst&としてfillベクトルを取ったほうが良いでしょうカントは、私はこの機能を持っているベクトル

MatrixInit(numRow, numCol, std::vector<double>()) 

注:ベクトルとしてNULLを渡すことはできません

+3

NULLはベクトルではありません。あなたは、そのパラメータにNULLを渡すと、何を意味するのでしょうか? –

+0

私はJavaから来ています。ここではC++のハードな世界です。空のベクトルです。 – Itzik984

+5

また、nullポインタもJavaの空のベクトルではありません。 –

答えて

10

、あなたの代わりに、このような空のベクトルを渡すことができます。

+0

おそらく、関数がベクトルを変更することになっています。 – wilhelmtell

+0

ああですか?そのための参照はなく、私は、行列の初期値がfillであると仮定しました。それが当てはまる場合は、もちろん&constではなく&である必要があります。 –

+0

@wilhelmtell、オリジナルは値渡しだったのでベクトルを変更できませんでした。 –

8

NULLに合格するためには、あなたが例えば、代わりにvector*ポインタを受け入れるようにパラメータを変更する必要があります。

void RegMatrix::MatrixInit(int numRow, int numCol, std::vector<double> *fill) 
{ 
    if (fill != NULL) 
    { 
     do something with fill; 
    } 
} 

あなたはベクトルに合格する必要がある場合、あなたはこのようにそれを行うだろう。

std::vector<double> v; 
MatrixInit(numRow, numCol, &v); 
0

特殊なケースを表す値が必要な場合は、静的変数を作成してテストすることができます。

static std::vector<double> null_fill; 

void RegMatrix::MatrixInit(int numRow,int numCol, const std::vector<double> & fill = null_fill) 
{ 
    if (&fill == &null_fill) 
     // do something special 
    else 
     // do something; 
} 
0

名前が言うようにあなたはそれはオプションの引数ですが、引数の型boost::optional<std::vector<double> >

作ることができます。引き数を使用しない場合は、代わりにboost::noneを渡します。 (NULLではありません;これはヌルポインタ定数です。ここではポインタは使用していません)。

関連する問題