Os caracteres UTF16 (conforme usados por, por exemplo, funções wide-winapi) sempre têm 2 bytes de comprimento?

Por favor, esclareça para mim, como o UTF16 funciona? Estou um pouco confuso, considerando estes pontos:

Há um tipo estático em C ++, WCHAR, com 2 bytes de comprimento. (sempre com 2 bytes de comprimento)A maior parte do msdn e alguma outra documentação parecem ter a suposição de que os caracteres sempre têm 2 bytes de comprimento. Isso pode ser apenas a minha imaginação, não consigo encontrar exemplos específicos, mas parece que sim.Não existem funções ou tipos de caracteres "extra-largos" amplamente usados em C ++ ou Windows, portanto, eu suporia que UTF16 é tudo o que é necessário.Para meu conhecimento incerto, o unicode possui muito mais caracteres que 65535, portanto, obviamente, eles não têm espaço suficiente em 2 bytes.UTF16 parece ser uma versão maior do UTF8, e os caracteres UTF8 podem ter comprimentos diferentes.

Portanto, se um caractere UTF16 nem sempre tem 2 bytes de comprimento, quanto tempo mais poderia ser? 3 bytes? ou apenas múltiplos de 2? E então, por exemplo, se houver uma função winapi que deseje saber o tamanho de uma cadeia larga em caracteres, e a cadeia contiver 2 caracteres com 4 bytes de comprimento, como será o tamanho dessa cadeiaem caracteres calculado?

É 2 caracteres ou 4 caracteres? (uma vez que tem 8 bytes e cada WCHAR tem 2 bytes)

ATUALIZAÇÃO: Agora vejo que a contagem de caracteres não é necessariamente uma coisa padrão ou c ++, portanto, tentarei ser um pouco mais específico na minha segunda pergunta, sobre o tamanho em "caracteres" de uma string ampla:

No Windows, especificamente, no Winapi, em suas funções amplas (terminando com W), como contar o número de caracteres em uma sequência que consiste em 2 pontos de código unicode, cada um composto por 2 unidades de código (total de 8 bytes)? Essa cadeia possui 2 caracteres (o mesmo que número de pontos de código) ou 4 caracteres (o mesmo que o número total de unidades de código?)

Ou, sendo mais genérico: o que a definição do Windows de "número de caracteres em uma cadeia larga" significa, número de pontos de código ou número de unidades de código?

questionAnswers(8)

yourAnswerToTheQuestion