Пустой возврат в Конструкторе - PullRequest
9 голосов
/ 23 ноября 2010

Я ожидал, что Visual Studio выдаст мне сообщение об ошибке или, по крайней мере, предупреждение, но он не дал мне ни одного, когда в конструкторе было пустое return:

MyObject::MyObject()
{
    if (/*some condition*/)
    {
        //SomeCode
        return;
    }

    // continue with other code
}

Я не виделИспользование этого до сих пор в моем ограниченном опыте, поэтому мой вопрос, нормально ли иметь возврат в конструкторе?

Это скорее вопрос curiosity , так как я понимаю, что очень легко кодировать так, что вам никогда не придется помещать туда возврат, хотя у меня есть пример, где это было бы оченьполезно, но перед тем, как его использовать, я хочу посмотреть, запрещено ли это (возможно, по стандарту или вообще не очень хорошая идея).

Ответы [ 2 ]

11 голосов
/ 23 ноября 2010

Стандарты гласят:

12.1 Конструкторы
...
Оператор возврата в теле конструктор не должен указывать возврат значение. Адрес конструктора не должны быть приняты.
...

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

5 голосов
/ 23 ноября 2010

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

MyObject::MyObject () {
    if (/* something */) {
        // SomeCode
    } else {
        // continue with other code
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...