Sapevo che se non mettiamo spazio dopo aver chiuso le parentesi angolari in una dichiarazione di variabile, C++ genera il seguente errore.Comportamento dell'estensione della macro #define in C++
‘>>’ should be ‘> >’ within a nested template argument list
Ma l'errore non viene se uso #define
come in questo codice. Qualcuno può spiegarmi questo?
Penso che #define
sia solo una macro espansione e funzioni come find-replace, quindi entrambi i metodi di dichiarazione della variabile qui dovrebbero essere identici.
Anche questo errore non si verifica se lo compilo con C++ 11.
#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 '>>' è diventato valido, tramite una regola speciale, perché il fabbisogno di spazio era un tale fastidio. –
Vuoi sapere, perché la macro funziona? Non ho visto una domanda qui. – Aitch
sì, voglio sapere perché la macro funziona – Jignesh