BAK*_* ZQ 7 c++ arrays templates constants
在第一次调用中,当我将 a 传递给char const []一个参数为 的模板函数时T const a,T推断出char const *这是合理的,因为const指的是衰减指针。
但是,当参数类型更改为 时T const & a,T推导为char[7]。从上面的角度来看,为什么不const限定整个数组类型?
template <typename T>
void show1(T const a) {
// input is const char *
// T is char const *
// a is char const * const
}
template <typename T>
void show2(T const & a) {
// input is char const [7]
// T is char[7]
// a is char const (&)[7]
}
int main() {
const char s[] = "asdasd";
show1(s);
show2(s);
}
Run Code Online (Sandbox Code Playgroud)
为什么不限定
const整个数组类型
因为对于数组类型,
(强调我的)
将cv 限定符应用于数组类型(通过 typedef 或模板类型操作)会将限定符应用于元素 type,但其元素为 cv 限定类型的任何数组类型都被视为具有相同的 cv 限定。
Run Code Online (Sandbox Code Playgroud)// a and b have the same const-qualified type "array of 5 const char" typedef const char CC; CC a[5] = {}; typedef char CA[5]; const CA b = {};
这意味着当Tischar[7] T const导致类型时char const[7],则T const&(即a类型)是char const (&)[7]。
另一方面,当您传递stype数组时const char[7],该数组也被视为 const 限定的。因此,给定参数类型T const&,T被推导为char[7]( 但不是char const[7])。
| 归档时间: |
|
| 查看次数: |
160 次 |
| 最近记录: |