C++不止一次返回?

问题描述:

这是否有效?项目是否会编译?我目前无法访问编译器,但是我的朋友在他的代码中有这样的代码:C++不止一次返回?

int returnTwice() { 
    return 1; 
    return 2; 
} 

为什么以及这是不恰当的?

谢谢!

谢谢大家有些建设性的话。

+0

而“朋友”的意思是“家庭作业”? – JJJ 2014-11-20 17:23:22

+3

如果你有互联网,那么你有一个编译器。 http://ideone.com – 2014-11-20 17:24:36

+0

当然,你可以访问一个编译器:例如http://ideone.com。 – 2014-11-20 17:24:45

函数返回时,它停止执行。第一次执行后的所有内容都不会执行。因此,你应该得到一个“Error:unreachable code”这样的函数。

+4

这将是一个警告,而不是一个错误,它完全由编译器决定 - 标准没有强制它。 – 2014-11-20 17:25:45

+0

是的,我一直认为这会更好。我从来没有这样看过。 – DaaaahWhoosh 2014-11-20 17:27:57

这是部分有效。

无效的部分是您尝试在表达式中声明变量,这是不允许的。但是有多个无条件return声明没有任何违法,但只有第一个将被执行。

不,这在C++或其他任何我知道的编程语言中是不可能的。

正如另一位回答您问题的用户所说,只有第一个return声明将被执行。完全取决于编译器,它可能可能给你一个错误或警告,你在一个定义的范围内有两个return函数,这里没有语法错误。

,能够通过将每个变量到载体并将其返回在C返回两个或多个值++,如documented in this question.

return返回分配给它的值和退出的功能。

在诸如Lua的其他编程语言中可以使用return variable1, variable2;

+1

Python中也是如此(在我看来比Lua更受欢迎)。 – Caduchon 2014-11-20 17:42:20

+0

@Caduchon我相信''返回''这种方式在大多数'原始'语言中都是支持的,''''''''''''我认为'Java'也是。 – cybermonkey 2014-11-20 21:20:09

这在C++中是不可能的。但是,如果您想要类似的行为,则可以使用boost::tuple

boost::tuple<double,double> figInfo(const Figure& fig) 
{ 
    double p = fig.getPerimeter(); 
    double s = fig.getSurface(); 
    return boost::make_tuple(p,s); 
} 

boost::tuple<std::string, unsigned short int, std::string> profile() 
{ 
    std::string first_name = "Christophe"; 
    unsigned short int age = 29; 
    std::string address = "Unspecified"; 
    return boost::make_tuple(first_name, age, address); 
}