• 深度探索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;
    }
  • 相关阅读:
    docker.service启动失败:Unit not found
    本地测试环境搭建
    2016 年总结
    node-http-proxy修改响应结果
    JavaScript那些事儿(01): 对象
    Javascript正则表达式
    addEventListener之handleEvent
    《CSS那些事儿》读书笔记
    《编写高质量代码--Web前端开发修炼之道》读书笔记
    Javascript闭包简单理解
  • 原文地址:https://www.cnblogs.com/lthb/p/6638452.html
Copyright © 2020-2023  润新知