- cppreference
- stackoverflow
- google C++ codestyle
- godbolt.org
- Курс Мещерина ФПМИ
- G++ (g++ main.cpp -o main -> ./main)
- Clang
- etc
- Компилируемый
- Статическая типизация
- Слабая типизация
- Точка входа в программу
5-int5.0-double5.0f-float'a'-char"aaa"-const char*true-bool+ keyword
xymake_array
- Код на C++ состоит из строчек, разделенных
;(на самом деле не совсем) - Эти строчки это инструкции (statements)
Statements можно разделить условно на три типа:
- Declarations (объявления)
- Expressions (выражения)
- Control statements (управляющие конструкции)
if (bool-expr) statement;
if (init-statement; bool-expr) { statement; } // from C++17
while (bool-expr) { statement; }
do { statement; } while (bool-expr);
for (init-statement; bool-expr; expr) { statement; }- Компилятор может оптимизировать
switch: это будет хеш-таблица с указателями на соответствующую функцию
switch (init-statement; condition) { // C++17
case expr1:
// ...
break;
case expr2:
// ...
break;
// ...
default:
// ...
}- В качетсве
conditionмогут быть:- integral types
- enumeration types
- class types
- If the yielded value is of a class type, it is contextually implicitly converted to an integral or enumeration type.
- Если не ставить
break;после каждогоcase'а, программа будет проваливаться ниже - Начиная с C++17 при таких обстоятельствах (переходы между
caseбезbreak) компилятор будет выдавать Warning'и- Чтобы бага стала фичей, необходимо и достаточно указать аттрибут
[[fallthrough]]
- Чтобы бага стала фичей, необходимо и достаточно указать аттрибут
void f(int n) {
void g(), h(), i();
switch (n) {
case 1:
case 2:
g();
[[fallthrough]];
case 3: // no warning on fallthrough
h();
case 4: // compiler may warn on fallthrough
if (n < 3) {
i();
[[fallthrough]]; // OK
}
else {
return;
}
case 5:
while (false) {
[[fallthrough]]; // ill-formed: next statement is not
// part of the same iteration
}
case 6:
[[fallthrough]]; // ill-formed, no subsequent case or default label
}
}- Syntax:
a ? b : c; - Example:
x = (x < 2 ? 1 : 2); - Note: Возращаемые значения должны быть одного типа