我想写两个不同的函数来处理一个常量值和给定类型的变量(即int
)。“F(5)”和“int x; F(x)»来调用不同的函数?
这里是例子测试用例:
int main(void) {
int x=12;
F(5); // this should print "constant"
F(x); // this should print "variable"
}
我认为这将是足够的定义:
void F(int v) { cout << "constant\n"; }
void F(int& v) { cout << "variable\n"; }
这假定编译器会选择int&
变量为“更好的专业”和作为唯一选择的常数为int
)。然而,G++
这是结果:
test.cc: In function ‘int main()’:
test.cc:13: error: call of overloaded ‘F(int&)’ is ambiguous // for line: F(x);
test.cc:4: note: candidates are: void F(int)
test.cc:5: note: void F(int&)
G++
确实选择F(int)
为常数,但不知道哪个功能选择变量。
有没有人有任何想法,为什么会发生这种情况?
背景:我正在用C++中的prolog-like统一方法进行实验。能够知道常量和变量之间的差异将有助于我在诸如functor(x,5) <=> functor(3,5)
的情况下选择所需的统一行为(分配或比较)。
这是我需要的大概是什么。谢谢。 – liori 2009-05-30 19:10:33