[llvm-dev] Why StringRef is not a ArrayRef<char>

Paweł Bylica via llvm-dev llvm-dev at lists.llvm.org
Fri Nov 6 06:42:12 PST 2015


On Fri, Nov 6, 2015 at 3:24 PM Joerg Sonnenberger via llvm-dev <
llvm-dev at lists.llvm.org> wrote:

> On Fri, Nov 06, 2015 at 09:07:43AM -0500, Ramkumar Ramachandra via
> llvm-dev wrote:
> > I think it's the same difference we have between int * and
> > ArrayRef<int>, for instance. If you have a raw pointer, you are
> > expected to keep track of the size out-of-band. In aggregate types,
> > size is part of the type, making it very difficult to confuse a [1 x
> > i8] with a [3 x i8]. Many people probably use the raw pointer as a way
> > to hold a reference to dynamically allocated memory, and as a
> > type-escape hatch.
>
> StringRef is explicitly sized. I'd be more interested in which
> interfaces are actually simplified by implicit or explicit conversions
> between StringRef and ArrayRef<char>.
>

I was thinking about mixing SmallVector<> with ArrayRef<>. E.g. to have
SmallVector<>::assign(ArrayRef<>). That probably should be my first
question. I just realized that ArrayRef and SmallVector are not directly
related.

Having the interface above, SmallVector<char> would not work with StringRef.

- Paweł
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20151106/1c4e6f11/attachment.html>


More information about the llvm-dev mailing list