由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 今天给c++震惊了
相关主题
C语言里面的register变量能否进行取地址操作? (转载)问几句汇编指令(assembly language)
请教C++11的rvalue refstl Compare为何需要重载()?
指针的大小是 4 byte还是有赖于系统?有个SB interviewer和我说++i比i++好 (转载)
C++ pointer to function is buggy请问关于overloading <<
容器中放置智能指针一问C++ operator = overloading用copy & swap有啥优点
C++命名空间和算子重载leetcode上一个问题请教
问个c++的弱问题const int foo()啥意思?
再一个问题c++前几天有人问rvalue reference的
相关话题的讨论汇总
话题: lvalue话题: rvalue话题: c++话题: operator话题: int
进入Programming版参与讨论
1 (共1页)
m*********a
发帖数: 3299
1
今天给c++震惊了
(*p).和p->居然是不一样的
p->返回的是lvalue
(*p).是lvalue 如果他的值是lvalue,是rvalue如果返回的值是rvalue
觉得(*p).更合理
想不明白,为啥p->一定要返回lvalue
如果p->返回一个12的值,难道这个12的值,临时放在int tmp=12中
p->xxx=100; 这样临时的tmp值就是100了?
没有想到他有啥用途
m*********a
发帖数: 3299
2
想到一点是不是这样的
class MyClass{
public:
int val;
};
MyClass myClass;
MyClass *p=&myClass;
p->val=100;//legal, p-val return an lvalue
(*p).val=100;//(*p).val这儿也不是an rvlaue,而是an lvalue
b*******s
发帖数: 5216
3
think it over

【在 m*********a 的大作中提到】
: 想到一点是不是这样的
: class MyClass{
: public:
: int val;
: };
: MyClass myClass;
: MyClass *p=&myClass;
: p->val=100;//legal, p-val return an lvalue
: (*p).val=100;//(*p).val这儿也不是an rvlaue,而是an lvalue

m*********a
发帖数: 3299
4
肯定是那个地方没有理解对,才有疑问的
可能我的例子中返回的都是lvalue?

【在 b*******s 的大作中提到】
: think it over
D***n
发帖数: 6804
5
这两者是一样的。
你从哪里看到不一样?

【在 m*********a 的大作中提到】
: 今天给c++震惊了
: (*p).和p->居然是不一样的
: p->返回的是lvalue
: (*p).是lvalue 如果他的值是lvalue,是rvalue如果返回的值是rvalue
: 觉得(*p).更合理
: 想不明白,为啥p->一定要返回lvalue
: 如果p->返回一个12的值,难道这个12的值,临时放在int tmp=12中
: p->xxx=100; 这样临时的tmp值就是100了?
: 没有想到他有啥用途

m*********a
发帖数: 3299
6
primer c++ 5

【在 D***n 的大作中提到】
: 这两者是一样的。
: 你从哪里看到不一样?

m*********a
发帖数: 3299
7
原话
The arrow operator requires a pointer operand and yields an lvalue.
The dot operator yields an lvalue if the object from which the member is
fetched is an lvalue; otherwise the result is an rvalue.
D***n
发帖数: 6804
8
C++书里面充斥着这些无聊的内容。这些也是C++失败的地方。
如果没有overloading的情况,(*P).xxxx 和 P->xxxx是完全一样的。
The expression E1->E2 is converted to the equivalent form (*(E1)).E2;
C++标准,5.2.5 Class member

【在 m*********a 的大作中提到】
: 原话
: The arrow operator requires a pointer operand and yields an lvalue.
: The dot operator yields an lvalue if the object from which the member is
: fetched is an lvalue; otherwise the result is an rvalue.

N******K
发帖数: 10202
9
谭浩强的c++?

【在 m*********a 的大作中提到】
: 今天给c++震惊了
: (*p).和p->居然是不一样的
: p->返回的是lvalue
: (*p).是lvalue 如果他的值是lvalue,是rvalue如果返回的值是rvalue
: 觉得(*p).更合理
: 想不明白,为啥p->一定要返回lvalue
: 如果p->返回一个12的值,难道这个12的值,临时放在int tmp=12中
: p->xxx=100; 这样临时的tmp值就是100了?
: 没有想到他有啥用途

S*A
发帖数: 7142
10
被LZ震惊了。
这些东西多看看原版的spec是如何
写的。很多二手总结不一定是对的。
就和那个const的理解一样,你先理解
对了再来批判别人愚昧。
相关主题
C++命名空间和算子重载问几句汇编指令(assembly language)
问个c++的弱问题stl Compare为何需要重载()?
再一个问题c++有个SB interviewer和我说++i比i++好 (转载)
进入Programming版参与讨论
m*********a
发帖数: 3299
11
primer c++ 5
The arrow operator requires a pointer operand and yields an lvalue.
The dot operator yields an lvalue if the object from which the member is
fetched is an lvalue; otherwise the result is an rvalue.

