c++ - 当 ParamType 既不是指针也不是引用时自动类型推导

标签 c++ c++11 pointers auto type-deduction

关于自动类型推导,我引用了 Scott Meyers 的“更有效的 C++”。提到它与模板类型推导的工作方式相同,并且提到了 3 种情况。我的问题属于情况 3(当 ParamType 不是指针或引用时),但结果与所描述的不匹配。

#include <iostream>

int main (void)
{
   auto i = 2;
   const auto c = &i;

   *c = 4;

   std::cout << "i is " << i;
}

它应该像

template<typename T>
void f(const T param);

f(&i);   // int *

所以,这里的T应该匹配int *param的完整类型应该是const int *

但是,如上面的程序所示,c 不是 const int * 而是 int *

有人可以解释一下我在这里缺少什么吗?

最佳答案

当你有

template<typename T>
void f(const T param);

T 是指针类型,您没有 const type * 而是 type * const 因为您正在制作 Tconst,而不是它指向的内容。

这意味着

const auto c = &i;

是一个int * const,一个指向非常量整数的常量指针。

关于c++ - 当 ParamType 既不是指针也不是引用时自动类型推导,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49433185/

相关文章:

c++ - 左值引用是否隐藏了未定义的行为?

c++ - 当 std::uint16_t 在 union 明确定义的行为中处于事件状态时,是否正在访问 std::array<std::uint8_t, 2> ?

c++ - 怎么会?特征中未检测到别名

c# - C# 中的指针及其在应用程序中的使用频率?

c++ - Mongodb C++11 API errno 干扰

c++ - 在循环中使用迭代器删除 unordered_set 中的元素

c++ - C++11 特性的可用性

c++ - 我可以禁用 std::vector 的复制构造函数吗?

c - 使用指针和 scanf() 的动态整数数

c - 'char const * const c=" "' 是什么意思