“黑盒”类型标准布局保证的目的是什么?

6

C++标准规定互斥锁、原子变量或条件变量是标准布局类型。

这种规定的好处是什么?用户如何利用这个属性?

总的来说,如果我知道一个类型是标准布局,而不知道它的实现细节,我能得到什么好处?


标准布局类型可以更容易地被其他语言使用。 - Bathsheba
@Bathsheba 即使另一种语言也是C++? ;) - curiousguy
2个回答

2

根据这个标准布局参考文档:

标准布局类型非常适合与其他编程语言编写的代码进行交互。

例如,如果您构建了一个混合C和C++应用程序,C结构将是标准布局,可以在C和C++部分之间互换使用。这对于能够使用操作系统本机函数和结构通常非常重要。


好的回答,很高兴我们达成了共识!=) - gsamaras
我真的不明白,如果你能给我一个例子会怎么帮助我? - Oliv
@Oliv,有很多用于C语言的库。如果你想在C++应用程序中使用其中一个库怎么办?如果那个C库有一个结构体呢?因为这个结构体将是标准布局,所以你可以在C++程序中创建它的实例,并将指针(甚至实例的副本)传递给C库函数。 - Some programmer dude
2
@Someprogrammerdude 但 mutex 是 C++ 结构,所以我能把一个 mutex 传递给 C 库吗?否则有 mutex 标准布局的意义是什么? - Oliv
@Oliv,所以你的问题不是关于一般标准布局,而是为什么只有那些结构被指定为标准布局?也许你应该缩小问题范围? - Some programmer dude
@Someprogrammerdude,实际上StoryTeller几个小时前就已经解决了这个问题。他将问题缩小到了“黑盒子”类型。那么我不确定是否需要说明结构体是在C++头文件中声明的,因为我的问题是关于C++的? - Oliv

1
你可以让你的代码与使用不同编程语言编写的其他程序进行交流。
参考文献提到了C++概念:StandardLayoutType

标准布局类型对于与使用其他编程语言编写的代码进行通信非常有用。


你可以使用 std::offsetof \o/ - YSC
你是指这个@YSC 问题 - gsamaras
似乎我无法知道标准布局类成员之间是否存在填充。即使对齐不需要,编译器是否允许在成员之间添加填充? - Oliv
@Oliv 这个问题可能会有所帮助! - gsamaras
@gsamaras 不是特别针对他,但它适用。 - YSC
1
同程序员小伙伴一样,如果您能给我一个例子,在哪里使用标准布局结构体与另一个程序进行通信,那将对我很有帮助。 - Oliv

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接