/Zc:u8EscapeEncoding (kodning av numeriska escape-sekvenser i u8-strängar)

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

Se även

/Zc (Överensstämmelse)