E-COM-NET
首页
在线工具
Layui镜像站
SUI文档
联系我们
推荐频道
Java
PHP
C++
C
C#
Python
Ruby
go语言
Scala
Servlet
Vue
MySQL
NoSQL
Redis
CSS
Oracle
SQL Server
DB2
HBase
Http
HTML5
Spring
Ajax
Jquery
JavaScript
Json
XML
NodeJs
mybatis
Hibernate
算法
设计模式
shell
数据结构
大数据
JS
消息中间件
正则表达式
Tomcat
SQL
Nginx
Shiro
Maven
Linux
c++类型转换
C++
1:
C++
初始化,输入输出,const关键字,引用,内联,缺省函数,函数重载,左值和右值,函数模板,名字空间
文章目录1.C++初始化1.1变量初始化五种方式1.2数组初始化2.如何防止读入时候对字符串的越界处理3.输入输出4.const4.1cosnt指针的示例4.1.1const修饰变量4.1.2const修饰指针4.1.3const修饰变量本身5.引用(&)概述5.1&的用法5.2引用的特点5.3常引用(const)5.4引用与指针的区别5.5值传递,指针,引用,常引用区别5.6引用去掉常性5.7引
何小柒(qi)~
·
2024-02-14 09:01
C++(线上)
c++
c++
error函数_
C++
笔记02 引用+const+动态内存+内联函数+类和对象
1.引用类型名2.const关键字1)定义常量const2)定义常量指针不可以通过指针修改指针指向的内容,指针指向可以变化不可以把常量指针赋值给非常量指针,反之可以int3)定义常引用3.动态内存分配-new和delete1)分配和删除一个变量P2)分配和删除一个数组P4.内联函数函数重载函数缺省参数1)内联函数函数调用是有时间和空间开销的。调用参数、返回地址等压栈出栈内联函数:减少函数调用开销机
weixin_39824834
·
2024-02-14 09:01
c++
error函数
c++
已引用.h但未识别
默认形参 内联函数 引用 取别名 指针与引用的相同点和不同点 强制
类型转换
面向对象与面向过程 类和对象 访问控制限定符 构造函数 析构函数 初始化列表
一、默认形参1、什么是默认形参在
C++
中可以给函数的参数设置默认值,当函数被调用时调用者提供了实参则使用实参,如果没有提供则使用默认值2、默认形参要靠右如果函数有多个参数,设置了默认形参,默认形参必须要从右到左连续排列
grooveHong
·
2024-02-14 09:30
c++
类
引用传递
面向对象编程
C++
笔记2 | 重载与缺省参数 内联 动态内存分配 引用
八、
C++
的函数1、函数重载(overload)1)定义在相同作用域,可以定义同名的函数,但是参数必须有所区分,这样函数构成重载关系.注:函数重载和返回类型无关。
嵌入式_Chen
·
2024-02-14 09:30
C++
c++
重载
内联
动态内存分配
C++
函数重载、内联函数和引用
C++
函数重载、内联函数和引用函数重载函数重载机制extern"C"重载和作用域重载解析确定重载函数的三个步骤指针类型也会对函数的重载造成影响默认形参内联函数引用
C++
的内存管理new/delete数组的分配与释放内存分配失败函数重载在同一作用域下
m0_37622246
·
2024-02-14 09:30
C++
C++函数重载
C++引用
c++
:C与
C++
的区别(引用 const 内联)
常方法const和指针默认值参数面试:普通函数与带默认值参数的函数之间的区别inline(内联)函数引入内联函数函数比较面试:内联函数与宏的区别面试:内联函数与普通函数的区别符号重载函数重载面试:为什么
c+
布鲁克要补钙
·
2024-02-14 09:29
笔记
C++
c++
C++
面向对象01【从C到
C++
:引用,const作用,动态内存分配(new,delete),内联函数,函数重载,缺省参数】
摘要:1.函数中形参的值修改了,不会影响实参2.引用3.const作用4.动态内存分配5.内联函数6.函数重载7.缺省参数1.函数中形参的值修改了,不会影响实参#includevoidswap(inta,intb){inttmp;tmp=a;a=b;b=tmp;}intmain(){intn1=1,n2=2;swap(n1,n2);printf("%d%d",n1,n2);//输出仍为12,不会交
DurianCoriander
·
2024-02-14 09:59
深入了解
C++
:形参、内联、重载、引用、const和指针、new和delete
形参带默认值的函数1.给默认值的时候从右向左给。2.定义出可以给形参默认值,声明也可以给形参默认值。3.形参默认值只能出现一次。4.参数调用的效率问题#sum(10,20)对应了五条汇编指令moveax,dwordptr[ebp-8]pusheaxmovecxdwordptr[ebp-4]pushecxcallsum#如果调用sum(10)或sum(),则使用默认参数的形参无需mov。内联函数普通
程韬123
·
2024-02-14 09:29
c++
开发语言
离散数学c语言实验报告,离散数学数理逻辑
C++
或C语言实验报告
(A)4、【实验要求】C或
C++
语言编程实现5
weixin_39951396
·
2024-02-14 09:57
离散数学c语言实验报告
【
C++
】初始化列表--再谈构造函数
个人主页:阿然成长日记点击可跳转个人专栏:数据结构与算法C语言进阶
C++
不能则学,不知则问,耻于问人,决无长进文章目录一、问题引入二、初始化的概念三、什么是初始化列表四、初始化列表的格式五、初始化列表的使用
阿然成长日记
·
2024-02-14 09:51
C++基础
c++
chrome
开发语言
【
C++
】内存详解(堆,栈,静态区)
个人主页:阿然成长日记点击可跳转个人专栏:数据结构与算法C语言进阶
C++
不能则学,不知则问,耻于问人,决无长进文章目录一、
C++
;内存的五大分区二、栈区和堆区详解1、栈区2、堆区3.
阿然成长日记
·
2024-02-14 09:21
C++基础
c++
开发语言
ROS中用cv_bridge和opencv时出现cv::xxx未定义的问题
1前景提要:cv_bridge是ros中常用的消息
类型转换
的包(ros自带的包),要在ros环境下利用opencv处理USB相机拍摄的视频必须用到cv_bridge(如下图),详见https://blog.csdn.net
羊羊羊羊羊羊羊--
·
2024-02-14 08:13
ros中的opencv
c++
linux
opencv
【教程】
C++
语言基础学习笔记(六)——String字符串
【
C++
语言基础学习】系列文章第一章《项目与程序结构》第二章《数据类型》第三章《运算符》第四章《流程控制》第五章《Vector向量》第六章《String字符串》第七章《Array数组》第八章《函数》第九章
EliasChang
·
2024-02-14 08:11
【语言】C++
c++
学习
笔记
【教程】
C++
语言基础学习笔记(八)——函数
【
C++
语言基础学习】系列文章第一章《项目与程序结构》第二章《数据类型》第三章《运算符》第四章《流程控制》第五章《Vector向量》第六章《String字符串》第七章《Array数组》第八章《函数》第九章
EliasChang
·
2024-02-14 08:11
【语言】C++
c++
学习
笔记
【教程】
C++
语言基础学习笔记(四)——流程控制
【
C++
语言基础学习】系列文章第一章《项目与程序结构》第二章《数据类型》第三章《运算符》第四章《流程控制》第五章《Vector向量》第六章《String字符串》第七章《Array数组》第八章《函数》第九章
EliasChang
·
2024-02-14 08:41
【语言】C++
学习
笔记
c++
【教程】
C++
语言基础学习笔记(五)——Vector向量
【
C++
语言基础学习】系列文章第一章《项目与程序结构》第二章《数据类型》第三章《运算符》第四章《流程控制》第五章《Vector向量》第六章《String字符串》第七章《Array数组》第八章《函数》第九章
EliasChang
·
2024-02-14 08:41
【语言】C++
学习
笔记
c++
[转]Effective
C++
学习笔记:初始化列表中成员列出的顺序和它们在类中声明的顺序相同
类成员的默认初始化顺序是按照声明顺序进行,如果使用初始化列表初始化成员变量,则必须按照成员变量的声明顺序进行;否则,在变量之间交替赋值时,会产生,未初始化的变量去赋值其他变量;同时GCC,也会发出警告,如:**'class::m_xxx'willbeinitializedafter[-Wreorder]**请看下面的代码:templateclassarray{public:array(intlow
行走的代码
·
2024-02-14 08:01
【教程】
C++
语言基础学习笔记(七)——Array数组
【
C++
语言基础学习】系列文章第一章《项目与程序结构》第二章《数据类型》第三章《运算符》第四章《流程控制》第五章《Vector向量》第六章《String字符串》第七章《Array数组》第八章《函数》第九章
EliasChang
·
2024-02-14 08:40
【语言】C++
c++
学习
笔记
【
C++
】详解高精度加法、高精度减法、高精度乘法、高精度除法代码
目录1、引入2、入门思路3、数的存储4、高精度加法5、高精度减法6、高精度乘法7、高精度除法1、引入在进行大整数运算中,因为在
C++
/C中整数,最大也就是unsignedlonglong也就才(1e19
努力奋斗的张同学
·
2024-02-14 08:02
算法
c++
算法
算法-----高精度算法1(高精度加法,高精度减法)(详解)
我们都知道
c++
中int的最大值是2^31,unsignedint的最大值是2的32次方,最大的unsignedlonglong可以到18446744073709551615。double是浮点型
longxuan01
·
2024-02-14 08:31
算法
高精度算法
高精度加法
高精度减法
重载运算符
C++
继承和重载学习笔记
1.一个派生类继承了所有的基类方法,但下列情况除外:基类的构造函数、析构函数和拷贝构造函数。基类的重载运算符。基类的友元函数。2.不同继承类型的规则:公有继承(public):当一个类派生自公有基类时,基类的公有成员也是派生类的公有成员,基类的保护成员也是派生类的保护成员,基类的私有成员不能直接被派生类访问,但是可以通过调用基类的公有和保护成员来访问。保护继承(protected):当一个类派生自
悟C
·
2024-02-14 08:56
【IOS 知识点】Runtime 二
Runtime简介Runtime消息传递Runtime消息转发Runtime应用Runtime简介Runtime是一个用C、
C++
、汇编编写的运行时库,包含了很多C语言的API,封装了很多动态性相关的函数
IOS_Faker
·
2024-02-14 08:18
蓝桥杯题目解析 --汉诺塔(含
C++
栈的知识)
该题在蓝桥杯基础数据结构篇,进入后搜索题号1512。汉诺塔可以将圆盘临时置于B杆,也可以将A杆移除的圆盘重新移回A杆,但必须遵循上述两条规则。汉诺塔了解后,题目也了解后,我们先通过试N的个数来找规律:当N=1时:A—>C;移动一次当N=2时:A—>B;A—>C;B—>C;移动三次当N=3时:A—>C;A—>B;C—>B;A—>C;B—>A;B—>C;A—>C;移动七次我们可以发现圆盘移动是有规律的
DaveVV
·
2024-02-14 08:52
蓝桥杯c++
蓝桥杯
c++
数据结构
算法
面向对象程序设计是第几代计算机,
C++
面向对象程序设计(第2版)(重点大学计算机专业系列教材)...
C++
语言基础本章学习目标:*了解
C++
语言支持的数据类型;*熟悉
C++
的内置基本类型:字符、布尔、整数、浮点;*掌握变量和常量的定义、声明和初始化语法;*理解作用域的概念;*熟练掌握常用的运算符:书写规则
weixin_42156940
·
2024-02-14 08:52
面向对象程序设计是第几代计算机
leetcode(数组)128.最长连续序列(
c++
详细解释)DAY8
文章目录1.题目示例提示2.解答思路3.实现代码结果4.总结1.题目给定一个未排序的整数数组nums,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。请你设计并实现时间复杂度为O(n)的算法解决此问题。示例示例1:输入:nums=[100,4,200,1,3,2]输出:4解释:最长数字连续序列是[1,2,3,4]。它的长度为4。示例2:输入:nums=[0,3,7,2,5,8,4,6
小Q小Q
·
2024-02-14 08:50
C++刷题
leetcode
c++
算法
LeetCode-Day77(
C++
) 11. 盛最多水的容器
盛最多水的容器给你n个非负整数a1,a2,…,an,每个数代表坐标中的一个点(i,ai)。在坐标内画n条垂直线,垂直线i的两个端点分别为(i,ai)和(i,0)。找出其中的两条线,使得它们与x轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器。示例1:输入:[1,8,6,2,5,4,8,3,7]输出:49解释:图中垂直线代表输入数组[1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容
debu阿良
·
2024-02-14 08:20
LeetCode手帐
leetcode
leetcode(双指针)11.盛最多水的容器(
C++
详细解释)DAY9
文章目录1.题目示例提示2.解答思路3.实现代码结果4.总结1.题目给定一个长度为n的整数数组height。有n条垂线,第i条线的两个端点是(i,0)和(i,height[i])。找出其中的两条线,使得它们与x轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。**说明:**你不能倾斜容器。示例提示2.解答思路两层for循环的做法时间会超时因此利用双指针进行一遍遍历。我们要清楚:每轮向内
小Q小Q
·
2024-02-14 07:48
C++刷题
leetcode
c++
算法
ndk-stack使用及符号表还原
对于ndk和native(c、
c++
)开发中,指针和内存管理是最重要也是最容易出问题的地方,稍有不慎就会遇到诸如内存地址访问错误、野针对、内存泄露、堆栈溢出、初始化错误、
类型转换
错误、数字除0等常见的问题
神迹12
·
2024-02-14 07:48
c++
类的定义与使用
c++
的面向对象和面向过程从struct到class的引入class的定义以及使用一.
c++
的面向对象和面向过程c语言是一门结构化,面向过程的语言,而
c++
可以支持c。
bhbca
·
2024-02-14 07:39
c++
c++
开发语言
诺基亚东山再起,它曾错过的Qt迎来黄金时代
作为一个无缺的、跨途径的
C++
图形用户界面运
你的社交帐号昵
·
2024-02-14 07:55
C++
笔记
一类成员-----访问权限公有成员:对其对象是可见的继承时,对派生类是可见的保护成员:对其对象不可见,等同于私有成员继承时,对派生类是可见的私有成员:对其对象不可见。继承时,对派生类是不可见的。(派生类新增加的成员函数不能访问基类的私有成员,但继承基类的成员函数可以访问)保护成员,在不继承时等同于私有成员。当在继承时,等同于公有成员。对于对象,只有公有成员可见。二继承过程中的构造函数与析构函数当创
M.lee—CN
·
2024-02-14 07:34
笔记
C++
:类的继承和派生
2.1继承继承是面向对象的主要特征(此外还要封装和多态)之一,它使得一个类从现有类中派生,而不必重新定义一个新类。继承的实质就是用已有的数据类型创建新的数据类型,并保存已有数据类型的特点,以旧类为基础创建新类,新类包含了旧类的数据成员和成员函数,并且可以在新类中添加新的数据成员和成员函数。旧类被称为基类或者父类,新类被称为派生类或子类。2.1.1继承的基本语法例如我们看到很多网页中,都有公共的头部
Sɪʟᴇɴᴛ໊ོ235
·
2024-02-14 07:00
c++
开发语言
面向对象
C++
:面向对象——类的构造
1.1学会面向对象的编程思想面向对象的英文缩写是OO,它是一种设计思想。面向对象有3大特点:封装、继承和多态。1.封装封装有两个作用,一个是将不同的小对象封装成一个大对象;另外一个是把一部分内部属性和功能对外界屏蔽。在设计时可以先对小对象进行设计,然后对小对象之间相互联系确定各自大小等方面的属性。2.继承继承是和类密切相关的概念。继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。
Sɪʟᴇɴᴛ໊ོ235
·
2024-02-14 07:30
c++
开发语言
面向对象
tauri+vite+vue3开发环境
进行安装选择时,请勾选"
C++
生成工具"和Windows10SDK。列表1-1:使用VisualStudio生成工具2022安装程序,并勾选“
C++
构建工具
volodyan
·
2024-02-14 07:56
桌面端
microsoft
windows
ios 经典面试题
Runtime是一套由C、
C++
和汇编实现的一套API,为OC语言加入了面向对象和运行时功能。运行时(Runtime)是指将数据类型的确定由编译时推迟到了运行时。
瞬间完善
·
2024-02-14 06:36
C++
音视频01:视频基础、音频基础、封装格式
视频基础音视频录制原理音视频播放原理图像表示-RGB格式图像表示-YUV格式1图像表示-YUV格式2图像表示-YUV格式3图像表示相较于RGB,我们可以计算一帧为1280×720的视频帧,用YUV420P的格式来表示,其数据量的大小如下:42->1+0.5=1.51280*720*1+1280*720*0.5=1.318MB如果fps(1秒的视频帧数目)是25,按照一般电影的长度90分钟来计算,那
学而知不足~
·
2024-02-14 06:34
音视频开发
音视频
计算机视觉
图像处理
C++
线程浅谈
本篇文章我们来介绍一下
C++
多进程多线程的技术1.为什要学习多线程多进程提高程序的性能:进程和线程可以使程序并发执行,从而充分利用计算机的多核处理器和资源,提高程序的执行效率和吞吐量。
4399.9855
·
2024-02-14 06:04
服务器
c++
开发语言
并发与多线程
C++
音视频开发-H.265编码原理入门
视频编码的目的是为了压缩原始视频,压缩的主要思路是从空间、时间、编码、视觉等几个主要角度去除冗余信息。由于H.264出色的数据压缩比率和视频质量,成为当前市场上最为流行的编解码标准。而H.265是在H.264的基础上,保证相同视频质量的同时,视频流的码率还可以减少50%。随着H.265编码格式越来越流行,本文将主要介绍H.265的编码原理,以下是H.265的编码框架流程图。01、编码结构H.265
零声教育
·
2024-02-14 06:03
1000道程序员常见问题解析
音视频
人工智能
计算机视觉
h265
c++
C++
音视频原理
本篇文章我们来描述一下音视频原理音视频录制原理:下面是对这张思维导图的介绍摄像头部分:麦克风采集声音摄像头采集画面摄像头采集回来的数据可以用RGB也可以用YUV来表示图像帧帧率一秒能处理多少张图像图像处理:调亮度图像帧队列:意思是将数据取出来储存在图像帧队列里面等着编码器将数据取出来进行编码处理进行压缩视频编码将视频体积大变成小的精简的视频包队列:压缩好的(编程好的)音频作为音频包队列然后按照一定
4399.9855
·
2024-02-14 06:33
音视频&QT
音视频
c++
C++
音视频学习路线
www.zhihu.com/question/31156766/answer/54645514来源:知乎我们先假设某人在音视频方面是零基础,也没学过任何数字信号处理相关知识,数学基础基本是高中水准,但是熟悉C/
C+
高力士等十万人
·
2024-02-14 06:33
音视频开发
c++
音视频
学习
C++
QT结合FFmpeg实战开发视频播放器-16音视频采样编码的基本原理
作者:虚幻私塾博客:https://xuhss.com早餐店不会开到晚上,想吃的人早就来了!一、音视频采样编码的基本原理这节课主要讲解音视频采样,编解码到最后播放的大致过程。大家都知道,平常传感器采集的音视频是模拟信号。类似于这幅图:这幅图学过高中数学就应该了解它类似于三角函数的曲线它每一个点的数据是平滑的大学学过一门课程是离散数学,采样的过程就是取其中平滑的曲线上的一个一个离散的点,它实际上是将
虚坏叔叔
·
2024-02-14 06:33
QT
QT
音视频
采样
编码
转换
每日温度(
C++
)---单调栈解题
题目详情请根据每日气温列表,重新生成一个列表。对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用0来代替。例如,给定一个列表temperatures=[73,74,75,71,69,72,76,73],你的输出应该是[1,1,4,2,1,1,0,0]。提示:气温列表长度的范围是[1,30000]。每个气温的值的均为华氏度,都是在[30,100]范围
重剑DS
·
2024-02-14 06:31
LeetCode-解题记录
栈
leetcode
C++
单调栈
Socket.D 开源输传协议 v2.4.0 发布
pyton已开发完成,再在测试中;go,rust,
c++
正在开发中。Socket.Dv2.4在Broker集群“可用性”方面有了极大的增强增加安全停止模式增加二段式停止协
组合缺一
·
2024-02-14 05:06
Socket.D
网络应用协议
开源软件
开源
传输协议
网络协议
华为OD机考统一考试C卷 GPU 调度/执行时长(
C++
Java JavaScript Python)
华为OD机考:统一考试C卷+D卷+B卷+A卷2023年11月份,华为官方已经将华为OD机考:OD统一考试(A卷/B卷)切换到OD统一考试(C卷)和OD统一考试(D卷)。根据考友反馈:目前抽到的试卷为B卷或C卷/D卷,其中C卷居多,按照之前的经验C卷D卷部分考题会复用A卷/B卷题,博主正积极从考过的同学收集C卷和D卷真题,可以查看下面的真题目录。真题目录:华为OD机考机试真题目录(C卷+D卷+B卷+
程序员半夏
·
2024-02-14 04:46
华为od
c语言
c++
javascript
java
【华为OD机考 统一考试机试C卷】GPU 调度/执行时长(
C++
Java JavaScript Python C语言)
华为OD机考:统一考试C卷+D卷+B卷+A卷目前在考C卷,经过两个月的收集整理,C卷真题已基本整理完毕抽到原题的概率为2/3到3/3,也就是最少抽到两道原题。请注意:大家刷完C卷真题,最好要把B卷的真题刷一下,因为C卷的部分真题来自B卷。另外订阅专栏还可以联系笔者开通在线OJ进行刷题,提高刷题效率。真题目录:华为OD机考机试真题目录(C卷+D卷+B卷+A卷)+考点说明专栏:2023华为OD机试(B
算法大师
·
2024-02-14 04:16
华为od
c语言
c++
javascript
java
【华为OD机考 统一考试机试C卷】字符串摘要(
C++
Java JavaScript Python C语言)
华为OD机考:统一考试C卷+D卷+B卷+A卷目前在考C卷,经过两个月的收集整理,C卷真题已基本整理完毕抽到原题的概率为2/3到3/3,也就是最少抽到两道原题。请注意:大家刷完C卷真题,最好要把B卷的真题刷一下,因为C卷的部分真题来自B卷。另外订阅专栏还可以联系笔者开通在线OJ进行刷题,提高刷题效率。真题目录:华为OD机考机试真题目录(C卷+D卷+B卷+A卷)+考点说明专栏:2023华为OD机试(B
算法大师
·
2024-02-14 04:07
华为od
c语言
c++
java
javascript
2018-09-11极客学院笔记
强制
类型转换
编译器在编译时只会检查类型之间是否存在继承关系,存在的话就通过编译。运行时会检查真实类型,如果不匹配的话就会抛出ClassCastException异常。
LiuYanPin
·
2024-02-14 03:34
Java学习笔记(三)
目录一、字符类型二、布尔类型三、基本数据
类型转换
3.1自动
类型转换
3.2强制
类型转换
3.3基本数据类型和String类型的转换一、字符类型字符类型可以表示单个字符,字符类型是char。
不期而遇__
·
2024-02-14 03:27
学习
笔记
java
C++
学习笔记之STL容器简单介绍,容器适配器,stack容器,queue容器
文章目录一、容器1.定义2.好处3.通用容器的分类4.总结图二、容器适配器1.定义2.特点三、stack容器1.stack基本概念2.stack常用接口四、queue容器1.queue基本概念2.queue常用接口一、容器1.定义在数据存储上,有一种对象类型,它可以持有其它对象或指向其它对象的指针,这种对象类型就叫做容器。很简单,容器就是保存其它对象的对象。2.好处“容器类是一种对特定代码重用问题
可别让我逮住你乐
·
2024-02-14 03:18
C++
c++
数据结构
【
C++
STL】容器适配器 Container adapter(stack & queue & priority_queue)
文章目录一、STL-stack1.1stack的介绍1.2stack的使用1.3stack的模拟实现二、STL-queue的介绍2.1queue的介绍2.2queue的使用2.3queue的模拟实现三、STL-priority_queue3.1priority_queue的介绍3.2priority_queue的使用3.3仿函数(⭐重要)①什么是仿函数②模板实例化时,仿函数的使用3.4priori
CodeWinter
·
2024-02-14 03:18
C++
c++
适配器模式
容器
STL
后端
上一页
39
40
41
42
43
44
45
46
下一页
按字母分类:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
其他