返回常量值的函数
Functions returning a const value
可能重复:
为了清楚起见,是否应该在返回类型上使用无用的类型限定符?
我对按值返回和返回常量值感到困惑。例如,在任何函数中,一旦函数完成,所有局部都会超出范围。因此,如果我从函数返回一个值,它必须是一个传递副本,除非它是通过引用返回。因此,当这种情况发生时,函数会返回一个副本,稍后可以对其进行修改。因此,即使局部变量被声明为const,我也可以在另一个变量中读取它,并轻松地修改后者。
const int DoubleValue(int nX)
{
int nValue = nX * 2;
return nValue; // A copy of nValue will be returned here
} // n
我弄不清楚const
在这里是什么意思。函数体中的nValue
是常量吗?如果我对进行赋值,就像在z = DoubleValue(x);
中一样,我显然可以修改z
。
惊愕是在什么情况下实施的?对象DoubleValue(x)
是常量对象吗?它代表什么?
有一种情况,返回常量值会产生影响。如果我在Scott Meyers的一本书中没有记错的话,如果你重载了一个运算符(比如+),并且你返回了一个不是const
的值,你可以做这样的事情:
A + B = C;
这不是你想允许的。以下代码可编译(但如果在运算符中将A
替换为const A
,则不会编译):
#include <iostream>
class A
{
public:
A(int i): i_(i) {}
A operator +(A& rhs) { return A(i_ + rhs.i_); }
private:
int i_;
};
int main(int argc, char* argv[])
{
A a(1);
A b(2);
A c(3);
a + b = c;
return 0;
}
相关文章:
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- constexpr构造函数需要常量成员函数时出现问题
- std::函数常量正确性未遵循
- 具有常量引用参数的函数模板专用化
- constexpr 函数获取常量字符*
- 在定义的函数中使用常量时出错
- Clang 格式 10.0 与 5.0 常量成员函数的格式不同
- C++ 获取函数在常量引用中按值返回的结果
- 函数签名与调用的函数不匹配,常量字符[]和字符*之间的区别?
- 为什么下面带有非常量转换函数的代码没有歧义?
- 与 map 一起使用时复制构造函数常量错误
- 静态函数常量静态成员函数
- 如何在指向常量地址时声明成员函数常量指针
- C++getter函数:常量和非常量
- C++循环中调用伪随机数生成器函数 - 常量种子问题
- 提升::任何构造函数 - 常量类型重载分辨率
- 函数常量返回类型:类型引用的初始化无效
- C++模板通过指针的函数/常量指针的函数进行的部分专用化没有什么不同
- 虚函数常量与虚函数非常量