在c++中,*function(arguments.)和function(arguments.)的区别是什么?
In C++ what is the difference between *function(arguments..) and function(arguments)
我看到了以下类型的函数:
data_type *function_name(arguments...)
:
data_type function_name(arguments...)
我想知道什么时候应该使用哪一个。为什么在下面的例子中这样做呢?(这是选自某门课程的教科书。)什么时候我应该写这样的函数?
struct Tower
{
string name;
Tower *link;
};
Tower *createTower(string name, Tower *link);
谁能进一步澄清这一点?
Tower* createTower(string name, Tower *link)
{
Tower* tp = new Tower;
tp->name = name;
tp->link = link;
return tp;
}
Tower* createBeconsOfGondor(){
Tower *tp = createTower("Rohan", NULL); // Points to nothing
tp = createTower("Halifiren", tp); // Still returns pointer?
}
在createBeconsOfGondor()函数的第二行,该函数的返回值如何仍然是一个指针?
表示该函数返回一个指针,而不是一个对象。
例如Tower createTower(string name, Tower *link);
返回一个Tower对象,而
Tower *createTower(string name, Tower *link);
返回一个指向塔对象的指针。
函数Tower *createTower(string name, Tower *link);
返回指向Tower
对象的指针。函数名前面的星号只是指定返回类型是指针。
你也可以这样写函数定义,这是等价的,但(在我看来)更清楚:
Tower* createTower(string name, Tower* link);
应该使用哪一个
注意第一种形式:
Tower createTower(...);
可以用作赋值(从而延长实例的生命周期),如
...
Tower T1 = createTower(...);
...
或者,您可以将其用作匿名临时
std::cout << createTower(...) << ...
如果Tower是大的,您可能有动机保留昂贵的实例,而不仅仅是打印持续时间…所以可以使用前者,然后输入
std::cout << T1 << ...
否则,如果您担心堆栈空间,而不那么担心记住不泄漏内存,那么您就有动力在堆中动态分配实例(这也支持长生命周期)
Tower* T1 = createTower(...); // BIG tower in heap
std::cout << *T1 << ....
// .... and some time later, you should remember to
delete T1;
其他人会建议你使用智能指针(并学会使用作用域)来控制何时应该删除。
概要:
堆栈vs堆vs实例大小
使用范围控制的生命周期
Tower *createTower(string name, Tower *link);当你在createTower函数(这是一个函数指针,它将返回一个结构)中返回一个塔(意味着一个结构)
相关文章:
- "error: no matching function for call to"构造函数错误
- 调用专用模板时出错"no matching function for call to [...]"
- 库函数需要一个 std::function<void(void)>,如何传入类函数?
- Confusion: decltype vs std::function
- 为什么 std::function 可以作为 std::not2 的参数?
- 'max'匹配'std::function<const int &(const int &, const int &)>'无过载
- 传递给std::function template的template参数究竟代表什么
- 将带有unique_ptr的可变 lambda 传递给 const&std::function
- 具有变量Number of Arguments的std::函数的矢量
- 绑定派生类方法C++从实例范围之外的分隔 std::function 变量调用
- 如何修复"too few arguments to function"?
- 'type_alias<char[N]>{}' VS 'char[N]{}' in function's arguments
- "term does not evaluate to a function taking 0 arguments"错误
- 标准::平等给出"Term doesnt evaluate to a function taking 2 arguments"
- 如何调试"C++ Function does not take 0 arguments"错误?
- 如何修复("too few arguments in function call")?
- "Error: function does not take 4 arguments"但它确实如此
- C++ "No overloaded function takes 0 arguments"错误
- 提升线程中的"too few arguments to function"
- 在c++中,*function(arguments.)和function(arguments.)的区别是什么?