Questions tagged «standards»

标准已正式发布或在格式,程序或协议上达成了一致。它们允许个人或组织通过设置基本规则或界限进行协作。标准通常带有一组前提条件或假设,使合作者可以将这些条件或假设作为基础事实。

2
不推荐使用std :: iterator的准备
3月21日,标准委员会投票通过了弃用P0174中std::iterator提议的建议: 与读者typedef在类定义本身中简单地提供期望的s相比,冗长的void参数序列对读者而言并不十分清楚,这是当前工作草案采用的方法,遵循的c + + 14 之前 C ++ 17std::iterator鼓励从继承继承,以从迭代器样板实现中删除乏味。但是弃用将需要以下其中一项: 迭代器样板现在将需要包含所有必需的typedefs 使用迭代器的算法现在将需要使用auto而不是依赖迭代器来声明类型 Loki Astari建议在std::iterator_traits不继承的情况下进行更新以使其正常工作std::iterator 在设计自定义迭代器时,有人可以启发我应该选择哪些选项吗? C ++ 17 兼容性?

5
在if语句的条件部分中定义变量?
我很震惊,这是允许的: if( int* x = new int( 20 ) ) { std::cout << *x << "!\n"; // delete x; } else { std::cout << *x << "!!!\n"; // delete x; } // std:cout << *x; // error - x is not defined in this scope 那么,这是标准允许的还是仅仅是编译器扩展? 附言:由于对此有很多评论,请忽略此示例“不好”或危险。我知道 例如,这只是我想到的第一件事。

2
C ++ 11的原始字符串文字R“(…)”中括号的基本原理是什么?
C ++ 11中引入了一个非常方便的功能,称为原始字符串文字,即没有转义字符的字符串。而不是这样写: regex mask("\\t[0-9]+\\.[0-9]+\\t\\\\SUB"); 您可以简单地这样写: regex mask(R"(\t[0-9]+\.[0-9]+\t\\SUB)"); 更具可读性。但是,请注意,必须在字符串周围附加括号以定义原始字符串文字。 我的问题是,为什么我们甚至需要这些?对我来说,这看起来很丑陋且不合逻辑。这是我所看到的缺点: 额外的冗长性,而整个功能则使文字更加紧凑 难以区分文字的正文和定义的符号 我的意思是硬区分: "good old usual string literal" ^- body inside quotes -^ R"(new strange raw string literal)" ^- body inside parenthesis -^ 这是专业人士: 更大的灵活性,原始字符串中提供了更多字符,尤其是与定界符一起使用时: "delim( can use "()" here )delim" 但是,如果您需要更大的灵活性,则可以使用旧的可转义字符串字面量。为什么标准委员会决定用这些绝对不必要的括号来污染每个原始字符串文字的内容?这背后的原因是什么?我没有提到哪些专业人士? UPD Kerrek的答案很好,但不幸的是,这不是答案。由于我已经描述过,所以我了解它的工作原理以及它带来的好处。自从我问了这个问题已经过去了五年,但仍然没有答案。我仍然对该决定感到沮丧。可以说这是一种品味问题,但我不同意。你用多少空间,你怎么命名的变量,这是SomeFunction()还是some_function()-这是品味的问题。而且我真的可以轻松地从一种样式切换到另一种样式。 但这吗?。这么多年后仍然感到笨拙和笨拙。不,这与味道无关。这是关于无论如何我们都希望涵盖所有可能的情况。每当我们需要编写Windows特定路径,正则表达式或多行字符串文字时,我们注定要编写这些丑陋的括号。那又是什么?..对于那些实际上需要放入"字符串的罕见情况?我希望我在那个委员会会议上决定以这种方式这样做。我会坚决反对这个错误的决定。我希望。现在我们注定了。 感谢您阅读本文。现在我感觉好多了。 UPD2这是我的替代建议,我认为这两个建议都将比现有建议更好。 提议1.受python启发。无法支持带三引号的字符串文字:R"""Here is a …

10
如果无法实现基于REST的事务,那么REST到底有什么用呢?[关闭]
从目前的情况来看,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 10年前关闭。 研究REST时,任何人可能会注意到的第一件事是没有定义任何事务语义,有人说这与REST是隐含的,而其他人则说任何尝试都会导致REST系统的“污染”。 。 但为了争辩,可以说REST确实成为一种流行的“ api”选择,并且宇宙中的每个站点都开始公开宁静的入口点。 没有交易行为(我说的是非补偿性),这些功能到底有什么用?因为在我看来REST的好处之一是它分解了数据的组成部分,您可能会认为这使它们可以使智能客户端从多个服务中组成数据(并添加和调整组成的数据)。但是,如果我无法独立地原子地更改此数据组成,那么使用REST就变得毫无用处。 随着时间的流逝以及对严重数据公开的需求的到来,我们想要的是:简单(REST赢得了胜利),并支持事务行为,因此我们可以可靠地操作这些数据。 现在,我已经在研究中多次阅读了一个特定的论证,它与我们应该如何考虑REST中的事务有关,给出的示例是购物车,您在其中隐式具有隔离性,因为购物车是你的。 但是我不同意这种说法,首先,购物车具有隔离功能只是方便,这不是事务隔离。如果在应用程序的某些部分正在读取数据的同时对购物车进行操作,会发生什么情况从中?我不希望应用程序的读取部分看到“仍在事务中”的数据。 更不用说并非所有数据更改都具有隐式事务模型这一事实,而通过多种服务进行的事务肯定没有。 在我看来,事务需要发生,并且需要以一种使实际的REST调用不了解事实的方式发生(将剩余的负载添加为一个大的否定,但是添加标头可以)。 我已经阅读了一些有关如何通过REST创建事务模型的建议,并且正在编写的一些规范似乎是最近的。 有什么真正的想法吗?不应有比REST更多的东西,以便可以利用REST的简单性来抵制可靠的数据操纵(“酸”交易)。 如果不是,我们是否有望真正做到这一点,并告诉服务开发人员,如果他们想在纯数据世界中进行交互,他们需要支持诸如肥皂之类的单片产品吗?甚至更糟糕的尝试将自己的自定义事务支持构建到REST之类的东西中,从而使每个服务都成为非标准服务并破坏REST的全部功能? 预先感谢您的任何想法。 编辑,添加了简短的场景: 想象一下一个客户窗体,该窗体负责创建专辑,为方便该专辑,而不是要求用户提供uri的艺术家资源,他们可以从艺术家列表中选择(很可能是从艺术家目录中获取) 。 为了便于使用,客户端可以手动输入歌手姓名,以便他们可以创建歌手“内联” ..在发布场景中,客户端代码理解这一点,并且在发送创建专辑请求之前,客户端首先尝试确定如果该艺术家已经存在,则为该艺术家获取uri,否则创建该艺术家并获取该艺术家uri。 然后,客户端代码继续创建相册,这比通常的客户端更聪明,它不仅仅位于REST和“笨拙”的发布之上,而是具有一些处理纯REST逻辑的交互。 但是,在这种情况下,最好先确保不创建艺术家,除非创建了专辑,除非首先创建了艺术家。 这并不像事务所暗示的那样“关键”,但是它定义了客户端代码宁愿作为一项操作发生的一组工作(毕竟,它使用户看起来像是一项操作)。 在这种情况下,我看到的唯一指导是在专辑创建失败的情况下让客户端进行补偿操作,特别是调用删除歌手。但这似乎是有问题的,因为委托人以为艺术家是被孤立的人,尽管可能性不大,如果另一个委托人已经“看到”该艺术家并分配给他,会发生什么? 这些是我对进行数据更改的关注,虽然当然还有其他差距(谁说不能再以后删除艺术家),但是这些动作并不透明(即,这些动作不是自动进行的)客户,但用户已明确要求的内容)。 我希望这有助于阐明该主题。


