Здравствуйте, igna, Вы писали:
I>const в объявлении относится к типу, это часть типа, то есть в объявлении int const n, n это переменная типа int const, а не "константное значение" типа int, как пишет Erop.
Если тебе надо понять, то ты поймёшь, IMHO. А если тебе надо поспорить...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, igna, Вы писали:
I>Да, запрещен.
Прикольно. Я пользовался как-то и не задумывался, что это не хорошо.
Интересно, зачем его запретили?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Erop, Вы писали:
E>Если тебе надо понять, то ты поймёшь, IMHO. А если тебе надо поспорить...
Понять-то, я понял сразу, но потом спросил, нет ли у тебя формального определения. А формальное определение это как раз тот случай, где придирки к мелочам оправданы.
Здравствуйте, igna, Вы писали:
I>IMHO, в стандарте так получилось, никаких глубокомысленных причин запрета нет. Заодно, кстати, запретили std::set<const int>, что уж и вовсе неумно.
Спасибо, не знал, что маразм окрепчал настолько.
Ну я тогда, значит не стандартным понятием "присваемваемый" пользуюсь. Типа на константность и волатильность самого объекта не смотрю.
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, igna, Вы писали:
I>Понять-то, я понял сразу, но потом спросил, нет ли у тебя формального определения. А формальное определение это как раз тот случай, где придирки к мелочам оправданы.
1) Придирки -- это скучно
2) Они не способствуют конструктивному духу дискуссии
3) Критикуешь -- предлагай, тем более, если ты понял
4) Я же тебе уже несколько раз написал, что константность переменной не учитываем. ТИпа так же как foo( int ) и foo( const int ) -- это одно и то же...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
I>Во-первых, как попало IMHO — плохо. I>Во-вторых, никакой как-попалы я у тебя не заметил, инициализация strSQL использует скобки, strOwner не инициализируется.
Здравствуйте, Erop, Вы писали:
E>foo( int ) и foo( const int ) -- это одно и то же...
В объявлении — да, в определении — нет.
Возвращаясь к твоему "простому формальному правилу" (объекты с семантикой значения инициализировать через =, а объекты такой семантики лишённые через ()), хочу спросить, верно ли я понял, что std::string следует инициализировать "через =" даже если это инициализация не другим std::string, а <творительный падеж>char const*</творительный падеж>?:
Здравствуйте, igna, Вы писали:
I>Возвращаясь к твоему "простому формальному правилу" (объекты с семантикой значения инициализировать через =, а объекты такой семантики лишённые через ()), хочу спросить, верно ли я понял, что std::string следует инициализировать "через =" даже если это инициализация не другим std::string, а <творительный падеж>char const*</творительный падеж>?:
I>
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, igna, Вы писали:
I>для единообразия.
Ну я же
double x = double( 5 );
не пишу...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Николай Ивченков, Вы писали:
НИ>Всюду, где возможно, я предпочитаю запись вида T x = y; — т.е. copy-initialization. Тем самым показывается использование неявного преобразования y к T, а значит, и родство между x и y — а именно: сущность y может быть использована там, где ожидается сущность типа T.
igna:
НИ>>Всюду, где возможно, я предпочитаю запись вида T x = y; — т.е. copy-initialization. Тем самым показывается использование неявного преобразования y к T, а значит, и родство между x и y — а именно: сущность y может быть использована там, где ожидается сущность типа T.
I>В том числе так?:
I>
vector<int> a = 10;
Конечно, это мой самый любимый код. Я ведь просто обожаю ill-formed программы, поэтому можешь не сомневаться, что под "где возможно" вовсе не подразумевалось, что программа должна успешно компилироваться.
Я вижу другой (более-менее разумный) вопрос, который тут имело бы смысл задать — это как поступить в случае с преобразующим конструктором, который следовало сделать явным (но таковым его не сделали и менять такое положение дел по каким-то соображениям не хотят)? Вероятно, я бы в этом случае использовал direct-initialization (как если бы конструктор был explicit) — если такая форма инициализации даст нужный эффект.
НИ>Здесь копирующий конструктор попросту не является viable function, и выбор падает на X(X const *). Что будет, если теперь заменить
НИ>
X x(X(0));
НИ>на
НИ>
X x = 0;
НИ>?
Насчёт этой ситуации удалось кое-что прояснить:
13.3.3.1/4:
However, when considering the argument of a user-defined conversion function that is a candidate by 13.3.1.3 when invoked for the copying of the temporary in the second step of a class copy-initialization, or by 13.3.1.4, 13.3.1.5, or 13.3.1.6 in all cases, only standard conversion sequences and ellipsis conversion sequences are allowed.
Вообще conversion function не может быть кандидатом по 13.3.1.3, но, видимо, там под "conversion function" имелся в виду не термин, определяемый в 12.3.2, а "constructor or conversion function" (где "conversion function" — это уже термин). Зря я раньше не дочитал до конца это предложение