Name
## operator — Concatenation operator
Synopsis
identifier
##identifier
The ##
operator is a binary
operator, sometimes called the concatenation
operator because it concatenates preprocessor tokens. It can be
used only in the macro replacement text of a #define
directive. It must not appear at the
start or end of the macro replacement text. The operands of the
##
operator must be parameter names
for the macro being defined. They are replaced by the corresponding
macro arguments, which are not expanded. The tokens immediately
adjacent to the ##
operator are
concatenated to form a single token. If the result is not a valid
token, the behavior is undefined; otherwise, the token is expanded
normally.
The evaluation order of #
and
##
operators is undefined. If the
order is important, you can control the order by using multiple
macros.
Example
The following example prints std
to cout
because the concat
macro assembles the token std
from s
, t
, and
d
:
#define s this is not expanded by the concatenation operator #define t nor is this, so the result is the token std #define concat(part1, part2, part3) part1 ## part2 ## part3 concat(s, t, d)::cout << "std";
See Also
Get C++ In a Nutshell now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.