Předání parametru referencí v C++ – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Předání parametru referencí v C++ – C / C++ – Fórum – Programujte.comPředání parametru referencí v C++ – C / C++ – Fórum – Programujte.com

 

Lukáš V.
~ Anonymní uživatel
3 příspěvky
14. 4. 2014   #1
-
0
-

Ahoj všem,

  narazil jsem na problém s předáváním parametru pomocí reference (&), například při přetížení operátoru plus. Je nějaký jednoduchý způsob jak udělat něco jako: Decimal d = d + Decimal(0) ? Vše funguje pokud bych předtím vytvořil proměnnou Decimal d_nula, a dal pak Decimal d = d + d_nula. 

Nahlásit jako SPAM
IP: 80.250.10.–
KIIV
~ Moderátor
+43
God of flame
14. 4. 2014   #2
-
0
-

no u standardu c++11 by melo jit pouzit move semantiku, ale bude to asi chtit ponekud vicero verzi ...

neco jako    (&, &&)  (&&, &) a (&&, &&)   a pokud nemas novejsi standard, tak jedine kombinace s kopii hodnoty 

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
z
~ Anonymní uživatel
268 příspěvků
14. 4. 2014   #3
-
0
-

Takže to sčítání vlastně funguje. Jen ne takhle. Co to hlásí? Máš definovaný ten konstruktor?

Nahlásit jako SPAM
IP: 78.156.159.–
Lukáš V.
~ Anonymní uživatel
3 příspěvky
15. 4. 2014   #4
-
0
-

Hlásí to že to: no match for operator + .... candidates are ... a ten operátor, ale s ampersandem.. Když mám Decimal operator+(Decimal &d) tak musím proměnnou mít pojmenovanou předem, nemůžu to dát přímo jako Decimal d = d + Decimal(0)

Ale máme tu starší standard, takže děkuji KIIV -- pravděpodobně opravdu budu muset udělat různé verze.

Nahlásit jako SPAM
IP: 80.250.10.–
z
~ Anonymní uživatel
268 příspěvků
15. 4. 2014   #5
-
0
-

Leda prdlačky.

class Decimal
{
	int val;
public:
	Decimal(int v = 0) : val(0) {}
	Decimal operator + (const Decimal & d) const { return Decimal(val + d.val); }
};

Decimal d = d + Decimal(4);
Decimal e = d + 8;
Nahlásit jako SPAM
IP: 78.156.159.–
z
~ Anonymní uživatel
268 příspěvků
15. 4. 2014   #6
-
0
-

Teď jde jen o to, kde máme rozdíl, což se zřejmě nedozvíme.

Nahlásit jako SPAM
IP: 78.156.159.–
Lukáš V.
~ Anonymní uživatel
3 příspěvky
15. 4. 2014   #7
-
0
-

Ale dozvíme ... Spíše tak náhodou jsem se dopátral jak to je, a sice v části "Const correctness" tohoto článku:

      http://www.cplusplus.com/…es/y8hv0pDG/

Jde o ty const, neměl jsem je tam, protože mi nepřišly z tohoto pohledu důležité. Souvisí to s tím, se ve zkoumaných případech pracuje z dočasnou proměnnou a když tam není const tak si to nerozumí.

Nahlásit jako SPAM
IP: 80.250.10.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 111 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý