Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C/C++;表达式返回? < C++中的表达式是什么,在计算对象上应用操作符还是true或false后得到的实际值?特别是:_C++_C_While Loop - Fatal编程技术网

C/C++;表达式返回? < C++中的表达式是什么,在计算对象上应用操作符还是true或false后得到的实际值?特别是:

C/C++;表达式返回? < C++中的表达式是什么,在计算对象上应用操作符还是true或false后得到的实际值?特别是:,c++,c,while-loop,C++,C,While Loop,在此代码段中: 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行中的表达式将返回什么,15或true?它会在第4行返回相同的值吗?15是否总是返回,但根据上下文转换为true或false 我在书中读到: 有一段时间是这样的 while的执行方式是(交替地)测试条件并执行相关语句,直到条件满足为止

在此代码段中:

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行中的表达式将返回什么,
15
true
?它会在第4行返回相同的值吗?
15
是否总是返回,但根据上下文转换为
true
false

我在书中读到:

有一段时间是这样的

while的执行方式是(交替地)测试条件并执行相关语句,直到条件满足为止 这是错误的。条件是一个表达式,它产生的结果是 对或错

但是表达式也可以是普通对象,对吗!?它们如何表示
?例如:

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

}

可以解释吗?

< P> <代码> 0 < /C> >(和<代码> false <代码>,在C++的版本中,存在的意思是错误的;任何其他值都表示true。

中的“条件”if
while
不是表达式本身(
=
的直接布尔值(
true
要理解这些代码,请先返回C:

凡是0的东西都是假的。 凡是不是0的都是真的

在您的例子中,while循环意味着 而(15) 这和 while(true)

一个无止境的循环

将一个对象放入这样的代码中,该对象必须至少表现为一个整数或一个布尔值,为while循环提供任何可计算的表达式,例如

public:
    operator bool() const
    {
         return myVar;
    }

在myVar中存储while条件时…

i+j
具有类型
int
,因为
i
j
都是
int
s。表达式的值是这两个值的总和。在语句中

i + j;
k = i + j;
while (i + j) {
}
该值未被使用,因此被忽略。编译器可能会忽略该加法,因为它没有副作用。在语句中

i + j;
k = i + j;
while (i + j) {
}
使用结果;将其复制到语句中的
k

i + j;
k = i + j;
while (i + j) {
}

该值在布尔上下文中使用。形式上,它是“上下文转换为
bool
”0转换为<代码> false <代码>,其他任何值都转换为<代码>真< /COD>。< /P> < C++ >代码> > >代码>不存在于所有版本的C++中。我认为只有C才介绍了布尔文字。我知道你所说的是事实,但想理解它。我想了解我应该如何接近表达式。并处理它们产生的输出。例如,如果条件是
,而(std::cin>>值)
,您所说的将是真的?@AmitTomar,它返回一个
std::istream&
std::cin
),在这种情况下,它具有
显式运算符bool()
运算符void*)
,在C++03中)将其状态转换为布尔值。@chris:我很确定开始时没有。@chris你能解释一下
的意思吗,它有显式运算符bool()将其状态转换为布尔值
?对象的处理方式是否相同?例如
while(object){
?这是否需要为该对象定义
!=
(或
=
)运算符?如果无法将对象转换为可以转换为
布尔值的对象,则会给出错误。它需要
运算符int()
运算符void*()
或类似,将其转换为可以与0进行比较的值。不完全正确的是,它必须与0进行比较。if/while语句中的表达式将尝试转换为布尔值。对于整数,存在隐式转换,表示0=>false,其他一切=>true;但对于对象,则是另一回事。例如,也可能有一个显式的
运算符bool()
。是的,这就是我的意思,如果没有
运算符bool()
,编译器将选择一些可以通过使用(隐式)`!=0`转换为
bool
。如果没有“什么”,则会出现错误“无法将对象转换为bool”或者类似的东西。我同意@nyarlathotep。整个“!=0”解释是多余的。如果表达式的类型为
bool
,则直接使用它。如果表达式可以转换为
bool
,则将其转换。否则,这是一个类型错误。