当前位置: 首页 > news >正文

c++基础·列表初始化

目录

 一、列表初始化的核心优势

二、基础数据类型与数组初始化

1. 基础类型初始化

2. 数组初始化

三、类与结构体初始化

1. 构造函数匹配规则

2. 注意事项

四、标准容器初始化

五、聚合类型(Aggregate Types)初始化

1. 聚合类型定义

2. 初始化规则

六、总结与实践建议

最佳实践

性能提示

拓:聚合类型条件解析:"无私有或保护的非静态成员"

1. 聚合类型定义条件表格

2. 关键概念解释


 一、列表初始化的核心优势

        列表初始化(List Initialization)是C++11引入的统一初始化语法,其核心优势体现在以下方面:

    1. 语法统一性
      传统初始化方式包括=赋值、()构造函数调用、{}聚合初始化等,而列表初始化通过统一的{}语法覆盖了以下场景:

      int x{5};              // 基础类型 
      std::vector<int> v{1,2,3}; // 容器 
      Point p{10, 20};       // 自定义类 

    2. 隐式窄化检查
      禁止可能导致数据丢失的隐式转换,例如:

      int a = 3.14;       // 编译通过(丢失精度)
      int b{3.14};        // 编译错误!类型窄化 

    3. 动态长度支持
      可接受任意长度的初始化列表,尤其适用于容器和聚合类型:

      int arr[]{1,2,3,4,5};    // 数组长度自动推导为5 
      std::list<int> lst{10};  // 初始化含单个元素10的链表 
      


    二、基础数据类型与数组初始化

    1. 基础类型初始化

    传统初始化与列表初始化对比:

    int x = 5;      // 传统赋值 
    int y{5};       // 列表初始化(推荐)
    int z{};        // 默认初始化为0 
    

    2. 数组初始化

    支持自动长度推导省略等号的简洁语法:

    int arr1[] = {1,2,3};     // C++03风格 
    int arr2[]{4,5,6};        // C++11风格(自动推导长度)
    char str[]{"Hello"};      // 字符串数组初始化 

    三、类与结构体初始化

    1. 构造函数匹配规则

    • 若类定义了std::initializer_list构造函数,优先调用该构造函数

      class Widget {
      public:Widget(std::initializer_list<int> list) {// 处理初始化列表...}
      };
      Widget w{1,2,3};  // 调用initializer_list构造 
      

    • 若无initializer_list构造,则匹配参数数量最接近的普通构造函数:

      class Point {
      public:Point(int x, int y) {...}
      };
      Point p{10, 20};  // 调用Point(int, int)
      

    2. 注意事项

    当存在参数类型歧义时,列表初始化可能引发意外行为:

    std::vector<int> v1(5, 1); // 包含5个1:[1,1,1,1,1]
    std::vector<int> v2{5, 1}; // 包含两个元素:[5,1]

    四、标准容器初始化

    列表初始化彻底改变了容器的使用体验:

    // 初始化容器元素 
    std::vector<int> vec{1,2,3,4,5}; // 嵌套容器初始化 
    std::map<int, std::string> m{{1, "Alice"}, {2, "Bob"}
    };// 动态分配容器 
    auto p = new std::list<std::string>{"cpp", "java", "python"};

    五、聚合类型(Aggregate Types)初始化

    1. 聚合类型定义

    满足以下条件的类/结构体:

    • 无用户自定义构造函数
    • 无私有或保护的非静态成员
    • 无基类和虚函数

    2. 初始化规则

    按成员声明顺序初始化,支持嵌套初始化:

    struct Address {std::string city;int zipcode;
    };struct Person {std::string name;int age;Address addr;
    };Person p{"Tom", 30, {"Shanghai", 200000}};

    六、总结与实践建议

    最佳实践

    1. 优先使用列表初始化替代=()初始化
    2. 警惕auto推导陷阱
      auto x{5}; 在C++11中推导为std::initializer_list<int>
    3. 自定义类型设计
      若需要支持不定长初始化,应实现std::initializer_list构造函数

    性能提示

    列表初始化可能引入临时对象构造开销,在性能敏感场景建议进行基准测试。

    拓:聚合类型条件解析:"无私有或保护的非静态成员"

1. 聚合类型定义条件表格
条件符合要求的示例不符合要求的示例违反后果
无用户自定义构造函数struct A { int x; };struct B { B(){} int x; };无法使用B{1}初始化
无私有/保护的非静态成员struct C { int a; public: int b; };struct D { private: int x; };无法直接列表初始化私有成员
无基类(C++11~C++17)struct E { int x; };struct F : E {};C++20前无法聚合初始化派生类
无虚函数struct G { int x; };struct H { virtual void f(){} };无法使用H{}初始化
2. 关键概念解释

"无私有/保护的非静态成员"

  • 含义:所有非静态数据成员必须是公有(public)访问权限
  • 技术背景:列表初始化需要直接访问成员,私有成员需通过构造函数赋值
  • 示例分析
    struct Valid {int a;         // public(默认)public: int b; // 显式public 
    };
    Valid v{1, 2};    // 成功:成员均为public struct Invalid {private: int x; // 私有成员 
    };
    Invalid i{5};      // 错误:无法访问私有成员 

