1.explicit
C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示的, 而非隐式的, 跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式)
案例参考:C++中的explicit详解_c++ explicit_k6604125的博客-CSDN博客
2.用:给构造函数赋初值的表达方式
3.typedef作用:为现有类型创建一个新的名字
typedef _CharT char_type;
typedef _Traits traits_type;
类型_CharT的新名字为char_type;类型_Traits的新名字为traits_type
4.typename作用
4.1 用作模板中,声明某种类型,告诉编译器,跟在它后面的字符串是一个不确定的类型;
template <typename _CharT, typename _Traits, typename _Alloc>
class basic_stringstream : public basic_iostream<_CharT, _Traits>
{
...
}
_CharT,_Traits,_Alloc都是不确定的类型(确定类型就是指我们常用的int,double,float,string,char等)
4.2 typename在stl中还有另外一个作用
template<typename _Tp,typename _Alloc>
class AA
{
typedef typename _gnu_cxx::alloc_traits<_Alloc>::template rebind<_Tp>::other _Tp_alloc_type;
_Tp_alloc_type tp;
}
顺便说明rebind前面为啥要放一个template,是为了告诉编译器后面的<>是用于指定模板参数,而进行比较
第三个typename是指定它后面的字符串为类型,这是因为对于形如AA::BB这样的形式,它有可能是一个类型,也有可能是类的静态成员,这个时候加上typename就是为了告诉编译器,它后面的一大串字符都是一个类型
这里的typedef实际上就是给类型取了一个别名,类型_gnu_cxx::alloc_traits<_Alloc>::template rebind<_Tp>::other的新名字是_Tp_alloc_type,避免类型名太长
5.using关键字用法
5.1 声明命名空间:
using namespace std,后续使用该命名空间里的变量或者类型都无需再加上std的前缀
另一种形式 using::std::cout,只单独声明命名空间里的某个名字,命名空间里其他东西是无法直接使用的,此时只能使用cout,如果需要使用std下的endl,还需要用这种形式:std::endl
5.2 改变派生类对父类成员的访问控制
class parent
{
protected:
int m;
};
class child:public parent
{
public:
using parent::m;
};
int main()
{
child c;
c.m =2;
return 0;
}
m变量是parent的protected变量,child类作为parent的派生类,变量m也是protected属性,是不能在外部直接访问的,在这里将parent中的m设置为public属性,使得m可以在外部直接访问
5.3 给类型指定别名,类型重定义,用法同typedef
具体见:C++ 中using 的使用_c++ using-CSDN博客
6.模板继承
跟我学c++中级篇——模板的继承_c++ 模板类继承-CSDN博客
7. typedef __SIZE_TYPE__ size_t 如何理解
参考:关于size_t与size_type___size_type__-CSDN博客
在/usr/lib/gcc/i486-linux-gnu/4.4/include下面
<stddef.h>里面找到这么几句:
#ifndef __SIZE_TYPE__
#define __SIZE__TYPE__ long unsigned int
#endif
#if !(defined(__GUNU__) && defined (size_t))
typedef __SIZE_TYPE__ size_t;
#ifdef __BEOS
typedef long ssize_t
size_t是为了方便系统之间的移植而定义的。
在32位系统上定义为 unsigned int
在64位系统上定义为 unsigned long
更准确的说法是在32位系统上是32位无符号整型
在64位系统上是64位无符号整型
size_t一般用来表示一种计数,比如有多少东西被拷贝等。
sizeof操作符的结果类型是size_t,
该类型保证能容纳实现所建立的最大对象的字节大小。
8. 如何理解
已知类模板定义:
template <typename _CharT, typename _Traits, typename _Alloc>
class basic_stringstream : public basic_iostream<_CharT, _Traits>
{
public:
...
}
如何理解:
typedef basic_stringstream<char> stringstream