【在 N******K 的大作中提到】
: 谭浩强的c++?
m*********a
发帖数: 3299
12
这个是
primer c++ 5
The arrow operator requires a pointer operand and yields an lvalue.
The dot operator yields an lvalue if the object from which the member is
fetched is an lvalue; otherwise the result is an rvalue.
除非这个是不对的,啥叫原版?我没有看过中文的计算机教程
对我来说,英文比中文好理解
所以,批评别人,也要看看自己的批评的方向对不对

【在 S*A 的大作中提到】
: 被LZ震惊了。
: 这些东西多看看原版的spec是如何
: 写的。很多二手总结不一定是对的。
: 就和那个const的理解一样,你先理解
: 对了再来批判别人愚昧。

m*********a
发帖数: 3299
13
我来这儿是讨论的,提高理解
如果哪儿不对,你学过了,可以提
我没有批判别人愚昧
如果我都懂了,我来这儿也就像你一样,娱乐一下
不想回答的话,你可以不回答
没有人强迫你回答
这个版面能发帖,是有版规决定的
不是啥“牛人”规定的,如果你是牛人,也就不会到这儿了
比尔盖兹级别还是不多
不要以为多学几年,自己的智商就高了
你以为计算机的东西 是普通人无法理解的?
就是有没有学过的问题。
做人不要自以为是,别人当你是傻逼知道不?

【在 S*A 的大作中提到】
: 被LZ震惊了。
: 这些东西多看看原版的spec是如何
: 写的。很多二手总结不一定是对的。
: 就和那个const的理解一样,你先理解
: 对了再来批判别人愚昧。

m*********a
发帖数: 3299
14
如果是overload,那就无所谓
我是以为,就是这么定义的

【在 D***n 的大作中提到】
: C++书里面充斥着这些无聊的内容。这些也是C++失败的地方。
: 如果没有overloading的情况,(*P).xxxx 和 P->xxxx是完全一样的。
: The expression E1->E2 is converted to the equivalent form (*(E1)).E2;
: C++标准,5.2.5 Class member

d****i
发帖数: 4809
15
这两个是等价的,这个就是C里面的东西,和C++无关。你下面这段代码编译没有任何问
题。
在 mdrosophila (ranger) 的大作中提到: 】
m*********a
发帖数: 3299
16
我改了,是没有问题。所以我根本不知道这本书中讲的是啥原理了

【在 d****i 的大作中提到】
: 这两个是等价的,这个就是C里面的东西,和C++无关。你下面这段代码编译没有任何问
: 题。
: 在 mdrosophila (ranger) 的大作中提到: 】

D***n
发帖数: 6804
17
如果你真的用C++干一些严肃的项目,那么各种官方标准会很重要。
可以不全看,可以不常看,但是遇到犹豫的事情那是一定要翻。

【在 m*********a 的大作中提到】
: 如果是overload,那就无所谓
: 我是以为,就是这么定义的

l*********s
发帖数: 5409
18
SSA确实是大牛,你这几天drama也确实是有点多。马工强调的是实践,死抱书袋,扣
spec的细节没有意义。

【在 m*********a 的大作中提到】
: 我来这儿是讨论的,提高理解
: 如果哪儿不对,你学过了,可以提
: 我没有批判别人愚昧
: 如果我都懂了,我来这儿也就像你一样,娱乐一下
: 不想回答的话,你可以不回答
: 没有人强迫你回答
: 这个版面能发帖,是有版规决定的
: 不是啥“牛人”规定的,如果你是牛人,也就不会到这儿了
: 比尔盖兹级别还是不多
: 不要以为多学几年,自己的智商就高了

l*********s
发帖数: 5409
19
re

【在 D***n 的大作中提到】
: C++书里面充斥着这些无聊的内容。这些也是C++失败的地方。
: 如果没有overloading的情况,(*P).xxxx 和 P->xxxx是完全一样的。
: The expression E1->E2 is converted to the equivalent form (*(E1)).E2;
: C++标准,5.2.5 Class member

m*********a
发帖数: 3299
20
看到一个区别是
The Dot (.) operator can't be overloaded, arrow (->) operator can be
overloaded.

【在 D***n 的大作中提到】
: 如果你真的用C++干一些严肃的项目,那么各种官方标准会很重要。
: 可以不全看,可以不常看,但是遇到犹豫的事情那是一定要翻。

相关主题
请问关于overloading <<const int foo()啥意思?
C++ operator = overloading用copy & swap有啥优点前几天有人问rvalue reference的
leetcode上一个问题请教关于placement new
进入Programming版参与讨论
d****i
发帖数: 4809
21
That's why you need to take extra caution if you want to do operator
overloading. It can be easily abused or misused and cause nonsensible
behaviour.

【在 m*********a 的大作中提到】
: 看到一个区别是
: The Dot (.) operator can't be overloaded, arrow (->) operator can be
: overloaded.