相关文章:

c++基础·列表初始化

目录 一、列表初始化的核心优势 二、基础数据类型与数组初始化 1. 基础类型初始化 2. 数组初始化 三、类与结构体初始化 1. 构造函数匹配规则 2. 注意事项 四、标准容器初始化 五、聚合类型&#xff08;Aggregate Types&#xff09;初始化 1. 聚合类型定义 2. 初始化…...

颠覆传统!毫秒级响应的跨平台文件同步革命,远程访问如本地操作般丝滑

文章目录 前言1. 安装Docker2. Go File使用演示3. 安装cpolar内网穿透4. 配置Go File公网地址5. 配置Go File固定公网地址 前言 在这个信息爆炸的时代&#xff0c;谁不曾遭遇过类似的窘境呢&#xff1f;试想&#xff0c;当你正于办公室中埋首案牍时&#xff0c;手机突然弹出一…...

目标检测中的损失函数(二) | BIoU RIoU α-IoU

BIoU来自发表在2018年CVPR上的文章&#xff1a;《Improving Object Localization With Fitness NMS and Bounded IoU Loss》 论文针对现有目标检测方法只关注“足够好”的定位&#xff0c;而非“最优”的框&#xff0c;提出了一种考虑定位质量的NMS策略和BIoU loss。 这里不赘…...

RS232 串行通信:C++ 实现指南

文章目录 一、RS232 简介1. 电气特性2. 传输速率3. 传输距离 二、在 C 中实现 RS232 通信1. Windows 平台&#xff08;1&#xff09;打开串行端口&#xff08;2&#xff09;配置串行通信参数&#xff08;3&#xff09;发送数据&#xff08;4&#xff09;接收数据&#xff08;5&…...

电控---SWD协议

SWD协议是烧录调试常用的协议&#xff0c;本文对SWD协议进行了&#xff0c;覆盖物理层、协议层、寄存器结构、信号时序、安全特性、实际应用及最新发展趋势的讲解。 一、物理层架构与信号特性 1. 引脚定义与电气规范 核心引脚&#xff1a; SWDIO&#xff08;双向数据线&…...

Linux系统下docker 安装 redis

docker安装最新版的redis 一、docker拉取最新版redis镜像 拉取镜像若没有指定版本&#xff0c;代表拉取最新版本 二、查询redis镜像 三、挂载配置文件 在docker容器内修改redis配置文件不方便&#xff0c;所以挂载配置文件&#xff0c;这样可以在外边修改redis配置 3.1 创建…...

第 2 篇:初探时间序列 - 可视化与基本概念

第 2 篇&#xff1a;初探时间序列 - 可视化与基本概念 (图片来源: Luke Chesser on Unsplash) 在上一篇《你好&#xff0c;时间序列&#xff01;》中&#xff0c;我们了解了什么是时间序列数据以及学习它的重要性。现在&#xff0c;是时候卷起袖子&#xff0c;真正开始接触和探…...

适配器模式:化解接口不兼容的桥梁设计

适配器模式&#xff1a;化解接口不兼容的桥梁设计 一、模式核心&#xff1a;让不兼容的接口协同工作 在软件开发中&#xff0c;经常会遇到接口不兼容的情况&#xff1a;如旧系统提供的接口无法被新系统直接调用&#xff0c;或第三方库的接口与当前系统设计不匹配。适配器模式…...

