2017-03-15 6 views
0

내가 alignas()의 사용을 테스트하려는, 그래서 나는이 코드를 적어 : 나는 g와 함께 컴파일 할 때, 그러나`alignas (X)`이전에 primary-expression이 필요합니까?

#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); 
} 

를 ++ 컴파일러에서 오류를 출력 : "alignas(X) 전에 차 표현 예상". 누가 이것을 설명 할 수 있습니까? 나는 정확한 사용법을 모른다. alignas().

+0

'버퍼'유형은 무엇입니까? –

+0

나는 그것이'X'라고 생각한다. 이 코드는 The C++ Programming Language 제 4 판에 있습니다. –

+0

내가 잘못 설명했을 수 있습니다. 9 번 줄의 어떤 부분이 '버퍼'의 유형을 지정합니까? 또한 필수 : ​​GCC의 어떤 버전을 사용합니까? C++ 11 기능을 켜셨습니까? –

답변

0

alignas(X)은 유형에 적용되는 부기 지정자입니다. 여기서 유형을 지정하지 않았기 때문에 오류가 발생합니다. 코드의 나머지 부분에서 판단

, 당신은 아마 문자의 정렬 버퍼를 만들려면 : alignas(X) char buffer[bufmax];

0

데이터 유형

문자의 alignas (X) [bufmax] 버퍼를 추가하십시오; alignas (X) char 버퍼 [bufmax];

나는 또한 책을 읽는 동안 똑같이 부딪혔다.