C++ 备忘单
    提供基本语法和方法的 C++ 快速参考备忘单。开始
Hello.cpp
int main() {
std::cout << "Hello QuickRef\n";
return 0;
}
                    编译和运行$ g++ hello.cpp -o hello
$ ./hello
Hello QuickRef
变量
int number = 5; // Integer
float f = 0.95; // Floating number
double PI = 3.14159; // Floating number
char yes = 'Y'; // Character
std::string s = "ME"; // String (text)
bool isRight = true; // Boolean
// Constants
const float RATE = 0.8;
int age {25}; // Since C++11
std::cout << age; // Print 25
原始数据类型
                                数据类型                                尺寸
                                范围
                                int
                                4字节
                                -2 31 ~ 2 31 -1
                                float
                                4字节
                                不适用
                                double
                                8 字节
                                不适用
                                char
                                1 字节
                                -128 ~ 127
                                bool
                                1 字节
                                true / false
                                void
                                不适用
                                不适用
                                wchar_t
                                2 或 4 个字节
                                1 个宽字符
用户输入
int num;
std::cout << "Type a number: ";
std::cin >> num;
std::cout << "You entered " << num;
交换
int a = 5, b = 10, temp;
temp = a;
a = b;
b = temp;
// Outputs: a=10, b=5
std::cout << "a=" << a << ", b=" << b;
注释
// A single one line comment in C++
/ This is a multiple line comment
in C++ /
if 语句
if (a == 10) {
// do something
}
                    请参阅:条件for 循环
for (int i = 0; i < 10; i++) {
std::cout << i << "\n";
}
                    请参阅:循环函数
void hello(); // Declaring
int main() { // main function
hello(); // Calling
}
void hello() { // Defining
std::cout << "Hello QuickRef!\n";
}
                    请参阅:函数参考
int i = 1;
int& ri = i; // ri is a reference to i
ri = 2; // i is now changed to 2
std::cout << "i=" << i;
i = 3; // i is now changed to 3
std::cout << "ri=" << ri;
                    ri并i引用相同的内存位置。命名空间
namespace ns1 {int val(){return 5;}}
int main()
{
std::cout << ns1::val();
}
namespace ns1 {int val(){return 5;}}
using namespace ns1;
using namespace std;
int main()
{
cout << val();
}
                    命名空间允许名称下的全局标识符C++ 数组
声明
int marks[3]; // Declaration
marks[0] = 92;
marks[1] = 97;
marks[2] = 98;
// Declare and initialize
int marks[3] = {92, 97, 98};
int marks[] = {92, 97, 98};
// With empty members
int marks[3] = {92, 97};
std::cout << marks[2]; // Outputs: 0
操作
┌─────┬─────┬─────┬─────┬─────┬─────┐
| 92 | 97 | 98 | 99 | 98 | 94 |
└─────┴─────┴─────┴─────┴─────┴─────┘
0 1 2 3 4 5
int marks[6] = {92, 97, 98, 99, 98, 94};
// Print first element
std::cout << marks[0];
// Change 2th element to 99
marks[1] = 99;
// Take input from the user
std::cin >> marks[2];
显示
char ref[5] = {'R', 'e', 'f'};
// Range based for loop
for (const int &n : ref) {
std::cout << std::string(1, n);
}
// Traditional for loop
for (int i = 0; i < sizeof(ref); ++i) {
std::cout << ref[i];
}
多维数组
 j0   j1   j2   j3   j4   j5┌────┬────┬────┬────┬────┬────┐
i0 | 1 | 2 | 3 | 4 | 5 | 6 |
├────┼────┼────┼────┼────┼────┤
i1 | 6 | 5 | 4 | 3 | 2 | 1 |
└────┴────┴────┴────┴────┴────┘
int x[2][6] = {
{1,2,3,4,5,6}, {6,5,4,3,2,1}
};
for (int i = 0; i < 2; ++i) {
for (int j = 0; j < 6; ++j) {
std::cout << x[i][j] << " ";
}
}
// Outputs: 1 2 3 4 5 6 6 5 4 3 2 1
C++ 条件
if 语句
if (a == 10) {
// do something
}
int number = 16;
if (number % 2 == 0)
{
std::cout << "even";
}
else
{
std::cout << "odd";
}
// Outputs: even
Else if 语句
int score = 99;
if (score == 100) {
std::cout << "Superb";
}
else if (score >= 90) {
std::cout << "Excellent";
}
else if (score >= 80) {
std::cout << "Very Good";
}
else if (score >= 70) {
std::cout << "Good";
}
else if (score >= 60)
std::cout << "OK";
else
std::cout << "What?";
运算符
关系运算符
                                a == b                                a 等于 b
                                a != b
                                a 不等于 b
                                a < b
                                a 小于 b
                                a > b
                                a 更大 b
                                a <= b
                                a 小于或等于 b
                                a >= b
                                a 大于或等于 b
                     赋值运算符
                                a += b
                                又名 a = a + b
                                a -= b
                                又名 a = a - b
                                a *= b
                                又名 a = a * b
                                a /= b
                                又名 a = a / b
                                a %= b
                                又名 a = a % b
                     逻辑运算符
                                exp1 && exp2
                                两者都是真的(AND)
                                exp1 || exp2
                                要么为真(或)
                                !exp
                                exp是假的(不是)
                     位运算符
                                a & b
                                二进制与
                                a | b
                                二进制或
                                a ^ b
                                二进制异或
                                a ~ b
                                二进制补码
                                a << b
                                二进制左移
                                a >> b
                                二进制右移
