Na przykład, jeśli masz programCzy standard C++ gwarantuje, że literały łańcuchowe są przechowywane w programie binarnym w postaci niezafałszowanej?
int main()
{
const char* str = "1111111111111111111111111111111111111111111";
printf("%s", str);
return 0;
}
i skompilować go, jeśli szukać wygenerowany binarny dla „1111111111111111111111111111111111111111111” (pomijając kwestie takie jak kodowanie), jesteś gwarancją go znaleźć, czy jest dopuszczalne jest, aby kompilator generował kod, który na przykład przydziela pamięć sterty, wypełnia ją za pomocą '1 za pomocą pętli, a następnie naprawia wszystkie odwołania do literału, aby wskazać pamięć sterty? (a następnie zapewnia, że zostanie zwolniony w odpowiednim czasie, bla bla)
Wątpię, czy jest jakaś implementacja, która faktycznie to robi ... ale czy to by było zgodne z normami, gdyby tak było?
Nic nie gwarantuje tego. Jedyną rzeczą, która jest standardem (patrzę na roboczą wersję roboczą z 2005 r., Ponieważ nikt nie jest żadnym pieniądzem za podręcznik ...) dyktuje zawartość literałów łańcuchowych (wąskich lub szerokich), ich typ, czas przechowywania , sekwencje specjalne i konkatenacja sąsiednich literałów łańcuchowych. Zobacz [2.13.4 tutaj] (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1905.pdf). –