为什么C++没有电源操作员?
Why doesn't C++ have a power operator?
许多语言都有幂运算符;为什么不C++?例如,Fortran和Python使用**
并且通常使用^
编写(例如LaTeX)。
C++确实有一个幂运算符——它写pow(x, y)
。
最初,C 语言在设计时考虑了系统软件,并且对电力运营商的需求不大。 (但它有按位运算符,如 &
和 |
,在很多情况下都没有其他语言。有一些关于添加一个的讨论在C++标准化期间,但最终的共识更多或更少:
-
它不能
^
,因为优先级是错误的(并且当然,有2. ^ 8 == 256.
,但2 ^ 8 == 10
不是很令人愉快)。 -
它不能
**
,因为这会破坏现有的程序(可能具有类似x**p
的内容,x
int
,p
int*
)。 -
可能是
*^
,因为这个序列目前不合法在 C 或 C++ 中。 但这仍然需要引入其他优先级。 -
C 和 C++ 已经有足够的特殊令牌和级别优先,并在与数字社区讨论后,得出的结论是,真的没有任何问题
pow(x, y)
.
所以C++让事情保持原样,这似乎没有造成任何问题。
有两个原因
-
符号
^
保留用于按位异或运算 -
您可以使用
std::pow
来实现相同的功能。
C++的好处是,您可以超载operator
来做任何您喜欢做的事情!
template< typename T >
T operator^( T x, T y ) {
return std::pow( x, y );
}
但是要考虑到,当你这样做时,其他知道C++
和不认识你的人(我相信其中有很多)可能会在理解你的代码时遇到重大问题!
因为这是独占运算符或按位运算符。
不过,有一些称为"pow"的函数可以做你想做的事。
如果你愿意,你可以帮助自己
struct DoubleMock
{
DoubleMock(double v){_v = v;}
double _v;
};
double operator^(DoubleMock x, DoubleMock y)
{
return pow(x._v,y._v);
}
double v = DoubleMock(2.0) ^ 2.0;
相关文章:
- <<操作员在下面的行中工作
- 如何在GTK程序运行时禁用屏幕保护程序/电源管理/屏幕消隐
- C++ 与操作员不匹配<<
- 操作员C++的模棱两可的过载
- C++中>>操作员过载时出现问题?
- NaN 上的宇宙飞船操作员
- 电源功能模块化操作
- 比根<操作员
- SFINAE不能防止模棱两可的操作员过载吗?
- 什么是现实中的"endl"(或任何输出操纵器)?它是如何实现的,它如何与操作员<<一起工
- 为什么"delete"操作员给我访问权限冲突
- 为什么使操作员成为新的专用会打破 std::shared_ptr?
- 在这种情况下是私有的吗?试图使操作员<<过载
- C++操作员过载>>
- 是否有 C++20 浮点数的包装器,使我能够默认宇宙飞船操作员?
- 为什么 icc 为简单的主电源生成奇怪的组件?
- 与异常处理程序中的操作员<<不匹配
- 复印作业操作员说明
- 友谊和操作员+=重载
- 为什么C++没有电源操作员?