On 20.03.2025 20:27, Alan Mackenzie wrote:
Hello, C++.
I'm having some difficulty (amending Emacs's C++ Mode) reconciling the
two conflicting uses in C++ of ({.
Firstly, it is used as a "statement expression", a GCC enhancement also
found in C, allowing a more relaxed and natural way to write an
expression as the end result of a sequence of statements:
˙˙˙˙˙ ({ int y = foo (); int z;
˙˙˙˙˙˙˙˙ if (y > 0) z = y;
˙˙˙˙else z = - y;
˙˙˙˙z; })
.˙ I think this usage is very old.
Secondly, there's initialisation expressions like:
˙˙ void f4 (int a, int b, int c)
˙˙ {
˙˙˙˙ std::vector<ABC> abcList2(
˙˙˙˙˙˙ {{a+6,
˙˙˙˙˙˙˙˙ b+6,
˙˙˙˙˙˙˙˙ c+6}
˙˙˙˙˙˙ }
˙˙˙˙˙˙ );
˙˙ ....
˙˙ }
.˙ Here the ( on the std::vector line, together with the next {, can be
confused as a statement expression, though it's clearly not meant that
way.˙ I think this syntax is much newer than the other one, though I may
be wrong here.
This braced initialization (called "List-initialization") was introduced
in C++11, it is standardized and in wide and growing use.
Sysop: | Tetrazocine |
---|---|
Location: | Melbourne, VIC, Australia |
Users: | 12 |
Nodes: | 8 (0 / 8) |
Uptime: | 24:27:46 |
Calls: | 176 |
Files: | 21,502 |
Messages: | 78,427 |