a*********a
发帖数: 3656
22
果蝇还是回去刷试管吧。你关家里啃一万年C++,对美国的贡献赶不上snoop dog一根阴
毛的。

【在 m*********a 的大作中提到】
: 今天给c++震惊了
: (*p).和p->居然是不一样的
: p->返回的是lvalue
: (*p).是lvalue 如果他的值是lvalue,是rvalue如果返回的值是rvalue
: 觉得(*p).更合理
: 想不明白,为啥p->一定要返回lvalue
: 如果p->返回一个12的值,难道这个12的值,临时放在int tmp=12中
: p->xxx=100; 这样临时的tmp值就是100了?
: 没有想到他有啥用途

l*******b
发帖数: 2586
23
*p能返回rvalue ?

【在 m*********a 的大作中提到】
: 原话
: The arrow operator requires a pointer operand and yields an lvalue.
: The dot operator yields an lvalue if the object from which the member is
: fetched is an lvalue; otherwise the result is an rvalue.

m*********a
发帖数: 3299
24
好像你的贡献对美国赶的上snoop dog一根阴毛的?
回你的地下室撸管去吧,别忘了吃脑残片。

【在 a*********a 的大作中提到】
: 果蝇还是回去刷试管吧。你关家里啃一万年C++,对美国的贡献赶不上snoop dog一根阴
: 毛的。

m*********a
发帖数: 3299
25
还是你自以为是,以为比snoop dog还牛了
snoop dog 至少是名人,做做广告就和你不是同一个阶层的
不要说名气了,这是wsn的钱到snoop dog,就行了
估计你这样性格的是不可能的,先把钱到$135 millions再说
估计真个mitbss也没有几个这么有钱的
同样有名的就更少了
我是觉得不可能比得上snoop dog
你是自己delusional,觉得比 snoop dog 牛

【在 a*********a 的大作中提到】
: 果蝇还是回去刷试管吧。你关家里啃一万年C++,对美国的贡献赶不上snoop dog一根阴
: 毛的。

m*********a
发帖数: 3299
26
对了,考虑到你是种族歧视分子,黑人都没有啥,白人才是你添的对象
最好美国都是你的白人主子
黑人乔丹在你看来也是一坨屎,贡献还不如你。
D***n
发帖数: 6804
27
你需要记住的就是一条规则:
基本操作符都不能overloading:)

【在 m*********a 的大作中提到】
: 看到一个区别是
: The Dot (.) operator can't be overloaded, arrow (->) operator can be
: overloaded.

f****4
发帖数: 1359
28
c++ primer 5, p150
原文"ptr->mem is a synonym for (*ptr).mem"
所以你说的“(*p).和p->居然是不一样的”是不成立的。
你引用的那段话说的是arrow operator和dot operator的区别
我的理解是因为->必须要指针,所以结果必然是lvalue
.的那部分,我找了一下
http://bytes.com/topic/c/answers/498004-r-r-value-vs-l-value
there are three different contexts where an expression can
appear.
1) A context expecting an rvalue.
2) A context expecting an lvalue.
3) A context accepting both an rvalue or an lvalue (in that case,
semantics are slightly different depending on the type of the
expression). This third category mainly exists in C++.
The dot operator (member access) for non-static data members (in C all
members are non-static data members) can accept an rvalue or an lvalue
(even in C, this operator enters in the third category).
If the operand is an lvalue, the expression is an lvalue.
If the operand is an rvalue, the expression is an rvalue.
按照我的理解写了个例子
struct A {
int x;
};
A f() { return A();}
int main() {
A test;
f().x;
//f().x = 1;
test.x = 1;
}
要是我的理解有误,欢迎指正

【在 m*********a 的大作中提到】
: 今天给c++震惊了
: (*p).和p->居然是不一样的
: p->返回的是lvalue
: (*p).是lvalue 如果他的值是lvalue,是rvalue如果返回的值是rvalue
: 觉得(*p).更合理
: 想不明白,为啥p->一定要返回lvalue
: 如果p->返回一个12的值,难道这个12的值,临时放在int tmp=12中
: p->xxx=100; 这样临时的tmp值就是100了?
: 没有想到他有啥用途

m*********a
发帖数: 3299
29
你这个然我想到了一个dot operator不和指针用的时候比如引用
static member的时候,就是rvalue,
->必须和指针用所以是lvalue。
和指针用的时候,肯定是lvalue. 就如楼上说的,我想不到
指针还能返回rvalue的
rvalue是 lvalue的一个subset,
接受rvalue的地方,也接受lvalue
a=1;//1 rvalue
a=b;//b lvalue

【在 f****4 的大作中提到】
: c++ primer 5, p150
: 原文"ptr->mem is a synonym for (*ptr).mem"
: 所以你说的“(*p).和p->居然是不一样的”是不成立的。
: 你引用的那段话说的是arrow operator和dot operator的区别
: 我的理解是因为->必须要指针,所以结果必然是lvalue
: .的那部分,我找了一下
: http://bytes.com/topic/c/answers/498004-r-r-value-vs-l-value
: there are three different contexts where an expression can
: appear.
: 1) A context expecting an rvalue.

