Инициализация int
От: igna Россия  
Дата: 01.10.09 08:00
Оценка: :))) :)))
Как вы инициализируете int:

    int i = 0;


или

    int i(0);


?
Re: Инициализация int
От: Bell Россия  
Дата: 01.10.09 08:10
Оценка: +1 :)
Здравствуйте, igna, Вы писали:

Использую первый вариант.

ЗЫ
А может сразу в голосование?
Любите книгу — источник знаний (с) М.Горький
Re[2]: Инициализация int
От: Вумудщзук Беларусь  
Дата: 01.10.09 12:27
Оценка: +1 :)
>А может сразу в голосование?
чего уж там, может, сразу в СВ?..
тчк
Re[2]: Инициализация std::complex
От: igna Россия  
Дата: 01.10.09 13:28
Оценка:
Здравствуйте, Bell, Вы писали:

B>Использую первый вариант.


А для std::complex?

    std::complex x = x0;


или

    std::complex x(x0);


?
Re[3]: Инициализация std::complex
От: Eugene Sh Россия  
Дата: 01.10.09 16:56
Оценка: +1
Здравствуйте, igna, Вы писали:

I>А для std::complex?


I>
I>    std::complex x = x0;
I>


I>или


I>
I>    std::complex x(x0);
I>



Первый вариант выглядит лучше. А с точки зрения быстродействия разницы нет — в обоих случаях вызовется конструктор копирования.
Re[4]: Инициализация std::complex
От: igna Россия  
Дата: 02.10.09 06:12
Оценка:
Здравствуйте, Eugene Sh, Вы писали:

ES>Первый вариант выглядит лучше. А с точки зрения быстродействия разницы нет — в обоих случаях вызовется конструктор копирования.


Prefer using the form "T t(u);" instead of "T t = u;" where possible. The former usually works wherever the latter works, and has other advantages—for example, it can take multiple parameters.

(Herb Sutter, Exceptional C++: 47 Engineering Puzzles, Programming Problems, and Solutions, Item 42)


Ты с этим не согласен или считаешь инициализацию std::complex особым случаем? Почему?
Re[5]: Инициализация std::complex
От: Bell Россия  
Дата: 02.10.09 06:52
Оценка: +1
Здравствуйте, igna, Вы писали:

ES>>Первый вариант выглядит лучше. А с точки зрения быстродействия разницы нет — в обоих случаях вызовется конструктор копирования.


I>

I>Prefer using the form "T t(u);" instead of "T t = u;" where possible. The former usually works wherever the latter works, and has other advantages—for example, it can take multiple parameters.

I>(Herb Sutter, Exceptional C++: 47 Engineering Puzzles, Programming Problems, and Solutions, Item 42)


I>Ты с этим не согласен или считаешь инициализацию std::complex особым случаем? Почему?


Я, к примеру, не имею ничего против записи "T t(u);", но вариант с "=" лично мне более привычен. А упомянутое преимущество "может принимать несколько параметров" ИМХО несколько надумано — никто не мешает записать "T t = T(u1, u2)" Понятно, что разница между инициализацией копированием и прямой инициализацией есть, но в абсолютном большинстве случаев это совершенно несущественно.
Любите книгу — источник знаний (с) М.Горький
Re[6]: Инициализация std::complex
От: igna Россия  
Дата: 02.10.09 07:11
Оценка:
Здравствуйте, Bell, Вы писали:

B>Я, к примеру, не имею ничего против записи "T t(u);", но вариант с "=" лично мне более привычен.


Это относится и к std::complex? И к boost::shared_ptr? И к std::string? В том числе к std::string::string(const char*)? Может ты вообще всегда по-возможности используешь 'вариант с "="'?
Re[7]: Инициализация std::complex
От: Bell Россия  
Дата: 02.10.09 08:36
Оценка:
Здравствуйте, igna, Вы писали:

B>>Я, к примеру, не имею ничего против записи "T t(u);", но вариант с "=" лично мне более привычен.


I>Это относится и к std::complex? И к boost::shared_ptr? И к std::string? В том числе к std::string::string(const char*)? Может ты вообще всегда по-возможности используешь 'вариант с "="'?


Если у меня не возникает ощущения дискомфорта, то я использую вариант с "=".
При работе с shared_ptr, например, использую вариант со скобочками, со строками — тоже. Класс complex использовать не приходилось, но первое ощущение — использовал бы вариант с "=".
В общем для меня это в большей степени субъективный выбор.
Ну а если есть подозрения на проблемы с эффективностью — так на это есть профайлер.
Любите книгу — источник знаний (с) М.Горький
Re[7]: Инициализация std::complex
От: blackhearted Украина  
Дата: 02.10.09 08:45
Оценка:
Здравствуйте, igna, Вы писали:

I>Здравствуйте, Bell, Вы писали:


B>>Я, к примеру, не имею ничего против записи "T t(u);", но вариант с "=" лично мне более привычен.


I>Это относится и к std::complex? И к boost::shared_ptr? И к std::string? В том числе к std::string::string(const char*)? Может ты вообще всегда по-возможности используешь 'вариант с "="'?


Со std::string самое интересное различие выходит
Re[8]: Инициализация std::complex
От: igna Россия  
Дата: 02.10.09 08:51
Оценка:
Здравствуйте, Bell, Вы писали:

B>Если у меня не возникает ощущения дискомфорта, то я использую вариант с "=".

