我注意到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) 我认为,当一个函数(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)