此问题在此处已有答案:
Does it make sense to return fundamental types by const value?(11个回答)
4个月前关闭。
我尝试使用const MyClass * const
的返回类型。但是,我得到一个警告:
警告:#815-D:返回类型上的类型限定符没有意义。
这不是一个有效的类型吗?我想要一个不能被改变的指针,我希望它指向的东西也不能被改变。
此问题在此处已有答案:
Does it make sense to return fundamental types by const value?(11个回答)
4个月前关闭。
我尝试使用const MyClass * const
的返回类型。但是,我得到一个警告:
警告:#815-D:返回类型上的类型限定符没有意义。
这不是一个有效的类型吗?我想要一个不能被改变的指针,我希望它指向的东西也不能被改变。
6条答案
按热度按时间hiz5n14c1#
指针本身具有值类型,因此使其成为常量没有意义。调用者函数对返回值的操作不能受到被调用函数的限制。这类似于试图定义如下内容:
字符串
在本例中,getInt()只是返回一个int值(而不是引用)。它进入一个寄存器,然后调用函数接收它并对它做任何它想做的事情。
s3fp2yjn2#
我同意Juliano的回答,你希望指针的一致性在调用位置。
一个更好的方法是让你的函数返回一个对对象的const引用:
字符串
根据定义,引用不能被修改,所以你会更好。
当然,如果你的函数试图创建一个MyClass对象,这是行不通的。在这种情况下,你可以把额外的const移到调用位置。
型
9rnv2umw3#
为什么要关心指针是否被更改?这样做就像在说:
字符串
f()返回的值是一个拷贝--改变它什么也不会改变,所以让它成为常量没有意义。
xghobddn4#
一个简单的方法来确保你定义的是你想要的返回类型,就是总是在原始类型的右边(而不是左边)添加修饰符。
字符串
这应该有助于确保你的返回类型不再是无意义的:)
ryoqjall5#
const限定符没有任何意义,因为你返回的是一个指针
mnowg1ta6#
为什么要返回一个const值?考虑以下情况(请原谅缺乏想象力的变量名):
字符串
给定
operator+
的声明,我可以做以下事情:型
没错,我只是将
operator+
返回的临时值A
赋值给d.a
,结果d.a
的值是4,而不是5。将operator+
的返回类型更改为const A
会阻止这种赋值,导致表达式(a+b) = c
生成编译器错误。如果我试图赋值给一个从函数返回的指针或整数,我的编译器(MSVC)会生成一个“左操作数必须是l值”错误,这似乎与ARM编译器告诉你指针的常量是没有意义的一致-指针无论如何都不能被赋值。但是对于类/结构,显然可以赋值给非常量返回值。