函数类型中的星号
Asterisk in function type
我在线找到了一些C 聊天服务器的代码。在下面的代码中包含我不收到的东西
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;
将三次输出相同的文本,在第一个示例中,我们通过将验证的指针传递给ostream
上的string
的operator<<
Overloaded Operator,将类并在其中输出值。在第二个示例中,我们首先放置指针,然后访问该实例上的构件函数c_str
。第三个示例也这样做,但使用"箭头"操作员。
请记住,指针可能是无效的,在这种情况下,将其删除会让您陷入麻烦。因此,您应该始终检查指针是否是nullptr
。
相关文章:
- 特征::矩阵<双精度,1,3> 结构类型函数中的返回类型函数
- 将C++子类成员函数(虚拟实现)传递给 C 类型函数指针
- C++ 这里有一个返回 (24) 的布尔返回类型函数
- 使用SFINAE来检测void返回类型函数的存在
- 使用此类型函数有什么优势
- 为什么此函数通过类型函数指针调用后,呼叫明智地行为
- 如何使用无类型函数指针调用C++成员函数
- 模板返回类型函数如何在C++中工作
- 具有通用类型函数的动态库[C ]
- 如何在返回类型函数模板的专用化中使用派生类型?( "couldn't infer template argument" )
- Bon appetit :从 int 返回类型函数在 main() 中打印字符串
- 对于需要其他模板参数的类型函数的部分模板专业化
- c++错误的参数类型-函数指针
- 延迟评估模板类型函数
- 在引用或指针返回类型函数上输入
- 具有指针数据类型的非类型函数模板参数
- STL中使用的C++自定义比较类型(函数谓词与较少结构)
- C++模板基类的非类型函数模板的 using 声明
- 字符串到类型函数,模板专用化使调用统一
- 自由类型函数可以接受 Unicode 文件名吗?