코드에서 액세스하는 POD 데이터 (예 : std::vector<T>
: static_assert(std::is_floating_point<T>::value, "!");
)가 포함 된 일부 코드 (STL 컨테이너)와 STL 컨테이너가 있습니다.휘발성 POD 유형의 컨테이너
분명히 volatile
한정자를 사용하여 데이터를 선언해야합니다. 내가 포인터 변환의 적절한 보정과 내 자신의 할당을 제공해야한다고,
c:\mingw\lib\gcc\x86_64-w64-mingw32\4.8.1\include\c++\ext\new_allocator.h:110: ошибка: invalid conversion from 'volatile void*' to 'void*' [-fpermissive]
{ ::operator delete(__p); }
c:\mingw\lib\gcc\x86_64-w64-mingw32\4.8.1\include\c++\bits\stl_construct.h:75: ошибка: invalid static_cast from type 'volatile double*' to type 'void*'
{ ::new(static_cast<void*>(__p)) _T1(std::forward<_Args>(__args)...); }
c:\mingw\lib\gcc\x86_64-w64-mingw32\4.8.1\include\c++\bits\stl_algobase.h:372: error: invalid conversion from 'volatile void*' to 'void*' [-fpermissive]
__builtin_memmove(__result, __first, sizeof(_Tp) * _Num);
^
c:\mingw\lib\gcc\x86_64-w64-mingw32\4.8.1\include\c++\bits\stl_algobase.h:372: error: invalid conversion from 'const volatile void*' to 'const void*' [-fpermissive]
이 유일한 해결책이다 : 그러나이 경우 GCC에는 오류를 방출?
_' 명백하게 휘발성 한정자로 데이터를 선언해야합니다. 호기심을 위해서 : 그러한 구조에 대한 합리적인 유스 케이스를 지적 해 주시겠습니까? –
@ g-makulik'std :: vector .data()'는 std :: vector의 요소에 액세스하기 위해 기본 레지스터의 값으로 동적으로 생성 된 코드에 전달됩니다. 승인? –
Orient
@ g-makulik 또는'std :: vector'R/W의 모든 요소는 많은 스레드에서 액세스 할 수 있습니다. –
Orient