10

以下代码不能使用 gcc 编译:

struct test {
    int x;
    test() try : x{123} {
    }
    catch (...) {
    }
};

int main() {}

错误:

prog.cpp:3:25: error: expected unqualified-id before ‘{’ token
     test() try : x{123} {
                         ^
prog.cpp:5:5: error: expected unqualified-id before ‘catch’
     catch (...) {
     ^
prog.cpp: In constructor ‘test::test()’:
prog.cpp:3:23: error: expected ‘{’ at end of input
     test() try : x{123} {
                       ^
prog.cpp:3:23: error: expected ‘catch’ at end of input
prog.cpp:3:23: error: expected ‘(’ at end of input
prog.cpp:3:23: error: expected type-specifier at end of input
prog.cpp:3:23: error: expected ‘)’ at end of input
prog.cpp:3:23: error: expected ‘{’ at end of input

更改x{123}为有x(123)帮助。这应该(不)以这种方式工作吗?

4

1 回答 1

1

This is valid according to the grammar of the standard (see [gram.special] for the braces, and [gram.except] for try-catch. GCC 4.8 has it wrong, but GCC 4.9 handles it properly (as do other compilers, as already reported).

I have no idea why BS does not use this syntax in his book. Maybe because he didn't have any compiler at hand that supported this syntax when he compiled his examples to see if they are right (if he did)?

于 2013-10-07T13:21:23.483 回答