gpt4 book ai didi

c++ - 为什么 alignas() 不采用参数包?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:42:19 25 4
gpt4 key购买 nike

根据 cppreference.com


对齐说明符 (C++11 起)

指定类型或对象的对齐要求。

语法

alignas( 表达式 )
alignas( type-id )
alignas( pack ... )

  1. alignas(expression) 必须是整数常量表达式,其计算结果为零,或者为对齐或扩展对齐的有效值。

  2. 等同于alignas(alignof(type))

  3. 等价于应用于同一个声明的多个 alignas 说明符,一个用于参数包的每个成员,可以是类型或非类型参数包。


那么为什么下面的代码不适用于 g++、clang 或 VC++?

struct alignas(1, 4) A {};

struct alignas(int, double) A {};

这是缺陷吗?

<罢工>

<罢工>

编辑

显然这适用于 g++ 8.2 而不适用于 clang++ 8.0 或 VC++ 19.20.27508.1 所以这似乎是一个缺陷,编译器还没有 catch 。

编辑

显然,在 cygwin bash shell 中运行 MinGW 的 g++ 编译器会导致奇怪的行为。在 MinGW 的 bash shell 中运行时工作正常。所以,不,这在 g++ 8.2 下也不起作用。

最佳答案

1, 4int, double 不是参数包。这将是在此上下文中使用的参数包的示例:

template <class... T>
struct Widget
{
struct alignas(T...) A {};
};

请注意,可以将多个 alignas 说明符应用于同一声明,因此您的示例可以编写为 alignas(1) alignas(4) alignas(int) alignas(double) 分别。

关于c++ - 为什么 alignas() 不采用参数包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55707915/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com