C++ 三元if语句 - 希望没有"else"部分

C++ Ternary If Statement - Wish to have no "else" part

本文关键字:else 部分 希望 三元 if 语句 C++      更新时间:2023-10-16

如果满足条件,我会向delete []分配一些内存:条件是double* m_x == nullptr

我正在努力做到这一点:

(m_x == nullptr) ? (delete [] m_x);

然而,编译器要求我在:后面有"else部分",如下所示:

(m_x == nullptr) ? (delete [] m_x) : ;

但是我没有任何东西可以放在冒号后面。

有办法绕过这个吗?除了:

if(m_x == nullptr)
        delete [] m_x;

谢谢,

编辑

我的意思是if(m_x != nullptr)很抱歉复制错了

您可能是指(m_x != nullptr)作为条件?在这种情况下,您可以简化

(m_x != nullptr) ? (delete [] m_x);

delete[] m_x;

因为nullptr检查无论如何都是由deletedelete[]在内部执行的。

如果你真的是指条件(m_x == nullptr),那么你可以去掉整个语句,因为只有在指针为null的情况下删除指针总是一个no-op。请解释一下你为什么认为你想要这个。

无论如何,使用if语句可能会更好。为什么这不是一个好的解决方案?

但是,如果您坚持使用条件运算符,只需使用其值可以忽略的伪表达式:

m_x == nullptr ? delete [] m_x : (void)0

(void)0是创建类型为void的表达式的最简单方法,这里需要它来匹配delete [] m_x的类型。

但是,如果它不是一个更大表达式的一部分,我想不出有什么好的理由不使用if语句:

if (m_x == nullptr) delete [] m_x;

但是,由于空指针上的delete没有任何作用,因此很难理解为什么要首先执行此操作。

如果你的实际意图是删除指针,如果它是而不是null,那么你会想要:

if (m_x != nullptr) delete [] m_x;

但是,由于空指针上的delete没有任何作用(感谢@juancopanza)在评论中指出了这一点),您不妨将其简化为:

delete [] m_x;

三元运算符用于表达式中,您需要根据条件选择返回的值。它是一个函数式语言风格的if语句。

当你纯粹有副作用(比如释放内存)时,不应该使用它。在这种情况下,使用if语句是正确的做法。

我认为你没有正确使用它。。。以下是如何使用该语句的示例。。。

int inValue = 5;
int i = 0;
int b = (inValue > 0) ? (i + 1) : (i);

它指定X或Y结果=(条件)?X: Y