Tôi biết rằng nếu chúng ta không đặt dấu cách sau khi đóng dấu ngoặc nhọn trong một khai báo biến, C++ ném lỗi sau đây.Hành vi của việc mở rộng macro #define trong C++
‘>>’ should be ‘> >’ within a nested template argument list
Nhưng lỗi không đến nếu tôi sử dụng #define
như trong mã này. Ai đó có thể giải thích cho tôi điều này?
Tôi nghĩ #define
chỉ là bản mở rộng macro và hoạt động như tìm-thay thế, vì vậy cả hai cách khai báo biến ở đây phải giống nhau.
Ngoài ra lỗi này không xảy ra nếu tôi biên dịch nó bằng 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;
}
Trong C++ 11 '>>' trở thành hợp lệ, thông qua một quy tắc đặc biệt, bởi vì yêu cầu về không gian là một sự khó chịu. –
Bạn muốn biết, tại sao macro hoạt động? Tôi không thấy câu hỏi ở đây. – Aitch
vâng tôi muốn biết tại sao macro hoạt động – Jignesh