跳转至内容
  • 版块
  • 最新
  • 标签
  • 热门
  • Online Tools
  • 用户
  • 群组
折叠
品牌标识

D2Learn Forums

  1. 主页
  2. Open Courses | 公开课
  3. mcpp-standard | 现代C++核心特性练习
  4. C++: decltype作用于类/结构体对像成员时decltype(obj.a) 和 decltype((obj.a))的区别

C++: decltype作用于类/结构体对像成员时decltype(obj.a) 和 decltype((obj.a))的区别

已定时 已固定 已锁定 已移动 mcpp-standard | 现代C++核心特性练习
c++decltype类型c++语言特性mcpp-standard
2 帖子 1 发布者 26 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • SPeakS 离线
    SPeakS 离线
    SPeak d2learn-dev
    编写于 最后由 SPeak 编辑
    #1

    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;
    }
    
    

    2c171093-6a01-4818-abbb-1b7b0e7eb6a2-image.png

    • 代码来自视频评论区: https://www.bilibili.com/video/BV1xkdYYUEyH
    1 条回复 最后回复
    0
    • SPeakS 离线
      SPeakS 离线
      SPeak d2learn-dev
      编写于 最后由 编辑
      #2

      https://en.cppreference.com/w/cpp/language/decltype

      image.png

      1 条回复 最后回复
      0
      • sunrisepeakS sunrisepeak 从 General Discussion | 综合讨论 移动了该主题

      • 登录

      • 登录或注册以进行搜索。
      d2learn forums Powered by NodeBB
      • 第一个帖子
        最后一个帖子
      0
      • 版块
      • 最新
      • 标签
      • 热门
      • Online Tools
      • 用户
      • 群组