- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在下面的简单程序实现中,数字的打印顺序是自定义的吗?
#include <iostream>
struct Foo
{
Foo()
{
std::cout << "1" << std::endl;
}
};
Foo foo;
int main()
{
std::cout << "2" << std::endl;
}
标准中的一些措辞( Dynamic initialization of non-local variables [basic.start.dynamic]/4):
It is implementation-defined whether the dynamic initialization of a non-local non-inline variable with static storage duration is sequenced before the first statement of
main
or is deferred. If it is deferred, it strongly happens before any non-initialization odr-use of any non-inline function or non-inline variable defined in the same translation unit as the variable to be initialized.*...
*) A non-local variable with static storage duration having initialization with side effects is initialized in this case, even if it is not itself odr-used ([basic.def.odr], [basic.stc.static]).
最佳答案
允许的输出是 1/2、2 和 2/1。
如果变量 foo
的初始化没有延迟,那么它在 main
开始之前排序,所以 1
打印在 2
之前。
如果延迟初始化,则要求 foo
的初始化必须在任何(其他)odr-use 之前发生foo
。它并不是说如果没有 odr-use 就不必进行初始化。对于这个例子,输出 2/1 肯定是非常奇怪的(并且输出 2 是延迟初始化的实现在实践中唯一使用的输出),但我在标准中没有看到任何严格排除它的内容。
我相信标准中的措辞的原因是它允许实现使用一个守卫来延迟翻译单元中所有此类变量的初始化。如果我们像这样修改您的示例:
…
Foo foo;
struct Bar {
Bar() { std::cout << "3\n"; }
void Use() {}
} bar;
int main()
{
std::cout << "2" << std::endl;
bar.Use();
}
使用单个守卫和延迟初始化,foo
将与 bar
一起初始化,即使 foo 没有 odr-use(除了初始化)
在程序中。在这种情况下,还需要一致性,因为该示例使用 ordered initialization ,因此 foo
的初始化必须在 bar
之前进行排序,因此唯一允许的输出是 1/3/2(无延迟初始化)和 2/1/3(延迟初始化)。但是如果我们使用不同的构造来获得无序初始化,一个实现也可能产生 2/3/1
(同样,没有非初始化 ODR-使用 foo
) .
关于c++ - 非局部非内联变量的初始化 : does it take place strictly before the `main()` function call?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54167232/
JavaScript 不关心字符串是双引号 "double" 还是单引号 'single'。 ECMAScript 5 严格模式的每个示例都通过双引号中的 "use strict" 启用。我可以执行以
这个问题在这里已经有了答案: What does "use strict" do in JavaScript, and what is the reasoning behind it? (30 个答
对于下面的代码片段 案例 1:严格模式 "use strict" let obj = { method: function(){ console.log(this); }, arr
function useStrict(){ "use strict"; } "use strict";
协议(protocol): http://opengraphprotocol.org/ 声明使用 带有 property 属性的标签. AFAIK,这不是有效的 XHTML 1.0 Strict 值。
我研究了一些库,它们似乎不包含文件或函数级别的 "use strict"; 行。因此,如果开发人员启用严格模式,那么我们如何知道库是否兼容?可能会有一些奇怪的功能或浏览器特定问题,这些问题在启用严格模
如果我们的 html 文件(导入外部 js 文件)已经有“use strict”,我们是否需要在外部 js 文件中加入“use strict”? 如果我们的外部 js 文件没有“use strict”
我相信这里的每个人都知道我们无法在不破坏 IE 兼容性的情况下为 XHTML 提供具有正确 MIME 类型 (application/xhtml+xml) 的页面,并且任何使用 text/html 提
我将这些定义放在一个文件中: x = 'a' : 'b' : 'c' : [] y = ['a', 'b', 'c'] (重要的是在文件中定义它们,而不是在 GHCi 中,因为在后一种情况下,事情变得
我想在 javascript 中使用 "use strict"; 模式,但在严格警告方面存在一些问题。我有一个“小部件”,例如: var Widget = function () { /* ... *
inline void addHeader(T value) { if(sizeof(T) > m_outputBufferStart) { std::clog <<
为什么 XHTML 1.0 Strict 显示的行高比 XHTML 1.0 Transitional 中相同值的行高显示得大? 因此,这将下推表格单元格中的内容(即 Firefox 中的 Hotmai
ECMAScript5中引入的严格模式,通过让JavaScript运行环境对一些开发过程中最常见和不易发现的错误做出和当前不同的处理,来让开发者拥有一个”更好”的JavaScript语言。很长一段时
I. Strict Mode阐述 根据 mysql5.0以上版本 strict mode (STRICT_TRANS_TABLES) 的限制: 1).不支持对not null字段插入null值
本文分享自华为云社区《JS/TS里的"use strict"严格模式是什么?》,作者: gentle_zhou。 在日常JS/TS项目开发过程中,经常会在文件开头看到"use strcit"字样,这里
在本教程中,您将借助示例了解 JavaScript 的“严格模式”语法。 在 JavaScript 中,‘use strict’; 声明代码应该在“严格模式”下执行。这使得编写良好且安全的 J
我在学习 JS 时遇到了“use strict”。然后,这里Should I 'use strict' for every single javascript function I write? @B
嗨我最近一直在使用下面的命令 Ffmpeg -i song.mp3 -loop 1 -i image.jpg -filter_complex \ "[0:a]showfreqs=mode=line:a
如果 use strict;,我有几行代码可以工作被注释掉了。但是,我不想仅仅因为一小部分而在整个脚本中禁用它。 我需要重新编码,或者以某种方式禁用 use strict;暂时,然后重新启用它。第一个
在 Angular 10 中,您可以使用 ng new --strict 创建一个新项目。 Enabling this flag initializes your new project with a
我是一名优秀的程序员,十分优秀!