gpt4 book ai didi

c++ - C/C++ 表达式返回什么?

转载 作者:太空宇宙 更新时间:2023-11-04 05:19:38 24 4
gpt4 key购买 nike

C++ 中的表达式返回什么,在对象上应用运算符后获得的实际值或基于计算值的 true/false?特别是:

在此代码段中:

int i = 10, j = 5, k = 0;
i + j ;
k = i + j ;
while ( i + j )
{
// Do something worth for the universe in this time
}

第 2 行中的表达式将返回什么,15true?它会在第 4 行返回相同的值吗? 15 是否总是返回,但根据上下文转换为 truefalse

我在 C++ Primer 中读到这个:

A while has the form

while (condition)
statement

A while executes by (alternately) testing the condition and executing the associated statement until the condition is false. A condition is an expression that yields a result that is either true or false.

但是表达式也可以只是普通对象,对吧!?他们应该如何表示 truefalse ?例如:

// Create an object `tempObject` of a class `SomeRandomClass`
while ( tempObject )
{

}

谁能解释一下?

最佳答案

if 中的“条件”时或 while不是来自表达式本身的直接 bool 值(truefalse)(例如,==><= 会给出一个 bool 值),表达式被视为比较不等于零。

所以:

int x = 25;

while(x)
...

相同
while (x != 0)

这适用于所有类型,例如指针、整数和浮点值。

根据以下评论进行编辑:

class 的对象或 struct必须可以转换成 bool以某种方式:要么对象直接operator bool()像这样:

class X
{
private:
int x;
public:
X(int xx = 0) x(xx) {}
void setx(int xx) { x = xx; }
bool operator bool() const { return x != 0; }
};

现在我们可以做:

X a(1);

if (a) ...
a.setx(0);
if (a) ...

第一个if将是真实的,第二个if将是错误的。

如果没有 operator bool()可用,那么编译器可能会使用 operator int()operator void*转换类型,然后使隐式 != 0比较产生 bool值(value)。

关于c++ - C/C++ 表达式返回什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17068844/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com