- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这将是一篇很长的文章,为了将其上下文化并提供尽可能多的信息,我必须仔细浏览各种链接和引号——这通常是我们进入 C/C++ 标准兔子洞的唯一方法。如果您对这篇文章有更好的引用或任何其他改进,请告诉我。但要提前总结,you can blame @zwol for me posting this ;-)目的是从两个命题中找出真理:
volatile *
访问或 volatile &
必须引用最初声明的对象 volatile
为了拥有volatile
语义? volatile
- 合格对象通过 volatile
指针/引用足以/应该使所述访问表现得好像对象已声明 volatile
? volatile
volatile
出现引用将授予
volatile
非
volatile
上的行为所指 - 但发现它没有,或者在不同程度上以不可预测的方式这样做。
const
所熟知的那样。 :行为只会是
volatile
(或完全定义)如果引用与被引用对象具有相同的 cv 限定:
The key word in that passage is object.
volatile sig_atomic_t flag;
is a volatile object.*(volatile char *)foo
is merely an access through a volatile-qualified lvalue and the standard does not require that to have any special effects. – zwol
volatile
或
const
通过不共享所述限定符的指针键入...
6 If an attempt is made to modify an object defined with a
const
-qualified type through use of an lvalue with non-const
-qualified type, the behavior is undefined. If an attempt is made to refer to an object defined with avolatile
-qualified type through use of an lvalue with non-volatile-
qualified type, the behavior is undefined.(133)
volatile
.而且,总结时
volatile
及其操作,它现在谈论一个对象
有
volatile
- 合格类型:
7 An object that has
volatile
-qualified type may be modified in ways unknown to the implementation or have other unknown side effects. Therefore any expression referring to such an object shall be evaluated strictly according to the rules of the abstract machine, as described in 5.1.2.3. Furthermore, at every sequence point the value last stored in the object shall agree with that prescribed by the abstract machine, except as modified by the unknown factors mentioned previously.(134) What constitutes an access to an object that hasvolatile
-qualified type is implementation-defined.
From n1548 §6.7.3 ¶6 the standard uses the phrase "object defined with a volatile-qualified type" to distinguish it from "lvalue with volatile-qualified type". It's unfortunate that this "object defined with" versus "lvalue" distinction does not carry forward, and the standard then uses "object that has volatile-qualified type", and says that "what constitutes access to an object that has volatile-qualified type is implementation-defined" (which could have said "lvalue" or "object defined with" for clarity). Oh well. – Dietrich Epp
volatile
用于授予的指针/引用
volatile
取消引用的语义?
Interestingly, there is one sentence in there [C99 Rationale for
volatile
] that implies that the committee meant for*(volatile T*)x
to force that one access tox
to be treated as volatile; but the actual wording of the standard does not achieve this. – zwol
On the other hand, this post quotes from the 6.7.3 of the Rationale for International Standard--Programming Languages--C:
A cast of a value to a qualified type has no effect; the qualification (volatile, say) can have no effect on the access since it has occurred prior to the case. If it is necessary to access a non-volatile object using volatile semantics, the technique is to cast the address of the object to the appropriate pointer-to-qualified type, then dereference that pointer.
— 飞利浦
来自 that Bytes thread ,我们指的是 C99 s6.7.3 p3 - 又名 C11 的 p4 - 和这个分析:
The paragraph in question is just before section 6.7.3.1 in the rationale document. If you also need to quote from the standard document itself, cite 6.7.3 p3:
The properties associated with qualified types are meaningful only for expressions that are lvalues.
The expression
(volatile WHATEVER) non_volatile_object_identifier
is not an lvalue, hence the 'volatile' qualifier is meaningless.Conversely, the expression
* (volatile WHATEVER *) & non_volatile_object_identifier
is an lvalue (it may be placed on the left side of an assignment statement), so the property of the 'volatile' qualifier has its intended meaning in this case.—Tim Rentsch
在 WG Paper N1381 中有一个非常具体的演示支持这个想法,特别是关于第一个链接的问题。 .这里介绍了附件memset_s()
做那个 OP 想要的 - 保证非省略的内存填充。在讨论可能的实现时,它似乎支持这个想法 - 通过省略说明任何要求 - 使用volatile
更改非volatile
的指针对象 应该根据指针的限定符生成代码,而不管引用的对象的...
- Platform-independent ' secure-memset' solution:
void *secure_memset(void *v, int c , size_t n) {
volatile unsigned char *p = v;
while (n--) *p++ = c;
return v;
}
This approach will prevent the clearing of memory from being optimized away, and it should work on any standard-compliant platform.
......并且不这样做的编译器会引起注意......
There has been recent notice that some compilers violate the standard by not always respecting the
volatile
qualifier.
谁是对的?
那太累了。这里肯定有很大的解释空间,这取决于您碰巧读过哪些文件,哪些没有读过,以及您如何选择解释许多不够具体的单词。似乎很明显有些不对劲:要么:
基本原理和 N1381 措辞错误或随意,或 它们被明确地追溯无效...或 该标准措辞错误或随意。
我希望我们能做得比过去似乎围绕着这一点的所有含糊不清和猜测做得更好 - 并获得一份更具决定性的声明。为此,非常欢迎专家的任何进一步来源和想法。
最佳答案
Does accessing a declared non-volatile object through a volatile reference/pointer confer volatile rules upon said accesses?
volatile
在 C 和 C++ 中并不意味着同样的事情。 C++ 标准使通过 volatile 左值的访问变得可观察。 [1] 它说它打算与 C 行为相同。这就是 C 基本原理中描述的行为。尽管如此,C 标准说对 volatile 声明的对象的访问是可观察的。 (请注意,通过非 volatile 左值访问 volatile 声明的对象是未定义的。)
volatile
(本地址文字左值被视为 volatile 对象时),如基本原理所预期的那样,由编译器之前和之后实现,由 C++ 标准解释和描述,如 DR 中更正。同样,标准很清楚,因为它没有说非 volatile 访问是可观察的,所以它们不是。 (“副作用”是用于定义评估偏序的术语。)
For C++, see also P0612R0: NB comment CH 2: volatile, which was adopted this month to clean up some leftover talk about "volatile objects" in the C++ Standard, when really accesses through volatile glvalues are what it meant (as, presumably/hopefully, what C meant).
关于c++ - 通过 volatile 引用/指针访问声明的非 volatile 对象是否赋予所述访问 volatile 规则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38243501/
Solr中有什么方法可以给同义词赋予权重? (由 SynonymFilterFactory 生成) 问题的较长版本/一些背景: 我们希望为 SynonymFilterFactory 注入(inject
假设我有一个可以扩展的 A 类。在 A 类中,我有一个列表 List 。所以这个类将包含一个包含元素 A 的列表。现在,如果我将这个类 B 扩展为 A 的子类,我希望类 B 具有相同的成员 List
有没有办法让 SKNode 拥有自己的物理特性?我有一个 SKShapeNode 调用“backGround”,我将其用作大多数其他节点的父节点。我不断地将“背景”向左移动,给人一种玩家正在前进的错觉
我想观察一个由完全独立的代码修改的 ObservableList。我的问题是,我不仅希望在列表更改时调用 ListChangeListener(当我附加监听器时,列表可能已经包含元素),而且我还希望将
我正在尝试通过按最匹配的记录对记录进行排序来改进我的网站之一中的搜索功能。 我有以下 mysql 表。 调查回复 +--------+-------------+------------------+
我想给予 最高优先级.在我的示例中,我想要 的背景-要显示的元素,而不是为 指定的内容-元素。 h1{ background-color:blue1!important } 但它在下面的上下
我正在使用 SliverAppBar和 SliverListView在我的项目中。 我需要BorderRadius到我的 SliverList这是我的 SliverAppBar 的底部. 这是我需要的
我有它,这样当您(PaintBrush)完成时,一切都会清除并出现一个按钮。单击该按钮时,它开始二级,在这里它创建一个新的 Canvas 。我添加了一些代码,以便在单击按钮时删除旧 Canvas ,然
在下面的代码中,我分析给定的包以获取使用给定注释注释的所有类。 我想将它们及其注释(及其值)加载到 map 中。 package com.test @Named("valueToStock") pub
HTML: Div CSS: body{ width: 600px; height: 600px; background: red; }
我在我的图片库中应用了 jquery lighbox,但由于图像大小可变,灯箱大小不固定,因此以图像的原始大小打开,这反过来导致 biga 图像超出屏幕并显示浏览器中的水平滚动条。 因此,我正在寻找将
无论如何,包含文件是否可以在父范围内使用到它被调用的范围?以下示例经过简化,但完成相同的工作。 本质上,一个文件将被一个函数包含,但希望被包含文件的范围是调用包含它的函数的范围。 主.php: get
我有一个 html 页面,其中包含许多使用 a 标记的链接。我想在不同的选项卡中打开所有链接,而不是在所有标签中设置 target="_blank" ,有没有像下面的css那样做: a{target=
我正在使用 Zend_Navigation 并试图将它与 Zend_Acl 集成。导航中的每个页面都有一个 privilege 属性。我无法确定的是如何为单个页面定义多个权限。 用例:用于管理用户的页
所以,我的代码(Perl 脚本和 Perl 模块)位于这样的树中: trunk/ util/ process/ scripts/ 'util' 目录有,嗯,实用程序,'pr
这个问题在这里已经有了答案: How to clone a Date object? (8 个答案) 关闭 4 年前。 我正在处理日期,我的代码如下所示: (currentDate 只是要记住的实际
我刚开始使用 Crashlytics。我已经开始探索使用日志记录并创建了一个示例 ios 项目来测试它。我可以看到 CLSLogv 命令的第一个参数,但缺少第二个参数 例子:CLSLogv("Butt
我是 asp.net 的新手,我想为链接标签添加样式。我的代码如下: Guest .userlabel { display:inline-block; text-decoration:
我有一个页面,其中我使用 HTML 表格中的 RadiobuttonList。我已经为 table 和 td 提供了 CSS 样式。我还为 RadioButtonList 提供了 CSS 样式,但它没
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我是一名优秀的程序员,十分优秀!