小编Ale*_*lov的帖子

std :: pair <U,V>对齐控制

我注意到std :: pair在尝试将其保存到二进制文件时发生了一件令人不愉快的事情:std :: pair与一个单词对齐.它在处理器效率方面可能很有用,但需要更多的存储空间,所以我想将对齐模式切换为1字节的std :: pair.我的编译器是MS VC++ 2012.

#include <iostream>

int main( )
{
    struct S_a { double a; size_t b; };

#pragma pack(1)
    struct S_wa { double a; size_t b; };

    std::cout << sizeof( size_t ) << '\n';                          // 4
    std::cout << sizeof( double ) << '\n';                          // 8
    std::cout << sizeof( std::pair< size_t, size_t > ) << '\n';     // 8
    std::cout << sizeof( std::pair< double, size_t > ) << '\n';     // 16 - bad
    std::cout << sizeof( …
Run Code Online (Sandbox Code Playgroud)

c++ memory-alignment std-pair

6
推荐指数
2
解决办法
1382
查看次数

语言设计:默认方法参数继承

我认为,当一个函数(a)从另一个函数(b)中调用时,有一个常见的情况,而'a'有一些默认参数,需要'b'来支持它们.例如:

void a(int v1, int v2=0, int v3=1);
void b(int m1, int m2, int v1, int v2=0, int v3=1) {
    // ...
    a(v1, v2, v3);
    // ...
}
Run Code Online (Sandbox Code Playgroud)

但这违反了DRY原则.当'a'的默认参数被更改但是在'b'中没有改变时,它可以导致一个细微的bug:

void a(int v1, int v2, int v3=0);
void b(int m1, int m2, int v1, int v2=0, int v3=1) {
    // ...
    a(v1, v2, v3);
    // ...
}
Run Code Online (Sandbox Code Playgroud)

为什么C++中没有机制来继承默认参数值?它可能看起来像:

void a(int v1, int v2=0, int v3=1);
void b(int m1, int m2, int v1, int v2=default(a::v2, 0), int v3=default(a::v3, 1)) {
    // ... …
Run Code Online (Sandbox Code Playgroud)

c++

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

标签 统计

c++ ×2

memory-alignment ×1

std-pair ×1