03. 声明类型

创建日期:2024-07-19
更新日期:2025-02-01

decltype.cpp

#include <iostream>

template <typename T1, typename T2>
void Calculate(T1 a, T2 b);

template <typename T1, typename T2>
auto Add(T1 a, T2 b) -> decltype(a + b);

int main()
{
    int a = 1;
    double b = 1.2;
    Calculate(a, b);

    std::cout << "a + b = " << Add(a, b) << std::endl;
}

template <typename T1, typename T2>
void Calculate(T1 a, T2 b)
{
    typedef decltype(a + b) tpab;

    // decltype
    tpab result1 = a + b;
    std::cout << "a + b = " << result1 << std::endl;

    // auto
    auto result2 = a - b;
    std::cout << "a - b = " << result2 << std::endl;
}

template <typename T1, typename T2>
auto Add(T1 a, T2 b) -> decltype(a + b)
{
    return a + b;
}