小编sim*_*xia的帖子

关于完全空洞的课程

#include <iostream>

using namespace std;

class Empty{
    char omg[0];
};

int main()
{
    Empty em1, em2;
    Empty set[100];
    cout << sizeof(Empty) << " " << sizeof(em1) << " " << sizeof(em2) << endl;
    cout << (long*)&em1 << " " << (long*)&em2 << endl;

    cout << "total numbers of element is: " << sizeof(set)/sizeof(*set) << endl;

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

它的输出是:

0 0 0

0xbff36ad0 0xbff36ac8

元素数量是:4

结果令人惊讶.

如上图所示,Empty是一个类,它的大小和它的对象都是0,为什么呢?

也许我猜,因为空类的大小是1,当类不是空时,它的大小由成员决定,但是这里的成员是特殊的,它是一个长度为0的数组,这个数组的大小是0,所以类和对象的大小都是0.

这只是我的猜测.当程序运行时,我们可以看到两个对象都有地址,地址不同.

这是我的问题:如果可以实现0大小的对象,为什么C++标准声明空对象的sizeof()= 1,它是为了"确保两个不同对象的地址不同" 为什么是大小一个空类不是零?,但现在,我们确实有不同的地址作为输出,这是怎么发生的?

而且,无论数组的大小是多少,最后一行输出总是4,为什么?

谢谢 :)

PS:我在MacOS上运行这个程序,编译器是Apple LLVM版本5.1(clang-503.0.40)(基于LLVM 3.4svn)

c++ empty-class

9
推荐指数
1
解决办法
495
查看次数

如何在Vim中将分割窗口转换为制表符,反之亦然

例如,我使用3个拆分窗口打开3个不同的文件:

    +---------------+-----------+                          
    |               |           |                          
    |   window 1    |           |                          
    |               |           |                          
    +---------------+           |                          
    |               | window 3  |                          
    |               |           |                          
    |   window 2    |           |                          
    |               |           |                          
    |               |           |
    +---------------+-----------+
Run Code Online (Sandbox Code Playgroud)

现在,我想用3个不同的标签打开它们,反之亦然

有没有诀窍来实现这一目标?或者我需要任何插件?

此外,如果我想在3个全屏窗口中显示3个缓冲区(而不是分割窗口),我该怎么办?

vim split

6
推荐指数
1
解决办法
2521
查看次数

如何获取地图的所有键和值并作为args传递给golang中的函数?

我遇到过这样的情况:

先得到一张地图,其大小未知.

例如: myMap map[string]string

然后,我将把地图的所有键和值作为函数的args

例如 func(key1, key2, ..., value1, value2, ...)

一个示例func:https://godoc.org/github.com/garyburd/redigo/redis#Script.Do

如何实现这一目标?

尽可能高效.

任何帮助将不胜感激 :)

dictionary go

3
推荐指数
1
解决办法
611
查看次数

我们可以在redis的lua脚本中进行管道传输

例如

我有几个set命令,我不关心它们的返回值,在我的lua脚本中,我必须写几个redis.call('set', key, val).

有什么方法像管道,所以我可以一起做.也许效率更高?

lua redis

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

我可以将字符串作为bufio.ReadString()的分隔符吗?

我有一个包含多行查询的文件。我想一一阅读并打印。就像是 :

临时SQL

select * from table1;  
select *  
from table2;

select 1; 
Run Code Online (Sandbox Code Playgroud)

由于我可以进行多行查询,因此我想使用; \ n作为分隔符。那可能吗 ?有没有更好的方法可以代替bufio.ReadString

go

0
推荐指数
1
解决办法
2489
查看次数

标签 统计

go ×2

c++ ×1

dictionary ×1

empty-class ×1

lua ×1

redis ×1

split ×1

vim ×1