class one
{
public:
int a;
one& fun1()
{
cout<<" Fun1 \n";
}
one& fun2()
{
cout<<" Fun2 \n";
}
};
在主要我执行“object.fun1()。fun2()” - 它工作正常。 虽然我的困惑是,在函数定义中我没有返回任何东西,看起来它正在返回这个指针,这不应该是一个错误吗?
答案 0 :(得分:6)
不,不是。 Have a look at this answer解释了为什么编译器默认不发出错误。
无论如何,如果没有返回,函数的返回值将只是未定义(垃圾),当你尝试读取它时,你会得到未定义的行为。
看起来像是在返回这个指针
实际返回的内容取决于用于特定编译器和平台的调用约定。例如,如果在堆栈上推送返回值,则获得的值实际上可能是在执行cout
语句期间在堆栈上推送的一些(现在无效)剩余数据。但它在很大程度上取决于非常具体的内部结构,大多数时候你不应该知道 - 只要记住返回值将是垃圾。
现在为什么你能做object.fun1().fun2()
?正如@akappa在评论中解释的那样,您的成员函数是非虚拟的,并且不访问任何成员,因此编译器很可能将它们编译为不需要this
指针的自由函数。
许多编译器都有开关来警告你缺少回报,例如gcc有-Wreturn-type
,如果设置-Wall
,它也会被激活。就个人而言,我总是通过设置-Werror=return-type
将此警告定义为错误。这取决于你的编译器,但它也应该有一些功能来启用它。