传递参数时C++中"small object"的定义
Definition of "small object" in C++ when passing arguments
在新的《c++编程语言》一书中(可能在以前的版本中),Bjarne Stroustrup建议:
当涉及到参数传递时,小对象是否有一个共同接受的定义?例如,很明显,任何小于地址大小的对象都是小对象,但是那些比地址大小大2、3、4倍的对象呢?它们被认为是小的,应该按值传递吗?
- 对小对象使用按值传递
- 使用pass-by-const-reference传递不需要修改的大值
- …
作为工作的示例代码:
struct Vector {float x, y, z;};
我应该更喜欢:
void do_something_with_vector(Vector v){...}
或:
void do_something_with_vector(const Vector& v){...}
小对象是指大小等于或小于指针的对象。如果你传递一些更大的东西,比如你的例子中的Vector结构,那么它将被复制,这只是一个浪费:-)
相关文章:
- 当覆盖存在时调用基本虚拟"binded to object"函数
- "Unable to start debugging. No process is associated with this object." - 在Visual Studio Code中使用GDB
- C++将派生类转换为基类时'object slicing'期间发生的情况
- 如何理解 C++17 标准参考中的 [intro.object]/3? N4659 的
- "Cannot convert Python object argument to type '<typename>'" - 使用 Cython 包装 C++ 类时出错
- 使用 object 中的方法调用带有 std::bind 和 std::function.target 的 C 样式函数
- "Called Object Type is Not a Function or Pointer" 与 typedef 和类
- C++线程"Call to non-static member function without an object argument"
- dopen():不以 root 身份运行时"failed to map segment from shared object"
- VC++ wcscpy_s随机断言"Buffer is too small"
- 当两个成员位于同一类中时出错"a nonstatic member reference must be relative to a specific object"
- Nan::ObjectWrap to Napi::Object Wrap 无法访问 JavaScript 中的属性
- 现代C++会支持 C# "Object Initalizer"语法吗?
- 指向对象生存期之外的已分配内存的指针是"invalid pointer[s]"还是"pointer[s] to an object"?
- C++ Equivalent of Java Map<String, Object>
- WebKit2GTK+ "window-object-cleared"未清除
- 返回 *&object 时是否允许复制/移动省略?
- QPointer::clear() 是删除其引用的指针,还是"Clears this QPointer object."其他含义?
- 解决方法:'can not be used when making a shared object; recompile with -fPIC'使用Cmake。使用普通的 g++ 工作
- 传递参数时C++中"small object"的定义