如何在代码中识别const char*和const char []的类型?

tim*_*tee 5 c++ arrays c-strings

const char* s1   = "teststirg";  
const char  s2[] = "teststirg";
Run Code Online (Sandbox Code Playgroud)

我想要一个方法告诉我s1是"char*"而s2是"char []",如何编写方法?

iam*_*ind 6

使用模板:

template<typename T, unsigned int SIZE>
bool IsArray (T (&a)[SIZE]) { return true; }

template<typename T>
bool IsArray (T *p) { return false; }
Run Code Online (Sandbox Code Playgroud)

这将在运行时进行评估.
用法:

if(IsArray(s1))
...

if(IsArray(s2))
...
Run Code Online (Sandbox Code Playgroud)

如果有兴趣,你可以使用一些先进的技术,这将告诉你这是编译时间.

编辑:

typedef char (&yes)[2];

template<typename T, unsigned int SIZE>
yes IsArray (T (&a)[SIZE]);

template<typename T>
char IsArray (T *p);
Run Code Online (Sandbox Code Playgroud)

用法:

if(sizeof(IsArray(s1)) == sizeof(yes))
...
if(sizeof(IsArray(s2)) == sizeof(yes))
...
Run Code Online (Sandbox Code Playgroud)