В общем, поскольку результат test :: get является «чистым значением», компилятору разрешается пропускать свою инициализацию, если он не привязан к значению l (например, Percentage &&). Поэтому, чтобы увидеть содержимое чистого значения, вы должны сохранить его в переменной Percentage &&, которая «материализует» значение и продлевает время жизни возвращаемого временного значения.
Разница между этими двумя случаями, по-видимому, существует в исполняемом файле (ничего не связанного с GDB): из разборки исполняемого файла видно в двух случаях, что "test :: get" различается, а если мы компилируем с оптимизацией на (-O3) сгенерированная сборка совпадает.
Дело 0:
Percentage get() { return m_p; }
4009f0: 55 push %rbp
4009f1: 48 89 e5 mov %rsp,%rbp
4009f4: 48 89 7d f0 mov %rdi,-0x10(%rbp)
4009f8: 48 8b 7d f0 mov -0x10(%rbp),%rdi
4009fc: 48 8b 3f mov (%rdi),%rdi
4009ff: 48 89 7d f8 mov %rdi,-0x8(%rbp)
400a03: f2 0f 10 45 f8 movsd -0x8(%rbp),%xmm0
400a08: 5d pop %rbp
400a09: c3 retq
400a0a: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1)
Дело 1:
Percentage get() { return m_p; }
4009f0: 55 push %rbp
4009f1: 48 89 e5 mov %rsp,%rbp
4009f4: 48 83 ec 10 sub $0x10,%rsp
4009f8: 48 89 f8 mov %rdi,%rax
4009fb: 48 89 75 f8 mov %rsi,-0x8(%rbp)
4009ff: 48 8b 75 f8 mov -0x8(%rbp),%rsi
400a03: 48 89 45 f0 mov %rax,-0x10(%rbp)
400a07: e8 54 00 00 00 callq 400a60 <_ZN10PercentageC2ERKS_>
400a0c: 48 8b 45 f0 mov -0x10(%rbp),%rax
400a10: 48 83 c4 10 add $0x10,%rsp
400a14: 5d pop %rbp
400a15: c3 retq
400a16: 66 2e 0f 1f 84 00 00 nopw %cs:0x0(%rax,%rax,1)
400a1d: 00 00 00
Поскольку вы вызываете test :: get из GDB, в этом случае вы не просто печатаете значение в памяти, вы выполняете строки выше. Вы видите, что есть вызов конструктора копирования Percentage, и возвращение test :: get, похоже, находится в регистре rax, хотя кажется, что в первом фрагменте неявный конструктор встроен, а возвращаемое значение сохраняется в регистр с плавающей запятой xmm0.
Я не знаю, почему это различие (может быть, кто-то специалист по сборке может добавить некоторое понимание), но я подозреваю, что именно поэтому GDB запутывается.