2014-12-25 24 views
5

Tôi có chức năng quá tải có thể lấy hai loại đối số: intdouble. Khi tôi đánh giá nó với một số ba có thể trả về hoặc là int hoặc double, nó luôn sử dụng phiên bản double. Tại sao vậy?Chức năng quá tải được đánh giá với số ba

#include<iostream> 
using namespace std; 

void f(int a) 
{ 
    cout << "int" << endl; 
} 

void f(double a) 
{ 
    cout << "double" << endl; 
} 

int main() 
{ 
    string a; 
    cin >> a; 
    f(a=="int" ? 3 : 3.14159); 
    return 0; 
} 
+1

[Vui lòng xem câu trả lời này] (http://stackoverflow.com/a/8535301/1729885). –

+0

có thể trùng lặp của [Kiểu trả về của '?:' (Toán tử điều kiện bậc ba)] (http://stackoverflow.com/questions/8535226/return-type-of-ternary-conditional-operator) – Anonymous

Trả lời

8

Toán tử ba năm luôn làm loại khuyến mãi (thành một loại). Vì vậy, nếu một kết quả là int và một là gấp đôi, kết quả của? operartor sẽ luôn luôn được tăng gấp đôi.