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

2411C++,学习C++提示4

结构绑定

  auto [first, ...ts] = std::tuple{1, 2 ,3};assert(1 == first);

浮点作为非类型模板参数

template<double Value> constexpr auto value = Value;int main() {std::cout << value<4.2>; // prints 4.2
}
template<double... Vl1s, double... Vl2s>
[[nodiscard]] consteval auto calc(values<Vl1s...>, values<Vl2s...>) {constexpr auto mul = (Vl2s * ...);return ((Vl1s * mul) + ...);
}
template <double... List1, double... List2>
[[nodiscard]] consteval auto calc(values<List1...>, values<List2...>) {return (0 + ... + (List1 * (1 * ... * List2)));
}
template<double... Values> struct values {};template<double... Vl1s, double... Vl2s>
[[nodiscard]] consteval auto calc(values<Vl1s...>, values<Vl2s...>) {return ((Vl1s * (Vl2s * ...)) + ...);
}template<double Epsilon = 0.1>
[[nodiscard]] consteval auto eq(double a, double b) {return std::fabs(a - b) < Epsilon;
}
template<double... Values> struct values {};template<double... Vl1s, double... Vl2s>
[[nodiscard]] consteval auto calc(values<Vl1s...>, values<Vl2s...>) {constexpr auto c = (Vl2s * ...);return ((Vl1s * c) + ...);
}template<double Epsilon = 0.1>
[[nodiscard]] consteval auto eq(double a, double b) {return std::fabs(a - b) < Epsilon;
}
template<double... Values> struct values {};template<double... Vl1s, double... Vl2s>
[[nodiscard]] consteval auto calc(values<Vl1s...>, values<Vl2s...>) {return (Vl1s + ...) * (Vl2s * ...);
}template<double Epsilon = 0.1>
[[nodiscard]] consteval auto eq(double a, double b) {return std::fabs(a - b) < Epsilon;
}
template<double... Values> struct values{};template<double Vl1, double... Vl2s>
[[nodiscard]] consteval auto mult(){return  (Vl1 * ... * Vl2s);
}template<double... Vl1s, double... Vl2s>
[[nodiscard]] consteval auto calc(values<Vl1s...>, values<Vl2s...>){return (... + mult<Vl1s, Vl2s...>());
}template<double Epsilon = 0.1>
[[nodiscard]] consteval auto eq(double a, double b) {return std::fabs(a - b) < Epsilon;
}
template<double... Values> struct values {};template<double... Vl1s, double... Vl2s>
[[nodiscard]] consteval auto calc(values<Vl1s...>, values<Vl2s...>){return (0.0 + ... + (Vl1s * (Vl2s * ... )));
}template<double Epsilon = 0.1>
[[nodiscard]] consteval auto eq(double a, double b) {return std::fabs(a - b) < Epsilon;
}

不可达

#include <utility>int main() {std::unreachable();return 42; // invokes undefined behavior
}

抑制ADL

namespace adl {struct foo {};void bar(foo) {}
}int main() {adl::foo foo;bar(foo);   // OK,    ADL(bar)(foo); // error: no ADL
}

交换字节

#include <bit>int main() {constexpr auto value = std::uint16_t(0xCAFE);std::cout << std::hex << value; // pritns cafestd::cout << std::hex << std::byteswap(value); // prints feca
}

行多态

struct foo {int a{};int b{};
};struct bar {int a{};
};struct missing_a {int b{};
};struct row_with_member_a {constexpr explicit(false) row_with_member_a(const auto& t): a{t.a}{ }int a{};
};auto shrink(row_with_member_a r) {std::cout << r.a;
}int main() {//shrink(missing_a{.b = 42}); // errorshrink(foo{.a = 4, .b = 2}); // prints 4shrink(bar{.a = 42}); // prints 42
}

多维数组

template <class T, auto Dimensions> class mdarray2 {
public:template <class I1, class I2> constexpr T &operator[](I1 i1, I2 i2) {return vs_[i1][i2];}private:std::array<std::array<T, 2>, Dimensions> vs_{};
};int main() {mdarray2<int, 2> a{};a[1, 1] = 42;assert(0 == (a[0, 0]));assert(42 == (a[1, 1]));
}

基于策略的设计

template<class TPolicy>
struct foo : TPolicy {static constexpr auto bar() {return TPolicy::bar();}
};template<auto N>
struct policy { static constexpr auto bar() { return N; } };static_assert(0 == foo<policy<0>>::bar());
static_assert(42 == foo<policy<42>>::bar());
http://www.lryc.cn/news/493707.html

相关文章:

  • STM32-- 看门狗--介绍、使用场景、失效场景
  • 【赵渝强老师】PostgreSQL的数据库
  • linux安全管理-会话安全
  • Ubuntu监视显卡占用情况
  • 学成在线day06
  • Mac安装及合规无限使用Beyond Compare
  • 【青牛科技】2K02 电动工具专用调速电路芯片描述
  • 基于SpringBoot实现的民宿管理系统(代码+论文)
  • 安装QT6.8(MSVC MinGW)+QT webengine+QT5.15.2
  • MinIO常见操作及Python实现对象的增删改查
  • 网络编程中的字节序函数htonl()、htons()、ntohl()和ntohs()
  • 【dvwa靶场:File Upload系列】File Upload低-中-高级别,通关啦
  • RHCE NFS
  • 【数据结构】ArrayList与顺序表
  • 互联网基础
  • ffmpeg.js视频播放(转换)
  • 后端 Java发送邮件 JavaMail 模版 20241128测试可用
  • 电脑中的vcruntime140_1.dll文件有问题要怎么解决?一键修复vcruntime140_1.dll
  • 探索 Vue 3.0中Treeshaking特性?
  • Paddle Inference部署推理(十)
  • 万能门店小程序管理系统 doPageGetFormList SQL注入漏洞复现
  • 全面+彻底解决VMware安装后没有VMnet1和VMnet8的问题
  • 什么是堆?
  • 微距动物和植物摄影后期森系风格Lr调色教程,手机滤镜PS+Lightroom预设下载!
  • Qt6.8安卓Android开发环境配置
  • RK3568部署yolo8记录
  • 数据可视化复习2-绘制折线图+条形图(叠加条形图,并列条形图,水平条形图)+ 饼状图 + 直方图
  • JavaScript原生深拷贝方法 structuredClone使用
  • SpringBoot无法使用jkd8问题
  • 使用 Jina Embeddings v2 在 Elasticsearch 中进行后期分块