Инициализаторы в С++
Это же прекрасно!
афаик, этой фишкой прикалывались от сотворения первого стандарта С++
SomeClass C(x,y); - вызывается конструктор.
А в С++ всегда у int-ов были конструкторы?
А в С++ всегда у int-ов были конструкторы?А в C++ everything is a class.
И, типа, писать конструкцию вместо присваивания православнее.
А в C++ everything is a class.
А в С++ всегда у int-ов были конструкторы?после появления шаблонов точно должны были быть.
(Когда я вижу такое в коде, рука сама тянется к маузеру.)
Это полезно только для шаблонов.
А ч0, а ч0, а ч0 ваще?
Тогда давай так:
int r(int;
И все сразу поймут, кто тут отец.
ну вот в .NET everything is a class, там можно 42.ToString а тут же есть POD, это деление довольно четкое
Прекращай писать всякую чушь, а то все сразу поймут кто тут дебил.
SomeClass C(x,y); - вызывается конструктор.а при чем тут конструкторы? это синтаксис для инициализации скалярных типов
А в С++ всегда у int-ов были конструкторы?
читать стандарт 8.5 Initializers, хотя там не тривиально
самый последний главный абзац
8.5.14
...
— Otherwise, the initial value of the object being initialized is the (possibly converted) value of the initializer
expression. Standard conversions (clause 4) will be used, if necessary, to convert the initializer
expression to the cv-unqualified version of the destination type; no user-defined conversions are considered.
If the conversion cannot be done, the initialization is ill-formed.
Тогда давай так:
int r(int;
И все сразу поймут, кто тут отец.
FYI:
1) int r; — POD типы не инициализируются автоматически.
3) int r; — объявление функции, возвращающей инт, привет.
2) int r = 0; — ну ок, но чем так уж лучше int r(0)?
Надеюсь, все сразу поняли, кто тут отец, а кто совершенно нет!
ps: also, в initializer list у какой-нибудь структуры всё равно придётся писать именно r(0 и это намного православней, чем руками инициализировать в конструкторе.
Народ, что вы мне всё пытаетесь объяснить? Я в C++ не знаю всего одну вещь. Всего одну: что происходит, когда деструктор выбрасывает исключение. Всё время перечитываю и всё время снова забываю. В остальном - полный порядок.
Уже третий никчёмный ответ. Откройте блин уже Студию и проверьте, что код делает, для начала.
А вот это дельное замечание, спасибо. Хотя эффект в конечном коде один и тот же (в релизе рука тянется к маузеру уже насчёт тех, кто не пишет m_r(0 это да.
рука должна тянуться к маузеру уже на символах m_
Я в C++ не знаю всего одну вещь. Всего однусын страуструпа (тоже страуструп) в треде штоле?
бля, петросян точно в треде, запорол шутку, звиняйте
По делу есть чё, петросян?
Ну, ты же сам написал "int r(int;", в порядке смехуёчков. Так доложи теперь, насчёт чего именно были смехуёчки. As it is, выглядит как будто ты продвигал идею что нужно писать "int r;", ну, это, не работает, как бы.
> Откройте блин уже Студию и проверьте, что код делает, для начала.
Какой код О_о
В остальном - полный порядок.Так поведай же, где именно там полный порядок!
int - это 0 (нуль).
int r(int; - это int r(0);, т.е. int r = 0;
(Я - за int r = 0;)
Если это не очевидно, попробуй поставить брейкпойнт на этой строчке в Студии и посмотреть, что будет.
Не знает только что происходит при броске исключения из деструктора, ХА.
Тяжело, наверно, без чувства юмора жить? Или ты из тех, кто признаёт только хохмы собственного изготовления?
in function main:a.cpp(.text+0x5): error: undefined reference to 'r(int (*'
int - это 0 (нуль).
int r(int; - это int r(0);, т.е. int r = 0;
Я не понимаю. Ты до самого конца осознал, что выражение "int r;" не парсится как инициализатор инта дефолтным конструктором? Если да, то какую разницу ты видишь между "int r(0);" и "int r = 0;"?
Ну то есть я твои комментарии читаю как хихиканье на тему лишних вещей, как если бы кто написал "if (x == true)", а ты ему в ответ, "if x == true) == true)".
Чо ты сказать-то пытался, аааа?
Я затупил. Признаю.
[гнилые оправдания mode on]
Я ж никогда такой херни в настоящем коде не пишу!
ок, ну если шутка, то ок, но она ведь неуместна, ты же при этом пишешь херню
А чем тебе не угодили префиксы "m_"?
Это тоже была шутка, просто я не люблю именно это подражательство MFC, а так надо отличать данные-члены да, как — на усмотрение, конечно, я пишу с маленькой буквы...
А чем тебе не угодили префиксы "m_"?Потому что это дурацкий подход — вносить в имя переменной информацию о типе, приватности и т.п. Это избыточные данные, которые при необходимости должна отображать IDE.
Потому что это дурацкий подход — вносить в имя переменной информацию о типе, приватности и т.п. Это избыточные данные, которые при необходимости должна отображать IDE.единой точки зрения нет
обычно это регулируется кодинг стандартом, а не имхами каждой обезьянки
в коде приходится совмещать двойную информацию - информация для компилятора (чтобы код скомпилировался и работал как надо) и информация для человека (в роли читателя, чтобы он понимал что происходит в коде). тут приходится чем-то жертвовать, например, вносить избыточность
единой точки зрения нетНу сам подумай, для чего это делают, и почему вносят в кодинг стандарты?
обычно это регулируется кодинг стандартом, а не имхами каждой обезьянки
Потому что считают, что не всегда ясно, с чем ты работаешь — локальной переменной, переменной класса или ещё чем. Потому что lead devel помнит ещё динозавров и кричит, что он должен иметь возможность нормально править код даже в ненастроенном nvi по ssh, а там никакие видимости-типы, разумеется, не подсвечиваются. И это не шутка, они так действительно заявляют.
должен иметь возможность нормально править код даже в ненастроенном nvi по ssh, а там никакие видимости-типы, разумеется, не подсвечиваются. И это не шутка, они так действительно заявляют.интересно, пользовался ли ты хоть раз отладчиками gdb/dbx по ssh?
gdb постоянно, а что?
есть какие-то проблемы настроить редактор vi?
И, да, vi/nvi и vim — это две очень большие разницы.
и да, говоря vi я естественно имел в виду vim
Я для себя настроил. А объяснять что-либо пресловутым олдфагам зачастую нереально. Обязательно последует что-нибудь в стиле «а вдруг мне придётся срочно спьяну править код в бизибоксе, где есть только vi, никаких настроек и вообще кошмар».
Обязательно последует что-нибудь в стиле «а вдруг мне придётся срочно спьяну править код в бизибоксе, где есть только vi, никаких настроек и вообще кошмар».будете удивлены, но сейчас именно этим и занимаюсь
на обрезанном линуксе приходится дебужить прогу через gdb + ssh
загрузился с .iso, так что настроить в этом образе vi мне сложновато (да и не фанат я этого редактора ибо виндузятник)
зы: из этого енвайромента акронис ресторит операционку, данные в рамдиске, архив на шаре или примаунченном диске из живой операционки
где прога будет запускаться в бизибоксах - там целесообразно префиксы пихать
а где нет - то нет
у нас в команде кодинг стандарта на работе нету
есть только типа негласное правило: если правишь чужую функцию то стараешься там в том же стиле писать
код конечно зоопарк, но со временем привыкаешь и пофиг где какой стиль
базарили тут с одним про префиксы
в итоге сошлись на том что ему нужен только один тип префикса: у приватных членах классов подчеркивание в начале
сказал что весь свой код переделает
ну дык потому и кодинг стандартыневерно рассуждаете
где прога будет запускаться в бизибоксах - там целесообразно префиксы пихать
а где нет - то нет
у нас кодинг стандарт не опирается на бизибоксы, код пишется по одинаковым правилам под все платформы (win, dos, linux, mac etc). (зы: у нас префиксы вообще запрещены, обруливаются с помощью pascal, camel casing)
у нас префиксы вообще запрещены, обруливаются с помощью pascal, camel casingну воот, а локальные внутри функции и private-члены как-нибудь различаются при этом?
ну воот, а локальные внутри функции и private-члены как-нибудь различаются при этом?
ошибся
члены класса в Pascal casing, локальные переменные и аргументы функций в camel casing
int r{0};
Оставить комментарий
yolki
Это новая мода такая?int r(0);
?