Miért ír warning-ot az 57 dik sorban? //C++
//main.cpp
# include <iostream>
# include <stdlib.h>
typedef unsigned short ushort;
typedef unsigned int uint;
using std::cout;
using std::cin;
using std::endl;
class Counter
{
public:
Counter(int x); //Konstruktor
Counter(const Counter &); //Másoló konstruktor
~Counter(); //Destruktor
void increment(); //increment
const Counter& operator++ (); //prefix
const Counter operator++ (int); //postfix
void SetVal(int x); //SetVal
int GetVal()const; //GetVal
private:
int *itsVal;
};
//konst,copy konst,destr,
Counter::Counter(int x):
itsVal(new int(x))
{cout <<"Konstruktor \n";}
Counter::Counter(const Counter &rhs)
{
cout <<"Copy konstruktor \n";
itsVal = new int;
*itsVal = rhs.GetVal();
}
Counter::~Counter()
{
cout <<"Destruktor \n";
delete itsVal;
itsVal = NULL;
}
//operator++
const Counter& Counter::operator++ ()
{
++*itsVal;
return *this;
}
const Counter Counter::operator++ (int)
{
*itsVal++; //ez a 57-dik sor.
return *this;
}
//Metódus
void Counter::SetVal(int x)
{*itsVal = x;}
int Counter::GetVal()const
{return *itsVal;}
void Counter::increment()
{++*itsVal;}
//main kezdõdik
int main()
{
Counter i(1);
cout <<"i erteke: "<< i.GetVal() << endl;
++i;
cout <<"i erteke: "<< i.GetVal() << endl;
return EXIT_SUCCESS;
}
//C:\Users\ALWAYS_WINS\Desktop\Code Blocks mentesek\Practice_5\main.cpp|57|warning: value computed is not used [-Wunused-value]|
Azt mondjátok meg,hogy az operator++ (int) függvényben miért nem lehet így *itsval++; ha így csinálom akkor warningot ír.
Miért kell így lennie ++*itsVal; ha postfix-ről van szó?
Hát nem volna egyértelműbb ha így írnám:*itsVal++;
Kis fejtágítás.
A prefix ++ operátor azt csinálja, hogy megnöveli a változó értékét, a kifejezés értéke pedig az új érték lesz.
A postfix ++ operátor pedig megnöveli a változó értékét, és a RÉGI érték lesz a kifejezés értéke. Azaz itt KÉT értéked létezik egyszerre, az új a változóban, és a régi egy átmeneti változóban, míg az elsőnél (a prefixnél) nincs temporális.
Tehát létrejön egy int, amit nem használsz, erre jön a warning.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!