以字符串为参数调用一个对象,
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/