- 主题:用了一下std::visit,被人说太深奥了
赞,整整四十年
【 在 ylh0315 的大作中提到: 】
: 1982年毕业,在铁路工作,货运自动化。
: 搞了七八种语言,没有适用的。
: 83年找到了C语言,如同孙悟空找到金箍棒,合手。时过境迁,现在落伍了。
--
FROM 114.249.28.*
哈哈哈,没自己装几个车皮,问货主要点回扣?
【 在 ylh0315 的大作中提到: 】
: 第一届的好处是,到单位,就是骨干。
: 我们单位是铁道部货运自动化的试点单位。原来的都是货运专业,自动化专业和电气化专业的,计算机专业我是第一个,后来有一些,都是小弟弟。主要两个项目,集装箱管理,由铁科院牵头。货票管理(包括集装箱制票和整车零担制票),实际上我牵头。用什么软件工具,开发进度,经费的使用和计划,都是我做。
--
FROM 114.249.28.*
唉,好多人就靠这个发财呢
【 在 ylh0315 的大作中提到: 】
: 我也想说这个问题。一个是,我们属于内务,不接触顾客。一个是,新来乍到,没有人脉。至于刚到单位不足1年就接触预算问题,因为根底浅,而且我做预算的,不是审批预算的,而且这个预算是在各级领导和全体员工眼皮子底下,跟厂商谈合同都是好多人在,领导拍板,没我啥事,我就管提供各种数据,没法腐败。
--
FROM 114.249.28.*
最近用了variant,太爽了
不理解为啥说这个难
c++之父就建议用variant代替union
【 在 z16166 的大作中提到: 】
: 用std::visit访问std::variant。std::variant里的类型以后极可能会扩展。
: 然后有人说深奥了,问我能不能搞点简单的,别搞这种“复杂的”。
--
FROM 114.249.28.*
主要区别
类型安全:std::variant 提供类型安全,而 union 不提供。
内存管理:std::variant 管理哪种类型当前被存储,而 union 需要程序员手动管理。
使用方便:std::variant 提供了更现代、更方便的接口,包括访问控制、类型安全检查等。
性能开销:由于额外的类型安全和类型跟踪,std::variant 在某些情况下可能比 union 有更多的性能开销。
总的来说,std::variant 是对传统 union 的现代、类型安全的替代,适用于需要类型安全和灵活性的场景。而 union 则更适用于那些对内存使用和性能有严格要求的低级编程场景。
【 在 mango7788 的大作中提到: 】
: 这货和 union 究竟有啥不同。。。
--
FROM 114.249.28.*
应该没有,主要就是类型吧
【 在 iconquer 的大作中提到: 】
: 有没有deep copy一个 struct 或者 union的功能?
:
--
FROM 114.249.28.*
不会有差异,感觉主要是方便了模板元编程吧
【 在 mango7788 的大作中提到: 】
: 不就是编译器提供了一个type嘛。我猜性能应该也没多大差异。
: 类型安全:std::variant 提供类型安全,而 union 不提供。
: 内存管理:std::variant...
--
修改:gfkid FROM 114.249.28.*
FROM 114.249.28.*
别逗
核心是模板元编程,二十年前c++11还没有呢
【 在 hgoldfish 的大作中提到: 】
: 所以应该早点用 Qt 当标准库啊。这些东东都是 Qt 20 年前就有的。
:
--
FROM 114.249.28.*
`QVariant` 和 `std::variant` 是两种不同的类,它们都提供了在同一变量中存储不同类型值的能力,但它们的设计理念、功能特性和使用场景有所不同。下面是这两者的主要区别:
### `QVariant`(Qt 框架)
`QVariant` 是Qt框架的一部分,是一种通用类型容器类。它可以保存Qt中的基本类型和用户自定义类型,并且广泛用于Qt框架中,尤其是在与Qt的元对象系统(包括信号和槽机制)交互时。
1. **类型支持**:`QVariant` 支持所有内置的Qt类型以及任何使用 `Q_DECLARE_METATYPE` 宏声明的自定义类型。
2. **运行时类型信息**:`QVariant` 存储类型信息,并在运行时进行类型转换和检查。
3. **与Qt集成**:`QVariant` 与Qt的元对象系统深度集成,使其适合用于Qt的事件系统、属性系统、数据模型等。
4. **灵活性**:`QVariant` 在处理未知类型、动态类型转换和与QML等技术的交互方面更为灵活。
### `std::variant`(C++标准库)
`std::variant` 是C++17中引入的一种类型安全的联合体,可以存储并操作预定义类型中的一种。在C++20中,它提供了更多的功能和更好的性能。
1. **类型安全**:`std::variant` 是类型安全的,访问错误的类型时会抛出异常。
2. **编译时类型信息**:`std::variant` 的类型列表在编译时就已确定,不支持运行时的类型变更。
3. **标准C++**:作为C++标准库的一部分,`std::variant` 与标准C++的其他部分(如标准模板库)良好集成。
4. **性能**:通常`std::variant`性能较高,因为它的类型信息和行为在编译时就已经确定。
### 主要区别
- **集成与兼容性**:`QVariant` 专为Qt设计,与Qt框架紧密集成;`std::variant` 是标准C++库的一部分,与标准C++兼容。
- **类型信息**:`QVariant` 在运行时处理类型信息,而 `std::variant` 的类型在编译时就已确定。
- **类型安全**:`std::variant` 提供了更强的类型安全保证,尽管 `QVariant` 也提供了类型检查和转换的机制。
- **用途**:`QVariant` 更适合与Qt框架一起使用,尤其是在涉及动态类型和Qt的元对象系统时;而 `std::variant` 更适用于需要编译时类型安全和与标准C++库集成的场景。
总的来说,选择使用 `QVariant` 还是 `std::variant` 主要取决于你的项目是否使用Qt,以及你对类型安全和性能的需求。
【 在 hgoldfish 的大作中提到: 】
: 很简单啊。用 toInt() 这样的写法就能解决了。内部也无非是一个 void* 指针加上一个 typeid 就齐活了。你可以查一下,QVariant 是 Qt 的 signal/slot 核心,出现在最早期版本的 Qt 里面。
: 当然,现代的 QVariant 也用了模板元编程。所以 Qt 现在可牛逼了,可以动态地根据 typeid 来申请内存并构造对象。
:
--
FROM 114.249.28.*
gpt4
【 在 lwp 的大作中提到: 】
: 这是chatgpt输出的吧
:
--
FROM 114.249.28.*