这是我的测试代码:
#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,但我无法弄清楚原因.
编译以下代码时(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)
我收到以下编译错误:
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()'
使用较新的编译器(带有的gcc-9 --std=c++17),我得到:
Run Code Online (Sandbox Code Playgroud)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),
演示:
我不知道为什么。有人可以帮我吗?
这是示例代码。
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?