- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的理解是,没有任何虚拟方法是标准布局的要求之一。然而,当 struct Cancel 中有一个虚方法时,下面的代码打印出 true。
如果我删除虚拟方法。 is_stand_layout 返回 false,这是有道理的,因为 Cancel 具有具有不同访问控制的成员。
我在 gcc 10.2, 9.2 9.3 和 clang 11.0 上测试过,结果是一样的。
这是一个错误吗?还是我在标准布局方面遗漏了什么?
#include <variant>
#include <iostream>
struct NewOrder
{
int i;
};
struct Cancel
{
virtual ~Cancel() {}
int j;
private:
int i;
};
int main() {
std::cout << std::is_standard_layout_v<std::variant<NewOrder, Cancel>> << std::endl;
return 0;
}
最佳答案
is this a bug?
没有。
is there something I am missing
你正在输出 std::is_standard_layout_v<std::variant<NewOrder, Cancel>>
决定是否std::variant<NewOrder, Cancel>
是标准布局而不是Cancel
是标准布局。
why is_standard_layout gives true here?
是否std::variant<NewOrder, Cancel>
是不是标准布局不一定取决于模板类型参数本身是否是标准布局。该标准未指定是否 std::variant
是或不是标准布局。您看到的输出是 std::variant
的副作用在您使用的标准库中实现。
关于c++ - 为什么 is_standard_layout 在这里给出 true?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68802505/
据我了解,标准布局允许三件事: 空基类优化 通过某些指针转换向后兼容 C offsetof的使用 现在,库中包含 is_standard_layout 谓词元函数,但我看不到它在泛型代码中的用处很大,
一般来说可以实现典型的type_traits使用模板技术。 然而我没想到如何std::is_standard_layout可以在这些条款中实现。 http://en.cppreference.com/
我的理解是,没有任何虚拟方法是标准布局的要求之一。然而,当 struct Cancel 中有一个虚方法时,下面的代码打印出 true。 如果我删除虚拟方法。 is_stand_layout 返回 fa
我正在查看这两种类型特征的文档,但不确定有什么区别。我不是语言律师,但据我所知,它们都适用于“memcpy-able”类型。 它们可以互换使用吗? 最佳答案 不,这些术语不能互换使用。这两个术语都表示
我是一名优秀的程序员,十分优秀!