我在网上找到了C++ Chat Server的一些代码。并且在下面的代码中包含了我不会得到的内容
string* buildPrompt()
{
// Code for chat server
}
string
之后的那个星号是什么?如果我将其删除,代码是否会停止工作?
答案 0 :(得分:2)
string
之后的星号表示它是指向内存中其他位置的string
对象的指针。删除星号会更改函数的返回类型:
string* buildPrompt(); // <-- Returns pointer to a string.
string buildPrompt(); // <-- Returns an instance of a string.
我建议对C ++中的指针做一些基本的阅读,一旦你从简单的“Hello,World!”进步,它们对于语言来说是非常基础的。程序
https://en.wikipedia.org/wiki/Pointer_(computer_programming)
答案 1 :(得分:1)
在您的示例中,星号绑定到返回类型,并指示该函数返回指向字符串实例的指针。
如果删除了星号,则表示您按值返回字符串实例。
因此星号表示该类型是指向它所连接的任何类型的指针,因此int*
是指向int
的指针的类型,而int**
是指针是指向int
的指针,依此类推。
要访问作为指针返回的字符串实例,您必须通过在*
前加上返回值或使用“箭头操作符”(->
)访问成员来取消引用它。所以代码:
string* str = buildPrompt();
cout << *str << endl;
cout << (*str).c_str() << endl;
cout << str->c_str() << endl;
将输出相同的文本三次,在第一个示例中,我们通过将解除引用的指针传递给operator<<
上的string
重载运算符来解除类并输出其中的值。 }}。在第二个示例中,我们首先取消引用指针,然后在该实例上访问成员函数ostream
的调用。第三个例子也是如此,但是使用了“箭头”操作符。
请记住,指针可以为null,在这种情况下取消引用它会让您遇到麻烦。因此,在解除引用之前,应始终检查指针是否为nullptr
。