C++: decltype作用于类/结构体对像成员时decltype(obj.a) 和 decltype((obj.a))的区别
-
decltype(obj.a): 取到是类成员声明/定义类型
decltype((obj.a)): 取到是 (obj.a) 这个表达式类型, 受对象本身限定符影响: 一般是 T& 或 当对像为const成员类型为非const时一取const T&注: obj是一个左值情况下
#include <iostream> #include <string> #include <type_traits> using std::string; struct Bar { const int m_a; double m_b; Bar() : m_a(1), m_b(2.0) {} }; int main() { const Bar obj; std::cout << std::is_same_v<decltype(obj), const Bar> << std::endl; std::cout << std::is_same_v<decltype((obj)), const Bar&> << std::endl; std::cout << std::is_same_v<decltype(obj.m_a), const int> << std::endl; std::cout << std::is_same_v<decltype((obj.m_a)), const int&> << std::endl; std::cout << std::is_same_v<decltype(obj.m_b), double> << std::endl; std::cout << std::is_same_v<decltype((obj.m_b)), const double&> << std::endl; return 0; }
- 代码来自视频评论区: https://www.bilibili.com/video/BV1xkdYYUEyH
-
S sunrisepeak 从 General Discussion | 综合讨论 移动了该主题