将参考引用到未知长度的阵列而不是指针是优雅的吗?
Is it elegant to pass reference to unknown-length array instead of pointer?
请考虑以下概念验证片段:
#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
,则可以在评论中说。
将指针转换为参考,期望您功能的用户将其转换回指针的用户不优雅:它是令人费解的。
保持简单,班级的用户(也许您自己?)会很感激。
相关文章:
- EIGEN地图类:将C阵列映射到VectorXD指针以有效的方式
- 通过从当地的C风格阵列中返回指针来获取一个悬空的指针
- 将C 中的每个指针删除作为阵列的指针安全吗?
- 重新分配指针阵列的一部分的安全方法
- 排序阵列会使指针链接错误
- 指针阵列在一个对象数组中函数
- 指针阵列打印值
- C 在指针阵列中删除第一个元素,以效应后来的元素
- 问题将信息复制到指针阵列中
- 从指针打印动态int阵列中获取怪异的字符
- 将指针或一系列指针存储在动态阵列中
- 删除指向排序的字符串阵列的指针会在运行后会有一个错误
- 排序浮动指针阵列
- 快速将双重指针阵列转换为单个指针,可能是连续的
- C 按顺序排列一个指针阵列
- 如何使用struct构造函数在结构中初始化指针阵列
- 带有超载运算符的指针阵列
- 指针阵列和指针数组的指针之间的区别
- 创建类型结构的指针阵列
- 指针阵列的动态初始化