假设有一个结构体,其构造函数没有初始化所有成员变量:
struct Foo {
int x;
Foo() {}
}
Run Code Online (Sandbox Code Playgroud)
如果我将某个缓冲区设置为 0,则在该缓冲区上使用放置 new 创建一个 Foo 实例,然后从该实例中读取 x,这是定义的行为吗?
void bar(void* buf) {
memset(buf, 0, sizeof(Foo));
Foo* foo = new(buf) Foo;
std::cout << foo.x; // Is this undefined behavior?
}
Run Code Online (Sandbox Code Playgroud) 对同一对象的两个同步方法的调用不可能进行交错.
但是,如果非静态同步方法包含对其的调用,则会wait()释放该对象监视器的线程所有权,从而允许另一个线程进入同步方法.我误解了wait(),还是不考虑交错?
C++11 标准是否保证所有编译器将为给定标准布局结构中的所有成员选择相同的内存偏移量,假设所有成员都有保证的大小(例如,int32_t而不是int)?
也就是说,对于标准布局结构中的给定成员,C++11 是否保证offsetof在所有编译器中给出相同的值?
如果是这样,是否有任何关于该值的规范,例如作为结构成员的大小、对齐和顺序的函数?