【发布时间】:2021-11-06 19:47:52
【问题描述】:
似乎由于某种原因,当我尝试在同一行上调用两个函数时,第一个函数从“.get()”接收一个 nullptr 作为第一个参数
getSomePtr(someUniquePtr.get(), someArray)->moveUniquePtr(std::move(someUniquePtr));
但是当将这些函数分成两行时,一切似乎都正常:
auto* somePtr = getSomePtr(someUniquePtr.get(), someArray);
somePtr->moveUniquePtr(std::move(someUniquePtr));
为什么会这样?
【问题讨论】:
-
你试过用括号括起来 getSomePtr(someUniquePtr.get(), someArray) 吗?
-
非常类似于this question。根据您的 C++ 版本,可能未指定指针是先移动还是先访问。
-
涉及的类型有哪些?函数原型?
moveUniquePtr(std::move(someUniquePtr)的效果可能会因函数期望的参数类型而大不相同。 -
@Dúthomhas • 请参阅undefined behavior 部分,其中提到 C++17 标准在函数参数求值顺序方面发生了变化。
-
好吧,在我非常疲倦的状态下,我只是在谈论函数的参数。你们都在谈论特殊情况,毫不奇怪,这里完全是主题……对此感到抱歉。是的,C++17 阐明了 -> 的所有 LHS 都在 RHS 之前排序。
标签: c++ smart-pointers