在C ++ 11中引入了一个非常方便的function,称为原始string文字,它是不含转义字符的string。 而不是写这个: regex mask("\\t[0-9]+\\.[0-9]+\\t\\\\SUB"); 你可以简单的写下这个: regex mask(R"(\t[0-9]+\.[0-9]+\t\\SUB)"); 更可读。 但是,注意在string周围必须放置额外的圆括号来定义原始string文字。 我的问题是,为什么我们甚至需要这些? 对我来说,这看起来相当丑陋,不合逻辑。 以下是我所看到的缺点: 额外的冗长,而整个function是用来使文字更紧凑 很难区分文字的正文和定义的符号 这就是我所说的难以区分的意思: "good old usual string literal" ^- body inside quotes -^ R"(new strange raw string literal)" ^- body inside parenthesis -^ 这里是亲: 更多的灵活性,在原始string中可用的字符更多,特别是当与分隔符一起使用时: "delim( can use () here )delim" 但是,嘿,如果你需要更多的灵活性,你有老好的可逃避的string文字。 为什么标准委员会决定用这些绝对不必要的括号来污染每一个原始string的内容? 那背后的理由是什么? 我没有提到的优点是什么?
我有类别列表。 我需要排除2,3行的类别列表。 我们可以通过使用标准和限制来实现hibernate吗?
我正在写这个答案 ,我引用http://en.cppreference.com/w/cpp/string/byte/tolower#Parameters 不能表示为无符号字符,并不等于EOF,行为是未定义的 当我去检查添加了这个短语的编辑时,我发现作者的评论: 不能使用每个C99 7.4 / 1的任何ctype.h函数的带负号的字符 作者引用C ++文档中的C99标准。 这有效吗? 在C ++标准中,我找不到这个函数的定义,所以我必须假定它是有效的。 但是这个问题有两个原因: 我怎么知道C ++标准依赖于什么版本的C标准? 有C和C ++之间的差异列表。 如果我参照C ++来看C标准,我怎么可能知道我所看到的区域是否被覆盖了?
几乎所有的应用程序都有一个菜单栏,其中一些项目后面有一个省略号(…),另一些则没有。 有没有一个众所周知的什么时候把省略号放在那里,什么时候不放? 你什么时候做? 你做得到吗? 我已经看了各种Windows应用程序,这是我来到: 省略 菜单项打开一个表单,需要用户input来做些事情(replace,转到,字体) 没有省略号 菜单项只是做一些事情(剪切,粘贴,退出,保存) 菜单项打开一个表单,不需要用户input(关于,检查更新) 但是,似乎总是有菜单项不遵循这个规则。 例如Visual Studio中的帮助项目(我如何,search,索引)以及查找和replace(快速查找,查找文件,查找符号)。 所以想一想,现在我想这可能是一件事情: 省略 菜单项,肯定会打开一个模式窗口。 没有省略号 菜单项打开一个非模态窗口。 没有打开任何窗口的菜单项。 最有可能不会打开模式窗口的菜单项(如保存,如果您之前没有保存过,或者没有保存过,则会打开一个模式窗口,否则不会) 你们有什么感想?
在我上一份工作中,我们研究了一个非常重要的数据库应用程序,并且开发了一些格式化标准,这样我们就可以用通用的布局编写SQL。 我们也开发了编码标准,但是这些都是更具体的平台,所以我不会在这里讨论它们。 我很想知道其他人使用SQL格式标准。 与大多数其他编码环境不同,因为我没有在网上find很多共识。 要涵盖主要的查询types: select ST.ColumnName1, JT.ColumnName2, SJT.ColumnName3 from SourceTable ST inner join JoinTable JT on JT.SourceTableID = ST.SourceTableID inner join SecondJoinTable SJT on ST.SourceTableID = SJT.SourceTableID and JT.Column3 = SJT.Column4 where ST.SourceTableID = X and JT.ColumnName3 = Y 在“select”,“from”和“where”之后,对换行有一些不同意见。 select线上的意图是允许其他操作员(如“顶部X”)不改变布局。 接下来,简单地在关键查询元素之后保持一致的换行,似乎导致了良好的可读性水平。 在“from”和“where”之后放弃换行是一个可以理解的修改。 然而,在诸如下面的“更新”这样的查询中,我们看到“where”之后的换行给了我们很好的列alignment。 同样,在“group by”或“order by”之后的换行使我们的列布局清晰易读。 update TargetTable set ColumnName1 = @value, ColumnName2 […]
我和一个关于std::stoi的垮台的人进行了一次可爱的交谈。 说穿了,它内部使用std::strtol ,并抛出,如果报告错误。 据他们说,虽然std::strtol不应该为"abcxyz"input"abcxyz" ,导致stoi不会抛出std::invalid_argument 。 首先,这里有两个程序在GCC上testing了这些案例的行为: 与strtol Stoi旅馆 他们都在"123"上显示成功,在"abc"上显示失败。 我看了标准拉更多的信息: §21.5 Throws: invalid_argument if strtol, strtoul, strtoll, or strtoull reports that no conversion could be performed. Throws out_of_range if the converted value is outside the range of representable values for the return type. 这总结了依靠strtol的行为。 现在怎么样? 我在C11草稿中发现了这个: §7.22.1.4 If the subject sequence is empty or […]
关于交换机的标准说明如下。 “执行switch语句时,评估其条件并与每个case常量进行比较。 这是否意味着条件expression式只被一次性评估,并且由每个编译器的标准来保证呢? 例如,在switch语句头中使用某个函数时,会带来副作用。 int f() { … } switch (f()) { case …; case …; }
我刚刚在C ++ 0x中发现了这个旧的C ++ 0x草案 。 这个想法是通过编写只有.cpp文件才能离开当前的.h / .cpp系统,然后在编译过程中生成模块文件,然后再由其他.cpp文件使用。 这看起来像一个非常棒的function。 但我的问题是:为什么他们从C ++ 0x中删除它? 是因为技术上的困难太多了吗? 时间不够? 你觉得他们会考虑为它做一个更加版本的C ++吗?
来自C ++标准的$ 3.6.1 / 1节读取, 程序应该包含一个名为main的全局函数,它是程序的指定开始 。 现在考虑这个代码, int square(int i) { return i*i; } int user_main() { for ( int i = 0 ; i < 10 ; ++i ) std::cout << square(i) << endl; return 0; } int main_ret= user_main(); int main() { return main_ret; } 这个示例代码做我打算做的,即打印从0到9的整数的平方, 然后进入main()函数,该函数应该是程序的“开始”。 看看这里的输出: http : //www.ideone.com/Niy0R 我还用-pedantic选项GCC […]
对于一个项目,开发者向我们发送一个.js文件,代码如下: var myList = [1,2,3]; var a,b,c; [a,b,c] = myList; 它在Opera 10.30,Firefox 3.6.x中可用,但Opera 10.60和Chrome并不适用。 这只是好奇心,你有没有任何参考或链接,说这个代码是符合JS / ECMA标准或不? 你怎么看?