Tag: pass by reference

C ++视图types:通过const&或通过值?

这是最近在代码审查讨论中提出的,但没有得到令人满意的结论。 所讨论的types与C ++ string_view TS类似。 他们是简单的非拥有包装指针和长度,用一些自定义函数装饰: #include <cstddef> class foo_view { public: foo_view(const char* data, std::size_t len) : _data(data) , _len(len) { } // member functions related to viewing the 'foo' pointed to by '_data'. private: const char* _data; std::size_t _len; }; 问题出现在于是否有一个参数可以通过值或const引用传递这种视图types(包括即将到来的string_view和array_viewtypes)。 赞成按值传递的论据等于“较less打字”,“如果视图具有有意义的突变,则可以突变本地副本”,以及“可能效率不高”。 支持传递const引用的论据相当于“更习惯于通过const&传递对象”和“可能效率不高”。 是否有任何额外的考虑可能以某种方式决定性地摆动论点,或者根据价值或常量引用来传递惯用视图types。 对于这个问题,假定C ++ 11或C ++ 14语义以及足够现代的工具链和目标体系结构是安全的。

为什么在传递对象时使用'ref'关键字?

如果我传递一个对象到一个方法,为什么我应该使用ref关键字? 这不是默认行为吗? 例如: class Program { static void Main(string[] args) { TestRef t = new TestRef(); t.Something = "Foo"; DoSomething(t); Console.WriteLine(t.Something); } static public void DoSomething(TestRef t) { t.Something = "Bar"; } } public class TestRef { public string Something { get; set; } } 输出是“Bar”,这意味着对象被作为参考传递。