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

  • 相关阅读:
    android开发之重写Application类
    android开发之Parcelable使用详解
    android开发之Bundle使用
    android开发之gridlayout使用入门
    android开发之merge结合include优化布局
    android开发布局优化之ViewStub
    android开发之PreferenceScreen使用详解
    android开发之使用Messenger实现service与activity交互
    LeetCode All in One 题目讲解汇总(持续更新中...)
    JavaWeb知识点总结
  • 原文地址:https://www.cnblogs.com/rollenholt/p/2447124.html
Copyright © 2011-2022 走看看