【发布时间】:2019-02-11 19:33:49
【问题描述】:
这是我在这里的第一个问题,我希望我已经添加了所有相关信息以拥有一个最小的可验证完整程序。如果您需要更多信息,请给我评论。
我正在学习 C++ 模板编程和类型推导。
-
case I:我使用
auto关键字作为类型并将整数转换为const double。 -
案例二:我使用了一个模板函数(
type_fun),并告诉编译器通过以下转换对const double进行推导:
#include <iostream>
#include <type_traits>
template<typename T>
void type_fun(T t)
{
std::cout << "From type function: " << std::endl;
std::cout << std::boolalpha << std::is_same_v<const double, decltype(t)> << std::endl;
std::cout << std::boolalpha << std::is_same_v<double, decltype(t)> << std::endl;
}
int main()
{
auto t = static_cast<const double>(1);
std::cout << std::boolalpha << std::is_same_v<const double, decltype(t)> << std::endl;
std::cout << std::boolalpha << std::is_same_v<double, decltype(t)> << std::endl;
type_fun(static_cast<const double>(1));
}
但是,结果是一样的。该程序说推导的类型是non-const double。为什么编译器忽略了const?
我需要做什么,才能使推导的类型与static_casted 类型相同?
【问题讨论】:
-
骗子没有明确说明你第二个问题要做什么,也就是说,你只需添加
const。auto t->const auto t和(T t)->(const T t) -
@NathanOliver 这意味着,连同
static_cast<const double>,我需要按照你说的去做,对吧? -
而不是
(const T t),它总是 const,更喜欢(T&& t),它与调用者完美匹配。 -
@Using 那种。您真的不需要
static_cast<const double>(1)来购买汽车外壳。const auto = 1;会给你你想要的。
标签: c++ templates type-deduction