假设我们在一个类中有一个简单的getter方法,该方法返回一个指向std::string
成员的const
引用:
const std::string& getString() const noexcept { return someString; }
随着C++17中std::string_view
的出现,我想知道写这个有什么优势:
const std::string_view getString() const noexcept { return someString; }
这两种方法中哪一种有优劣之分?显然(如果我错了,请纠正我)两种方案都肯定比这个好:
const char* getString() const noexcept { return someString.c_str(); }
我看到了这个相关的问题,但是我要求的略微不同。
const std::string&
的情况下,寿命延长会发挥作用,而在使用string_view
时可能会失去这个功能... 这可能是支持使用 const 引用而不是 string view 的另一个论点吗? - andreeestd::string getString()
时,lifetime extension才会生效。如果你执行auto& str = make_obj().getString()
,你将会得到一个悬空引用。 - Guillaume Racicotstd::string
在基本上每种访问方式上都保证空终止。这包括每种类型的访问。 - Max Langhofstring
,左值重载返回一个string_view
?不知道我对此有什么感觉。(另外,嗨Fabio!) - Barry