N******K
发帖数: 10202
30
折腾这些jb玩意 没jb用 还是做几个练习项目 学得快

【在 m*********a 的大作中提到】
: 你这个然我想到了一个dot operator不和指针用的时候比如引用
: static member的时候,就是rvalue,
: ->必须和指针用所以是lvalue。
: 和指针用的时候,肯定是lvalue. 就如楼上说的,我想不到
: 指针还能返回rvalue的
: rvalue是 lvalue的一个subset,
: 接受rvalue的地方,也接受lvalue
: a=1;//1 rvalue
: a=b;//b lvalue

相关主题
*(&b1)=b编译不过,b1=b可以,区别是?请教C++11的rvalue ref
0 < -1 ? A c++ question指针的大小是 4 byte还是有赖于系统?
C语言里面的register变量能否进行取地址操作? (转载)C++ pointer to function is buggy
进入Programming版参与讨论
L*D
发帖数: 49
31
lz没搞懂什么是rvalue。书上那段话是没错,rvalue的.运算结果还是rvalue。
但是你给的例子*p就不可能是rvalue,所以(*p).也不可能是rvalue。
下面这种例子才.运算符返回rvalue:
struct a {
int x;
};
int main()
{
int x = ((a){1}).x; //((a){1}) is rvalue, so ((a){1}).x is also rvalue
// ((a){1}).x = 2; // this is wrong, cannot assign to rvalue
}
h**********c
发帖数: 4120
32
nothing to shock,
当年学编理,老师说小盆友怕错,就看中间码
可能学javascript 都学岔劈了
v*****n
发帖数: 30
33
(*). 是两个操作符
. 的值依赖于它的操作对象
Primer写的很对你没理解好
-> 等价 *. (是2个的组合),如果一定是 *. 组合一起的话返回值总是lvalue,因
为*的结果是lvalue
但是如果你单独用.的话,就不一样了
这和c++没关系,这是基本的语言语法,所有语言都差不多这么搞啊
w*********l
发帖数: 1337
34
你这段英文说的没错,但是也不说明p->不等同于(*p).
你自己再好好想想。

【在 m*********a 的大作中提到】
: 这个是
: primer c++ 5
: The arrow operator requires a pointer operand and yields an lvalue.
: The dot operator yields an lvalue if the object from which the member is
: fetched is an lvalue; otherwise the result is an rvalue.
: 除非这个是不对的,啥叫原版?我没有看过中文的计算机教程
: 对我来说,英文比中文好理解
: 所以,批评别人,也要看看自己的批评的方向对不对

m*********a
发帖数: 3299
35
我明白你的意思
不过你的例子不对
((a){1}).x是lvalue,可以assign
a{1}.x=100是可以的

rvalue

【在 L*D 的大作中提到】
: lz没搞懂什么是rvalue。书上那段话是没错,rvalue的.运算结果还是rvalue。
: 但是你给的例子*p就不可能是rvalue,所以(*p).也不可能是rvalue。
: 下面这种例子才.运算符返回rvalue:
: struct a {
: int x;
: };
: int main()
: {
: int x = ((a){1}).x; //((a){1}) is rvalue, so ((a){1}).x is also rvalue
: // ((a){1}).x = 2; // this is wrong, cannot assign to rvalue

m*********a
发帖数: 3299
36
f()
你的f().x是lvalue
看看我的const static int 是不是rvalue
不能进行test.y的赋值
我不知道是因为const还是因为rvalue
struct A {
const static int y=10;
int x;
};
A f() { return A();}
int main() {
A test;
int a=test.y;
test.y=15;
}

【在 f****4 的大作中提到】
: c++ primer 5, p150
: 原文"ptr->mem is a synonym for (*ptr).mem"
: 所以你说的“(*p).和p->居然是不一样的”是不成立的。
: 你引用的那段话说的是arrow operator和dot operator的区别
: 我的理解是因为->必须要指针,所以结果必然是lvalue
: .的那部分,我找了一下
: http://bytes.com/topic/c/answers/498004-r-r-value-vs-l-value
: there are three different contexts where an expression can
: appear.
: 1) A context expecting an rvalue.

m*********a
发帖数: 3299
37
这儿这么多的c/c++ 的程序员,到现在给出
dot operator 的rvalue都是错的,难道他们都有问题
他们觉得是rvalue的东西,实际上是lvalue
你还觉得这个设计是合理的?

【在 w*********l 的大作中提到】
: 你这段英文说的没错,但是也不说明p->不等同于(*p).
: 你自己再好好想想。

m*********a
发帖数: 3299
38
真在找啊,我也知道这个重要
但是这是我第一次系统的看c++的书,还是要想看一遍

