C++中的attribute-list中的省略号应该用于什么?

baz*_*rek 11 c++ attributes ellipsis

C++参考中,我发现了有关C++中允许的属性语法的信息,它是:

[[attribute-list]]
[[ using attribute-namespace : attribute-list ]]
Run Code Online (Sandbox Code Playgroud)

"其中attribute-list是一个逗号分隔的零个或多个属性的序列(可能以省略号结尾...表示包扩展)"

我试过用它,但我发现之间没有区别:

[[deprecated]] void f() 
{
}
Run Code Online (Sandbox Code Playgroud)

[[deprecated...]] void f() 
{
}
Run Code Online (Sandbox Code Playgroud)

在这两种情况下输出都是相同的.

Hug*_*ira 2

将此添加到规范中是为了保持一致性,也是因为属性的未来仍在讨论中。考虑到我们目前在可变参数模板中进行了包扩展(请参阅可变参数模板包扩展),如下所示:

// pack expansion in function arguments
template <typename... Args>
void f(Args... args) {}

// pack expansion in inheritance
template <typename... Inherited>
struct MyClass : Inherited... {};
Run Code Online (Sandbox Code Playgroud)

同样,考虑属性的包扩展也是有意义的。一些示例场景可能是:

template <typename... Ts>
class [[Ts...]] MyClass {};
Run Code Online (Sandbox Code Playgroud)

或者

template <typename... Ts>
class [[Ts()...]] MyClass {};
Run Code Online (Sandbox Code Playgroud)

但是,这只是在规范中,目前没有可以这样使用的属性。