2013-08-25 8 views
6
void func(char**& arg1); 

int main() { 
    char* container[3] = { "First", "Second", "Third" }; 
    char** pCon = &container[0]; 

    func(pCon);   // This works 
    func(&container[0]); // no known conversion from char** to char**& 
} 

私は明らかに何かが不足しています。私の論理は、これら2つは同じものでなければならないと言います。char **&議論の混乱

+0

同じことをする必要がありますか? AFAIK、 '&'は、変数/オブジェクトを宣言しているときの参照に過ぎません。それ以外の場合は、 "address of"を意味します。 – olevegard

+0

一時的な参照は非一時的な左辺参照を必要とする関数に渡しています。 – WhozCraig

+1

ところで、 'char *'ポインタを初期化することを許す文字列リテラルの緩和は、C++ 11では削除されています(コンパイラはそれを受け入れる可能性が高いですが)。つまり、あなたの初期定義は実​​際には 'char const * container [3] = {...};'でなければなりません。 –

答えて

11

非const参照を一時的にバインドすることはできません。たとえば、アドレス演算子から取得した一時的なものを非const参照にバインドすることはできません。