这是一段代码:
#include<iostream>
using namespace std;
class cls
{
int x;
public:
cls(int i=0) {cout<<" c1 "; x=i;}
~cls() {cout<<" d 1 ";}
};
class cls1
{
int x; cls xx;
public:
cls1(int i=0){cout<<" c2 ";x=i;}
~cls1(){cout<<" d2 ";}
}c;
class cls2
{
int x;cls1 xx;cls xxx;
public:
cls2(int i=0) {cout<<" c3 ";x=i;}
~cls2(){ cout<<" d3 ";}
};
int main()
{
cls2 s;
return 0;
}
输出为c1 c2 c1 c2 c1 c3 d3 d1 d2 d1 d2 d1我不明白为什么。 我需要一些帮助。
答案 0 :(得分:0)
我需要一些帮助。
似乎代码的一个目的是混淆。错误的类名,误导性的实例名称等。
抵制混淆的一个想法是找到并练习编码标准。
以下代码是上面的代码,其中包含了我喜欢的编码标准的简单替换。
看看这个,看看你是否可以创建一些你不理解的问题。
注意 - 代码中不会出现“d1”,但会在输出中显示。因此,您的输出不是您发布的代码。我会认为这是一个简单的错字。
#include <chrono>
// 'compressed' chrono access --------------vvvvvvv
typedef std::chrono::high_resolution_clock HRClk_t; // std-chrono-hi-res-clk
typedef HRClk_t::time_point Time_t; // std-chrono-hi-res-clk-time-point
typedef std::chrono::microseconds US_t; // std-chrono-microseconds
using namespace std::chrono_literals; // support suffixes like 100ms, 2s, 30us
// examples:
//
// Time_t start_us = HRClk_t::now();
//
// auto duration_us = std::chrono::duration_cast<US_t>(HRClk_t::now() - start_us);
// auto count_us = duration_us.count();
// or
// std::cout << " complete " << duration_us.count() << " us" << std::endl;
#include <iostream>
// classes are types, so suffix with _t
// do not 'using namespace std;
class Foo_t // was cls
{
int x;
public:
Foo_t(int i=0) {std::cout<<" Foo_t: c1 \n"; x=i;}
~Foo_t() {std::cout<<" ~Foo_t: d1 \n";} // typo fixed
};
class Bar_t // was cls1
{
int x;
Foo_t xx;
public:
Bar_t(int i=0){std::cout<<" Bar_t: c2 \n"; x=i;}
~Bar_t() {std::cout<<" ~Bar_t: d2 \n";}
} bar;
class Zep_t // was cls2
{
int x;
Bar_t xx;
Foo_t xxx;
public:
Zep_t(int i=0) {std::cout<<" Zep_t: c3 \n"; x=i;}
~Zep_t() { std::cout<<" ~Zep_t: d3 \n";}
};
class T490_t
{
public:
T490_t() = default;
~T490_t() = default;
int exec()
{
Zep_t z;
return(0);
}
}; // class T490_t
int main(int , char** )
{
std::cout << "\n main() start\n" << std::endl;
Time_t start_us = HRClk_t::now();
int retVal = -1;
{
T490_t t490;
retVal = t490.exec();
}
auto duration_us = std::chrono::duration_cast<US_t>(HRClk_t::now() - start_us);
std::cout << "\n FINI " << duration_us.count() << " us\n" << std::endl;
return(retVal);
}
输出结果为:
Foo_t: c1
Bar_t: c2
main() start
Foo_t: c1
Bar_t: c2
Foo_t: c1
Zep_t: c3
~Zep_t: d3
~Foo_t: d1
~Bar_t: d2
~Foo_t: d1
FINI 33 us
~Bar_t: d2
~Foo_t: d1
注意如何在main()之前构造Foo_t和Bar_t。
注意那些2 dtors如何在main之后运行(在FINI之后)。
祝你好运。