2014-11-20 3 views
-7

Действительно ли это действительно? Будет ли проект компилироваться? У меня нет доступа к компилятору прямо сейчас, но мой друг имел в своем коде:C++ возвращается не один раз?

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

Почему и как это неуместно?

Спасибо!

Спасибо всем, у кого было что-то конструктивное, чтобы сказать.

+0

А по слову «друг» вы имеете в виду «домашнее задание»? – JJJ

+3

Если у вас есть интернет, у вас есть компилятор. http://ideone.com –

+0

Уверен, что у вас есть доступ к компилятору: например, http://ideone.com. –

ответ

-3

Когда функция возвращается, она прекращает выполнение. Все после первого выполненного возврата никогда не будет выполнено. Таким образом, для такой функции вы должны получить «Ошибка: недостижимый код».

+4

Это было бы предупреждение, а не ошибка, и это полностью зависит от компилятора - стандарт не предусматривает его. –

+0

Да, я всегда думал, что было бы лучше, как предупреждение. Я просто так не видел. – DaaaahWhoosh

4

Это частично действительный.

Недопустимая часть заключается в том, что вы пытаетесь объявить переменную в выражении, которое недопустимо. Но нет ничего незаконного, если у вас есть несколько безусловных операторов return, но только первый будет выполнен.

0

Нет, это невозможно в C++ или любом другом языке программирования, о котором я знаю.

В качестве другого пользователя, который ответил на ваш вопрос, будет выполнен только первый return. В зависимости от компилятора, может дать вам сообщение об ошибке или предупредить, что у вас есть две функции return в одной определенной области, здесь нет синтаксической ошибки.

можно вернуть два или более значений в C++, помещая каждую переменную в вектор и возвращает ее, как documented in this question.

return возвращает значение, присвоенное ему и выходит из функции.

В других языках программирования, таких как Lua, может использоваться return variable1, variable2;.

+1

Это также относится к Python (более популярным, чем Lua, на мой взгляд). – Caduchon

+0

@Caduchon Я считаю, что 'return'ing таким образом поддерживается на большинстве« сырых »языков,« PHP »определенно делает, и я думаю, что« Java »тоже. – cybermonkey

0

Это невозможно в 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); 
} 
Смежные вопросы