Skip to content

Instantly share code, notes, and snippets.

View fortheday's full-sized avatar
🤩

magicpotato fortheday

🤩
View GitHub Profile
struct SData
{
int m_Size;
char *m_Buf;
SData()
: m_Size(0), m_Buf(nullptr)
{
puts("ctor");
}
int i(int()); // int i( int a ) 함수선언으로 인식.
i = 2; // COMPILE ERR, int 변수가 아니라서 대입불가
// 이동 생성자/연산자는 RVO 및 int x(int())의 버그를 고려하고 학습/테스트 해야 한다.
class CTest {
public:
CTest() { puts("ctor"); }
CTest(const CTest &rRight) { puts("ctor-c"); } // copy
CTest(CTest &&rrRight) { puts("ctor-m"); } // move
CTest & operator=(const CTest &rRight) { puts("assign"); return *this; } // copy (일반적으로 딥카피)
CTest & operator=(CTest &&rrRight) noexcept { puts("assign-m"); return *this; } // move
static CTest Create_NoRVO(const int n) { return n ? CTest() : CTest(); }
class CTest {
public:
CTest() { puts("ctor"); }
CTest(CTest &&rrRight) { puts("ctor-m"); } // move
CTest & operator=(CTest &&rrRight) noexcept { puts("assign-m"); return *this; } // move
CTest & operator=(CTest &rRight) { puts("assign"); return *this; } // copy (일반적으로 딥카피)
};
auto createTest1 = []() -> CTest
{
class CTest {
public:
~CTest() = default;
};
CTest *pTest = nullptr;
{
CTest &&rrInt = CTest();
pTest = &rrInt;
} // ~CTestwekj()
class CCaseA {
public:
CCaseA() = delete;
};
class CCaseB {
public:
CCaseB() = default;
CCaseB & operator =(const CCaseB &) = delete;
};
int a = 1, b = 2;
[&] // capture local variables as &a, &b
{
a = 3; // &a = 3
b = 4;
}(); // instant execution
[=] // capture local variables const a, const b
{
class CBase {
virtual void f() {}
};
class CDerieve : public CBase {
virtual void f() override {}
};
void CastTest()
{
// dynamic cast with reference
#pragma pack(push)
#pragma pack(1)
struct SRefTest
{
char a;
char b;
char &r;
SRefTest() : a(1), b(2), r(a) {}
};
int add(int a, int b) { return a + b; }
void FuncRefTest()
{
int(*pfnAdd)(int a, int b) = add;
pfnAdd(1, 2);
(*pfnAdd)(1, 2);
pfnAdd = add; // ok
int(&rfnAdd)(int a, int b) = add;