【问题标题】:Expected primary-expression before `alignas(X)`?`alignas(X)` 之前的预期主表达式?
【发布时间】:2026-01-09 22:20:07
【问题描述】:

我想测试alignas()的使用,所以写下这些代码:

#include <vector>

using namespace std;

template<typename X> 
void user(const vector<X>& vx)
{
    constexpr int bufmax = 1024;
    alignas(X) buffer[bufmax];

    const int max = min(vx.size(), bufmax / sizeof(X));
    uninitialized_copy(vx.begin(), vx.begin()+max, buffer);
}

但是,当我使用 g++ 编译它时,编译器会输出错误:“expected primary-expression before alignas(X)”。谁能解释一下?我不知道alignas()的具体用法。

【问题讨论】:

  • buffer的类型是什么?
  • 我猜是X。这些代码来自《The C++ Programming Language 4th edition》一书。
  • 我的措辞可能不正确。第 9 行的哪一部分指定了buffer 的类型?也是强制性的:你使用什么版本的 GCC?你是否开启了 C++11 功能?
  • GCC的版本是5.3.0,是的,我开启了c++11的特性。其实我也不确定buffer的类型,alignas(X)是不是声明?

标签: c++ c++11 alignment alignas


【解决方案1】:

alignas(X) 是一个对齐说明符,适用于类型。发生错误是因为您没有在此处指定类型。

从其余代码来看,您可能想要创建对齐的字符缓冲区:alignas(X) char buffer[bufmax];

【讨论】:

    【解决方案2】:

    将以下数据类型添加到您的代码中

    char alignas(X) buffer[bufmax];
    
    alignas(X) char buffer[bufmax];
    

    我在看书的时候也碰到过。

    【讨论】: