在C++中,指向unique_ptr函数参数的原始指针的用途是什么?
问题描述:
略读通过TensorFlow C++ API我偶然发现了一个奇怪的函数签名:在C++中,指向unique_ptr函数参数的原始指针的用途是什么?
Status Create(
const FileSystemStoragePathSourceConfig & config,
std::unique_ptr<FileSystemStoragePathSource> *result
)
我不明白为什么result
是一个原始指针unique_ptr
。因为通常当我们想通过unique_ptr
作为函数参数时,我们通过移动(&&
)或参考&
或通过值来完成。我还没有看到过使用原始指针unique_ptr
的用例。
答
TensorFlow由Google制作。 Google's C++ style guide说:
通过引用传递的所有参数必须标记为
const
。
这意味着所有的输出参数必须是指针而不是引用。这种风格不是惯用的C++(标准库通过引用传递输出参数),但Google风格指南的支持者认为,通过将输出参数作为指针传递,可以更清楚地了解哪些参数是输入的,哪些是输出。
疯狂的猜测,因为写它的人更喜欢管理out-parameters作为by-address而不是by-reference,其中调用语法很容易被误解。 – WhozCraig
此外,它允许输出参数是可选的。某些人只能在'std :: optional'之前使用指针。 – StoryTeller
“按价值&”您可能想要重述一下。由参考不是由价值。 – curiousguy