在 c++ 中,条件运算符不支持指针

In c++, conditional operator did not support pointer?

本文关键字:不支持 指针 条件运算符 c++      更新时间:2023-10-16

对不起。这个问题是我的粗心造成的。请忽略它,谢谢。

我尝试在 LintCode 上解决问题,添加两个数字.
起初,我尝试这些代码:first_code,但我得到运行时错误,错误消息 TERMSIG= 11.
然后我更改这些代码,second_code。令我惊讶的是,它奏效了.唯一的区别是:
[首页]

l1 = (l1) ? nullptr : l1->next;
l2 = (l2) ? nullptr : l2->next;

[第二]

if(l1){
    l1 = l1->next;
}
else{
    l1=nullptr;
}
if(l2){
    l2 = l2->next;
}
else{
    l2=nullptr;
}

所以我想知道条件运算符是否支持指针?
我尝试这些简单的代码:

#include <iostream>
int main(){
    int* a = nullptr;
    int b = 0;
    b = (a) ? 1 : 10;
    std::cout << b << std::endl;
}

成功了。
但是为什么它在 LintCode 上的问题失败了。我忽略了什么吗?

l1 = (l1) ? nullptr : l1->next;

相当于

if (l1)
    l1 = nullptr;
else
    l1 = l1->next;

问题应该是显而易见的。

许多人宁愿完全跳过替代分支,

if (l1)
    l1 = l1->next;

因为将nullptr分配给空指针是不必要的(并且看起来像是其他意图)。

这两段代码做不同的事情。

第一个有两个错误。首先,您根本不分配 l2。其次,如果指针为 null,则取消引用指针。第二个版本没有这些错误。

您似乎对条件运算符的操作数顺序感到困惑。如果第一个操作数为真,则执行第二个操作数的表达式,如果第一个操作数为假,则执行第三个操作数。

所以我想知道条件运算符是否支持指针?

确实如此。您根本不能取消引用空指针。