C++学习笔记

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值