UInt64^%
당신이 생각하는 바를 의미하지 않습니다. ^
모자는 참조 유형에만 사용해야하며 UInt64는 값 유형입니다. 이렇게하는 것은 약 99 %의 시간이 잘못되었지만 C++/CLI 컴파일러는이를 받아들이고이를 "박스형 64 비트 부호없는 정수에 대한 참조"로 해석합니다. boxing conversion은 값을 객체로 바꾸고 값 유형이 System :: Object에서 파생된다는 유명한 환상을 구현합니다.
확실히 unsigned long long *과 호환되지 않습니다. 코드를 검토하여 우연히^모자를 다른 곳에서 부적절하게 사용하지 않도록하십시오. 과감한 프로세서주기 싱크 (sinks)는 코드가 필요 이상으로 느려지도록 만듭니다.
모자 사용을 중지해야합니다. 그리고 UInt64 은이 관리 객체의 필드가 될 가능성이있는 이유를 다룹니다. 어떤 네이티브 코드가 실행되는 동안 가비지 컬렉터에 의해 이동 될 수 있습니다. 컴파일러가 허용하지 않으므로 (원시 코드가 현재 힙을 손상시킵니다) 완전히 비참합니다. 당신은 이동할 수있는 가치를 안정적으로 복사 제공해야합니다 :
void CalcBufferWrapper(UInt64% bufferSize) {
auto size = bufferSize; // Values on the stack don't move
CalcBuffer(&size);
bufferSize = size;
}
또는 을 많이 더 나은, 전혀 필요가 래퍼에게 랩 된 함수와 동일한 서명을주지 :
UInt64 CalcBufferWrapper() {
unsigned long long size;
CalcBuffer(&size);
return size;
}
을 이것도 재산이어야한다는 약간의 확률.
는 https://en.wikipedia.org/wiki/Boolean_datatype를 참조하십시오 오래 오래 INT, 옵션 확장 정수 타입, 명시 적 부울 데이터 유형, 복잡한 숫자를 표현하는 복합 형 등 여러 가지 새로운 데이터 유형, – jdweng