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
,则将其转换。否则,这是一个类型错误。