在有效的 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/