Все основные компиляторы (gcc, clang, msvc, icc) жалуются на то, что \d
является нераспознанной escape-последовательностью по умолчанию (т.е. предупреждение включено по умолчанию во всех из них, по крайней мере, в их последних версиях).
Все они обрабатывают \d
, как если бы вы просто набрали d
.
Следовательно, в вашем случае конечная строка будет "d"
, что, в свою очередь, является действительнымрегулярное выражение, и оно действительно соответствует "abc123 def"
, потому что там есть d
.
Обратите внимание, что это не имеет ничего общего с Qt: оно не анализирует C ++ и не может пожаловаться на escape-последовательности;это работа компилятора.Qt видит любую строку, которую компилятор в итоге построил из исходного кода.
Чтобы избежать подобных проблем, пожалуйста, не игнорируйте предупреждения (и включите их снова, если вы их отключили).