G2.9版本,这个版本实用性不高。
trivial是不重要的意思,回答是false,默认都是重要的。要是不赞成这样,可以特化,比如来特化int类型。自己的类型要自己定义重要不重要。typedef都是来回答问题的。一般重要是存在指针的场合,防止系统默认进行一些浅拷贝,这个时候可以令拷贝构造变成重要的,就是不采用系统默认的拷贝构造。
C++11版本:现在的版本不用自己申明重要不重要,系统自己考虑。
测试程序:来回答问题。
string的测试:注意回答是1的部分。
Foo类中只有数据,没有函数,所以和以前C语言struct一样。所以is_pod是1。
只有要充当父类,才有可能使用virtual。
拷贝构造,拷贝赋值,移动构造,移动赋值。delete是不要。default是要。
用模板对类型进行操作。
对于is_void,其中remove_cv,是去除const和volatile这两个关键词。对于去除const,有两个版本的函数,第一个是泛化,来什么返回什么,第二个是偏特化,如果传入的类型有const,则把const去掉。去掉volatile的实现类似。
接下来_is_void_helper也是有两个版本,一个是泛化,泛化回答的是false;一个是偏特化,偏特化回答的是true。
is_integral类似:一个是泛化,泛化回答的是false;一个是偏特化,偏特化回答的是true。
这些函数找不到,应该是由编译器完成的。当深入class,编译器会帮忙。
相关文章: