草庐IT

mutability

全部标签

function - 传递值时与通过引用传递时 map 的奇怪突变(Golang)

在第一种情况中,我按值将map传递给:包主import("fmt""time")functimeMap(zmap[string]interface{}){z["updated_at"]=time.Now()}funcmain(){foo:=map[string]interface{}{"Matt":42,}timeMap(foo)fmt.Println(foo)}输出是一个静音贴图:map[updated_at:2009-11-1023:00:00+0000UTCMatt:42]在第二种情况中,代码几乎相同,但通过引用传递:packagemainimport("fmt""time")f

java - 以线程安全的方式发布非线程安全的对象字段

我遇到了Java并发问题。是的,我看过标题几乎完全相同的问题,但它们似乎都在问微妙不同的事情。是的,我读过Java并发实践。是的,我明白为什么它是该主题的事实上的引用。是的,我已经阅读了专门关于在线程安全类中发布字段的部分。是的,我仍然会问一个关于Java的并发问题,尽管我知道有人会简单地指出那本书。虽然这让我感到难过——我知道您可以通过确保具有易变性和/或同步访问的正确读/写顺序,以线程安全的方式轻松发布可rebase元字段,并且64位基元需要由于在其读/写操作中缺乏原子性而具有原子访问。我知道在需要在类字段的特定“快照”上执行的代码块上使用锁。我完全了解带有AtomicLong等好

c++ - Moses 源代码中的关键字 mutable 是做什么用的?

这是关于统计机器翻译系统的源码Moses.在Mosesdecoderproject,的Factor类中关键字mutable的奇怪用法:classFactor{__SOME_OTHER_CODE__//FactorCollectionwriteshere.//Thisismutablesothepointercanbechangedtopool-backedmemory.mutableStringPiecem_stringsize_tm_id;__SOME_OTHER_CODE__}Factor.h的完整文件是here.我知道mutable用于在const成员函数中修改成员变量,或者在l

c++ - 如何写入 boost::asio::mutable_buffer?

我有一些代码为我提供了一个指向缓冲区的指针,以及我需要用数据填充的缓冲区的大小。我用boost::asio::mutable_buffer实例表示这个缓冲区,但是我如何正确使用这个缓冲区(例如,向它写入一个字符串,...)并让boost强制执行缓冲区边界?这是一些伪代码:size_tsome_callback(void*ptr,size_t){//thisfunctioniscalledby3rdpartyreturnour_handler(boost::asio::mutable_buffer(ptr,size));}size_tour_handler(constboost::asi

c++ - 在 const 方法中将 'mutable' 用于异步填充缓存

我担心我违反了mutable的约定,我使用它在异步执行按需请求的数据模型中缓存信息。数据模型恰好是Qt,尽管这不是特别重要的事实。classMyDataModel:publicQAbstractItemModel{public:QVariantdata(constQModelIndex&index,introle)constoverride;private:voidSignalRowDataUpdated(introw)const;mutableSimpleRowCachemCache;};当data()被调用时,我检查缓存看是否有它。如果没有,我会立即返回空数据(以避免阻塞UI)并向

c++ - 一个 const std::function 包装一个非常量 operator()/mutable lambda

考虑以下示例:#include#includestructA{inti;voidoperator()(){std::coutconst&fun){fun();}intmain(){conststd::functionf{A{}};test(f);test(f);}在这里,conststd::function能够调用非constoperator().输出:12如果我提供一个mutablelambda,也会发生同样的情况,例如test([x=0]()mutable{++x;});这怎么可能?conststd::function可以包装可变仿函数是否正常? 最佳答

c++ - Lambda 按值捕获和 "mutable"关键字

lambda中对关键字mutable的需求是造成极大困惑的根源。考虑代码:intx=10;functionlambda=[=]()mutable{x++;cout输出:Beforelambda:x=10Insidelambda:x=11Afterlambda:x=10正如我们所见,变量x在lambda之后保持不变,因此没有副作用。但是,如果我们“忘记”了关键字mutable,就会出现错误。作为C++中默认的按值传递参数,对我来说需要mutable关键字没有意义。有人可以编写(即使是伪代码)编译器生成的类来代替lambda吗?谢谢 最佳答案

scala - mutable.Buffer 不适用于类型安全 API 的 Scalding JobTest

我几乎完成了我的Scalding项目,该项目使用类型安全API而不是字段API。在整个项目设置中留给我的最后一个问题是整个Scalding作业本身的集成测试(我已经完成了类型安全外部操作模式的单元测试耶!)。这意味着运行完整的作业并测试我的作业的各种接收器的输出。然而,一些非常奇怪的事情正在发生。在我的typedSink{scala.collection.mutable.Buffer[]=>Unit}似乎我的程序没有看到缓冲区或对缓冲区做任何事情,所以集成测试总是通过,即使它不应该通过。下面是工作本身和有助于阐明正在发生的事情的测试:objectMyJob{valinputArgPat

C++中的mutable关键字

在C++中mutable关键字正如字面意思所示,表示「可变的」之意。一般在以下两种情况中使用较多,一是修饰类中的变量,用来突破const的限制,二是在Lambda表达式中使用,用来捕获修改表达式之外的变量值。下面我们就针对这两种使用场景逐个介绍。mutable修饰类的成员变量以下实例代码有一个类Person,内部有一个age成员变量表示年龄,有一个被const修饰的公共方法获取年龄:#includeclassPerson{public:explicitPerson(inta):age(a){}~Person(){}intgetAge()const{returnage;}private:inta

c++ - Objective C 和 C++ 中的可变性设计模式

最近为iPhone做了一些开发,我开始注意到一个有趣的设计模式在iPhoneSDK中大量使用,关于对象可变性。看起来典型的方法是定义一个不可变的类NSFoo,然后从它派生一个可变的后代NSMutableFoo。通常,NSFoo类定义了数据成员、getter和只读操作,派生的NSMutableFoo添加了setter和变异操作。由于对C++更加熟悉,我不禁注意到这似乎与我在用C++编写相同代码时所做的完全相反。虽然您当然可以采用这种方法,但在我看来更简洁的方法是创建单个Foo类,将getter和只读操作标记为const函数,并且还在同一个类中实现可变操作和setter。然后你会得到一个可