C++11学习:auto和decltype

#include <iostream>

/* C++03 style */
template <typename R, typename T1, typename T2>
R add(T1 t1, T2 t2)
{
    std::cout << "C++03 style" << std::endl;
    return(t1 + t2);
}

/* C++11 style */

/* way 1 */
template <typename T1, typename T2>
auto add(T1 t1, T2 t2) ->decltype(t1 + t2)
{
    std::cout << "C++11 style, way 1" << std::endl;
    return(t1 + t2);
}

/* way 2 */
/*
template <typename T1, typename T2>
decltype(*(T1*)0 * *(T2*)0) add(T1 t1, T2 t2)
{
    std::cout << "C++11 style, way 2" << std::endl;
    return(t1 + t2);
}
*/

/* way 3*/
/*
template <typename T1, typename T2>
decltype(std::declval<T1>() * std::declval<T2>()) add(T1 t1, T2 t2)
{
    std::cout << "C++11 style, way 3" << std::endl;
    return(t1 + t2);
}
*/

/* way 4 */
/*
template <typename T>
struct DeclVal
{
    T operator () ();
};

template <typename T1, typename T2>
decltype(DeclVal<T1>()() * DeclVal<T2>()()) add(T1 t1, T2 t2)
{
    std::cout << "C++11 style, way 4" << std::endl;
    return(t1 + t2);
}
*/

/* way 5 */
/*
template <typename T>
T decl_val();

template <typename T1, typename T2>
decltype(decl_val<T1>() * decl_val<T2>()) add(T1 t1, T2 t2)
{
    std::cout << "C++11 style, way 5" << std::endl;
    return(t1 + t2);
}
*/

int main(int argc, char * argv[])
{
    auto d = 0.0;
    auto i = sizeof(d);
    std::cout << "sizeof(0.0) = " << i << std::endl;

    auto v1 = 5;
    auto v2 = 3.8;
    auto v3 = add(v1, v2);
    decltype(v1 + v2) v4 = add(v1, v2);
    auto v5 = add<double>(v1, v2);
    std::cout << "v1 = " << v1 << std::endl;
    std::cout << "v2 = " << v2 << std::endl;
    std::cout << "v3 = " << v3 << std::endl;
    std::cout << "v4 = " << v4 << std::endl;
    std::cout << "v5 = " << v5 << std::endl;

    return(0);
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值