zoukankan      html  css  js  c++  java
  • 深度探索c++对象模型读书笔记:Data语意学-Data Member的绑定

    一个inline函数实体,在整个class声明未被完全看见之前,是不会被评估求值(evaluated)的,也就是说,对于如下代码:

     1 extern int x;
     2 
     3 class A
     4 {
     5 public:
     6     ...
     7     //对于函数本体的分析将延迟,直至class申明的}出现时才开始。
     8     float X() const { return x; }
     9     ...
    10 private:
    11     float x;
    12     ...
    13 }
    14 //这儿进行该函数的分析,所以此时用到的x不是全局变量x而是class A中的成员x

    但是,member function的argument list并不为真。Argument list中的名称还是在它们第一次遭遇时被适当的决议(resolved)完成。下面的程序中,length的类型在两个member function signatures中都被决议(resolved)为global typedef,也就是int。当后续再有length的nested typedef声明出现时,c++标准就把稍早的绑定标志为非法(最后一局没大听懂):

    #include <bits/stdc++.h>
    using namespace std;
    
    typedef int length;
    
    class A
    {
        typedef double length;//如果在这儿声明,那么就没问题。
    public:
        void mumble(length val = 1){
            printf("%lf
    ", val);
        }
    private:
        //typedef double length;如果在这儿声明的,那么mumble函数中length会被决议为int
    };
    int main()
    {
        A a;
        a.mumble();
            return 0;
    }
  • 相关阅读:
    今天不谈技术,谈感情~
    外派金融公司
    OAuth2-简介
    Zookeeper实战-分布式锁
    Zookeeper-基础
    Minio-对象存储
    Redis实战-BloomFilter
    Redis实战-详细配置-优雅的使用Redis注解/RedisTemplate
    Redis-基础
    SpringBoot-表单验证-统一异常处理-自定义验证信息源
  • 原文地址:https://www.cnblogs.com/lthb/p/6638452.html
Copyright © 2011-2022 走看看