科大讯飞Q1营收46.6亿同比增长27.7%,扣非净利同比增长48.3%

4月21日盘后&#xff0c;AI龙头科大讯飞&#xff08;002230.SZ&#xff09;发布2024年报&#xff0c;公司全年实现营业收入233.43亿元&#xff0c;同比增长18.79%&#xff0c;同期归母净利润为5.6亿元。 公司核心赛道业务保持快速增长&#xff0c;消费者、教育、汽车、医疗业务…...

基于大模型的血栓性外痔全流程风险预测与治疗管理研究报告

目录 一、引言 1.1 研究背景与目的 1.2 研究意义 二、血栓性外痔概述 2.1 定义与发病机制 2.2 临床表现与诊断方法 2.3 现有治疗手段综述 三、大模型在血栓性外痔预测中的应用原理 3.1 大模型技术简介 3.2 模型构建与训练数据来源 3.3 模型预测血栓性外痔的工作流程…...

Transformer系列(三):编码器—解码器架构

Transformer架构 一、多头自注意力 &#xff08;Multi-head self-attention&#xff09;将矩阵维度从d降到d/k的优点 二、层归一化 (Lary Norm)三、残差连接 (Residual Connections)Add and Norm 四、注意力对数几率缩放 &#xff08;Attention logit scaling&#xff09;五、T…...

C++入门小馆: 深入string类(二)

嘿&#xff0c;各位技术潮人&#xff01;好久不见甚是想念。生活就像一场奇妙冒险&#xff0c;而编程就是那把超酷的万能钥匙。此刻&#xff0c;阳光洒在键盘上&#xff0c;灵感在指尖跳跃&#xff0c;让我们抛开一切束缚&#xff0c;给平淡日子加点料&#xff0c;注入满满的pa…...

MCU开发学习记录10 - 高级定时器学习与实践(HAL库)—PWM互补输出、死区控制、刹车控制 - STM32CubeMX

本文将介绍高级定时器的概念&#xff08;只讲解高级定时器特有功能&#xff09;、相关函数以及STM32CubeMX生成定时器的配置函数以及对生成定时器的配置函数进行分析&#xff08;包括结构体配置、相关寄存器配置&#xff09;。针对于高级定时器实践&#xff1a;实现输出PWM互补…...

pytest基础-new

规范 1、首先创建 py 文件命名以 test_ 开始或者以 _test 结尾 2、若是新建类&#xff0c;测试类需要以 Test_开头 3、测试用例&#xff08;方法&#xff09;需要以 test_开头 assert 断言 assert xx&#xff1a;判断 xx 为真 assert not xx&#xff1a;判断 xx 不为真 asse…...

利用Qt创建一个模拟问答系统

界面&#xff1a; 添加了聊天显示区域&#xff08;QTextEdit&#xff09; 添加了发送按钮和清空对话按钮 优化了布局和窗口大小添加了时间戳显示 2、功能&#xff1a; 支持实时对话可以清空对话历史 支持按回车发送消息 添加了简单的关键词匹配响应系统 交互体验&#x…...

CCF CSP 第37次(2025.03)(1_数值积分_C++)

CCF CSP 第37次&#xff08;2025.03&#xff09;&#xff08;1_数值积分_C&#xff09; 解题思路&#xff1a;思路一&#xff1a; 代码实现代码实现&#xff08;思路一&#xff09;&#xff1a; 时间限制&#xff1a; 1.0 秒 空间限制&#xff1a; 512 MiB 原题链接 解题思路…...

使用 Flutter 遇坑小计

