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;
    }
  • 相关阅读:
    PyQt 滚动条自动到最底部
    Python 装饰器示例,计算函数或方法执行时间
    pyuic5将.ui文件转为.py文件
    Python pyinstaller 参数
    Win+R 常用命令
    CODEVS 2171 棋盘覆盖
    P3924 康娜的线段树
    P1850 换教室
    U33405 纽约
    POJ
  • 原文地址:https://www.cnblogs.com/lthb/p/6638452.html
Copyright © 2011-2022 走看看