C++でちょっと遊んでください。私が本当にやりたいことは、配列またはポインタ引数のために定義されたデフォルト値で関数を設定できることです。物事を単純にするために、単に配列を使ってみましょう。これと同じように:配列引数のデフォルト値
void experimentA(char a[3] = {'a', 'b', 'c'});
コンパイラ(GNU99とLLVM GCC 4.2)は、 "期待表現を" 文句を言います。それはかなり鈍いですが、割り当てようとしている '値'が静的に割り当てられているので、これが起こっていると私は同僚から言われましたが、変数(a[3]
)に割り当てようとしています。
しかし、私はこれを行うことができるよ以来、私は、そのような場合、完全にはわからない:
void experimentB(char a[3] = "abc");
をコンパイラは単に私にその文字列リテラル文字までを警告変換が推奨されていません* 。
この不一致を引き起こすために、「abc」と基本的に{'a'、 'b'、c}との違いはわかりません。どんな洞察も大変ありがとう!
:たとえば、以下のタイプchar *型である形式のパラメータのデフォルトパラメータ値をシミュレートこれはサイズ4の配列に収まります。 –
@Doug:文字列リテラルを使用してcharの配列を初期化する場合、ヌルターミネータのためのスペースは必要ありません。プログラマが明示的な長さを指定している場合、彼は自分が何をしているのかを知っているはずです。 –