【在 N******K 的大作中提到】
: 折腾这些jb玩意 没jb用 还是做几个练习项目 学得快
f****4
发帖数: 1359
39
我终于明白问题在哪了:你根本就没明白啥是rvalue
const static int你想想语言允许你修改么?
我例子里面的f().x是lvalue的话,为啥不能赋值?我可没有const在里面
人家给你的例子是((a){1}).x 是rvalue,你反驳说它是lvalue,因为a{1}.x=100是可
以的,搞笑?
原文说的是dot operator,你却把它当作(*p).
新标里面搞这个rvalue,lvalue是为了move,搞不清楚就不要轻易用

【在 m*********a 的大作中提到】
: 这儿这么多的c/c++ 的程序员,到现在给出
: dot operator 的rvalue都是错的,难道他们都有问题
: 他们觉得是rvalue的东西,实际上是lvalue
: 你还觉得这个设计是合理的?

m*********a
发帖数: 3299
40
你的例子当然是可以赋值的
他的例子了也是可以赋值的
所以都是assignable lvalue
你先把lvalue 和 rvalue搞清楚再说吧

【在 f****4 的大作中提到】
: 我终于明白问题在哪了:你根本就没明白啥是rvalue
: const static int你想想语言允许你修改么?
: 我例子里面的f().x是lvalue的话,为啥不能赋值?我可没有const在里面
: 人家给你的例子是((a){1}).x 是rvalue,你反驳说它是lvalue,因为a{1}.x=100是可
: 以的,搞笑?
: 原文说的是dot operator,你却把它当作(*p).
: 新标里面搞这个rvalue,lvalue是为了move,搞不清楚就不要轻易用

相关主题
C++ pointer to function is buggy问个c++的弱问题
容器中放置智能指针一问再一个问题c++
C++命名空间和算子重载问几句汇编指令(assembly language)
进入Programming版参与讨论
m*********a
发帖数: 3299
41
struct A {
int x;
};
A f() { return A();}
int main() {
std::cout<<(f().x=999)< std::cout<<(A{1}.x=9999)< }
h***o
发帖数: 30
42
well-known msvc bug
http://cpprocks.com/44-c11-bugs-fixed-in-visual-studio-2013/

【在 m*********a 的大作中提到】
: struct A {
: int x;
: };
: A f() { return A();}
: int main() {
: std::cout<<(f().x=999)<: std::cout<<(A{1}.x=9999)<: }

m*********a
发帖数: 3299
43
还有这个知道了。 code::block 还没有fix这个bug
这是为啥我都晕了,在code::block都是可以assignable lvalue的
但是标准应该是一个是lvalue一个是rvalue
MyClass & f()//return lvalue
MyClass f()//return rvalue
Assignment to rvalues
Visual Studio 2012 didn’t forbid assignment to rvalues as required by the
standard:
struct Dummy
{
int _x;
};
Dummy get_dummy()
{
Dummy d = { 10 };
return d;
}
get_dummy()._x = 20;

【在 h***o 的大作中提到】
: well-known msvc bug
: http://cpprocks.com/44-c11-bugs-fixed-in-visual-studio-2013/

f****4
发帖数: 1359
44
那你现在知道f().x是l还是r?
((a){1}).x,4.8.1直接报临时变量不能修改,是l还是r?

【在 m*********a 的大作中提到】
: 还有这个知道了。 code::block 还没有fix这个bug
: 这是为啥我都晕了,在code::block都是可以assignable lvalue的
: 但是标准应该是一个是lvalue一个是rvalue
: MyClass & f()//return lvalue
: MyClass f()//return rvalue
: Assignment to rvalues
: Visual Studio 2012 didn’t forbid assignment to rvalues as required by the
: standard:
: struct Dummy
: {

m*********a
发帖数: 3299
45
code::block 还没有fix 这个bug
还是可以修改的
但是现在知道标准是 rvalue
就和 A f()
f().x是rvalue
就是在code::block中可以 assign
所以实践不一定是检验真理(标准)的唯一方法
以前 很confuse,现在你说是bug就解决问题了

【在 f****4 的大作中提到】
: 那你现在知道f().x是l还是r?
: ((a){1}).x,4.8.1直接报临时变量不能修改,是l还是r?

f****4
发帖数: 1359
46
https://gcc.gnu.org/projects/cxx0x.html
装4.8.3
你明年要去GT的高性能计算?
不然没理由逆潮流而行啊

【在 m*********a 的大作中提到】
: code::block 还没有fix 这个bug
: 还是可以修改的
: 但是现在知道标准是 rvalue
: 就和 A f()
: f().x是rvalue
: 就是在code::block中可以 assign
: 所以实践不一定是检验真理(标准)的唯一方法
: 以前 很confuse,现在你说是bug就解决问题了

m*********a
发帖数: 3299
47
software engineering
同时学点high performance计算的东西
现在都不会

【在 f****4 的大作中提到】
: https://gcc.gnu.org/projects/cxx0x.html
: 装4.8.3
: 你明年要去GT的高性能计算?
: 不然没理由逆潮流而行啊

f****4
发帖数: 1359
48
你真会挑,一个是人性的,一个是反人性的
可以考虑下他们的用户交流的方向,比较适合女生

【在 m*********a 的大作中提到】
: software engineering
: 同时学点high performance计算的东西
: 现在都不会

m*********a
发帖数: 3299
49
我和我老婆公用一个帐号,我是男的。

【在 f****4 的大作中提到】
: 你真会挑,一个是人性的,一个是反人性的
: 可以考虑下他们的用户交流的方向,比较适合女生

D***n
发帖数: 6804
50
你需要知道编译器在看到你这段话的时候真正干了啥。
1)当编译器看到const的时候,它知道这个东西是不会改变的。
2)当编译器看到static的时候,它知道要把这个东西放到一个特殊的内存区域,并且
在程序载入的时候初始化(理解这点特别重要)。
一个东西又是const又是static,理论上来说,应该在内存静态变量区创建一个变量,
把具体数字塞进去,然后其他人在访问结构的时候可以通过地址访问它....
但是实际上,编译器会在相应的struct的代码段上直接计算出常量并且写进去(内存访
问两次跳跃),一个在代码段的常量当然无法赋值。
你那个程序的main实际上是这样的:
int main() {
A test;
int a=10;
10=15; /* 错误 */
}
理解了这一点你可以省掉那些 C++书上一万个blah, blah, blah

