函数类型中的星号

时间:2016-11-25 22:03:47

标签: c++ function

我在网上找到了C++ Chat Server的一些代码。并且在下面的代码中包含了我不会得到的内容

string* buildPrompt()
{
// Code for chat server
}

string之后的那个星号是什么?如果我将其删除,代码是否会停止工作?

2 个答案:

答案 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