繁体   English   中英

有没有办法将字符串文字传递为C ++中的引用

[英]Is there a way to pass a string literal as reference in C++

在C ++中,如果值不能为NULL,通常通过引用而不是指针传递。

假设我有一个带有以下签名的函数,该签名通常与字符串文字一起使用。

void setText( const char* text );

我想知道如何更改函数以使其接受引用(并具有不接受NULL的优点)?

  • 如果我将其更改为(const char& text)那么它将是对单个char的引用。 地址可以从中获取到函数内部...但是感觉不太好。

  • 另一个选项是(const std::string& text) ,它的缺点是总是调用构造函数并进行一些动态内存分配。

任何其他常见方式,还是只坚持使用std::string&char*

老实说,我只保留const char* text函数,并添加一个重载const std::string& text函数,该函数使用setText(text.c_str())调用第一个函数。

这里存在一个小问题,因为C ++和数组引用不是最佳的组合。 有关参考,请参见: C ++通过参考传递数组

由于您正在谈论的是将引用绑定到字符串,并且字符串是字符数组,因此我们直接遇到了该问题。 有鉴于此,我们真正能做的最好的事情就是将ref绑定到const char *,如下所示:

void ref(const char* const& s);

但这不能满足您的要求。 这将对引用的引用绑定到一个指针,并且它保证的是指针本身存在,而不是指向有效的字符串文字。 在std :: string&示例中也存在相同的问题:这些示例仅保证您已绑定到std :: string对象,但是该字符串很可能为空,因此您仍不能保证自己的字符串具有任何有价值的东西。

最后,我将紧跟Zan所说的。 const char *是一个受人尊敬的惯用法,它传递字符串文字,然后再进行第二次绑定到字符串的重载是一个很好的方便。

(最后一个注意事项:std :: string不会“总是”分配内存。使用小字符串优化的实现将跳过长达23个字符的字符串。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM