C++ 三元if语句 - 希望没有"else"部分
C++ Ternary If Statement - Wish to have no "else" part
如果满足条件,我会向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
检查无论如何都是由delete
和delete[]
在内部执行的。
如果你真的是指条件(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
- 部分定义/别名模板模板参数
- 如何加载(或映射)文件部分的最大大小,但适合在Windows上的RAM
- 我的简单if-else语句是如何无法访问的代码
- 带有特殊路径部分的"std::filesystem::weakly_canonical"失败
- 线程,如果else语句,都是错误的上下文切换后,会发生什么
- 程序在执行程序的其余部分之前退出
- 如何删除peer if else分支中的冗长句子
- 在更改for循环的第三部分后,未使用for循环结果
- 我似乎对if/else的基本语句有问题:/
- 使用if-else将数字转换为单词
- 从具有默认值的部分指定模板类继承时发生SWIG错误,具有不带默认值的正向声明
- 部分专业化和嵌套模板
- 为C++03编译器编写部分unique_ptr,该编译器与较新的编译器在公共代码库上运行
- 如何将数组部分初始化为某个默认值?
- c++ std::enable_if .... else?
- 我无法在我的If-Else梯子中解决其他部分
- 如果和 else 部分都在执行
- if 语句不起作用并被跳到 else 部分
- C++ 三元if语句 - 希望没有"else"部分
- 找不到if-else循环的第二部分