提问人:Sami 提问时间:11/6/2023 最后编辑:273KSami 更新时间:11/6/2023 访问量:66
了解 const 限定符在指针的模板参数推导中的位置
Understanding const Qualifier Position in Template Parameter Deduction for Pointers
问:
我正在努力了解 const 限定符如何影响 C++ 模板函数中的推导类型,尤其是在涉及指针时。请考虑以下模板函数:
#include <type_traits>
#include <iostream>
template <typename T>
void foo(const T val) {
if (std::is_pointer<T>::value) {
std::cout << "foo() called for a pointer" << std::endl;
} else {
std::cout << "foo() called for a value" << std::endl;
}
}
int main() {
int x = 10;
int* y = &x;
foo(y);
}
当我调用 foo(y) 时,y 是指向 int 的指针,我注意到 T 被推导为 ,并且函数参数 val 变为 。我想确认我的理解:int*
int* const
为什么适用于指针本身,而不是指向类型(即,而不是)?
C++ 标准中是否有一条规则来定义如何在此类模板类型推导中应用 const?const
int* const
const int*
链接到 C++Insights : https://cppinsights.io/
这同样适用于:
#include <type_traits>
#include <iostream>
template <typename T>
void foo(const T& val)
{
if (std::is_pointer<T>::value)
{
std::cout << "foo() called for a pointer" << std::endl;
}
else
{
std::cout << "foo() called for a value" << std::endl;
}
}
int main()
{
int x = 10;
int* y = &x;
foo(y);
}
答: 暂无答案
下一个:更改列表 C++ 的顺序
评论
typedef int *foo; const foo bar=nullptr;
int * const bar
const int *bar;
const T val
val
const
适用于指针本身,而不是指向类型”——换句话说,为什么它适用于类型本身,而不是深埋在类型内部的东西?为什么你最终会分解成组件,然后在里面挑选一些东西来应用?const
const T
T
const
const T v
void foo(T const * ptr)