我想寫兩個不同的函數來處理一個常量值和給定類型的變量(即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