1
是否将设置为CHAR_MAX的char值保证可以绕回CHAR_MIN?
我的代码: #include <stdio.h> #include <limits.h> int main() { char c = CHAR_MAX; c += 1; printf("CHAR_MIN=%d CHAR_MAX=%d c=%d (%c)\n", CHAR_MIN, CHAR_MAX, c, c); } 输出: CHAR_MIN=-128 CHAR_MAX=127 c=-128 () 我们看到,当我们将char变量设置为递增时CHAR_MAX,它会绕到CHAR_MIN。这种行为得到保证吗?还是将是未定义的行为或实现特定的行为?C99标准对此有何说法? [注意:当给char或C 大于CHAR_MAX(127)的值时会发生什么?为什么char c = 129会转换为-127?之所以没有解决这个问题,是因为他们谈论分配超出范围的值,而不是将值递增到超出范围的值。]

1
非常简单的代码中的“非法硬件指令”
在调查可疑的索赔时,我编写了这个小测试程序noway.c int proveit() { unsigned int n = 0; while (1) n++; return 0; } int main() { proveit(); return 0; } 测试一下,我得到: $ clang -O noway.c $ ./a.out zsh: illegal hardware instruction ./a.out 笏。 如果我不进行优化就进行编译,则它会按预期挂起。我看了看程序集,没有所有的花哨main功能,函数看起来像这样: _main: ## @main pushq %rbp movq %rsp, %rbp ud2 哪里 ud2显然是一个指令专门为未定义行为。前面提到的可疑声明“永不返回的函数是UB”得到了增强。我仍然很难相信。真!?您不能安全地编写自旋循环吗? 所以我想我的问题是: 这是对正在发生的事情的正确阅读吗? 如果是这样,有人可以指出我的官方资源吗? …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.