我在网上找到了一些代码C++ Chat Server。而在下面的代码中包含的东西我不明白函数类型中的星号
string* buildPrompt()
{
// Code for chat server
}
什么是string
后星号?如果我删除它,代码是否会停止工作?
我在网上找到了一些代码C++ Chat Server。而在下面的代码中包含的东西我不明白函数类型中的星号
string* buildPrompt()
{
// Code for chat server
}
什么是string
后星号?如果我删除它,代码是否会停止工作?
string
之后的星号表示它是指向内存中其他位置的string
对象的指针。卸下星号改变来自函数的返回类型:
string* buildPrompt(); // <-- Returns pointer to a string.
string buildPrompt(); // <-- Returns an instance of a string.
我建议做在C++指针的一些基本的阅读,他们很根本,一旦你从简单的推进语“你好,世界!”程式。
https://en.wikipedia.org/wiki/Pointer_(computer_programming)
在您的示例中,星号绑定到返回类型,并指示该函数返回指向字符串实例的指针。
如果您删除了星号,这意味着您正在按值返回字符串实例。
所以星号表示该类型是指向任何类型它被连接到,所以int*
是一种类型,它是一个指向int
,而int**
是一个指针是一个指向int
,所以上。
要访问返回一个指针,你将不得不取消对它的引用与*
无论是在前面加上返回值,或访问使用“箭头经营者”成员(->
)字符串实例。因此,代码:
string* str = buildPrompt();
cout << *str << endl;
cout << (*str).c_str() << endl;
cout << str->c_str() << endl;
将输出相同的文本三次,在第一个例子中,我们反引用的类和输出在它的价值,通过将取消引用指针operator<<
重载运营商string
上ostream
。在第二个例子中,我们先取消引用指针,然后访问该实例上的成员函数c_str
。第三个例子也是这样,但使用“箭头”运算符。
请记住,指针可以为空,在这种情况下,解引用它会让你陷入困境。因此,在取消引用前,您应该始终检查指针是否为nullptr
。
是的......''string'和'string *'不是一回事。不过你应该去学习C++。 – Rakete1111
@ Rakete1111我学会了C++ ...但是我不记得教师在这个类型之后对星号进行了任何说明。 – BoeNoe
http://www.cplusplus.com/doc/tutorial/pointers/ – OldProgrammer