f()
你的f().x是lvalue
看看我的const static int 是不是rvalue
不能进行test.y的赋值
我不知道是因为const还是因为rvalue
struct A {
const static int y=10;
int x;
};
A f() { return A();}
int main() {
A test;
int a=test.y;
test.y=15;
}

【在 m*********a 的大作中提到】
: f()
: 你的f().x是lvalue
: 看看我的const static int 是不是rvalue
: 不能进行test.y的赋值
: 我不知道是因为const还是因为rvalue
: struct A {
: const static int y=10;
: int x;
: };
: A f() { return A();}

相关主题
stl Compare为何需要重载()?C++ operator = overloading用copy & swap有啥优点
有个SB interviewer和我说++i比i++好 (转载)leetcode上一个问题请教
请问关于overloading <<const int foo()啥意思?
进入Programming版参与讨论
w*********l
发帖数: 1337
51
驴唇不对马嘴。你自己好好学学英文,看看你贴的那段话什么意思。
另,这里的人水平都很低。最早前面贴帖子那些人都不用看了。

【在 m*********a 的大作中提到】
: 这儿这么多的c/c++ 的程序员,到现在给出
: dot operator 的rvalue都是错的,难道他们都有问题
: 他们觉得是rvalue的东西,实际上是lvalue
: 你还觉得这个设计是合理的?

S*A
发帖数: 7142
52
这个需要读读 C 的官方spec
google C99 stander pdf
这些都说很清楚的,最适合抠字眼了。
a*********a
发帖数: 3656
53
我是转述你的话啊?所有华人马工对美国的贡献,赶不上一个迈克杰克逊,或这迈克乔
丹。
你说可以,我说几乎同样的话就不行?
你还说过:杀光亚裔,美国会更好;美国最牛逼的时候就是排华法案期间。你咋还没实
践你的理论,率先自决呢?

【在 m*********a 的大作中提到】
: 好像你的贡献对美国赶的上snoop dog一根阴毛的?
: 回你的地下室撸管去吧,别忘了吃脑残片。

m*********a
发帖数: 3299
54
不错就这样的,华人马工有个啥屁东西
连上个director级别几乎没有
能和国内有几万建立和apple google amazon microsoft ebay yahoo bloomberg
同一级的公司的director和CEO比?
做个85智商就可以干的高级技工有你没你都无所谓
这就是别人挑你,85智商的阿三也可以欺负的原因
为啥,无能啊,不是智商不够,是没有情商开amazon这个公司的

【在 a*********a 的大作中提到】
: 我是转述你的话啊?所有华人马工对美国的贡献,赶不上一个迈克杰克逊,或这迈克乔
: 丹。
: 你说可以,我说几乎同样的话就不行?
: 你还说过:杀光亚裔,美国会更好;美国最牛逼的时候就是排华法案期间。你咋还没实
: 践你的理论,率先自决呢?

w***g
发帖数: 5958
55
本来社会分工就各不相同。刷试管的精通刷试管,码程序的精通码程序的,搞政治的精
通搞政治,director和CEO也都有人在做。就像新华字典说的,
张华考上了北京大学;李萍进了中等技术学校;我在百货公司当售货员:我们都有光明
的前途。
光明的前途说不上,大家都尽己所长给社会做贡献。有人码了几年程序发现自己更擅长
做别的,就去做director和CEO了,也未尝不可。但是也有人就是喜欢码程序,不喜欢
搞政治,也有人要朝九晚五周末在家带小孩的,不愿意去搞startup。
我觉得也没啥问题。你羡慕那些成功商人也没啥问题,你尽管往那个方向努力好了。
但是你学码程序干嘛?

