type-safe是什么?

ZiSheng 2016-12-22 09:42:51
最近在看深入浅出MFC第八章Document-view深入探讨P350页,涉及到MFC collection class,里边讲到一个type-safe的概念,很不理解。说什么是否使用C++ template对于type-safe极有帮助????谢谢各位大神。。

...全文
342 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ri_aje 2016-12-23
  • 打赏
  • 举报
回复
就是说语言的类型系统控制着什么地方能用什么类型,如果你使用的类型不满足条件,就出编译错误。
赵4老师 2016-12-22
  • 打赏
  • 举报
回复
引用 2 楼 ZiSheng 的回复:
[quote=引用 1 楼 zhao4zhong1 的回复:] 百度搜相关关键字。
您能说说自己的理解吗?[/quote] 没有绝对的安全。
ZiSheng 2016-12-22
  • 打赏
  • 举报
回复
引用 1 楼 zhao4zhong1 的回复:
百度搜相关关键字。
您能说说自己的理解吗?
赵4老师 2016-12-22
  • 打赏
  • 举报
回复
百度搜相关关键字。
ZiSheng 2016-12-22
  • 打赏
  • 举报
回复
引用 4 楼 jiqiang01234 的回复:
c++模板是静态强类型约束,必须匹配才能编译通过,所以说“类型安全”。 void*和CObject*之类的“万能指针”就不是类型安全的了,编译器无法保证指针所指向的地方是否有效,安全性全靠使用者来保证


template<class TYPE, class ARG_TYPE>
class CList : public CObject
{
protected:
	struct CNode
	{
		CNode* pNext;
		CNode* pPrev;
		TYPE data;
	};
public:
// Construction
	CList(int nBlockSize = 10);

// Attributes (head and tail)
	// count of elements
	int GetCount() const;
	BOOL IsEmpty() const;

	// peek at head or tail
	TYPE& GetHead();
	TYPE GetHead() const;
	TYPE& GetTail();
	TYPE GetTail() const;

// Operations
	// get head or tail (and remove it) - don't call on empty list !
	TYPE RemoveHead();
	TYPE RemoveTail();

	// add before head or after tail
	POSITION AddHead(ARG_TYPE newElement);
	POSITION AddTail(ARG_TYPE newElement);

	// add another list of elements before head or after tail
	void AddHead(CList* pNewList);
	void AddTail(CList* pNewList);

	// remove all elements
	void RemoveAll();

	// iteration
	POSITION GetHeadPosition() const;
	POSITION GetTailPosition() const;
	TYPE& GetNext(POSITION& rPosition); // return *Position++
	TYPE GetNext(POSITION& rPosition) const; // return *Position++
	TYPE& GetPrev(POSITION& rPosition); // return *Position--
	TYPE GetPrev(POSITION& rPosition) const; // return *Position--

	// getting/modifying an element at a given position
	TYPE& GetAt(POSITION position);
	TYPE GetAt(POSITION position) const;
	void SetAt(POSITION pos, ARG_TYPE newElement);
	void RemoveAt(POSITION position);

	// inserting before or after a given position
	POSITION InsertBefore(POSITION position, ARG_TYPE newElement);
	POSITION InsertAfter(POSITION position, ARG_TYPE newElement);

	// helper functions (note: O(n) speed)
	POSITION Find(ARG_TYPE searchValue, POSITION startAfter = NULL) const;
		// defaults to starting at the HEAD, return NULL if not found
	POSITION FindIndex(int nIndex) const;
		// get the 'nIndex'th element (may return NULL)

// Implementation
protected:
	CNode* m_pNodeHead;
	CNode* m_pNodeTail;
	int m_nCount;
	CNode* m_pNodeFree;
	struct CPlex* m_pBlocks;
	int m_nBlockSize;

	CNode* NewNode(CNode*, CNode*);
	void FreeNode(CNode*);

public:
	~CList();
	void Serialize(CArchive&);
#ifdef _DEBUG
	void Dump(CDumpContext&) const;
	void AssertValid() const;
#endif
};

CArray,CList也是模版类为什么type-safe这一列是NO
jiqiang01234 2016-12-22
  • 打赏
  • 举报
回复
c++模板是静态强类型约束,必须匹配才能编译通过,所以说“类型安全”。 void*和CObject*之类的“万能指针”就不是类型安全的了,编译器无法保证指针所指向的地方是否有效,安全性全靠使用者来保证

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