Почему (или когда) я должен разделить декларацию и уступку? - PullRequest
0 голосов
/ 14 декабря 2011

Моя IDE постоянно говорит мне сделать это. Я смутно помню, что читал в какой-то статье C ++, которая имеет отношение к исключениям в конструкторах.

Пример Java:

    void foo(){
        String result = "";
        int i = 5; // should this ever be a problem ?
    }

Для обеих строк IDE предлагает разделить.

Дополнительные вопросы

1. есть ли разница, если я создаю по значению или по ссылке.
Например. в C ++ class A{}; ... A a = ...; против A* a = new...;

2. Полагаю, с базовыми типами, такими как int или float, проблем никогда не бывает. POD одинаковы?

1 Ответ

0 голосов
/ 14 декабря 2011

Этот ответ касается C ++, поведение на других языках может отличаться

На самом деле вы должны инициализировать переменные при их объявлении.

Для POD типов это просто, чтобы вы не забыли инициализировать их и, таким образом, использовать неинициализированные данные.

Для пользовательских типов это делается для оптимизации:

A other;

//this will first construct a, and then assign a new value to a
//the initial construction is useless and takes up processing time
A a;
a = other;

//b is only initialized once
A b = other;

1) Это не создание переменной по значению или ссылке. Он создает его в стеке или в куче. Существуют различия, которые объясняются в большом количестве сообщений здесь на SO.

2) Это не проблема, это скорее привычка для POD. Основная причина, по которой инициализация выполняется в той же строке, что и объявление, была объяснена в первых строках ответа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...