zoukankan      html  css  js  c++  java
  • const char*和const char[]怎么识别?

    #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;
    }
    

  • 相关阅读:
    3DMax的OFusion插件使用问题
    eclipse调试java调用matlab程序的7.17dll找不到的问题
    C++malloc,calloc,realloc,free函数
    北漂工作心得
    [置顶] 使用sping AOP 操作日志管理
    你不知道的Eclipse用法:使用Allocation tracker跟踪Android应用内存分配
    [置顶] 程序员扩充人脉那些事儿
    linux常见笔试题
    数学之路(3)-机器学习(3)-机器学习算法-神经网络[4]
    Android屏幕相关设置
  • 原文地址:https://www.cnblogs.com/rollenholt/p/2447124.html
Copyright © 2011-2022 走看看