У меня есть следующая проблема, когда вывод в отладке, кажется, полностью игнорирует то, что говорит код, и кажется, что это может быть ошибкой в компиляторе, если я что-то упустил.
Так воткод, он должен создать две строки имени файла и удалить один из файлов.
auto *real = (base_dir + "/index.txt").c_str();
auto *bkp = (base_dir + "/index.txt.new").c_str();
remove(real);
Однако на практике это не проявляется, и в действительности мы получаем следующее в gdb:
auto *real = (base_dir + "/index.txt").c_str();
(gdb) n
auto *bkp = (base_dir + "/index.txt.new").c_str();
(gdb) n
remove(real);
(gdb) p real
$1 = 0x7060e8 "./ss-clientdir/index.txt.new"
(gdb) p bkp
$2 = 0x7060e8 "./ss-clientdir/index.txt.new"
Итак, как вы можете видеть, несмотря на инициализацию строк с использованием двух разных выражений с разными строковыми литералами, после инициализации они заканчиваются тем же указателем на одну и ту же строку.
Это какой-то компилятороптимизация сошла с рельсов или как?