在三元操作符中赋值



当使用std::weak_ptr时,最好使用lock()方法访问相应的std::shared_ptr,如下所示:

std::weak_ptr<std::string> w;
std::shared_ptr<std::string> s = std::make_shared<std::string>("test");
w = s;
if (auto p = w.lock())
std::cout << *p << "n";
else
std::cout << "Empty";

如果我想使用三元操作符来简化它,看起来这是:

std::cout << (auto p = w.lock()) ? *p : "Empty";

将是有效的代码,但这不能编译。

是否可以对三元操作符使用这种方法?

auto p = w.lock()不是一种任务。它是一个变量的声明。可以在if语句的条件中声明变量,但不能在条件表达式中声明变量。

你可以写:

auto p = w.lock();
std::cout << (
p ? *p
: "Empty"
);

如果您想为表达式引入变量(如Lisp或Haskell中的let),您可以使用lambda:

std::cout << [p = w.lock()] {return p ? *p : "Empty";}();

这也限制了?:,它将std::cout解释为问题中条件的一部分。

相关内容

  • 没有找到相关文章

最新更新