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

Is this a bug in clang++/g++?

本文关键字:错误 clang++ g++ 这是      更新时间:2023-10-16

给定:

void function(int*=0) {}
int main() {
}

叮当 (3.8.0(:

test.cc:1:18: error: expected ')'
void function(int*=0) {
^

G++ (5.4.0(:

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

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

void function(int* = 0) {}
int main() {
}

显然,无论我输入的是 T* = 0 还是 T *= 0,这都是错误还是预期的?

>*=是一个运算符,就像+=一样。所以x *= 2;x = x * 2;一样

您希望* =作为两个标记进行词法分析(从概念上讲,在C++中,词法化发生在解析之前,并且几乎独立于解析;阅读有关C++翻译阶段的信息(。

有一种简短的方法可以将值相乘,例如:

foo *= 2;

它基本上与以下功能相同:

foo = foo * 2;

也许这就是它所困惑的地方。