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

  • 相关阅读:
    ubuntu安装打印机驱动
    clang-format的介绍和使用
    [C++面向对象]-C++成员函数和非成员函数
    [Qt2D绘图]-06QPainter的复合模式&&双缓冲绘图&&绘图中的其他问题
    [Qt2D绘图]-05绘图设备-QPixmap&&QBitmap&&QImage&&QPicture
    [Qt2D绘图]-04绘制文字&&绘制路径
    [Qt2D绘图]-03坐标系统之坐标变换
    [Qt2D绘图]-02坐标系统&&抗锯齿渲染
    [Qt2D绘图]-01Qt2D绘图基本绘制和填充
    [Qt插件]-01Qt插件&&提升部件(自定义控件)
  • 原文地址:https://www.cnblogs.com/rollenholt/p/2447124.html
Copyright © 2011-2022 走看看