B>При работе с shared_ptr, например, использую вариант со скобочками, со строками — тоже. Класс complex использовать не приходилось, но первое ощущение — использовал бы вариант с "=".
B>В общем для меня это в большей степени субъективный выбор.

Твое счастье. Я формалист, мне хотелось бы алгоритм выбора формализовать. Судя по книгам самого Саттера, давшего рекомендацию использовать "T t(u);", он сам не придерживается своей рекомендации буквально, мог бы и рекомендацию эту самую поточнее сформулировать, встроенные типы там исключить, может что-нибудь еще.
Re[8]: Инициализация std::complex
От: igna Россия  
Дата: 02.10.09 08:56
Оценка:
Здравствуйте, blackhearted, Вы писали:

B>Со std::string самое интересное различие выходит


С std::string::string(const string&) или с std::string::string(const char*)?
Re[3]: Инициализация int
От: igna Россия  
Дата: 02.10.09 09:01
Оценка:
Здравствуйте, Вумудщзук, Вы писали:

В>чего уж там, может, сразу в СВ?..


Там не только C++.
Re[7]: Инициализация std::complex
От: Alexander G Украина  
Дата: 02.10.09 09:12
Оценка: 3 (1)
Здравствуйте, igna, Вы писали:

I>Здравствуйте, Bell, Вы писали:


B>>Я, к примеру, не имею ничего против записи "T t(u);", но вариант с "=" лично мне более привычен.


I>Это относится и к std::complex? И к boost::shared_ptr? И к std::string? В том числе к std::string::string(const char*)? Может ты вообще всегда по-возможности используешь 'вариант с "="'?


У shared_ptr я писал = везде, где можно, и часть кода сломалось, когда конструктор, принимающий auto_ptr внезапно стал explicit в 1.39.
С другой стороны, теперь конструирование shared_ptr через = можно использовать, чтобы подчеркнуть именно общее владение, а не передачу владения.
Русский военный корабль идёт ко дну!
Re[9]: Инициализация std::complex
От: Bell Россия  
Дата: 02.10.09 09:33
Оценка:
Здравствуйте, igna, Вы писали:

B>>Если у меня не возникает ощущения дискомфорта, то я использую вариант с "=".

B>>При работе с shared_ptr, например, использую вариант со скобочками, со строками — тоже. Класс complex использовать не приходилось, но первое ощущение — использовал бы вариант с "=".
B>>В общем для меня это в большей степени субъективный выбор.

I>Твое счастье.

Фууух, пронесло

I>Я формалист, мне хотелось бы алгоритм выбора формализовать. Судя по книгам самого Саттера, давшего рекомендацию использовать "T t(u);", он сам не придерживается своей рекомендации буквально, мог бы и рекомендацию эту самую поточнее сформулировать, встроенные типы там исключить, может что-нибудь еще.


Ну, может быть что-то вроде этого: если Вы боитесь создания лишнего временного объекта — используйте вариант со скобками.
Любите книгу — источник знаний (с) М.Горький
Re[10]: Инициализация std::complex
От: igna Россия  
Дата: 02.10.09 09:56
Оценка:
Здравствуйте, Bell, Вы писали:

B>Ну, может быть что-то вроде этого: если Вы боитесь создания лишнего временного объекта — используйте вариант со скобками.


Может. А может еще проще, "используйте вариант со скобками" и все. Например:

int sum(int const a[], std::size_t const a_length)
{
    int sum(0);
    int const* const a_end(a + a_length);
    for (int const* p(a); p < a_end; ++p)
        sum += *p;
    return sum;
}
Re: Инициализация int
От: Николай Ивченков  
Дата: 02.10.09 11:07
Оценка: 5 (1)
Всюду, где возможно, я предпочитаю запись вида T x = y; — т.е. copy-initialization. Тем самым показывается использование неявного преобразования y к T, а значит, и родство между x и y — а именно: сущность y может быть использована там, где ожидается сущность типа T.
Re[3]: Инициализация int
От: Roman Odaisky Украина  
Дата: 02.10.09 11:33
Оценка: :)
Здравствуйте, Вумудщзук, Вы писали:

>>А может сразу в голосование? :)

В>чего уж там, может, сразу в СВ?..

Даешь int i((int()))!
До последнего не верил в пирамиду Лебедева.
Re[2]: Инициализация int
От: igna Россия  
Дата: 02.10.09 12:45
Оценка:
Здравствуйте, Николай Ивченков, Вы писали:

НИ>Всюду, где возможно, я предпочитаю запись вида T x = y; — т.е. copy-initialization. Тем самым показывается использование неявного преобразования y к T, а значит, и родство между x и y — а именно: сущность y может быть использована там, где ожидается сущность типа T.


С мнением Саттера ты конечно знаком:

Prefer using the form "T t(u);" instead of "T t = u;" where possible. The former usually works wherever the latter works, and has other advantages—for example, it can take multiple parameters.

(Herb Sutter, Exceptional C++: 47 Engineering Puzzles, Programming Problems, and Solutions, Item 42)


Просто на всякий случай.
Re[9]: Инициализация std::complex
От: blackhearted Украина  
Дата: 02.10.09 17:03
Оценка:
Здравствуйте, igna, Вы писали:

I>Здравствуйте, blackhearted, Вы писали:


B>>Со std::string самое интересное различие выходит


I>С std::string::string(const string&) или с std::string::string(const char*)?


с (const char*)
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.