gpt4 book ai didi

c++ - 我可以在同一表达式中多次使用该对象而不安全地修改它吗?

转载 作者:行者123 更新时间:2023-12-02 08:23:35 25 4
gpt4 key购买 nike

我在 C++ Primer 5 版本上看到过这个例子,其中讨论了智能指针;我有一个 StrBlobPtr 类,它是 StrBlob 的伴侣。

StrBlobPtr 的成员之一是 deref:

std::string& StrBlobPtr::deref() const
{
auto p = check(curr, "dereference past end");
return (*p)[curr]; // (*p) is the vector to which this object points
}

check 返回一个 std::shared_ptr ,或者为 null,或者指向一个对象。

  • 我只想知道是否可以通过调用 check 直接生成 return 语句:

    std::string& StrblobPtr::deref() {
    return (*check(index_, "dereferencing unbound StrblobPtr!"))[index_];
    }
  • 那么这里在同一个表达式中使用 index_ 两次而不修改它是否定义良好?谢谢!

最佳答案

使用 index 两次

return (*check(index_, "dereferencing unbound StrblobPtr!"))[index_];

只要你不修改它就可以。

但不好的是你无条件地间接指向指针。你说 check 可以返回空指针。通过空指针间接是未定义的行为。您需要首先检查返回值来确保防止这种情况发生。如果它为空,那么您要么需要返回哨兵,要么抛出异常。

关于c++ - 我可以在同一表达式中多次使用该对象而不安全地修改它吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58665878/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com