从方法堆栈编译中按值返回实例
Return instance by value from a method stack compilation
你能解释一下为什么这不会编译吗:
(这是错误:
../Man.cpp:33:9: error: conversion from ‘Man (*)()’ to non-scalar type ‘Man’ requested)
代码:
Man goo(){
Man m();
return m;
}
但这是:
Man goo(){
return Man();
}
Man m();
这意味着"在程序的其他地方,我将定义一个名为m
的函数,该函数不接受任何参数,并返回一个Man
"。是的,即使你把它写在另一个函数里。
Man m;
这意味着"m
是Man
类型的变量"。由于Man
是一个类类型,因此将调用默认构造函数,并且不需要括号。
您不希望在第一个示例中使用这些括号:
Man goo(){
Man m;
return m;
}
在第一种情况下不需要()。默认构造函数是隐式调用的。
Man goo(){
Man m;
return m;
}
在第二种情况下,您正在调用构造函数。
相关文章:
- 返回的指针属性中类实例上的矢量属性消失
- 返回 C++ 中的指针实例变量
- 在实例化之前推断函数模板的返回类型
- 返回引用实例和非引用实例(return mystr & vs mystr)之间的区别是什么?
- 当函数返回C++向量实例时,它正在运行
- 实例化对象并调用方法,使用单行语法在 C# 或 C++ 中返回值?
- 如何实例化类的公共成员并将其作为 std::p romise 返回?
- 是否是从等待返回到悬而未决的"this"实例的未定义行为?
- 返回实例变量的c++方法可以访问变量中的数据,但不能更改它,但在编译时不会生成错误
- 我们可以在没有新实例化的情况下声明一个抽象方法来返回抽象超类中的子类对象吗
- 是否可以从派生类返回基类的实例?
- 返回具体子类实例的 C++ 虚拟类函数
- 当模板返回类型阻止其实例化时,如何向用户提供漂亮的static_assert消息?
- 如何在 C 中包装C++具有参数的类方法或返回另一个C++类的实例?
- 从新实例的向量中检索数据返回 0
- 返回实例导致"尝试引用已删除的函数"错误
- 此构造函数是否返回实例
- 从方法堆栈编译中按值返回实例
- 模板方法编译错误,从内部类返回实例
- 继承和返回实例的循环依赖性问题