随笔分类 -  C/C++

摘要:科学计算当中会用到不少浮点数的操作,这些浮点数可能是16位,32位,64位,80位甚至是128位。开源项目SoftFloat提供了一个高效的浮点运算实现,可以在没有硬件支持的情况下,高效模拟浮点数的各种操作。 那么,浮点数之间的比较,基本运算这些究竟是怎么实现的呢,可以拿32位浮点数作为例子。 这是 阅读全文
posted @ 2024-08-28 15:48 ChebyshevTST 阅读(398) 评论(0) 推荐(1) 编辑
摘要:说起模板元编程,估计不少人的第一反应都是充斥着各种递归的奇技淫巧,没错,这次我们就来对模板元这种屠龙之术进行初步窥探,看看能玩出什么花样出来。 小试牛刀 template <typename _Tp, typename... args> struct get_size { static conste 阅读全文
posted @ 2024-01-04 16:08 ChebyshevTST 阅读(239) 评论(0) 推荐(2) 编辑
摘要:C++作为一门静态类型语言,是需要程序员声明变量类型的。然而来到了C++11,auto的诞生使得变量声明变得及为方便,尤其是对于比较长的模板类型,auto一定程度上为代码编写者减轻了负担。到了C++23,突然来了个新特性:auto{x}/auto(x),这又是个什么东西,它的motivation又是 阅读全文
posted @ 2023-12-28 20:49 ChebyshevTST 阅读(341) 评论(2) 推荐(3) 编辑
摘要:在此之前,先来回顾元编程当中的一个重要概念。 template<typename _Tp, _Tp __v> struct integral_constant { static constexpr _Tp value = __v; typedef _Tp value_type; typedef in 阅读全文
posted @ 2023-12-09 17:20 ChebyshevTST 阅读(158) 评论(0) 推荐(2) 编辑
摘要:Generic Types of Ranges 类型萃取从字面意思上来说其实就是帮助我们挑选某个对象的类型,筛选特定的对象来做特定的事。可以先来回顾一下以前的写法。 #include <vector> #include <iterator> int main() { std::vector v{1, 阅读全文
posted @ 2023-12-02 20:45 ChebyshevTST 阅读(98) 评论(0) 推荐(0) 编辑
摘要:using for Enumeration Values 对比一下C++20前后的区别: enum class State { open, progress, done = 9 }; // Before C++20 void print(State s) { switch (s) { case St 阅读全文
posted @ 2023-11-30 21:22 ChebyshevTST 阅读(290) 评论(1) 推荐(0) 编辑
摘要:C++11起,引入了基于范围的for循环这一特性,有什么好处呢?它有时可以大大地简化遍历容器的操作,比如说STL的vector。 std::vector v{1, 2, 3}; std::vector<int>::iterator it = begin(v); for (; it != end(v) 阅读全文
posted @ 2023-11-07 21:36 ChebyshevTST 阅读(521) 评论(0) 推荐(1) 编辑
摘要:设计一个不能被using的对象 在实际开发中为了避免命名空间污染,一般都不会using namespace std。但是如果一个对象写起来比较复杂,用using能大幅度地简化操作。现在假设我们要设计一个函数,它在一个作用域里面,使用它只能以A::B::C()这种形式。思考一下,如果我们放在命名空间下 阅读全文
posted @ 2023-09-26 20:01 ChebyshevTST 阅读(195) 评论(0) 推荐(0) 编辑
摘要:假如我有一个需求,就是如果传入的参数是int类型,我就输出int类型,否则就输出T。很显然,根据模板的基础知识,我们可以这么写 template <class T> void f(T) { std::cout << "T\n"; } template <> void f(int) { std::co 阅读全文
posted @ 2023-09-21 10:40 ChebyshevTST 阅读(56) 评论(0) 推荐(0) 编辑
摘要:注释掉的为传统的写法,从C++20起支持default关键字修饰的写法,即使是成员变量有多个的时候也支持,减轻了程序员的心智负担。 阅读全文
posted @ 2023-09-16 16:38 ChebyshevTST 阅读(24) 评论(0) 推荐(0) 编辑
摘要:#include <iostream> #include <vector> #include <numeric> #include <sstream> int main() { std::vector v{1, 2, 3, 4, 5}; std::copy(begin(v), end(v), std 阅读全文
posted @ 2023-09-05 10:50 ChebyshevTST 阅读(22) 评论(0) 推荐(0) 编辑
摘要:以下代码为修改vector内部的每一个元素,使其每个元素大小变为原来的平方。 std::vector v1{1, 2, 4, 2}; std::for_each(begin(v1), end(v1), [](auto& n) { return n * n; }); for (const auto& 阅读全文
posted @ 2023-09-03 10:53 ChebyshevTST 阅读(32) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示