zoukankan      html  css  js  c++  java
  • 关于default constructor一个要注意的地方

    看到“深度探索C++对象模型”中关于default constructor的描述:编译器会按照成员变量的声明次序来对成员变量初始化。突然有个想法:假设类中有两个成员变量A,B,其中A的初始化在需要B事先初始化好,而在声明中,A生命在B之后,这么做编译结果会不会出问题。试了一下,果然如此。代码如下
     1#include <stdio.h>
     2
     3class A
     4{
     5    public:
     6        A(int _n)
     7        {
     8            n=_n;
     9            printf("A %d\n",n);
    10        }

    11        int n;
    12}
    ;
    13
    14class B
    15{
    16    public:
    17        B(A a)
    18        {
    19            printf("B=%d\n",a.n);
    20        }

    21}
    ;
    22
    23class C
    24{
    25    public:
    26        C()
    27        {
    28            printf("C\n");
    29        }

    30}
    ;
    31
    32class ABC
    33{
    34    public:
    35    C c;
    36    B b;
    37    A a;
    38    
    39    ABC():a(1),b(a),c()
    40    {
    41        
    42    }

    43}
    ;
    44
    45void main()
    46{
    47    ABC abc;
    48}

    我本来想让b打印出B=1,结果却并非如此!
    但如果将36,37行换过来,结果就对了!
    对于程序员来讲,这点一定要注意,否则会带来奇怪的结果,而可恶的vc2005编译器竟然没有任何警告出现!
  • 相关阅读:
    complicated用法
    Vue安装并创建一个简单项目
    使用PyCharm创建Django项目及基本配置
    [hackerrank]John and GCD list
    在Web应用程序中执行计划任务(多线程)
    随笔,想了个同步的方案。
    文摘.
    csdn sql 搜索相关帖子。
    Url Rewriting,二级域名,重定向
    杂言
  • 原文地址:https://www.cnblogs.com/cutepig/p/1418191.html
Copyright © 2011-2022 走看看