试图将指å‘int的指针传递给一个将指针指å‘long的函数,如何åšåˆ°è¿™ä¸€ç‚¹

时间:2013-05-01 22:12:28

标签: c++ templates visual-c++ pointers

这是函数

template <typename T> T sum(T *x, T *y)
{
    T z(0);
    z=*x+*y;
    return z;
}

我正在学习模æ¿ã€‚

以下是我在主å­ç¨‹åºä¸­å°è¯•åšçš„事情:

int i(1), j(2);
long p(12), q(3);

std::cout<<sum(&i,&j)<<" is the output\n";
std::cout<<sum(&((long)i),&q)<<" is the second output\n";

ä½æ€»å’Œï¼ˆï¼†amp;((long)i)和&amp; q)ä¸èµ·ä½œç”¨ã€‚无论如何,我å¯ä»¥ä½¿ç”¨å˜é‡i调用函数,而ä¸å¿…将其值放在long类型的å¦ä¸€ä¸ªå˜é‡ä¸­ï¼Œè€Œä¸æ˜¯ä½¿ç”¨å¦ä¸€ä¸ªå˜é‡è°ƒç”¨å‡½æ•°sum?我å¯ä»¥ç†è§£ï¼Œæˆ‘编写模æ¿çš„æ–¹å¼ï¼Œå®ƒå°†ç”Ÿæˆä¸¤ä¸ªå‚数属于åŒä¸€ç±»åž‹çš„函数。我想让它生æˆå…·æœ‰2ç§ä¸åŒç±»åž‹çš„å‚数函数并ä¸ä¼šé‚£ä¹ˆéš¾ï¼Œæˆ‘猜这是å¦ä¸€ç§é€‰æ‹©ã€‚

1 个答案:

答案 0 :(得分:2)

您ä¸åº”该在sum函数中使用指针。在这里使用它们毫无æ„义。您å¯ä»¥ä½¿ç”¨const引用,因为ä¸ä¼šåœ¨å‡½æ•°ä½“内修改å‚数:

template <typename T> 
T sum(const T &x, const T &y)
{
    T z(0);
    z=x + y;
    return z;
}

使用ä¸åŒç±»åž‹çš„2å‚数调用函数时,编译器将无法推导出模æ¿å‚数类型。因此,您需è¦æ˜Žç¡®æŒ‡å‡ºæ‚¨æƒ³è¦çš„那个:

std::cout << sum<long>(i, q) << std::endl;

您还å¯ä»¥è½¬æ¢å…¶ä¸­ä¸€ä¸ªå‚数,在这ç§æƒ…况下,编译器将能够推断出类型:

std::cout << sum(static_cast<long>(i), q) << std::endl;