按值返回常量和非常量
Return constant and non constant by value
有这样的代码:
const int fun(){ return 2; } // can be assigned to int and const int
int fun2(){ return 2; } // can be assigned to int and const int
使用这些函数有什么区别吗?它们都按值返回,因此总是在函数调用结束时复制。
使用这些函数有什么区别吗?
。但是,它们的类型是不同的,如果函数返回一个类类型,那么在调用返回值的方法方面就会有所不同。
返回int
时没有实际区别,基本上是因为您对内置类型的临时对象所做的任何操作只需要它的值。您可以将const引用转换为临时对象——在后一种情况下,将const引用转换为非const并通过它修改临时对象可能是有效的(如果不明智的话),但我不想费心去查找内置类型的临时对象是否真的是可变的,并且没有任何实际需要这样做。
当返回一个类类型时,有一个区别——在第二种情况下,你可以在函数的返回值上调用非const成员函数,而在第一种情况下,你不能。例如,已知std::string fun2() { return "hello"; }
,你可以做std::cout << (fun2() += " worldn");
,或std::string s("foo"); std::cout << s; fun2().swap(s); std::cout << "s";
。这些技巧是潜在的优化(特别是在c++ 11移动语义出现之前),如果fun2
返回const std::string
,它们就不起作用了。第二个技巧被称为"swaptimization",它至少告诉您它的使用足够值得命名。
使用这些函数没有区别。请注意,在优化器面前,复制发生的假设可能不正确,优化器可能会在调用位置内联值2。
相关文章:
- #定义c-预处理器常量..我做错了什么
- 用C++中的一个变量定义一个常量
- 什么时候在C++中返回常量引用是个好主意
- 代理对象的常量正确性
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 通过多个头文件使用常量变量
- 在cuda线程之间共享大量常量数据
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 是默认情况下分配给char数组常量的值
- 私有类型的静态常量成员
- OpenGL大的3D纹理(>2GB)非常慢
- 类似枚举的计算常量
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- 使用常量键但非常量值进行映射
- 为什么`is_open()`非常常量
- 从getter方法返回常量和非常量值
- 阻止const类函数在引用成员上调用非常常量类函数
- C++初始化非常大的常量数组,最佳实践
- 提高c++中非常大的常量的可读性