考虑代码的给定部分。以下if语句有什么作用?
int* pItem;
if(pItem)
{
pItem->getvalue();
}
答案 0 :(得分:0)
在这种特殊情况下,if语句
if (pItem) { ... }
相当于
if (pItem != nullptr) { ... }
换句话说,它测试指针是否为空。
一般来说,如果在if
语句中看到非布尔表达式,C ++会隐式将其转换为bool
。对于指针,这将测试指针是否为空。对于整数类型,这将测试整数是否为0.对于对象类型,这将尝试使用隐式转换运算符。
答案 1 :(得分:0)
以下if语句有什么作用?
它调用未定义的行为,因为pItem
未初始化。
if(pItem)
语句尝试避免取消引用pItem
pItem->getvalue();
当pItem
等于0
或nullptr
时。
但如上所述它没有被初始化,因此它是未定义的行为。
答案 2 :(得分:0)
概念是if子句阻止代码使用nullptr。
但是,int变量没有方法,所以int-> pItem以不同的方式无效。
我希望在“int * pItem”中,pItem是指向用户定义类型(即类)的指针。但是int是一个保留字,因此是一个没有方法的POD。
答案 3 :(得分:0)
在C ++中,如果表达式为零,表达式的计算结果为false
,否则计算结果为true
。
if (<expression>)
在这种情况下pItem
是表达式,因此我们测试它是否为零(null)。它相当于
if (pItem != nullptr)
你可以把它想象成&#34;如果pItem有一个值(非零)&#34;
答案 4 :(得分:0)
如果这是您拥有的所有代码,那么您的程序将受到未定义的行为的影响。您正在使用未初始化的变量。
如果指针被正确初始化,那么它会根据它指向的内容在if语句中计算true / false。如果它的值是nullptr或NULL,则它的计算结果为false。否则评估结果为真。