前言 首先, 谷哥很贴心地为国内用户准备了一份使用手册 不过很遗憾 就算你照着它的手册来了, 还是会在后续使用中遇到其它的坑 今天我踩了, 保不齐明天就是其他人(lol) running gradle task ‘assembledebug’ stuck 首先去确定下当下Android Studio(或者说你目前的Flutter项…...

C语言中的双链表和单链表详细解释与实现

C语言中的双链表详细解释与实现 双链表&#xff08;Doubly Linked List&#xff09;是一种常见的数据结构&#xff0c;它比单链表更灵活&#xff0c;因为每个节点都包含指向前驱和后继节点的指针。 双链表的基本结构 节点定义 c 复制 下载 typedef struct Node {int dat…...

CSS零基础入门笔记:狂神版

前言 本笔记是学习狂神的java教程&#xff0c;建议配合视频&#xff0c;学习体验更佳。 【狂神说Java】HTML5完整教学通俗易懂_哔哩哔哩_bilibili 第1-2章&#xff1a;Java零基础入门笔记&#xff1a;(1-2)入门&#xff08;简介、基础知识&#xff09;-CSDN博客 第3章&…...

使用python调用deepseek 多轮对话,详细讲解

以下代码实现在python中与deepseek实现多轮对话。 Messages参数是对话历史和上下文的核心载体。 数据结构&#xff1a; • 必须是包含消息对象的数组 • 每个消息对象必须包含&#xff1a; o role&#xff1a;发言者身份&#xff08;system/user/assistant&#xff09; o con…...

requestAnimationFrame是什么?【前端】

亲爱的读者&#xff0c;希望今天的你好心情~ 目录 requestAnimationFrame是什么&#xff1f;目的&#xff1f;举个栗子&#xff1a; requestAnimationFrame是什么&#xff1f; requestAnimationFrame 是一种用于优化动画性能的 JavaScript API。它允许你在浏览器的下一次重绘之…...

SQL Server基础

二. SQL Server数据库 1. 数据库简介 数据库本质是写成磁盘文件&#xff0c;在硬盘中存储用处 存储大量数据&#xff0c;方便检索和访问保持数据信息的一致、完整共享和安全通过组合分析&#xff0c;产生新的有用信息 数据库发展史 萌芽阶段&#xff1a;文件系统&#xff0c;…...

Vue-组件的懒加载,按需加载

在Vue项目中实现组件的懒加载&#xff08;也称为按需加载或代码分割&#xff09;&#xff0c;可以大大提升应用的加载速度和性能。懒加载主要通过Webpack的代码分割功能实现&#xff0c;特别是使用动态导入&#xff08;import()语法&#xff09;。 为什么要使用懒加载&#xf…...

Docker 镜像、容器和 Docker Compose的区别

前言&#xff1a;Docker 的镜像、容器和 Docker Compose 是容器化技术的核心组件&#xff0c;以下是对它们的详细解析及使用场景说明。 ​​1、Docker 镜像&#xff08;Image&#xff09;​​ ​​定义​​&#xff1a; 镜像是只读模板&#xff0c;包含运行应用程序所需的代码、…...

批量创建同名文件夹并整理文件至对应文件夹

在我们的日常工作和生活中&#xff0c;创建文件几乎是必不可少的一部分。随着时间的推移&#xff0c;电脑中积累了大量的文件&#xff0c;管理这些文件成为一项繁琐且耗时的任务。尤其当我们需要按照一定规则对文件进行整理时&#xff0c;很多人会感到困惑。例如&#xff0c;领…...

每日一题——数据中心网络地址规划

文章目录 数据中心网络地址规划问题描述输入格式输出格式示例输入示例输出实现思路1. IP地址转换2. 区间排序3. 动态规划 C语言完整实现&#xff08;含详细注释&#xff09;总结 数据中心网络地址规划 问题描述 你是一名数据中心网络地址规划人员。每个业务需要一段IP地址区间…...

如何远程访问家中服务器-FRP内网穿透详细

💡 本文会带给你 如何远程访问家中服务器FRP自动运行的方法一、准备工作 准备一台具备公网 IP 的服务器(如阿里云、腾讯云等云服务器,要求不高,几十块一年服务的轻型服务就行),用于部署 FRP 服务端(frps)。 家中电脑(内网设备),用于运行 FRP 客户端(frpc)。 下…...

el-select+vue-virtual-scroller解决数据量大卡顿问题

解决el-select中数据量过大时&#xff0c;显示及搜索卡顿问题&#xff0c;及正确的回显默认选中数据 粗略的封装了组件&#xff0c;有需要各种属性自定义的&#xff0c;自己添加设置下 环境 node 16.20.1 npm 8.19.4 vue2、element-ui "vue-virtual-scroller"…...

数码管静态显示一位字符(STC89C52单片机)

#include <reg52.h> sbit ADDR0 P1^0; sbit ADDR1 P1^1; sbit ADDR2 P1^2; sbit ADDR3 P1^3; sbit ENLED P1^4; //用数组来存储数码管的真值表&#xff0c;数组将在下一章详细介绍 unsigned char code LedChar[] { 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82…...

明心见性与真如三昧

在佛教禅宗体系中&#xff0c;明心见性与真如三昧是修行者追求的核心目标。明心见性作为修行的起点&#xff0c;揭示了众生的真如本性&#xff1b;而真如三昧则是巩固和深化这一证悟的关键修行方法。二者相辅相成&#xff0c;构成了禅宗修行的完整路径。 一、明心见性&#xf…...

并发设计模式之双缓冲系统

双缓冲的本质是 ​​通过空间换时间​​&#xff0c;通过冗余的缓冲区解决生产者和消费者的速度差异问题&#xff0c;同时提升系统的并发性和稳定性。 双缓冲的核心优势 优势具体表现解耦生产与消费生产者和消费者可以独立工作&#xff0c;无需直接同步。提高并发性生产者和消…...

使用谷歌浏览器自带功能将网页转换为PDF文件

将自己喜欢的技术网页转换为PDF文件有多种方法&#xff0c;这里介绍使用谷歌浏览器自带功能。 &#xff08;本文截图仅作为演示使用&#xff09; 使用谷歌浏览器自带功能 1.用Chrome浏览器&#xff0c;打开需要转换的网页&#xff0c;点击浏览器右上角的三个点&#xff08;菜…...

JavaEE--2.多线程

1.认识线程(Thread) 1.1概念 1)什么是线程 ⼀个线程就是⼀个 "执行流". 每个线程之间都可以按照顺序执行自己的代码. 多个线程之间 "同时" 执行着多份代码. 2)为什么要有线程 首先, "并发编程" 成为 "刚需". 1. 单核 CPU 的发展遇到…...

