C++ 要求 OutputIterator 类型 X 支持 r++ 形式的表达式,其中 r 是 X。此后缀增量必须在语义上等同于:
(*) { X tmp = r;++r;返回 tmp; }
并且必须返回可转换为 X const& 的类型。在 C++11 中,请参阅 24.2.4(但这不是新的)。在同一部分,它说
Algorithms on output iterators should never attempt to pass through the same iterator twice. They should be single pass algorithms.
给定 (*),上面,假设我复制返回值,如 X a(r++);
假设 r 在递增之前是可解引用的,但没有被解引用。是否要求 a 是可解引用的?如果是这样,必须 X a(r++); *a = t; 执行与 *r++ = t; 否则相同的赋值? a 和 r 是否有任何(其他)条件?
否则,假设 r 在递增之前被取消引用/赋值,并且它的增量值(也)是可取消引用的。以下哪项(如果有的话)是明确定义的:(a)
*a = t;, (b) ++a; *a = t;, (c) *r = t;?
另见后续:Dereference-assignment to a doubly incremented OutputIterator
最佳答案
正如您所注意到的,r++ 具有操作语义
X operator++(int) { X tmp = r; ++r; return tmp; }
我将返回值添加为 X 因为根据 24.2.2:2 Iterator 满足 CopyConstructible,所以复制是合法的将r++的返回值构造成X类型的实例。
接下来,要求*r++ = o有效;这不同于 { const X &a(r++); *一=o; }只是增加了一个序列点,与上面操作语义定义中的return tmp;之后的序列点合并,所以复合语句有与表达式语句具有相同的有效性。通过调用 CopyConstructible,{ X a(r++); *一=o; 具有相同的有效性和操作语义。
在案例中
*r = o;
X a(r++);
以下内容:
(a) *a = o 无效,因为迭代器的那个值已经被解除引用分配;
(b) ++a; *a = o 无效,因为迭代器的值已经递增,违反了单遍要求,因为只有 r 的(新值)需要递增:根据 24.2.4:2 的注释,输出迭代器上的算法永远不应该
尝试两次通过同一个迭代器,尽管没有指定通过在此上下文中的含义;
(c) *r = o 是有效的,因为唯一的区别是 *r = o; r++; *r = o 总体上是 r 原始值的拷贝的继续存在,根据 CopyConstructible 要求对从中复制的值没有语义影响.
另一个有趣的问题是(对于非解引用分配的 r):
X a(r);
++r;
++r;
*a = o;
标准没有直接涵盖这一点,但从 CopyConstructible 看来它应该是有效的。
关于C++ OutputIterator 后递增要求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11876128/
我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server
如何将send与+=一起使用?a=20;a.send"+=",10undefinedmethod`+='for20:Fixnuma=20;a+=10=>30 最佳答案 恐怕你不能。+=不是方法,而是语法糖。参见http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html它说Incommonwithmanyotherlanguages,Rubyhasasyntacticshortcut:a=a+2maybewrittenasa+=2.你能做的最好的事情是:
我正在使用Postgres.app在OSX(10.8.3)上。我已经修改了我的PATH,以便应用程序的bin文件夹位于所有其他文件夹之前。Rammy:~phrogz$whichpg_config/Applications/Postgres.app/Contents/MacOS/bin/pg_config我已经安装了rvm并且可以毫无错误地安装pggem,但是当我需要它时我得到一个错误:Rammy:~phrogz$gem-v1.8.25Rammy:~phrogz$geminstallpgFetching:pg-0.15.1.gem(100%)Buildingnativeextension
使用rspec-rails3.0+,测试设置分为spec_helper和rails_helper我注意到生成的spec_helper不需要'rspec/rails'。这会导致zeus崩溃:spec_helper.rb:5:in`':undefinedmethod`configure'forRSpec:Module(NoMethodError)对thisissue最常见的回应是需要'rspec/rails'。但这是否会破坏仅使用spec_helper拆分rails规范和PORO规范的全部目的?或者这无关紧要,因为Zeus无论如何都会预加载Rails?我应该在我的spec_helper中做
我对如何计算通过{%assignvar=0%}赋值的变量加一完全感到困惑。这应该是最简单的任务。到目前为止,这是我尝试过的:{%assignamount=0%}{%forvariantinproduct.variants%}{%assignamount=amount+1%}{%endfor%}Amount:{{amount}}结果总是0。也许我忽略了一些明显的东西。也许有更好的方法。我想要存档的只是获取运行的迭代次数。 最佳答案 因为{{incrementamount}}将输出您的变量值并且不会影响{%assign%}定义的变量,我
我有很多这样的文档:foo_1foo_2foo_3bar_1foo_4...我想通过获取foo_[X]的所有实例并将它们中的每一个替换为foo_[X+1]来转换它们。在这个例子中:foo_2foo_3foo_4bar_1foo_5...我可以用gsub和一个block来做到这一点吗?如果不是,最干净的方法是什么?我真的在寻找一个优雅的解决方案,因为我总是可以暴力破解它,但我觉得有一些正则表达式技巧值得学习。 最佳答案 我(完全)不懂Ruby,但类似这样的东西应该可以工作:"foo_1foo_2".gsub(/(foo_)(\d+)/
我有一个数组数组,想将元素附加到子数组。+=做我想做的,但我想了解为什么push不做。我期望的行为(并与+=一起工作):b=Array.new(3,[])b[0]+=["apple"]b[1]+=["orange"]b[2]+=["frog"]b=>[["苹果"],["橙子"],["Frog"]]通过推送,我将推送的元素附加到每个子数组(为什么?):a=Array.new(3,[])a[0].push("apple")a[1].push("orange")a[2].push("frog")a=>[[“苹果”、“橙子”、“Frog”]、[“苹果”、“橙子”、“Frog”]、[“苹果”、“
我正在尝试解决http://projecteuler.net/problem=1.我想创建一个方法,它接受一个整数,然后创建一个包含它前面的所有整数的数组,并将整数本身作为数组中的值。以下是我目前所拥有的。代码不起作用。defmake_array(num)numbers=Array.newnumcount=1numbers.eachdo|number|numbers 最佳答案 (1..num).to_a是您在Ruby中需要做的全部。1..num将创建一个Range对象,以1开始并以任意值num结束是。Range对象有to_a方法通过
有没有办法让Ruby能够做这样的事情?classPlane@moved=0@x=0defx+=(v)#thisiserror@x+=v@moved+=1enddefto_s"moved#{@moved}times,currentxis#{@x}"endendplane=Plane.newplane.x+=5plane.x+=10putsplane.to_s#moved2times,currentxis15 最佳答案 您不能在Ruby中覆盖复合赋值运算符。任务在内部处理。您应该覆盖+,而不是+=。plane.a+=b与plane.a=
出于某种原因,heroku尝试要求dm-sqlite-adapter,即使它应该在这里使用Postgres。请注意,这发生在我打开任何URL时-而不是在gitpush本身期间。我构建了一个默认的Facebook应用程序。gem文件:source:gemcuttergem"foreman"gem"sinatra"gem"mogli"gem"json"gem"httparty"gem"thin"gem"data_mapper"gem"heroku"group:productiondogem"pg"gem"dm-postgres-adapter"endgroup:development,:t