Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Behåll värdet för numeriska escape-sekvenser i u8 strängliteraler utan att koda dem som utf-8.
Använd den här växeln för att öka korskompatibiliteten eller när ett tecken som inte är utf-8 bäddas in i en utf-8-strängliteral.
Syntax
/Zc:u8EscapeEncoding[-]
Remarks
I C++ är u8 stränglitteraler utf-8-kodade sekvenser av char8_t. Den här flaggan ändrar hur numeriska escape-sekvenser tolkas i u8 strängliteraler. Beteendet under /Zc:u8EscapeEncoding är att koda dem i strängen som ett enda 8-bitarsvärde char8_t . Beteendet under /Zc:u8EscapeEncoding- är att tolka värdet som en unicode-kodpunkt. När värdet är en högre kodpunkt i Unicode kodas det som ett flerbytestecken. Beteendet för universella teckensekvenser är alltid att koda dem som utf-8 oberoende av /Zc:u8EscapeEncoding[-].
Följande exempel innehåller både en hex-escape-sekvens \x och en universell escape-sekvens \u.
/Zc:u8EscapeEncoding[-] påverkar kodningen av hex-escape-sekvensen, men den universella escape-sekvensen kodas alltid som utf-8. Exempelsträngen innehåller även blankstegstecknet, som är kodat som 0x20 i utf-8.
#include <cstdio>
int main()
{
const char8_t str[] = u8" \x00ff \u00ff ";
for(char8_t c : str) {
printf("0x%X ", c);
}
return 0;
}
Under /Zc:u8EscapeEncodingkodas escape-sekvensen \x00ff som 0xFF och universalteckensekvensen \u00ff kodas som utf-8-sekvensen 0xC3 0xBF. Kodexemplet utdata:
0x20 0xFF 0x20 0xC3 0xBF 0x20 0x0
Under /Zc:u8EscapeEncoding-kodas värdena för båda \x00ff och \u00ff om som utf-8-sekvensen 0xC3 0xBF. Kodexemplet utdata:
0x20 0xC3 0xBF 0x20 0xC3 0xBF 0x20 0x0