沐渥氮气柜控制板温湿度氧含量氮气流量四显智控系统

氮气柜控制板通常用于实时监控和调节柜内环境参数&#xff0c;确保存储物品如电子元件、精密仪器、化学品等&#xff0c;处于低氧、干燥的稳定状态。以下是沐渥氮气柜控制板核心参数的详细介绍及控制逻辑&#xff1a; 一、控制板核心参数显示模块 1&#xff09;‌温度显示‌&am…...

线性代数-矩阵的秩

矩阵的秩&#xff08;Rank&#xff09;是线性代数中的一个重要概念&#xff0c;表示矩阵中线性无关的行&#xff08;或列&#xff09;的最大数量。它反映了矩阵所包含的“有效信息”的维度&#xff0c;是矩阵的核心特征之一。 直观理解 行秩与列秩&#xff1a; 行秩&#xff1…...

【自然语言处理与大模型】模型压缩技术之量化

在这篇文章中想和大家分享什么是量化&#xff1f;为什么要量化&#xff1f;以及如何实现量化&#xff1f;通过这三个基本问题&#xff0c;我们不仅可以全面了解量化的内涵和外延&#xff0c;还能更清晰地认识到它在实践中的重要性和应用价值。 一、什么是量化呢&#xff1f; 大…...

OneClicker脚本自动运行工具

工作的时候&#xff0c;有很多琐碎的事情需要重复的做 比如打开某个文件&#xff0c;打开某个网站&#xff0c;打开某个软件 这个时候可以写个自动脚本&#xff0c;把机械琐碎的事情交给脚本处理 但是脚本一多&#xff0c;不好管理&#xff0c;而且要选择哪个脚本也是个麻烦的事…...

Activity之间交互

Backgroud&#xff1a; 想要实现Activity之间的交互&#xff0c;需要用到intent工具 本博客中所有第二Activity均为SecActivity&#xff0c;需要预先进行创建 本博客所使用的开发语言为Kotlin 使用intent调用Activity 显式调用 val intent Intent(this, SecActivity::class.…...

【React】搜索时高亮被搜索选中的文案

文章目录 代码实现 代码实现 函数封装&#xff1a; export function highlightKeyword(input: string, keyword: string | undefined) {if (!keyword || !input || !input.includes(keyword)) return input;const startIndex input.indexOf(keyword);return React.createEle…...

MCP(Minecraft Coder Pack)完全指南:从入门到精通

