c++ - 为什么构造函数在对象调用时使用不同的运算符 - String& vs Char*?

标签 c++ string char operators

以字符串为参数调用一个对象,

eg: Check c1("Random");

对于构造函数检查,存在基于类型的差异,字符串与字符。 字符串需要地址运算符 &,而字符需要引用运算符 *。为什么不同?

将不胜感激,谢谢。

Check(const string &str = NULL)
{
    cout << str << endl;
}

对比

Check(const char *str = NULL)
{
    cout << str << endl;
}

最佳答案

我建议您研究一下 string 和 char* 之间的区别。

本质上,任何连续的字符流都是一个字符串。 C 使用 char* 实现它们——指向字符的指针,又名 C 字符串。这些都是空终止的,这样系统就知道何时到达了字符串的末尾。 C++ 也可以做到这一点,但它有自己的字符串库,与 cstrings 相比简化了使用

查看链接以获得更深入的解释: https://www.prismnet.com/~mcmahon/Notes/strings.html

更新: string 本身是一个 c++ 对象数据类型,而 char* 只是一个指向字符(或连续字符)的指针,它可以是可变长度,由空字符终止\0

这样实现:

void printString(string& temp){
    cout << temp << endl;
}

你的函数调用应该是这样的:

string text = "lorem ipsum";
printString(text);

此函数实现期望获得对字符串类型的引用作为其输入参数。因此,当我声明一个字符串变量 text 时,我通过简单地调用 printString(text) 将它传递给 printString 函数。函数调用将通过引用获取我的输入。它不会在函数调用中创建 temp 字符串的拷贝

如果您的实现是:

void printString(char* temp){
    cout << temp << endl;
}

那么你的函数调用将是:

char* text = "lorem ipsum";
printString(text);

此实现采用指针作为其输入参数,因此您必须将 char* 传递给该函数。与以前的方法不同,您可以简单地按原样传递字符串类型,它会通过引用传递。

这两个函数调用都打印出“lorem ipsum”

关于c++ - 为什么构造函数在对象调用时使用不同的运算符 - String& vs Char*?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47547181/

相关文章:

c++ - 简单记录器实现 C++ 中的详细级别

c++ - Eclipse CDT 构建输出到 bin/Release 和 bin/Debug

c# - 从 C++ DLL 接收 char ** 到 C# string[]

c - C中用0填充字符

c++ - 错误:静态断言失败:std::thread 参数在转换为右值后必须是可调用的

Python:为什么 __str__ 不调用递归?

python - 尝试分配给我同时就地创建的字符串时出现错误 'can' t assign to operator'

ruby - 如何将字符代码转换回字符?

c - 如何将数组的值分配给 c 中的另一个数组(制作副本)?

java - 编写一个方法用 '%20' 替换字符串中的所有空格?