使用C++ 14的自动函数类型返回推导代替std :: common_type总是安全的吗?

Vit*_*meo 6 c++ return auto return-type-deduction c++14

我正在将部分代码库从C++ 11升级到C++ 14.我有几个数学实用程序函数,它们接受多个输入参数并返回单个值类型std::common_type_t<...>.

我想用简单的方法替换显式返回值auto.我认为类型推导确实试图找到这些情况下的常见类型.有什么情况不行吗?

转换所有出现的返回值是否总是安全的std::common_type_T<...>auto

功能示例:

template<typename T1, typename T2, typename T3> 
std::common_type_t<T1, T2, T3> getClamped(T1 mValue, T2 mMin, T3 mMax)
{       
    return mValue < mMin ? mMin : (mValue > mMax ? mMax : mValue);
}
Run Code Online (Sandbox Code Playgroud)

D D*_*mmr 7

不,它并不总是安全的.

我假设你的数学函数比这更多,但这里有一个例子,结果会有所不同.

template <class T, class U>
std::common_type_t<T, U> add(T t, U u) { return t + u; }
Run Code Online (Sandbox Code Playgroud)

如果用两个chars 调用此函数,结果将是a char.你会自动推断出返回类型,它会产生一个int.