C++ 当T是指针类型时,常数T的含义是什么?

C++ 当T是指针类型时,常数T的含义是什么?,c++,templates,pointers,c++11,constants,C++,Templates,Pointers,C++11,Constants,考虑到: char* ptr; // 1) a non-constant pointer to a non-constant char const char* ptr; // 2) a non-constant pointer to a constant char char* const ptr; // 3) a constant pointer to a non-constant char const char* const ptr; // 4)

考虑到:

char* ptr;             // 1) a non-constant pointer to a non-constant char
const char* ptr;       // 2) a non-constant pointer to a constant char
char* const ptr;       // 3) a constant pointer to a non-constant char
const char* const ptr; // 4) a constant pointer to a constant char
当我写作时:

#include <iostream>

template <class T>
void f(const T ptr) 
{;}

int main(int argc, char* argv[])
{
    char a = 'a';
    f(&a);
    return 0;
}
#包括
模板
空f(常数ptr)
{;}
int main(int argc,char*argv[])
{
字符a='a';
f&a;
返回0;
}

什么类型的
ptr
:2)或3)?

T
是指向非常量
char
的指针,因此
const T
是指向非常量
char
的常量指针

T
是指向非常量
char
的指针,因此
const T
是指向非常量
char
的常量指针

为什么不试试呢?我发现如果将常量放在类型之后,指针声明就不那么模棱两可了,例如:
t const*const
,并且使用旧的从右到左读取指针类型规则。为什么要进行向下表决,我不认为这是一个很糟糕的问题。为什么不试试呢?我发现如果在类型后加上常量,指针声明就不会那么含糊不清了,比如:
t const*const
,并且使用旧的从右到左读取指针类型规则。为什么不投票,我认为这不是一个很糟糕的问题。