这是clang ++/g ++中的错误吗?

gct*_*gct 6 c++

鉴于:

void function(int*=0) {}
int main() {
}
Run Code Online (Sandbox Code Playgroud)

铿锵(3.8.0):

test.cc:1:18: error: expected ')'
void function(int*=0) {
                 ^
Run Code Online (Sandbox Code Playgroud)

g ++(5.4.0):

test.cc:1:18: error: expected ‘,’ or ‘...’ before ‘*=’ token
 void function(int*=0) {
                  ^    
Run Code Online (Sandbox Code Playgroud)

如果我将其更改为(注意间距):

void function(int* = 0) {}
int main() {
}
Run Code Online (Sandbox Code Playgroud)

显然,我输入T*= 0或T*= 0时会感到困惑,这是一个错误还是预期?

Bas*_*tch 18

*= 是一个运营商,就像+=是.所以x *= 2; 是一样的x = x * 2;

你希望* =被作为两个令牌(在概念上用C++,lexing 解析之前,几乎独立地发生;阅读关于C++ 翻译阶段).

  • 因为lexing和解析是分开的阶段,从概念上讲 (11认同)
  • @bartop"_but*=在这种情况下完全没有意义_"真的 - 它没有意义,因此编译器抱怨它的原因.Tokenizer不关心上下文,它只关心标记,而`*=`作为单个标记被作为lexed. (5认同)