我是否可以在不安全修改的情况下在同一个表达式中多次使用该对象?

Can I use the object in the same expression more than once without modifying it safely?

我在 C++ primer 5 版上看过这个例子,它讨论了智能指针;我有 class 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 returns a std::shared_ptr 为 null 或指向一个对象。

中使用了两次index
return (*check(index_, "dereferencing unbound StrblobPtr!"))[index_];

只要你不修改它就可以。

不过,您无条件地间接指向了指针,这是不对的。你说 check 可以 return 一个空指针。通过空指针间接访问是未定义的行为。您需要确保通过首先检查 return 值来防范这种情况。如果它为空,那么您要么需要 return 一个哨兵,要么抛出一个异常。