将参考引用到未知长度的阵列而不是指针是优雅的吗?

Is it elegant to pass reference to unknown-length array instead of pointer?

本文关键字:指针 阵列 引用 参考 未知      更新时间:2023-10-16

请考虑以下概念验证片段:

#include <iostream>
const char* random_string_for_the_sake_of_testing = "123";
template <class T>
const T& read_file()
{
    const T* data;
    data = random_string_for_the_sake_of_testing;
    return *data;
}
int main(int argc, char* argv[])
{
    std::cout << &read_file<char>() << std::endl;
}

想法是,read_file()函数应该返回一个指针到包含施放于请求类型的MMAP-ED文件的缓冲区。该代码将永远不会返回NULL,只要父对象在范围中,缓冲区就不会释放,因此我发现返回对象更优雅。

但是,我想知道是否优雅地将引用返回到类似的可变长度阵列。也就是说,将指针转换为第一个对象的引用,然后将引用转换回指针。

您不应该使用的内容:

  • a const char*-当然,每个人都会认识到这是可能的可能永远不会LL必须检查您的文档以确保。它确实很可能只是一个指向单个char的指针。

  • a const char&-绝对不要这样做。这实际上暗示您只返回对单个char的引用。在他们的右脑中,没有人会认为"哦,这可能是对C风格串中第一个角色的提及,因此我需要接受它的地址。"这不仅会使人们必须阅读您的文档,而且还会使它们感到困惑。

您应该使用的内容:

  • a std::string-这是完全明确的。毫无疑问,您正在返回一根字符串,并且不能无效。这准确地描述了您的函数打算返回的内容。

想法是read_file()函数应该返回指针...

如果功能被置于返回指针,则返回指针。如果不允许返回NULL,则可以在评论中说。

将指针转换为参考,期望您功能的用户将其转换回指针的用户不优雅:它是令人费解的。

保持简单,班级的用户(也许您自己?)会很感激。