Portál AbcLinuxu, 26. října 2025 02:01
virtual const char* getText() const
{
const char *name = "text";
return name;
};
Tento už je asi lepší (nebo ne?)
virtual void getText(std::string &name) const
{
name = "text";
};
ale mě by zajímalo jak se takové věci dělají obecně „správně“.
Řešení dotazu:
#include <stdio.h>
void x() { const char *abc = "abc"; printf("x: %p/%p\n", &abc, abc); }
void y() { x(); const char *abc = "abc"; printf("y: %p/%p\n", &abc, abc); }
void z() { y(); const char *abc = "abc"; printf("z: %p/%p\n", &abc, abc); }
int main()
{
z();
return 0;
}
To by Vás mělo přesvědčit, že tohle..
virtual const char* getText() const
{
return "text";
};
..je v naprostém pořádku
A kde je problém? Veď tá funkcia vracia const char*, čiže pointer na konštantné pole znakov. (aj keď, dá sa to obísť pomocou const_cast)
A prečo nepoužijete návratový typ const std::string (hodnota, nie referencia)? std::string sa riadi zásadou copy-on-write, čiže samotné vytvorenie kópie je lacné, akurát sa možno zbytočne pracuje s počítadlom odkazov.
#include <iostream>
const char* getText() { return "Text"; }
int main()
{
std::cout << getText() << std::endl;
char *ch = (char *) getText();
ch[0] = 't';
std::cout << getText() << std::endl;
return 0;
}
... že to skončí s Segmentation fault, je jiná záležitost.const char *z důvodů:
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.