解释对函数C++
问题描述:
我遇到了这个代码解释对函数C++
#define pii pair<int, int>
#define pip pair<int, pii>
...
vector<pip> graph;
graph[i] = pip(c, pii(u,v));
当我尝试
graph[i] = pair<c,pair<u,v>>;
我得到一个错误信息
error: 'c' cannot appear in a constant-expression
error: 'i' cannot appear in a constant-expression
error: 'j' cannot appear in a constant-expression
为什么这两个表达式不相等?
答
pair
是类型,不是功能。
除了从语法不正确而,你得到这个错误的原因是因为你试图传递c
(运行时可变)进模板参数,在这里:
graph[i] = pair<c,pair<u,v>>;
想必你想是这样的,而不是:
graph[i] = pip(c, pii(u,v));
这相当于:
graph[i] = pair<int, pair<int, int>>(c, pair<int, int>(u,v));
什么是'c','i','j','u'和'v'?从'pip(c,pii(u,v))'我可以推断出'c','u'和'v'可能是整数。你想要将它们替换为'pair'的模板参数?为什么你认为将正常括号改为尖括号并不会改变表达式的含义? – lisyarus
是的变量是整数。我试图理解'pip(c,pii(u,v))'是如何工作的,并且认为如果我用'#define'替换括号,它也是一样的。还试用了正常的括号。 – aurel
“以为这是相同的,如果我替换括号,因为#define” - 宏与尖括号无关。 – lisyarus