2016-08-31 4 views
-1

ために、等号の前にスペースを追加するために私を必要とします。コンパイラは、デフォルトの関数パラメータ私が書く場合

void compute(char*, char*=0) { // no space before = 
} 

int main() 
{ 
    compute(0); 
} 

gccのoutputs

main.cpp:1:25: error: expected ')' 
void compute(char*, char*=0) { 
         ^
main.cpp:1:13: note: to match this '(' 
void compute(char*, char*=0) { 
      ^
main.cpp:6:5: error: no matching function for call to 'compute' 
    compute(0); 
    ^~~~~~~ 
main.cpp:1:6: note: candidate function not viable: requires 2 arguments, but 1 was provided 
void compute(char*, char*=0) { 
    ^
2 errors generated. 

私はスペースを追加した場合= befor:char* =0そのすべてOK。

これは、最も厄介な解析の問題の別の例ですか?

+3

いいえ。それは「最大の狂気」(https://upload.wikimedia.org/wikipedia/commons/f/f4/The_Scream.jpg)のルールです。 –

+0

'* ='は既存の演算子で、 'x * = 2'のように' x'に2を掛けます。 –

答えて

2

@Bo Persson氏によると、*=は既存の演算子です。この場合、x*=0は、達成したいのではなくxに0を掛けるだけです。

関連する問題