- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
C++17 允许这样定义静态成员变量:
class X {
public:
static inline int i = 8;
};
要求 inline
规范的理由是什么?为什么不干脆让程序员写
static int i = 8;
在类里面?
最佳答案
没有inline
,它被明确地声明为只是一个声明。如 [class.static.data]/2 中所述
The declaration of a non-inline static data member in its class definition is not a definition and may be of an incomplete type other than cv void. The definition for a static data member that is not defined inline in the class definition shall appear in a namespace scope enclosing the member's class definition.
其基本原理很可能是为了保持遗留代码的完整性和有效性。回想一下,我们可以在类定义本身中初始化整数常量,因为它大约永远存在。但是 odr 使用它们仍然需要在某些翻译单元中进行类外定义。
因此,使此类变量隐式内联可能在现有代码库中存在问题。在添加核心语言功能时,委员会一直在考虑向后兼容性。
例如,考虑这个有效的 C++03 类定义:
struct foo {
static const int n = 3;
double bar[n];
};
n
可以作为常量表达式来定义bar
的范围,它不被认为是odr-use。现在我们把它写成constexpr
1,但是上面的仍然有效。但是可能在某些情况下,n
必须被 odr 使用(想象它的地址被占用,或者绑定(bind)到它的引用等)。它们可能不多,也可能不常见,但某些 API 有疯狂的要求,最终需要这样做
const int foo::n;
出现在某个翻译单元中。
现在,如果 static inline int i = 8;
突然隐含 inline
,则上述定义(即在现有代码库中)将违反 odr .现在以前格式正确的代码,格式错误。所以这里最好只允许 explicit inline
生效,因为只有新代码才会真正拥有它。
<子>1 有人可能会争辩说 static constexpr
变量可能有同样的问题(但它们是隐式内联的)。但是 IIRC 他们的原始措辞允许这种更改而不会破坏现有代码。除了名称之外,它基本上已经“内联”了。
关于c++ - 为什么静态内联变量需要 "inline"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46874055/
看看这个 fiddle http://jsfiddle.net/9S4zc/2/ 为什么这在 firefox 和 chrome 中看起来不同(文本对齐方式不同) 如何让 inner:before 元素
我从文档中了解到的是 %{ %} 之间的内容。被插入到包装器中,%inline %{ %} 呢? ? 是一样的吗?如果不是,有什么区别? 也许我们可以找到很多%inline %{ %}的出现。但仅出现
当我使用 显示:inline-flex; 或 显示:内联网格; 似乎有一些额外的“空间”或某种额外的重点计算发生。我不确定到底发生了什么。当使用箭头键在 contentediatble div 中导航
如果我想让一个 div 与容器 div 的其他内联元素内联,而我的目的仅此而已,我应该更喜欢使用 inline-block 或 display property 还是 inline-flex?不能使用
这个问题在这里已经有了答案: Why does an inline-block align to top if it has no content? (2 个答案) 关闭 8 年前。
Ada 信息交换所 states the following : The use of pragma Inline does have its disadvantages. It can create
Name
我问这个基本问题是为了让记录更正。已转介 this question和 its currently accepted answer ,这没有说服力。然而second most voted answer
你好, 在管理面板中,我创建了用于添加产品的表单。表单包括 2 个内联表单集,因为有一些与产品相关的模型。用户可以创建产品,然后定义该产品的不同属性的变体。我将举例说明这一点。用户拥有一个品牌的 3
有很多关于 inline 的使用以及如何正确执行此操作以达到所需目的的信息,例如此处(我目前将其用作引用)Inline Functions in C . 当我尝试实现页面中指定的内容时,出现编译器错误
我正在编写 gtk 代码。我经常有不需要闭包的简短回调,因为它们传递了它们需要的所有参数。例如,我在创建一些 gtk.TreeViewColumns 时将其置于循环中: def widthChange
这个问题在这里已经有了答案: What is the difference between display: inline and display: inline-block? (7 个答案) 关闭
我已经搜索了很长时间来找到答案,但是我没有找到解决方案... 我制作了一个无序列表的链接,并将它们放在标题下,就像导航栏一样。然而,在 IE 中(是的那个恶魔..)我的链接似乎没有对齐到中间。下面是我
我想将两张 table 并排放置。由于我不是 floating 或使用“css hacks”的忠实拥护者,您有什么建议?没有它是否可以解决,还是我运气不好? 最佳答案 使用 table-cell显示以
这个问题在这里已经有了答案: Why is this inline-block element pushed downward? (8 个答案) 关闭 6 年前。
CSS display 的 inline 和 inline-block 值到底有什么区别? 最佳答案 视觉答案 想象一个 中的元素.如果你给 例如,元素高度为 100px 和红色边框,它看起来像这
我想使用 /纯 CSS 弹出窗口的标签,但是 表现为内联 block ,我无法将其更改为内联。 有没有办法强制表现得像 display:inline 而不是 inline-block?
我的想法是这是不可能的,或者我缺少一个额外的步骤。无论哪种方式,我都被卡住了,无法弄清楚。 使用内联模板的原因是能够使用 Laravel Blade 语法并结合 Vue Js 的强大功能。似乎是两者中
http://christianselig.com/wp/ 对于主导航,如果我使用 display: inline,它们将显示为 block 。我心血来潮添加了 display: inline-blo
Firefox 的 -moz-inline-box 和 -moz-inline-stack 专有显示值有什么区别? 最佳答案 https://developer.mozilla.org/en/CSS/
我是一名优秀的程序员,十分优秀!