当前位置: 首页 > 知识库问答 >
问题:

一元运算符是否有任何实际用途?

易瀚漠
2023-03-14

一元运算符仅仅是为了与一元运算符对称,还是在C代码中有一些实际用途?

在这里搜索时,我发现C中一元“”运算符的用途是什么?,但唯一有用的场景涉及预处理器宏。这些很好知道,但它们似乎是一些不太常见的情况,并且涉及宏。是否有涉及更常见C代码的用例?

共有3个答案

竺展
2023-03-14

如果您显式地避开类的任何数值语义学,则任何运算符重载都很清楚不要“像整数那样做”。在这种情况下,一元加号可能会得到任何意义,不仅仅是返回*this

突出的例子:Boost。Spirit的一元加号用于嵌入式EBNF的Kleene加号生成一个解析器规则,使其参数(也是解析器规则)匹配一次或多次。

程仲卿
2023-03-14

一元对称并非完全无用;它可以用于强调:

const int foo = -1;
const int bar = +1;

重载的一元数可以用来表示在执行一些非平凡计算时产生与其操作数相同逻辑值的操作。(我在Ada中看到过这样的类型转换,它允许重载一元代码,但不允许重载转换。)我手头没有一个好的C示例,有人可能会说这是一个糟糕的风格。(再一次,我看到了很多关于重载的咆哮<代码>

至于为什么C有它,可能主要是为了与C保持一致,C将它添加到1989年的ANSI标准中。C Rationale只是说:

C89委员会在几个实现中采用了一元加号,以便与一元减号对称。

祁俊拔
2023-03-14
char ch = 'a';
std::cout << ch << '\n';
std::cout << +ch << '\n';

第一次插入将字符a写入cout。第二次插入将ch的数值写入cout。但这有点模糊;它依赖于编译器对操作符应用积分提升。

 类似资料:
  • c中有没有既是一元又是二元的运算符?这个问题在一次采访中被问到。

  • 问题内容: 我需要从给定的字符串中删除所有字符,除了剩下的几个字符。如何用regexp做到这一点? 简单测试:不应删除character [1,a,],而应从字符串“ asdf123 *”中删除所有其他字符。 问题答案: 集合中有^。 您应该能够执行以下操作: 完整样本:

  • (是的,得墨忒尔定律,我知道)。 所以我想知道,有没有一种语言具有一元布尔切换运算符,允许我缩写而不重复的表达式,例如 让我们假设我们的语言有一个适当的布尔类型(就像C++中的)并且属于这种类型(因此没有C样式的)。

  • 问题内容: 我正在创建一个应该与任何类型的数字(浮点数,整数等)的数组一起使用的类,因此,这里有一种方法: 否则将无法编译,因为“ Number”没有实现“ + =”或“ / =”运算符。更糟糕的是,java的Number类甚至没有实现最基本的运算符,例如“ +”或“-”!如果java因为认为无法添加数字而不允许我进行编译,那么如何制作一个返回数字数组平均值的方法呢? 问题答案: 您误解了数字在J

  • 问题内容: Java中是否有指数运算符? 例如,如果提示用户输入两个数字,然后他们输入和,则正确答案为。 问题答案: 要通过用户输入执行此操作:

  • 问题内容: 我今天在阅读Accelerated GWT(Gupta)第151页时 遇到了这段代码。 那些新运营商在那里做什么?我从未见过这样的语法,有人可以解释吗? 有人知道在Java规范中的哪里可以找到它吗? 问题答案: 它们是 内部 (嵌套的非静态)类: 你可以做: 或者简单地: 这样做的原因是引用了外部类的特定实例。让我给你一个更详细的例子: 并运行: 输出: 注意: 嵌套类也可以。如果是这