Ein Teil der Codenotizen

Vorwort

Ich verwende C++ seit fast sieben Jahren, seit ich das Arbeiten erlernt habe, und bin dabei auf unzählige Schwierigkeiten und Komplikationen gestoßen. Früher wurden aufgetretene Probleme nachgeschlagen und wieder vergessen, wie eine vorüberziehende Wolke. Nachdem ich nun aus dem Schmerz gelernt habe, werde ich die verwirrenden und fehleranfälligen Codes einen nach dem anderen aufschreiben. Die eine besteht darin, einen Gedanken zu hinterlassen, um zu beweisen, dass ich schon einmal hier war, und die andere darin, die Referenz zu erleichtern, wenn in Zukunft auf ähnliche Probleme gestoßen wird.

c++ unbenannter Namespace

  • Namespaces werden verwendet, um zu verhindern, dass Objekte neu definiert werden.
  • Unbenannte Namespaces verhindern auch, dass Objekte wiederholt definiert werden, aber sie haben einfach keine Namen.
  • Unbenannte Namespaces können nicht in Header-Dateien geschrieben werden
  • Wenn Sie in cpp einen unbenannten Namespace schreiben, kann dieser direkt in dieser Datei verwendet werden, jedoch nicht in anderen Dateien.
 namespace 
 {
    
    
     int x;
     int y;
     int myfun();
 }

utf8, utf8 BOM, utf8 mit Signatur

  • UTF-8 BOM und UTF-8 signiert beziehen sich auf dasselbe und beide beziehen sich auf dasselbe UTF-8-Format
  • Die BOM in UTF-8 BOM steht für Byte Order Mark.
  • Der Unterschied zwischen einer UTF-8-Textdatei mit BOM (Signatur) und einer UTF-8-Textdatei ohne BOM ist: Erstere hat 3 Bytes EF BB BF am Anfang der Datei
  • Auf der Windows-Plattform wird der Standardtext im UTF-8-Format mit einer Stückliste geliefert, und Texteditoren können die Stückliste erkennen; auf anderen Plattformen, wie z. B. Textverarbeitungsprogrammen unter Linux, ist es wahrscheinlich, dass die Stückliste nicht erkannt wird, was dazu führt Die erste Zeile der Datei kann nicht gelesen werden. Es wird allgemein davon ausgegangen, dass das UTF-8-Format ohne BOM das Standardformat ist.
  • Text ohne Stückliste ist Standard utf8

Was ist DML?

  • Es handelt sich um eine Datenmanipulationssprache, die Tabellenoperationen aufzeichnet (Hinzufügen, Löschen, Ändern).

Der Unterschied zwischen Rückruffunktionen

  • Rückrufprozessorientiert, C-Sprache
  • Die Senke orientiert sich an der C++-Schnittstelle und muss eine Klasse implementieren.
  • Der Delegate legt die Memberfunktion der Klasse fest. .

Der Unterschied zwischen Typedef und Typedef-Typname

Typdefinition

  1. typedef wird zum Definieren von Typen verwendet
    typedef list<int> ListNum;
    listNum num{
          
          1,2,3,4};
    
  2. Definieren Sie Zeiger auf Mitglieder
    class Foo
    {
          
          
     public:
        void f()
        {
          
          
    
        }
     private:
         int a;
    };
     typedef void(A::*fp)(); // fp为函数指针的别名
    
    

Modellname

  1. Typname T; gibt an, dass die Definition von T nicht angegeben wurde. Diese Anweisung erscheint normalerweise in der Definition der Vorlage.
    typedef typename T::a TA; // 这里不指定变量 T是一个未声明的类型,为泛型,只有等确定了T的类型 就可以替换 Foo::a
    TA ta; // 声明ta,类型为T::a
    typename T::a a; // 声明a 的类型为T::a
    // typedef typename 这句话的意思就是: typedef重新定义别名,typename确
    
    
  2. Vorlage; bedeutet, dass T ein Typ ist,
    template<typename T> // 等价于template<Cclass T>
    void f(T t); 
    ``
    
  3. Der Unterschied zwischen Typname und Klasse
    • Die Klasse gibt an, dass das folgende Symbol ein Typ ist
    • Klasse definiert eine Klasse
    • Nachdem Vorlagen in C++ eingeführt wurden, lautete die anfängliche Methode zum Definieren von Vorlagen: Vorlage ... Das Schlüsselwort class gibt hier an, dass T ein Typ ist. Um später die Verwendung von class an diesen beiden Stellen zu vermeiden, die zu Verwirrung führen kann, wird die Typname-Schlüssel wurde eingeführt. Zeichen,
  4. Zusammenfassen
    • Typname identifiziert einen Typ. Dieser Typ ist noch nicht bekannt. Der Typ kann erst nach Instanziierung der Vorlage ermittelt werden.
    • typedef definiert einen Alias ​​neu und typedef typename definiert einen Alias ​​eines unbestimmten Typs neu. typedef typename TU soll den Alias ​​des Typs T in U umdefinieren.
    • typedef Typname-Funktion
    template < class T >
    void Foo( T arr)
    {
          
          
        // 告诉c++编译器,typename后面的字符串为一个类型名称,而不是成员函数或者成员变量
        // 加入没有typename 编译器不知道T::length 是类型还是类的成员
        typedef typename T::length LengthType ; 
        LengthType length = arr.GetLength ;
    }
    

Wenn das C++-Klassenobjekt nullptr ist, können Sie Mitgliedsmethoden aufrufen. Solange Sie nicht auf Mitgliedsvariablen zugreifen, wird kein Fehler gemeldet. Wenn Sie auf Mitgliedsvariablen zugreifen, stürzt es ab.

#include <iostream>

using namespace std;
class person
{
public:
    person()
    {}
    person(string a = "", int b = 12)
        :name(a), age(b)
    {}
    void test()
    {
        cout << "这是test" << endl;
    }
    void change()
    {
        cout << "这是change" << endl;
        cout << name.c_str() << endl;
    }
    ~person()
    {}
private:
        string name;
    int age;
};
//
void test()
{
    person A("sss",13);
    person B("sddd", 15);
    person* p = nullptr;
        A.test();
    A.change();
    p->test();
    p->change();
}


int main(int argc, const char * argv[]) {
    test();
    return 0;
}

おすすめ

転載: blog.csdn.net/qq_33944628/article/details/124435145