Ich wusste, dass, wenn wir nicht Platz nach dem Schließen von spitzen Klammern in einer Variablendeklaration stellen, C++ den folgenden Fehler auslöst.Verhalten von # define Makroexpansion in C++
‘>>’ should be ‘> >’ within a nested template argument list
Aber der Fehler kommt nicht, wenn ich in diesem Code #define
wie verwenden. Kann mir das jemand erklären?
Ich denke, #define
ist nur eine Makro-Erweiterung und funktioniert wie Suchen-Ersetzen, so beide Möglichkeiten, Variablen hier zu deklarieren sollte identisch sein.
Auch dieser Fehler tritt nicht auf, wenn ich es mit C++ 11 kompiliere.
#include <bits/stdc++.h>
using namespace std;
#define vi vector<int>
int main(){
//Doesn't work, compile error
vector<vector<int>> v;
//Works
vector<vi> vv;
}
In C++ 11 wurde '' 'durch eine spezielle Regel gültig, weil der Platzbedarf so ein Ärgernis war. –
Sie möchten wissen, warum das Makro funktioniert? Ich habe hier keine Frage gesehen. – Aitch
Ja Ich möchte wissen, warum das Makro funktioniert – Jignesh