operator <- 在 C++ 中做什么?
What does operator <- do in c++?
阅读很长的函数会很有趣!
int crazylongfun()
{
int x = -1;
foo b = -42;
//... 1000 lines below
if( b<-x)
{
std::printf("How did I get here there is no left arrow operator?\n");
}
return 0;
}
查看 foo 定义
struct foo
{
int x;
foo(int a) : x(a) {}
operator int() const
{
return x;
}
};
这可以很好地编译并产生所需的输出。允许这样做的机制是什么?
可以说 c++ 中的隐式转换运算符是有争议的,例如Are implicit conversions good or bad in modern C++?。当它们被定义时,对于不知情的程序员来说可能会出现非常有趣的语法情况。以上只是一个例子。
工作原理如下:
struct foo 定义了一个转换运算符,因此它可以转换为 int,这导致它被隐式转换并与局部变量 x 比较小于负 x。
代码实际上是:
if(int(b)<(-x))
即c++ 中没有左箭头运算符 <- .
很简单,"less than negative X"。
if (b < -x)
1000 行后我也有点斜眼了!
What does operator <-
do in c++?
它实际上不是一个运算符(与 ->
相反,它是一个运算符)。
如其他答案中所述,实际上应用了两个运算符函数:
- 一元
operator-()
对值应用负号
- 比较少
operator<()
阅读很长的函数会很有趣!
int crazylongfun()
{
int x = -1;
foo b = -42;
//... 1000 lines below
if( b<-x)
{
std::printf("How did I get here there is no left arrow operator?\n");
}
return 0;
}
查看 foo 定义
struct foo
{
int x;
foo(int a) : x(a) {}
operator int() const
{
return x;
}
};
这可以很好地编译并产生所需的输出。允许这样做的机制是什么?
可以说 c++ 中的隐式转换运算符是有争议的,例如Are implicit conversions good or bad in modern C++?。当它们被定义时,对于不知情的程序员来说可能会出现非常有趣的语法情况。以上只是一个例子。
工作原理如下:
struct foo 定义了一个转换运算符,因此它可以转换为 int,这导致它被隐式转换并与局部变量 x 比较小于负 x。
代码实际上是:
if(int(b)<(-x))
即c++ 中没有左箭头运算符 <- .
很简单,"less than negative X"。
if (b < -x)
1000 行后我也有点斜眼了!
What does operator
<-
do in c++?
它实际上不是一个运算符(与 ->
相反,它是一个运算符)。
如其他答案中所述,实际上应用了两个运算符函数:
- 一元
operator-()
对值应用负号 - 比较少
operator<()