En la página de introducción de Boost.Preprocessor, se da un ejemplo en A.4.1.1 Horizontal Repetición
#define TINY_print(z, n, data) data
#define TINY_size(z, n, unused) \
template <BOOST_PP_ENUM_PARAMS(n, class T)> \
struct tiny_size< \
BOOST_PP_ENUM_PARAMS(n,T) \
BOOST_PP_COMMA_IF(n) \
BOOST_PP_ENUM( \
BOOST_PP_SUB(TINY_MAX_SIZE,n), TINY_print, none) \
> \
: mpl::int_<n> {};
BOOST_PP_REPEAT(TINY_MAX_SIZE, TINY_size, ~) // Oh! a tilde!
#undef TINY_size
#undef TINY_print
se proporciona una explicación a continuación:
El proceso de generación de código se inició llamando BOOST_PP_REPEAT
, un de orden superior macro que llama repetidamente la macro llamada por su segundo argumento (TINY_size
). El primer argumento especifica el número de invocaciones repetidas, y el tercero puede ser cualquier dato; se pasa inalterado a la macro que se invoca. En este caso, TINY_size
no utiliza esos datos, así que la elección para pasar ~
fue arbitraria. [5]
(el énfasis es mío)
Y no es la nota:
[5]
~
no es una elección totalmente arbitraria. Tanto @
y $
podría haber sido una buena elección, salvo que técnicamente no son parte del conjunto de caracteres básico que se requiere implementaciones de C++ para apoyar. Un identificador como ignorado puede estar sujeto a la expansión de macro, lo que lleva a resultados inesperados.
La tilde, por lo tanto, es simplemente un marcador de posición ya que se requiere un argumento, pero ninguno es necesario. Dado que cualquier identificador definido por el usuario wannabe podría expandirse, necesita usar algo más.
Resulta que ~
es más o menos sin usar (negación binario no es que a menudo se llama) en comparación con +
o -
por ejemplo, por lo que hay pocas posibilidades de confusión.Una vez que se haya decidido por esto, usarlo consistentemente le da un nuevo que significa "tilde"; como usar operator<<
y operator>>
para transmitir datos se ha convertido en un modismo C++.
es un argumento ficticio – Anycorn
~ es el complemento bit a bit, como probablemente sabrá. Parece solo un marcador de posición para mí. No creo que tenga ningún significado especial. –