gpt4 book ai didi

c++ - &= 必须始终被解释为运算符吗?

转载 作者:可可西里 更新时间:2023-11-01 15:04:22 25 4
gpt4 key购买 nike

我在编码时不小心在常量引用和它的默认值之间遗漏了一个空格。我很惊讶地看到它在 Intellisense 中作为错误出现,所以我编译了它,果然,它在 GCC 4.3.4、4.5.1 或 4.7.2 中不起作用,并且在Visual Studio 2012,要么。

这是一个演示错误的等效示例:

struct S {
S(const int &= 5){}
};

int main(){}

这会在 GCC 中产生以下错误,在 MSVC 中也会产生类似的错误:

error: expected ',' or '...' before '&=' token

我认为这是因为 &= 被视为运算符,但我不知道要在标准中搜索什么才能找到有关此案例的更多信息。 &= 仅提供特定于运算符的信息。

出于好奇,我决定将其换成右值引用:

S(int &&= 5){}

奇怪的是,这在 GCC 4.7.2 和 MSVC 上都能很好地编译,这意味着 &= 并不总是作为运算符在词法上配对。

为什么它适用于右值引用,而不适用于左值引用,标准对此事有何规定?

最佳答案

这通常被称为“最长匹配原则”,或 "maximal munch" .因为&&是一个有效的 token 并且 &&=不是(&& 没有复合赋值符号),&&= 的最长记号开头是 && ;删除后,就没有机会 &=被视为单个标记。

这个原则对许多语言都很常见,但也经常有异常(exception)。例如,在 C++11 中,>>将被分析为>其次是 >在类似 std::vector<std::vector<int>> 的上下文中.

关于c++ - &= 必须始终被解释为运算符吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13634548/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com