关于自动类型推导,我引用了 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
因为您正在制作 T
是 const
,而不是它指向的内容。
这意味着
const auto c = &i;
是一个int * const
,一个指向非常量整数的常量指针。
关于c++ - 当 ParamType 既不是指针也不是引用时自动类型推导,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49433185/