Mastering Placeholder Type Deduction
本篇可以结合 Left-to-Right vs. Right-to-Left Coding Styles 阅读,属于同一主题。本篇侧重于讲解具体的类型推导规则。 Decltype Specifier 在静态类型语言中,一个变量需要由类型说明符指定,而随着 C++ 的发展,类型也可以从表达式推导出来,不必显式写出。 一切始于 C++11 decltype(E),Decltype 也属于说明符,接受一个表达式参数。也可以传入一个变量,因为变量名属于 id-expressions,也是表达式。 这里的核心在于,表达式其实包含三部分信息:type, value, 和 value category。使用 Decltype 推导出的表达式结果与原类型的信息并不总是相同,这种不一样的依据就是类型推导规则。 Decltype 的推导规则需要分为两种情况讨论,E 和 (E),也就是说,多加一个括号将改变推导规则。 先来看第一种,E 的情况。 如果 E 是 id-expressions 或者类成员名称访问,此时推导结果的 type 和 value 都和 E 所对应的实体相同,但是不会保留原有的 value category。 int a = 42; static_assert(std::is_same_v<decltype(a), int>); std::println("lvalue:… Continue Reading Mastering Placeholder Type Deduction