Reputation: 31
C++17's string view gives developers a way to pass around cheap non-owning references to a string that can actually be faster than const std::string&
. I might be naive, but this sounds pretty similar to Java's built-in mechanic to copy references of an object. Built-in wrappers like Integer and String are immutable. Java's "reference" mechanic gives you a guarantee that these objects will hold the same value throughout the lifetime of a program. The difference is in C++, string_view
is explicit in a program like so:
void retrieve_an_object (string_view sv) {
}
This is more self-documenting than Java's surprising (to C++ developers) mechanic. But surely it is a huge burden to the standard and library writers to write a view class for every conceivable class in C++. Could C++ perhaps have a more dedicated way of marking objects as "view only" without having to write an entire class and if so, why has this been removed from consideration?
Upvotes: 3
Views: 1629
Reputation: 2192
The view classes (string_view
, array_view
) are meant to give (read only) access to parts of the object they are presenting.
It’s like a const &
with additional information about a different beginning and end.
C++ has a dedicated way for view only objects: const &
. (as well as std::reference_wrapper<const T>
)
If you only want to give access to specific parts of some data structure you need a dedicated view class which knows what parts should be made available, this is not really generalizable per se.
Upvotes: 6