Yunyin's blog
  • Home
  • Archive
  • Tags
  • Categories

    { 读书笔记 }

  • 9-5 指定初始化(C++20)

    2023-11-27 /
    • { C++ }
    • { 读书笔记 }
    • { 现代C++语言核心特性解析读书笔记 }

    9.5 指定初始化

    ​ 为了提高数据成员初始化的可读性和灵活性,C++20标准中引入了指定初始化的特性。该特性允许指定初始化数据成员的名称,从而使代码意图更加明确。

    Read On »
  • 使用using打开强枚举类型(C++20)

    2023-11-27 /
    • { C++ }
    • { 读书笔记 }
    • { 现代C++语言核心特性解析读书笔记 }

    使用using打开强枚举类型

    ​ C20标准扩展了using,用于打开强枚举类型的命名空间。注意:在g和vs中均尚未支持本语法。

    Read On »
  • 1-1版权和声明

    2023-11-27 /
    • { C++ }
    • { 读书笔记 }
    • { 高质量编程指南笔记 }

    版权和声明

    位置:头文件和定义文件的开头

    Read On »
  • 1-2头文件的结构

    2023-11-27 /
    • { C++ }
    • { 读书笔记 }
    • { 高质量编程指南笔记 }

    头文件的结构

    头文件由三部分组成:

    Read On »
  • 1-12-1 四种处理错误的经典用法

    2023-11-27 /
    • { C++ }
    • { 读书笔记 }
    • { Thinking in C++第二卷读书笔记 }
    • { tasks }

    1.12-1 四种处理错误的经典用法

    • 返回值处理错误
    • errno处理错误
    Read On »
  • 1-12-2 创建自己的异常类

    2023-11-27 /
    • { C++ }
    • { 读书笔记 }
    • { Thinking in C++第二卷读书笔记 }
    • { tasks }

    1.12-2 创建自己的异常类

    #include <iostream>
    <!--more-->
    #include <exception>
    using namespace std;
    class MyClass
    {
    class Myexception : public logic_error
    {
    public:
    Myexception(const char *s) : logic_error(s) {}
    };

    public:
    void ThrowExcept() throw(Myexception)
    {
    throw Myexception("my exception");
    }
    };

    int main()
    {
    try
    {
    MyClass mc;
    mc.ThrowExcept();
    }
    catch (const std::exception &e)
    {
    std::cerr << e.what() << '\n';
    }
    }
  • 1-12-5 异常恢复

    2023-11-27 /
    • { C++ }
    • { 读书笔记 }
    • { Thinking in C++第二卷读书笔记 }
    • { tasks }

    1.12-5 异常恢复

    #include <iostream>
    <!--more-->
    #include <exception>
    using namespace std;

    class newBad
    {
    static int i;
    static void *p;

    public:
    void *operator new(size_t sz)
    {
    p = ::operator new(sz);
    cout << "The newBad object number: " << i + 1 << " has been created" << endl;
    if (++i >= 11)
    {
    throw out_of_range("the 11st object created failed.");
    }
    return p;
    }

    static void releaseMemory()
    {
    if (p)
    {
    ::operator delete(p);
    cout << "the " << i << "st object was freed" << endl;
    i--;
    }
    }
    };

    int newBad::i = 0;
    void *newBad::p = nullptr;

    int main(int argc, char const *argv[])
    {
    while (true)
    {
    try
    {
    newBad *mp = new newBad;
    }
    catch (const std::exception &e)
    {
    std::cerr << e.what() << '\n';
    newBad::releaseMemory();
    }
    }
    return 0;
    }

  • 1-12-6 栈反解时再次异常

    2023-11-27 /
    • { C++ }
    • { 读书笔记 }
    • { Thinking in C++第二卷读书笔记 }
    • { tasks }

    1.12-6 栈反解时再次异常

    #include <iostream>
    <!--more-->
    #include <exception>
    using namespace std;

    class BadIdea
    {
    public:
    ~BadIdea()
    {
    throw logic_error("This is a bad exception");
    }
    };

    void my_terminate()
    {
    cout << "This is a bad Idea" << endl;
    exit(0);
    }
    void *psource = (void *)set_terminate(my_terminate);

    int main(int argc, char const *argv[])
    {
    try
    {
    BadIdea ba;
    throw logic_error("test");
    }
    catch (const std::exception &e)
    {
    std::cerr << e.what() << '\n';
    }

    return 0;
    }

  • 1-12-7 异常正常析构的证明

    2023-11-27 /
    • { C++ }
    • { 读书笔记 }
    • { Thinking in C++第二卷读书笔记 }
    • { tasks }

    1.12-7 异常正常析构的证明

    #include <iostream>
    <!--more-->
    #include <exception>

    using namespace std;
    class MyException : public logic_error
    {
    public:
    MyException(const char *s) : logic_error(s) {}
    ~MyException() { cout << "the Exception has been destructed." << endl; }
    };
    class test
    {
    public:
    void throwException() { throw MyException("hello, this is MyException."); }
    };

    int main(int argc, char const *argv[])
    {
    try
    {
    test t;
    t.throwException();
    }
    catch (const std::exception &e)
    {
    std::cerr << e.what() << '\n';
    }

    return 0;
    }

  • 3-7-1 逆转字符串

    2023-11-27 /
    • { C++ }
    • { 读书笔记 }
    • { Thinking in C++第二卷读书笔记 }
    • { tasks }

    3.7-1 逆转字符串

    #include <string>
    <!--more-->
    #include <iostream>
    using namespace std;

    void reverse(string &s)
    {
    int size = s.size();
    for (size_t i = 0; i < size / 2; i++)
    {
    char temp = s[i];
    s[i] = s[size - 1 - i];
    s[size - 1 - i] = temp;
    }
    }
    int main()
    {
    string s("123456");
    cout << s << endl;
    reverse(s);
    cout << s << endl;
    }
« prev1…5678next »
© 2024 - Yunyin
Powered by Hexo , Theme - Icalm