请参阅以下代码:
unsigned char* p = new unsigned char[x];
CLASS* t = new (p) CLASS;
assert((void*)t == (void*)p);
Run Code Online (Sandbox Code Playgroud)
我可以假设(void*)t == (void*)p
吗?
下面的代码可以在Visual C++中成功编译.我喜欢它,它很甜!
#include <stdio.h>
#ifdef _MSC_VER
#pragma warning(push)
#pragma warning(disable:4201)
#pragma pack(push,1)
#define PACKED
#else
#define PACKED __attribute__ ((__packed__))
#endif
union A {
struct {
int a:1;
int b:2;
int c1:29;
}PACKED;
struct {
int a:1;
int b:2;
int c2:28;
int d:1;
}PACKED;
int val;
}PACKED;
#ifdef _MSC_VER
#pragma pack(pop)
#pragma warning(pop)
#endif
#undef PACKED
int main(){
A test;
test.val = 0x1078FFF7;
printf("sizeof(A): %d, test.a: %d.\n", sizeof(A), test.a);
return -1;
}
Run Code Online (Sandbox Code Playgroud)
使用MSC构建的文件输出:
sizeof(A): 4, test.a: -1. …
Run Code Online (Sandbox Code Playgroud) float fv = orginal_value; // original_value may be any float value
...
double dv = (double)fv;
...
fv = (float)dv;
Run Code Online (Sandbox Code Playgroud)
应该fv完全等于original_value吗?任何精度都可能丢失?
声明一个像as一样的指针
CAMArrayRefHash<AMPSDK::H264Video::SEQ_PARAMETER_SET_RBSP>* h264_sps;
Run Code Online (Sandbox Code Playgroud)
最后为它创建一个实例:
h264_sps = new CAMArrayRefHash<AMPSDK::H264Video::SEQ_PARAMETER_SET_RBSP>();
Run Code Online (Sandbox Code Playgroud)
在C++ 11/14/17中有一个简单的方法吗?例如,auto new
h264_sps = auto new;
Run Code Online (Sandbox Code Playgroud)