【在 m*********a 的大作中提到】
: 不错就这样的,华人马工有个啥屁东西
: 连上个director级别几乎没有
: 能和国内有几万建立和apple google amazon microsoft ebay yahoo bloomberg
: 同一级的公司的director和CEO比?
: 做个85智商就可以干的高级技工有你没你都无所谓
: 这就是别人挑你,85智商的阿三也可以欺负的原因
: 为啥,无能啊,不是智商不够,是没有情商开amazon这个公司的

m*********a
发帖数: 3299
56
说你不懂交流还不服
好像社会分工是印度caste系统一样
对社会的基本看法都是小学生的水平
马工的智商要求低,现在的产业扩张,当然
其他行业的人要来
印度人85的智商,二流学校不用考GRE托福直接拉到美国
就能管华人高级技工的工作
就和2000时候石油行业一样,工资低,不如扫地的
等油价涨从10刀到100了,人家也不拿20-30万
就是老中我清华北大是学的这个,别人不允许学的,就是小人嘴脸知道不?

【在 w***g 的大作中提到】
: 本来社会分工就各不相同。刷试管的精通刷试管,码程序的精通码程序的,搞政治的精
: 通搞政治,director和CEO也都有人在做。就像新华字典说的,
: 张华考上了北京大学;李萍进了中等技术学校;我在百货公司当售货员:我们都有光明
: 的前途。
: 光明的前途说不上,大家都尽己所长给社会做贡献。有人码了几年程序发现自己更擅长
: 做别的,就去做director和CEO了,也未尝不可。但是也有人就是喜欢码程序,不喜欢
: 搞政治,也有人要朝九晚五周末在家带小孩的,不愿意去搞startup。
: 我觉得也没啥问题。你羡慕那些成功商人也没啥问题,你尽管往那个方向努力好了。
: 但是你学码程序干嘛?

w***g
发帖数: 5958
57
没不允许你学。我是C++码工,你过来砸场子我自然要发帖反抗。
其实要是一个完全外行的过来骂两句,我其实也懒得搭理。
就你这种又要学码程序又要说码工不好的比较有意思。
最后澄清一下,不建议你和别的新手上C++不是看不起你或者真的
怕你来抢饭碗,而是觉得要做码工有更好的东西可以学。
这一点其实现在在IT业的,不管自己是不是写C++
的我觉得都能达成共识。你自己爱学不学,跟我有啥关系。

【在 m*********a 的大作中提到】
: 说你不懂交流还不服
: 好像社会分工是印度caste系统一样
: 对社会的基本看法都是小学生的水平
: 马工的智商要求低,现在的产业扩张,当然
: 其他行业的人要来
: 印度人85的智商,二流学校不用考GRE托福直接拉到美国
: 就能管华人高级技工的工作
: 就和2000时候石油行业一样,工资低,不如扫地的
: 等油价涨从10刀到100了,人家也不拿20-30万
: 就是老中我清华北大是学的这个,别人不允许学的,就是小人嘴脸知道不?

m*********a
发帖数: 3299
58
我也知道转律师,华尔街,医生比马工的社会地位高,工资高。
但那个智商情商要求太高,都是要和客户打交道的工作,现在更本无法去干那个
我现在问一下c++的边角的问题,是因为第一次系统的看教材,所以比较好奇
以前就看了c++ reference manual 就可以工作了,不知道居然有这么奇怪的写法和bug
用c++写程序,我完全没有这么写的打算和用法。

【在 w***g 的大作中提到】
: 没不允许你学。我是C++码工,你过来砸场子我自然要发帖反抗。
: 其实要是一个完全外行的过来骂两句,我其实也懒得搭理。
: 就你这种又要学码程序又要说码工不好的比较有意思。
: 最后澄清一下,不建议你和别的新手上C++不是看不起你或者真的
: 怕你来抢饭碗,而是觉得要做码工有更好的东西可以学。
: 这一点其实现在在IT业的,不管自己是不是写C++
: 的我觉得都能达成共识。你自己爱学不学,跟我有啥关系。

m********t
发帖数: 13072
59
你还真是入门级啊, 这几行,还真让我觉得回到15年前了,

【在 m*********a 的大作中提到】
: struct A {
: int x;
: };
: A f() { return A();}
: int main() {
: std::cout<<(f().x=999)<: std::cout<<(A{1}.x=9999)<: }

m********t
发帖数: 13072
60
别学了,这不是你能学和该学的, 我做过high performance,要求挺高呢

【在 m*********a 的大作中提到】
: software engineering
: 同时学点high performance计算的东西
: 现在都不会

