int d, m, g, S;
switch (d, m, g)
int operator , ( int, int )
, какой у него эффект по умолчанию?Давно ли внутри switch можно делать if?
case
- это просто метка, на которую исполнение прыгает при соответствии условия. Локальность на все case
едина - это локальность switch
. Далее, после каждого case
уже можно организовать свою локальность. Собственно, именно поэтому определение локальных переменных просто под case
и сулит проблемами.return
, то к моменту получения результата функции весь ее код завершен. Если бы использован co_yield
, то к моменту получения результата код функции приостановлен.return
функция еще продолжает работать, вызывая деструкторы локальных объектов и выполняя некоторый сервисный код. Только после этого результат из строки с кодом return
будет передан в вызвавший функцию код. 1.5f
?mult()
у тебя только один первый аргумент имеет тип float
, все остальные - double
. strlen()
вообще игнорирует терминальный символ в своей работе. Но функция его не учитывает только в своем результате, что и отражено в документации функции.strlen()
при своей работе игнорирует терминальный символ. size_t size = 80;
string_ = new char[80]{""};
size
если она не используется?String(const char* string) {
delete[] string_;
size_t size = strlen(string);
strcpy_s(string_, size, string);
}
delete[] string_;
в этом месте будет означать delete[] nullptr;
, т.е. нонсенс. Оператор delete[]
ничего не освободит. В это время, strcpy_s(string_, size, string);
будет означать strcpy_s(nullptr, size, string);
, что приведет к падению.String(const String &str) {
size_t size = strlen(str.string_) + 1;
strcpy_s(string_, size, str.string_);
}
resize()
и reserve()
, которые и должны управлять подконтрольным строке буфером памяти.concat()
должен быть примерно таким:String String::concat(const String& other) const
{
String result;
result.reserve( length() + other.length() + 1 );
result = *this;
result += ' ';
result += other;
return result;
}
String
. return
или относительно места получения результата?return
или закончится ли выполнение кода функции сразу после получения возвращенного ей значения? /dev/null
, системный вызов вывода в консоль просто шунтируется, поэтому время работы так кардинально упало. 59мсек против 381мсек выглядит более правдивым, но все равно показывает только время системных вызовов. Можно даже предположить, что на питоне такое время получается потому что в его недрах делается немного больше системных вызовов.хз, но факт
А что тебе будет понятнее прочитать:
d
илиday_number
?Соответственно:
m
илиmonth_number
?И еще:
S
илиnext_day_number
?Ты ссылаешься на задание, но ты не всегда будешь его помнить. В следующем году, когда ты уже все забудешь, ты откроешь этот код и точно так же, как и все остальные участники текущего обсуждения, не будешь видеть никакого смысла в этих однобуквенных названиях.
Моим советом, который дальше только поможет тебе, будет: всегда выбирай осмысленные имена. Никогда не ссылайся на задания или что-то еще, передавай суть заданий прямо в тексте программы. Для этого всегда выбирай только осмысленные имена, которые отражают смысл существования в рамках твоей задачи.
Пока у тебя получается вот такое. Там человек сперва пишет одно, а потом имеет в виду вообще другое. Твой код, точно так же, пока только вводит в заблуждение.
Твоя стратегия мышления должна быть схожей вот с этим. Посмотри там сам вопрос, а потом цепочку комментариев от обозначенного и ниже.
Тут нужно сходить в документацию оператора
switch
[?] и увидеть что проверка идет только для одного выражения. Я не просто так написал проint operator , ( int, int )
, по умолчанию comma operator возвращает только свой правый аргумент.Код
switch (d, m, g)
эквивалентенswitch (g)
.На самом деле другие люди тебе мало чем смогут помочь по изучению языка. Даже я вряд ли смогу тебе полноценно помочь. Тебе будет лучше обратиться к известным общедоступным источникам информации по языку. Сперва все будет очень непонятно, но ты просто читай, на начальных этапах всегда важно собирать информацию.
Между тем, тебе всегда стоит помнить что люди будут только рады дать исчерпывающий ответ на твой конкретный вопрос. "Помочь с синтаксисом" - довольно широкий вопрос, на который довольно тяжело ответить. "Как правильно пользоваться конструкцией switch-case" - хороший, конкретный вопрос, на который любой квалифицированный специалист будет рад дать ответ.
На самом деле неудобно даже тебе и даже сейчас. Пока у тебя не больше 20 строк кода, ты можешь позволить себе такое форматирование. Но посмотри на это. Там сложность зашкаливает. Без горизонтального блочного форматирования код был бы абсолютно нечитаемым. И, на самом деле, твой код является нечитаемым абсолютно для всех разработчиков потому что люди уже привыкли код видеть блоками. Тебе стоит просто попробовать и ты поймешь насколько это облегчает понимание.
Подобные статьи помогут тебе с этим вопросом: [1], [2], [3], [4], [5].
Возвращаясь к твоему коду. У твоего кода должна быть структура, которая отражает ход решения задачи.
Задача у тебя довольно большая, на самом деле. Решать ее целиком - идея плохая. Твою задачу нужно поделить на этапы. Минимально тут выделяется три больших тапа: ввод данных, проверки и вычисления, вывод результата.
Каждый из этих этапов тоже нужно разделить.
На какие более мелкие этапы ты бы разделила каждый из этих больших этапов?