File: addis.cc

package info (click to toggle)
c%2B%2B-annotations 11.5.0-1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 11,244 kB
  • sloc: cpp: 21,698; makefile: 1,505; ansic: 165; sh: 121; perl: 90
file content (84 lines) | stat: -rw-r--r-- 1,374 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#include <iostream>

using namespace std;

struct VI                               // define the data structure to
{                                       // operate on
    static size_t s_count;
    typedef int value_type;

    VI() = default;

    VI(VI const &other)
    {
        (*this)[0] = other[0];
        cout << "CC, count = " << s_count << '\n';
    }

    VI(VI &&tmp)
    {
        (*this)[0] = tmp[0];
        cout << "MC, count = " << s_count << '\n';
    }

    int d_value = 0;

    size_t size() const
    {
        return 1;
    };

    VI &operator=(VI const &other)
    {
        cout << "op=\n";
        (*this)[0] = other[0];
        return *this;
    }

    VI &operator+=(VI const &other)
    {
        cout << "op+=\n";
        (*this)[0] += other[0];
        return *this;
    }

    int &operator[](size_t idx)
    {
        ++s_count;
        return d_value;
    }

    int const &operator[](size_t idx) const
    {
        ++s_count;
        return d_value;
    }
};

VI operator+(VI const &lhs, VI const &rhs)
{
    cout << "copy +\n";
    VI tmp{lhs};
    tmp += rhs;
    return tmp;
}

VI &&operator+(VI &&tmp, VI const &rhs)
{
    cout << "move +\n";
    tmp += rhs;
    return move(tmp);
}


size_t VI::s_count;


int main()
{
    VI a, b, c, d;

    VI e = a + b  + c + d;

    cout << "# index computations: " << VI::s_count << '\n';
}