三元运算符
       ┌── True ──┐Result = Condition ? Exp1 : Exp2;
└───── False ─────┘
int x = 3, y = 5, max;
max = (x > y) ? x : y;
// Outputs: 5
std::cout << max << std::endl;
int x = 3, y = 5, max;
if (x > y) {
max = x;
} else {
max = y;
}
// Outputs: 5
std::cout << max << std::endl;
Switch 语句
int num = 2;
switch (num) {
case 0:
std::cout << "Zero";
break;
case 1:
std::cout << "One";
break;
case 2:
std::cout << "Two";
break;
case 3:
std::cout << "Three";
break;
default:
std::cout << "What?";
break;
}
C++ 循环
While
int i = 0;
while (i < 6) {
std::cout << i++;
}
// Outputs: 012345
Do-while
int i = 1;
do {
std::cout << i++;
} while (i <= 5);
// Outputs: 12345
Continue 语句
for (int i = 0; i < 10; i++) {
if (i % 2 == 0) {
continue;
}
std::cout << i;
} // Outputs: 13579
无限循环
while (true) { // true or 1
std::cout << "infinite loop";
}
for (;;) {
std::cout << "infinite loop";
}
for(int i = 1; i > 0; i++) {
std::cout << "infinite loop";
}
for_each (从 C++11 版本开始)
void print(int num)
{
std::cout << num << std::endl;
}
int main()
{
int arr[4] = {1, 2, 3, 4 };
std::for_each(arr, arr + 4, print);
return 0;
}
Range-based (从 C++11 版本开始)
int num_array[] = {1, 2, 3, 4, 5};
for (int n : num_array) {
std::cout << n << " ";
}
// Outputs: 1 2 3 4 5
std::string hello = "QuickRef.ME";
for (char c: hello)
{
std::cout << c << " ";
}
// Outputs: Q u i c k R e f . M E
Break 语句
int password, times = 0;
while (password != 1234) {
if (times++ >= 3) {
std::cout << "Locked!\n";
break;
}
std::cout << "Password: ";
std::cin >> password; // input
}
几种变体
for (int i = 0, j = 2; i < 3; i++, j--){
std::cout << "i=" << i << ",";
std::cout << "j=" << j << ";";
}
// Outputs: i=0,j=2;i=1,j=1;i=2,j=0;
C++ 函数
参数和返回
int add(int a, int b) {
return a + b;
}
int main() {
std::cout << add(10, 20);
}
                    add 是一个接受 2 个整数并返回整数的函数Overloading 超载
void fun(string a, string b) {
std::cout << a + " " + b;
}
void fun(string a) {
std::cout << a;
}
void fun(int a) {
std::cout << a;
}
内置函数
int main() {
// sqrt() is from cmath
std::cout << sqrt(9);
}
C++ 预处理器
预处理器ifelifelseendififdefifndefdefineundefincludelineerrorpragmadefined__has_include__has_cpp_attributeexportimportmodule
Includes 包括
Defines 定义
If 如果
console.log('hi');
...
...
Error 错误
Macro 宏
Token concat 令牌连接
DST(object); #=> object_s object_t;
Stringification 字符串化
char a = STR(object); #=> char a = "object";
file and line 文件和行
其他
转义序列
                            \b                            退格
                            \f
                            换页 
                            \n
                            换行
                            \r
                            返回 
                            \t
                            水平标签 
                            \v
                            垂直标签
                            \\
                            反斜杠 
                            \'
                            单引号 
                            \"
                            双引号 
                            \?
                            问号
                            \0
                            空字符 
                关键词
                        alignas
                        alignof
                        and
                        and_eq
                        asm
                        atomic_cancel
                        atomic_commit
                        atomic_noexcept
                        auto
                        bitand
                        bitor
                        bool
                        break
                        case
                        catch
                        char
                        char8_t
                        char16_t
                        char32_t
                        class
                        compl
                        concept
                        const
                        consteval
                        constexpr
                        constinit
                        const_cast
                        continue
                        co_await
                        co_return
                        co_yield
                        decltype
                        default
                        delete
                        do
                        double
                        dynamic_cast
                        else
                        enum
                        explicit
                        export
                        extern
                        false
                        float
                        for
                        friend
                        goto
                        if
                        inline
                        int
                        long
                        mutable
                        namespace
                        new
                        noexcept
                        not
                        not_eq
                        nullptr
                        operator
                        or
                        or_eq
                        private
                        protected
                        public
                        reflexpr
                        register
                        reinterpret_cast
                        requires
                        return
                        short
                        signed
                        sizeof
                        static
                        static_assert
                        static_cast
                        struct
                        switch
                        synchronized
                        template
                        this
                        thread_local
                        throw
                        true
                        try
                        typedef
                        typeid
                        typename
                        union
                        unsigned
                        using
                        virtual
                        void
                        volatile
                        wchar_t
                        while
                        xor
                        xor_eq
                        final
                        override
                        transaction_safe
                        transaction_safe_dynamic
另见
            C++ 信息图表和备忘录(hackingcpp.com)            C++ 参考 (cppreference.com)
            C++ 语言教程 (cplusplus.com)