-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmutable.tex
70 lines (56 loc) · 1.28 KB
/
mutable.tex
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
\subsection{mutable}
\begin{frame}[fragile]{const aushebeln}
\begin{block}{mutable}
\begin{small}
\begin{lstlisting}[language=C++]
class MyClass
{
private:
mutable unsigned int m_uCounter;
public:
unsigned int getCounter() const
{
return this->m_uCounter;
}
int compute(int value) const
{
m_uCounter++;
return value*42;
}
};
\end{lstlisting}
\end{small}
\end{block}
\end{frame}
\subsection{const cast}
\begin{frame}[fragile]{const aushebeln}
\begin{block}{mutable}
\begin{small}
\begin{lstlisting}[language=C++]
MyClass test;
const MyClass& const_test = test;
std::cout << test.compute(1) << std::endl;
std::cout << test.compute(-3) << std::endl;
std::cout << const_test.compute(-5) << std::endl;
std::cout << test.getCounter() << std::endl; // gibt 3 aus
\end{lstlisting}
\end{small}
\end{block}
\end{frame}
\begin{frame}[fragile]{const aushebeln}
\begin{block}{mutable}
\begin{small}
\begin{lstlisting}[language=C++]
void bad_function(const int& const_ref)
{
const_ref++; // kompiliert nicht
int& ref = const_cast<int&>(const_ref);
ref++; // kompiliert
}
int original = 5;
bad_function(original);
std::cout << original << std::endl; // gibt 6 aus
\end{lstlisting}
\end{small}
\end{block}
\end{frame}