Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么使用#define声明int向量的向量时没有引发错误 #包括 使用名称空间std; #定义vi向量 #定义vvi向量 int main(){ vi-v(10,-1); vvi-vv(10,v); 对于(int i=0;i_C++_Vector - Fatal编程技术网

C++ 为什么使用#define声明int向量的向量时没有引发错误 #包括 使用名称空间std; #定义vi向量 #定义vvi向量 int main(){ vi-v(10,-1); vvi-vv(10,v); 对于(int i=0;i

C++ 为什么使用#define声明int向量的向量时没有引发错误 #包括 使用名称空间std; #定义vi向量 #定义vvi向量 int main(){ vi-v(10,-1); vvi-vv(10,v); 对于(int i=0;i,c++,vector,C++,Vector,发生错误的原因是,在C++03中,双尖括号被解释为右移位运算符>。在C++11中,该语言被修改为关闭模板参数,因此在C++11模式下编译时应该没有错误。您可以通过在右尖括号,例如向量 另外,不要使用#define来定义这样的类型别名;而是使用typedef,因为这正是它的目的。使用#define方法不会出现错误的原因是预处理器正在智能地插入断点。如果只通过预处理器阶段传递代码,则例如(gcc-e),您将看到如下内容: #include <bits/stdc++.h> using na

发生错误的原因是,在C++03中,双尖括号被解释为右移位运算符
>
。在C++11中,该语言被修改为关闭模板参数,因此在C++11模式下编译时应该没有错误。您可以通过在右尖括号,例如
向量


另外,不要使用
#define
来定义这样的类型别名;而是使用
typedef
,因为这正是它的目的。

使用
#define
方法不会出现错误的原因是预处理器正在智能地插入断点。如果只通过预处理器阶段传递代码,则例如(
gcc-e
),您将看到如下内容:

#include <bits/stdc++.h>
using namespace std;

#define vi vector<int>
#define vvi vector<vi>

int main() {
    vi v(10, -1);
    vvi vv(10, v);
    for(int i=0; i<vv.size(); i++){
        for(int j=0; j<vv[i].size(); j++){
            cout << vv[i][j] << " ";
        }
        cout << endl;
    }
}
intmain(){
向量v(10,-1);
向量vv(10,v);//
字符将在合理的位置关闭模板参数列表(C++03始终将其视为右移运算符)

C++11 14.2第3节规定:

分析模板参数列表时,第一个非嵌套的
将被视为结束分隔符,而不是大于运算符。类似地,第一个非嵌套的
>
将被视为两个连续但不同的
标记


我不知道预处理器是怎么做的。你在预处理阶段看到代码了吗?在Windows上有没有方法可以看到预处理代码?@ NikunjBanka:亚当,你说的正确,在C++ 11中没有错误,但是我正在处理C++ 4.8-1。但是我已经在PAXDIABLO的答案中找到答案。预处理器处理令牌流,这两个
是独立的令牌。
int main() {
    vector<int> v(10,-1);
    vector<vector<int> > vv(10,v);           // <<-- see space here.
    for(int i=0; i<vv.size(); i++){
        for(int j=0; j<vv[i].size(); j++){
            cout << vv[i][j] << " ";
        }
        cout << endl;
    }
    return 0;
}
#define vi vector<int>
#define vvi vector<vi>
vvi xyzzy;
vector<vector<int>> xyzzy;
{vector, <, vector, <, int, >, >, WHITESPACE, xyzzy, ;}