由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - const int foo()啥意思?
相关主题
再一个问题c++stl Compare为何需要重载()?
C++ operator = overloading用copy & swap有啥优点今天给c++震惊了
why copy assignment operator returns non-const type?why use static function here?
C++ template question用STL map的时候怎么自己定义大小比较的关系
C++糟粕和需要避免的。为什么在overloading中,friend <<不能读取private值呢?
请教C++11的rvalue refc++ 得最基本问题
warning: returning address of local variable or temporaryWhy should i include .cpp instead of .h
请教struct inside class的问题(C++)const X& operator+(const X& rhs) const;
相关话题的讨论汇总
话题: const话题: foo话题: assignment话题: int话题: obj
进入Programming版参与讨论
1 (共1页)
b***i
发帖数: 3043
1
C++里面,如果有一个函数
const int foo()
{
return 5;
}
或者是一个对象
const Object bar()
{
...
}
这里const干啥用的?
我同事说只能赋值给常值变量,比如const int i = foo();但是我试了,好像可以随便。
我觉得他和 const Obj& obj = bar_();混了,如果是返回一个引用。这个时候我们不
希望变量随便改写引用的内容。
l*********s
发帖数: 5409
2
奇葩
w***g
发帖数: 5958
3
没见过const这么用的。如果是constexpr,则函数会在编译时被求知。

【在 b***i 的大作中提到】
: C++里面,如果有一个函数
: const int foo()
: {
: return 5;
: }
: 或者是一个对象
: const Object bar()
: {
: ...
: }

h**l
发帖数: 168
4
to prevent assignment to bar() like bar() = Object();
typically this is used in operator methods like ++ (prevent a++++), + (
prevent a+b =c)

【在 b***i 的大作中提到】
: C++里面,如果有一个函数
: const int foo()
: {
: return 5;
: }
: 或者是一个对象
: const Object bar()
: {
: ...
: }

b***i
发帖数: 3043
5
不用const也行吧?
比如
int foo()
{
return 5;
}
也不能foo()=6啊
我说过我理解const Obj& foo(),不理解const int foo()

【在 h**l 的大作中提到】
: to prevent assignment to bar() like bar() = Object();
: typically this is used in operator methods like ++ (prevent a++++), + (
: prevent a+b =c)

h**l
发帖数: 168
6
不用const对基本类型(比如 int)是可以,对user defined type, 如果你想避免这种奇
怪的assignment, 你需要return type加const. 当然如果你要支持move semantics,就
不要这样做。
我不是说return type是const Obj&这种情况, 是 Obj 或者 const Obj

【在 b***i 的大作中提到】
: 不用const也行吧?
: 比如
: int foo()
: {
: return 5;
: }
: 也不能foo()=6啊
: 我说过我理解const Obj& foo(),不理解const int foo()

a9
发帖数: 21638
7
int a = foo();
a = 6; //这里会出异常? 我瞎猜的

【在 b***i 的大作中提到】
: 不用const也行吧?
: 比如
: int foo()
: {
: return 5;
: }
: 也不能foo()=6啊
: 我说过我理解const Obj& foo(),不理解const int foo()

b*****e
发帖数: 474
8
foo 是一个返回 const int 的函数。
这 const 是多余的。因为return 的东西是 r-value, 本来就不能改。
如果是 const char * 或者 const char &, 这里的const 是修饰char, 而不是
整个return type, 所以不是多余的。
也可以写成 char const * 或者 char const &.

【在 b***i 的大作中提到】
: C++里面,如果有一个函数
: const int foo()
: {
: return 5;
: }
: 或者是一个对象
: const Object bar()
: {
: ...
: }

h**l
发帖数: 168
9

For user-defined type, it is okay to assign to r-value, as the assignment
operator defined by the user may do something useful. It is probably not
a good practice though, but c++ standard committee may just want to allow
maximum flexibility.
Generally if we want to disable bizarre assignment statement like a+b=c or a
*b=c for user defined type, write operator+ (operator*) overload method to
return const. The disadvantage is that if a+b or a*b is used as a function
argument, they can not be bound to parameter of r-value reference type, thus
move is not allowed.

【在 b*****e 的大作中提到】
: foo 是一个返回 const int 的函数。
: 这 const 是多余的。因为return 的东西是 r-value, 本来就不能改。
: 如果是 const char * 或者 const char &, 这里的const 是修饰char, 而不是
: 整个return type, 所以不是多余的。
: 也可以写成 char const * 或者 char const &.

b***i
发帖数: 3043
10
明白了,多谢!

【在 h**l 的大作中提到】
: 不用const对基本类型(比如 int)是可以,对user defined type, 如果你想避免这种奇
: 怪的assignment, 你需要return type加const. 当然如果你要支持move semantics,就
: 不要这样做。
: 我不是说return type是const Obj&这种情况, 是 Obj 或者 const Obj

h**l
发帖数: 168
11
Another way to disable such bizarre assignment to r-value is to do the
following
MyClass& operator=(const MyClass& other) && = delete;
while at the same time allow move for r-value.

【在 b***i 的大作中提到】
: 明白了,多谢!
b***i
发帖数: 3043
12
= delete前面放个&& 这是个什么意思呢?

【在 h**l 的大作中提到】
: Another way to disable such bizarre assignment to r-value is to do the
: following
: MyClass& operator=(const MyClass& other) && = delete;
: while at the same time allow move for r-value.

h**l
发帖数: 168
13
&& means disable assignment for r-value
& means disable assignment for l-value
no & or && means disable assignment for both.

【在 b***i 的大作中提到】
: = delete前面放个&& 这是个什么意思呢?
1 (共1页)
进入Programming版参与讨论
相关主题
const X& operator+(const X& rhs) const;C++糟粕和需要避免的。
问题请教C++11的rvalue ref
C++ Q05: pointer to constant variablewarning: returning address of local variable or temporary
形参可以直接使用私有数据成员?请教struct inside class的问题(C++)
再一个问题c++stl Compare为何需要重载()?
C++ operator = overloading用copy & swap有啥优点今天给c++震惊了
why copy assignment operator returns non-const type?why use static function here?
C++ template question用STL map的时候怎么自己定义大小比较的关系
相关话题的讨论汇总
话题: const话题: foo话题: assignment话题: int话题: obj