1. 什么是MCP&#xff1f; Minecraft Coder Pack&#xff08;简称MCP&#xff09;是一套用于反编译、修改和重新编译Minecraft Java版源代码的工具集。它允许开发者深入研究Minecraft的底层代码&#xff0c;并在此基础上进行模组&#xff08;Mod&#xff09;开发、代码分析或自…...

stm32week12

stm32学习 九.stm32与HAL库 2.HAL库框架 总架构&#xff1a; 文件介绍&#xff1a; ppp是某一外设&#xff0c;ex是拓展功能 HAL库API函数和变量命名规则&#xff1a; HAL库对寄存器位操作的相关宏定义&#xff1a; HAL库的回调函数&#xff1a; 3.STM32启动过程 MDK编译过…...

mindspeed-rl使用注意事项

1、安装 参考1&#xff1a;docs/install_guide.md R1-CLM/MindSpeed-RL - Gitee.com 参考2&#xff1a;VLLM x Ascend框架_vllm-ascend-CSDN博客 2、SFT微调 整体参考docs/supervised_finetune.md 自定义数据格式同&#xff1a;AUTO-DL 910B mindspeed-llm 4层DeepSeek …...

第 4 篇:平稳性 - 时间序列分析的基石

第 4 篇&#xff1a;平稳性 - 时间序列分析的基石 在上一篇中&#xff0c;我们学习了如何将时间序列分解为趋势、季节性和残差。我们看到&#xff0c;很多真实世界的时间序列&#xff08;比如 CO2 浓度&#xff09;都包含明显的趋势&#xff08;长期向上或向下&#xff09;和/…...

KRaft面试思路引导

Kafka实在2.8之后就用KRaft进行集群管理了 Conroller负责选举Leader&#xff0c;同时Controller管理集群元数据状态信息&#xff0c;并将元数据信息同步给各个分区的Leader 和Zookeeper管理一样&#xff0c;会选出一个Broker作为Controller去管理整个集群&#xff0c;但是元数…...

怎么建立自然语言领域的评价标准

怎么建立自然语言领域的评价标准 明确评价目标与对象 首先要清晰界定评价的目标,比如是评估模型对文本语义的理解能力、生成文本的质量,还是系统在信息检索中的表现等。同时,明确评价对象,可能是一个语言模型、一个问答系统、一个机器翻译工具等。确定评价维度与指标 语言…...

EMQX学习笔记

MQTT简介 MQTT是一种基于发布订阅模式的消息传输协议 消息&#xff1a;设备和设备之间传输的数据&#xff0c;或者服务和服务之间传输的数据 协议&#xff1a;传输数据时所遵循的规则 轻量级&#xff1a;MQTT协议占用的请求源较少&#xff0c;数据报文较小 可靠较强&#xff…...

组件是怎样写的(1):虚拟列表-VirtualList

本篇文章是《组件是怎样写的》系列文章的第一篇&#xff0c;该系列文章主要说一下各组件实现的具体逻辑&#xff0c;组件种类取自 element-plus 和 antd 组件库。 每个组件都会有 vue 和 react 两种实现方式&#xff0c;可以点击 https://hhk-png.github.io/components-show/ …...

CGAL 计算直线之间的距离(3D)

文章目录 一、简介二、实现代码三、实现效果一、简介 这里的计算思路很简单: 1、首先将两个三维直线均平移至过原点处,这里两条直线可以构成一个平面normal。 2、如果两个直线平行,那么两条直线之间的距离就转换为直线上一点到另一直线的距离。 3、如果两个直线不平行,则可…...

定期检查滚珠丝杆的频率是多久?

定期检查滚珠丝杆的频率通常是每半年进行一次‌&#xff0c;根据不同的使用环境和设备类型&#xff0c;滚珠丝杆的检查周期有所不同。接下来我们一起看看滚珠丝杆的维护保养方法&#xff1a;‌ 1、‌清洗‌&#xff1a;每隔一段时间对滚珠丝杆进行清洁&#xff0c;将滚珠丝杆拆…...

Spark-SQL连接Hive全攻略

在大数据处理领域&#xff0c;Spark-SQL与Hive的结合能发挥强大的功能。今天就来给大家分享一下Spark-SQL连接Hive的多种方式。 Spark SQL编译时可选择包含Hive支持&#xff0c;这样就能使用Hive表访问、UDF、HQL等特性&#xff0c;而且无需提前安装Hive。其连接方式丰富多样…...