小编hex*_*ecs的帖子

在struct中使用__attribute __((aligned())),为什么sizeof的结果是这样的?

这是我的测试代码:

#include <cstdio>
struct A {
    int  a;
    int  b;
    int  c __attribute__((aligned(4096)));
    int  d;
}t;
int main()
{
    printf("%d\n",sizeof(t));

    return  0;
}
Run Code Online (Sandbox Code Playgroud)

结果是8192,但我无法弄清楚原因.

c memory-management

10
推荐指数
1
解决办法
447
查看次数

为什么不可能实例化一个原子对?

编译以下代码时(gcc-4.8,--std=c++11):

#include <atomic>
#include <utility>
#include <cstdint>

struct X {
    std::atomic<std::pair<uint32_t, uint32_t>> A;
};
Run Code Online (Sandbox Code Playgroud)

我收到以下编译错误:

/usr/local/include/c++/4.8.2/atomic:167:7: error: function
 'std::atomic<_Tp>::atomic() [with _Tp = std::pair<unsigned int, unsigned int>]'
 defaulted on its first declaration with an exception-specification that differs
 from the implicit declaration 'constexpr std::atomic<std::pair<unsigned int, 
unsigned int> >::atomic()'
Run Code Online (Sandbox Code Playgroud)

使用较新的编译器(带有的gcc-9 --std=c++17),我得到:

In instantiation of 'struct std::atomic<std::pair<int, int> >':
  error: static assertion failed: std::atomic requires a trivially copyable type
static_assert(__is_trivially_copyable(_Tp),
Run Code Online (Sandbox Code Playgroud)

演示:

我不知道为什么。有人可以帮我吗?

c++ std-pair stdatomic

2
推荐指数
1
解决办法
90
查看次数

如何将派生类的指针传递给对基类的指针的引用?

这是示例代码。

class BaseClass {
};

class DerivedClass ? public BaseClass {
};

int Foo(BaseClass*& ptr) {
}

DerivedClass* ptr_to_derived;

//following will not work
Foo(ptr_to_derived);
Run Code Online (Sandbox Code Playgroud)

我无法编译上面的代码,并且错误消息为“ can't convert DerivedClass* to BaseClass*&”。那么如何将ptr_to_derived传递给Foo?

c++

2
推荐指数
1
解决办法
81
查看次数

标签 统计

c++ ×2

c ×1

memory-management ×1

std-pair ×1

stdatomic ×1