【发布时间】:2015-02-06 13:41:50
【问题描述】:
在 C++ 中,如果值不能为 NULL,则通常通过引用而不是指针传递。
假设我有一个具有以下签名的函数,该函数通常与字符串文字一起使用。
void setText( const char* text );
我想知道如何更改函数以使其接受引用(并且具有不接受 NULL 的优势)?
如果我将其更改为
(const char& text),那么它将是单个字符的引用。可以在函数内部获取地址……但感觉不太好。另一个选项是
(const std::string& text),它的缺点是它总是调用构造函数并进行一些动态内存分配。
任何其他常用方式,还是只坚持std::string& 或char*?
【问题讨论】:
-
参加
const std::string &。它将由 C 字符串自动构造。 “它总是调用构造函数并进行一些动态内存分配”——如果您使用的是合理的标准库和编译器,很可能不会。 -
四处寻找
string_ref。我不认为它的标准,但它为std::string或const char*做了一个轻量级的参考包装。 -
const std::string&,这是 RAII 真正帮助您的地方。 -
字符串文字是 char 数组,因此您可以通过在数组大小上模板化的引用来获取数组。我不认为我更喜欢这样的模板解决方案而不是
std::string。 -
@user666412:覆盖是在编译时确定的,因此 nullptr_t 只会使用文字 null 捕获调用。
标签: c++ char pass-by-reference