c++ - 不得删除 C++ 或 C 运算符之间的空格的示例

标签 c++ c operators whitespace removing-whitespace

在有效的 C 或 C++ 代码中删除运算符之间的空格会改变其含义(通过将其更改为执行其他操作或无法编译的代码)时,我试图提供所有示例。

我列举了http://en.wikipedia.org/wiki/Operators_in_C_and_C++我可以想出:

+ + :

int f(int a) { return a + /**/ +5; }

- - :

int f(int a) { return a - /**/ -5; }

我正在尝试1& &p同样,但我无法使用空格进行编译,我总是遇到类型错误。

我正在寻找以下格式的答案:带有 /**/ 的有效 C 或 C++ 代码片段以及两个运算符之间的空格(参见上面的两个示例)。删除/**/并且周围的空格必须产生编译错误或改变编译后的程序的含义。

我需要它的一些背景:我正在编写一个 C 和 C++ 源翻译器,它可以删除不必要的空格。为了使其正确,我需要了解何时无法在不更改代码含义的情况下删除空格。

最佳答案

这是一个示例,可以证明您的示例并不是唯一的示例。但肯定还有更多可以创建,所以我不会尝试枚举它们。

#include <cassert>

struct C {
    operator bool() const { return true; }
};

bool operator&(C& l, C* r) { return false; }

int main()
{
    C a, b;
    assert(a &&b); // or put space between &&
}

关于c++ - 不得删除 C++ 或 C 运算符之间的空格的示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20451539/

相关文章:

c++ - Visual C++ 关系运算符重载 const 正确性(使用 std::sort)

c++ - 初始化构造函数 C++

c - 是否有在 Windows 上的 C 中使用 winhttp 的完整示例?

c - InfixToPostfix 代码 C

c++ - +=、|=、&= 等是原子的吗?

c++ - 为什么它停止并以退出代码 11 结束?

c++ - 如何在类定义中声明基本截止时间计时器

c - 将超过 255 个字符的主机名传递给 getaddrinfo 会导致 getaddrinfo 失败 : memory allocation failure why?

operators - "==="运算符的作用是什么?

c++ - 重载预自增运算符