【问题标题】:C++, set bool to false, return oldC++,将 bool 设置为 false,返回 old
【发布时间】:2021-05-02 22:09:49
【问题描述】:

这段代码:

bool b = isTrue;
isTrue = false;

将旧的isTrue 值保存为b,然后将isTrue 设置为false。一切都很好,但是有没有办法在一行中执行此操作?最后我想实现这个:

bool b = isTrue ? /* assign true and flip `isTrue` value to false */ : false;

【问题讨论】:

  • 为什么需要一行?编译器会翻译成最优化的代码,
  • 您的最后一行代码似乎与最初的要求相矛盾——如果 isTrue 以 false 开头,那么 : false 不会尝试翻转 isTrue
  • @M.M 是的,我只想将true 的情况翻转为false 并保留false 的情况。使用三元运算符,我(不幸的是)需要将它们全部写在一行中
  • 但是您在帖子开始时说在所有情况下都应该使用isTrue = !isTrue;。请编辑帖子以澄清。也许你真正想要的是bool b = isTrue; isTrue = false;
  • @M.M 是的,正确的。我想要那个...

标签: c++ boolean conditional-operator


【解决方案1】:

std::exchange 可以用来做这个:

bool b = std::exchange(isTrue, !isTrue);

相当于:

bool b = (isTrue := !isTrue)

:= 是一个神奇的赋值运算符,它返回旧值而不是新分配的值。


如果您希望 b 具有旧值 isTrue 并将 isTrue 设置为 false,正如 cmets 中的讨论所建议的那样,您可以这样做:

bool b = std::exchange(isTrue, false);

【讨论】:

  • OP 改变了他们的要求(或者,也许一开始没有很好地解释他们)
【解决方案2】:

会的

#include <iostream>

int main()
{

    bool t = !false;
    bool b = false;
//  b = t, t = !t; 
    t = !(b = t); 
    std::cout << std::boolalpha << "b : " << b << " , " << "t : " << t << " . " << "give me a bottle of rum!" << std::endl;
    return 0;
}

评论的行也有效

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-24
    • 1970-01-01
    • 2014-01-01
    • 2017-02-03
    • 2011-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多