#include <iostream>
using namespace std; template<typename T> class _ischararray_; template<typename T, int N> class _ischararray_<T[N]>
{
public: static bool _ischararray(){return true;}
}; template<typename T> class _ischararray_<T*>
{
public: static bool _ischararray(){return false;}
}; template<class T> bool isCharArray(const T& x)
{
return _ischararray_<T>::_ischararray();
} int _tmain(int argc, _TCHAR* argv[])
{
const char* s1 = "12345";
const char s2[] = "12345";
isCharArray("12345")?cout<<"char []"<<endl:cout<<"char*"<<endl; //char []
isCharArray(s1)?cout<<"char []"<<endl:cout<<"char*"<<endl; //char *
isCharArray(s2)?cout<<"char []"<<endl:cout<<"char*"<<endl; //char [] return 0;
}

或者下面这段我没有看懂的代码,麻烦大牛们帮忙解释一下下面的代码段:

#include <iostream>
using namespace std; namespace X
{
template<typename T, unsigned int SIZE>
bool IsArray (T (&a)[SIZE]) { return true; } template<typename T>
bool IsArray (const T *&p) { return false; }
} namespace Y
{
typedef char (&yes)[2]; template<typename T, unsigned int SIZE>
yes IsArray (T (&a)[SIZE]); template<typename T>
char IsArray (const T *&p);
} int _tmain(int argc, _TCHAR* argv[])
{
char s1[] = "hello";
const char *s2 = "hello";
#if 1
using namespace X;
if(true == IsArray(s2))
throw 0;
if(false == IsArray("12345"))
throw 0;
if(false == IsArray(s1))
throw 0;
#else
// 编译期间解决该问题
using namespace Y;
if(sizeof(IsArray(s2)) == sizeof(yes))
throw 0;
if(sizeof(IsArray(s1)) != sizeof(yes))
throw 0;
#endif return 0;
}

http://www.cnblogs.com/rollenholt/archive/2012/04/14/2447124.html

const char*和const char[]怎么识别?的更多相关文章

  1. C语言执行时报错“表达式必须是可修改的左值,无法从“const char [3]”转换为“char [120]” ”,原因:字符串不能直接赋值

    解决该问题的方法:使用strcpy函数进行字符串拷贝   原型声明:char *strcpy(char* dest, const char *src); 头文件:#include <string ...

  2. 字符串复制char *strcpy(char* dest, const char *src);

    ⒈strcpy的实现代码 char * strcpy(char * strDest,const char * strSrc) { if ((NULL==strDest) || (NULL==strSr ...

  3. C++ char*,const char*,string的相互转换

    1. string转const char* string s ="abc";constchar* c_s = s.c_str(); 2. const char*转string   ...

  4. [转载] 已知strcpy的函数原型:char *strcpy(char *strDest, const char *strSrc),编写函数 strcpy(C++版)

    已知strcpy的函数原型:char *strcpy(char *strDest, const char *strSrc)其中strDest 是目的字符串,strSrc 是源字符串.不调用C++/C ...

  5. char*,const char*和string 三者转换

    1. const char* 和string 转换 (1) const char*转换为 string,直接赋值即可. EX: const char* tmp = "tsinghua&quo ...

  6. const char *p、char const *p、char * const p的区别?

    const char *p和char const *p是一样的,都表示定义一个指向字符常量的指针,指针的内容(字符)不可变.char * const p表示一个指向字符的指针常量,字符可以改变,但是指 ...

  7. C++ char*,const char*,string,int 的相互转换

    C++ char*,const char*,string,int 的相互转换   1. string转const char* string s ="abc";const char* ...

  8. C语言中strcpy(char *strDest, const char *strScr)字符串复制库函数的理解与分析

    1.原版的strcpy()函数原型 char * strcpy( char *strDest, const char *strSrc ) { assert( (strDest != NULL) &am ...

  9. error: C2664: “zajiao::zajiao(const zajiao &)”: 无法将参数 1 从“const char [12]”转换为“char *”

    原本打算在QT用一个字符串"ABCDEF12345"作为类zajiao的构造函数的参数,用来创建类zajiao的对象zajiao1. zajiao zajiao1("AB ...

随机推荐

  1. Docker for Linux 安装

    原文:Docker for Linux 安装 前言: 环境:centos7.5 64 位 正文: Docker 软件包已经包括在默认的 CentOS-Extras 软件源里.因此想要安装 docker ...

  2. 为什么java的web开发中URLEncoder.encode方法要为什么要调用两次

    一: 我们先看2个编码的情况 String name=java.net.URLEncoder.encode("测试", "UTF-8"); System.out ...

  3. SQL基础问题整理

    在程序中,数据库操作是必不可少的部分,所以我们要备足数据库相关知识才能去应付程序中出现的种种问题.基于此,我特地在国外网站.博客上整理了一些问题,并附带了答案和解释.参考.为了保证“原汁原味”,我就保 ...

  4. git安装使用详解

    Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不 需要联网了,因为版本都是在自己的电脑上.既然每个人的电脑都有一个完整的版本库,那多个人如何 ...

  5. hudson添加批处理编译命令的注意事项

    作者:朱金灿 来源:http://blog.csdn.net/clever101 Hudson可以在Build Step里添加自定义的批处理命令,如下图: 需要注意的是这些批处理命令并不能识别huds ...

  6. Material Design: NavigationView FlaotingActionBar SnackBar采用

    转载 请明确说明 MingsangAndroid 本文介绍了Design Support Library的引入 拥抱Android Design Support Library新变化(导航视图.悬浮A ...

  7. R 语言学习(二)—— 向量

    1. 入门 将摄氏度转化为华氏度 >> 27*1.8+32 [1] 80.6 [1]:表示数字的向量索引号,在 R 语言中任何一个数字都看作一个向量. 向量化 >> temp ...

  8. JS 禁止IE用右键

    <!--组合键: -->IE的键盘监听最多只能作用于document上(window我试过不行)如果内嵌了iframe并且你的焦点在iframe上,那么按键无效 这里我用CTRL+Q写的例 ...

  9. WPF: Creation of Text Labels for 3D Scene

    原文:WPF: Creation of Text Labels for 3D Scene 转载:http://www.codeproject.com/KB/WPF/WPF_Text3D.aspx Do ...

  10. wpf 自定义窗口,最大化时覆盖任务栏解决方案

    原文:wpf 自定义窗口,最大化时覆盖任务栏解决方案 相信很多人使用wpf时会选择自定义美观的窗口,因此会设置WindowStyle="None" 取消自带的标题栏.但这样使用 W ...