相关主题
前几天有人问rvalue reference的0 < -1 ? A c++ question
关于placement newC语言里面的register变量能否进行取地址操作? (转载)
*(&b1)=b编译不过,b1=b可以,区别是?请教C++11的rvalue ref
进入Programming版参与讨论
k**********g
发帖数: 989
61

你说的high performance是single core optimization,multi core optimization,
distributed algorithms,distributed consistency and protocols,network stack
还是其他类别?

【在 m********t 的大作中提到】
: 别学了,这不是你能学和该学的, 我做过high performance,要求挺高呢
A*****a
发帖数: 873
62
。。。这班的帖子到最后怎么都是吵架。。
i**i
发帖数: 1500
63
我猥琐得认为楼主被 C艹 了.
v******y
发帖数: 84
64
这个不能怪楼主,本来c++的lvalue和rvalue的定义和当初老版本的实现冲突
是c++ 的一个bug,新的c++为了和老版本c++兼容,将错就错了
本来lvalue 的定义是identity,
rvalue is a value, can not be assigned, initiated
但是老版本把anomalous rvalue做成可以赋值了
现在就有这个问题
就是当初的时候没有搞好
现在导致很多错误的理解,和c++很多个例

【在 i**i 的大作中提到】
: 我猥琐得认为楼主被 C艹 了.
N******K
发帖数: 10202
65
受精了这么多天 lz还活着么?

【在 m*********a 的大作中提到】
: 今天给c++震惊了
: (*p).和p->居然是不一样的
: p->返回的是lvalue
: (*p).是lvalue 如果他的值是lvalue,是rvalue如果返回的值是rvalue
: 觉得(*p).更合理
: 想不明白,为啥p->一定要返回lvalue
: 如果p->返回一个12的值,难道这个12的值,临时放在int tmp=12中
: p->xxx=100; 这样临时的tmp值就是100了?
: 没有想到他有啥用途

l****c
发帖数: 838
66
What's the output of the following code:
int CInterviewQuestion()
{
int i;
i = 0;
printf("%d %d %d %d %dn", i++, i++, i++, i++, i++);
i=0;
printf("%d %d %d %d %dn", ++i, ++i, ++i, ++i, ++i);
return 0;
}
Try it, you'll be surprised

【在 m*********a 的大作中提到】
: 今天给c++震惊了
: (*p).和p->居然是不一样的
: p->返回的是lvalue
: (*p).是lvalue 如果他的值是lvalue,是rvalue如果返回的值是rvalue
: 觉得(*p).更合理
: 想不明白,为啥p->一定要返回lvalue
: 如果p->返回一个12的值,难道这个12的值,临时放在int tmp=12中
: p->xxx=100; 这样临时的tmp值就是100了?
: 没有想到他有啥用途

b*******s
发帖数: 5216
67
stop doing these c crap, or you will never learn how to do c++

【在 l****c 的大作中提到】
: What's the output of the following code:
: int CInterviewQuestion()
: {
: int i;
: i = 0;
: printf("%d %d %d %d %dn", i++, i++, i++, i++, i++);
: i=0;
: printf("%d %d %d %d %dn", ++i, ++i, ++i, ++i, ++i);
: return 0;
: }

i**i
发帖数: 1500
68
第二行没想到

【在 l****c 的大作中提到】
: What's the output of the following code:
: int CInterviewQuestion()
: {
: int i;
: i = 0;
: printf("%d %d %d %d %dn", i++, i++, i++, i++, i++);
: i=0;
: printf("%d %d %d %d %dn", ++i, ++i, ++i, ++i, ++i);
: return 0;
: }

v******y
发帖数: 84
69
我记得expression evaluation是随机的
第一个会产生6个variables, i=5和5个零时variables 这个值应该是0,1,2,3,4,次序
不定
第二个的花,只有一个i variable, i=5, 所有的都是5

【在 l****c 的大作中提到】
: What's the output of the following code:
: int CInterviewQuestion()
: {
: int i;
: i = 0;
: printf("%d %d %d %d %dn", i++, i++, i++, i++, i++);
: i=0;
: printf("%d %d %d %d %dn", ++i, ++i, ++i, ++i, ++i);
: return 0;
: }

1 (共1页)
进入Programming版参与讨论
相关主题
前几天有人问rvalue reference的容器中放置智能指针一问
关于placement newC++命名空间和算子重载
*(&b1)=b编译不过,b1=b可以,区别是?问个c++的弱问题
0 < -1 ? A c++ question再一个问题c++
C语言里面的register变量能否进行取地址操作? (转载)问几句汇编指令(assembly language)
请教C++11的rvalue refstl Compare为何需要重载()?
指针的大小是 4 byte还是有赖于系统?有个SB interviewer和我说++i比i++好 (转载)
C++ pointer to function is buggy请问关于overloading <<
相关话题的讨论汇总
话题: lvalue话题: rvalue话题: c++话题: operator话题: int