请问这段Boost中的代码什么意思?
时间:2008-06-20 13:46:29
来源:论坛整理 作者: 编辑:chinaitzhe
{
// intentionally complex - simplification causes regressions
typedef char type_must_be_complete[ sizeof(T)? 1: -1 ];
(void) sizeof(type_must_be_complete);
delete x;
}
作者说要有意地搞复杂,简化引起倒退
请问是什么意思?
网友回复:checked_delete代码中用了这么一个技巧。我们知道,对于不完整类型的指针: …… class incomplete; incomplete* p; delete p; …… 在这里,p并未指向一个实例且未指向0,因此delete p是危险的,但根据编译器不同,这里可能只会给出一个warning而不是error。因此,cheched_delete代码中利用了“typedef char type_must_be_complete[ sizeof(T)? 1: -1 ];”,当p未指向实例时,sizeof(T)给出的是0,根据代码,-1是不能作为数组的size的,因此,这里相当于强制编译器给出error而不是 warning。
转载的
网友回复:
boost真的博大精深啊
网友回复:
要不然敢叫boost这个名啊?
网友回复:请问什么是不完整类型指针,如何重现sizeof(T)==0的结果??
网友回复:我试过sizeof的结果总是大于1,请问如何重现sizeof为0的情况
网友回复:最简单的测试:
- C/C code
Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ // 此处T是不完整类型 , 编译会出错 typedef char T[]; typedef char type_must_be_complete[ sizeof(T)? 1: -1 ]; (void) sizeof(type_must_be_complete); // 此处T是完整类型 , 编译不会出错 typedef char T[1]; typedef char type_must_be_complete[ sizeof(T)? 1: -1 ]; (void) sizeof(type_must_be_complete);
网友回复:有些编译器对于sizeof(T) 当T为不完整类型时,会直接报错:
error C2070: illegal sizeof operand
网友回复:谢谢,是不能编译,第一种情况,T不是类型,报错为 error C2070: 'T': illegal sizeof operand
但是sizeof也不会得到为0的结果啊
网友回复:査了下标准,不答应sizeof 用于非完整类型,应该通常的结果是报error,也许有某些不合标准的编译器设计为0值。
谢谢翱翔的鱼的解答!
关键字:请问,这段,Boost,代码,意思,
上一篇:看过
下一篇:下面没有链接了











文章评论
共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面