|
George_George wrote: You know, lvalue have modifiable and un-modifiable versions.
I know that.
If you will try to assign something to a constant say -
int i = 3;
5 = i;
It will definately give you lvalue cannot be modified error.
|
|
|
|
|
|
George_George wrote: Do you agree
"in C++, string literals are l-values." in thread http://www.velocityreviews.com/forums/t279868-what-is-lvalue.html[^]? Why?
No, that would mean something like:
"abc" = "123"; or
"myohmy" = 17; would be legal.
"Normal is getting dressed in clothes that you buy for work and driving through traffic in a car that you are still paying for, in order to get to the job you need to pay for the clothes and the car and the house you leave vacant all day so you can afford to live in it." - Ellen Goodman
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
Hi DavidCrow,
Are you sure it can compile?
#include <string>
int main()
{
"abc" = "123";
"myohmy" = 17;
return 0;
}
Compile error,
1>d:\visual studio 2008\projects\test_string2\test_string2\main.cpp(5) : error C2106: '=' : left operand must be l-value
1>d:\visual studio 2008\projects\test_string2\test_string2\main.cpp(7) : error C2440: '=' : cannot convert from 'int' to 'const char [7]'
regards,
George
|
|
|
|
|
George_George wrote: Are you sure it can compile?
Of course not. I never said it could.
"Normal is getting dressed in clothes that you buy for work and driving through traffic in a car that you are still paying for, in order to get to the job you need to pay for the clothes and the car and the house you leave vacant all day so you can afford to live in it." - Ellen Goodman
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
|
George_George wrote: 1. You agree string literal is rvalue?
I already did.
"Normal is getting dressed in clothes that you buy for work and driving through traffic in a car that you are still paying for, in order to get to the job you need to pay for the clothes and the car and the house you leave vacant all day so you can afford to live in it." - Ellen Goodman
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
|
See this
lValue
[^]
Manish Patel.
B.E. - Information Technology.
|
|
|
|
|
Thanks manish,
I do not quite understand this statement in the thread "in C++, string literals are l-values.", any comments?
regards,
George
|
|
|
|
|
did you read this stetement :
"l-values are something that can be at the right side of an '='"
It says that if we write x = 10; then x will be l-value(left side value)
In c++, we can not give number as variable name, It always be a string only.
So in C++, string literals are l-values.
Now i think you got it
Manish Patel.
B.E. - Information Technology.
|
|
|
|
|
Thanks Manish,
I am confused. You mentioned,
--------------------
l-values are something that can be at the right side of an '='
--------------------
l-value...right side? Could you confirm that?
regards,
George
|
|
|
|
|
manish.patel wrote: t says that if we write x = 10; then x will be l-value(left side value)
In c++, we can not give number as variable name, It always be a string only.
So in C++, string literals are l-values.
Your argument is wrong.
In the expression x = 10; the term x is an identifier, NOT a string literal (a string literal is, for instance, "foo" ). See [^].
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
|
|
|
|
|
Thanks CPallini,
What do you think of whether string literal is lvalue or rvalue? I think it is only rvalue, do you agree?
regards,
George
|
|
|
|
|
George_George wrote: What do you think of whether string literal is lvalue or rvalue? I think it is only rvalue, do you agree?
Yes, of course. Did you ever see a string literal on the left of an assignment expression?
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
|
|
|
|
|
Thanks CPallini,
I agree with your reply. I am studying the link as people mention before,
http://www.velocityreviews.com/forums/t279868-what-is-lvalue.html[^]
in post #2, what do the following statements mean? Especially the additional [2] after "str" and ["str"] after 1? Any ideas?
* ( ( char * ) & var ) = "str"[2];
int & varref = var;
varref = 1["str"];
regards,
George
|
|
|
|
|
George_George wrote: in post #2, what do the following statements mean? Especially the additional [2] after "str" and ["str"] after 1? Any ideas?
George_George wrote: * ( ( char * ) & var ) = "str"[2]; // * ((char *)&var) too
it is nothing but subscripting an array, here "str" is an constant array of string.
it is same as
const char * const szText = "str"; or const char szText[] = {"str"};
* ( ( char * ) & var ) = szText[2];
George_George wrote: varref = 1["str"]; // varref is also an lvalue
"the subscript operator [] is interpreted in such a way that E1[E2]
is identical to *((E1)+(E2))" from C++ std.
I think 1["str"] is tricking the above expression to *((1) + (pointer to "str")) that is same as "str"[1] which evaluates to *((pointer to "str") + (1)). because adding pointer to index and index to pointer is same.
|
|
|
|
|
Great Rajkumar!!
Cool reply. For this discussion,
http://www.velocityreviews.com/forums/t279868-what-is-lvalue.html[^]
It is mentioned,
struct C
{
C& operator=(int);
};
C() = 5;
Here is the related description,
--------------------
True.
But there are compilers (eg VC++) that do allow to bind non-const references to
temporary as an extension of the standard.
IMO, a conforming compiler should reject the code.
--------------------
I can not see in above code there occurs "bind non-const references to temporary". Do you see it occurs?
regards,
George
|
|
|
|
|
Hello everyone,
I want to learn more about deque, and previously I only have basic concept and samples about deque as a double-ended queue.
My questions are,
1. How it is implemented internally for the performance optimization for get front and end elements? Elements are stored in an array or linked list or?
2. Are there any documents about how to use deque effectively and efficiently (i.e. good patterns and anti-patterns of deque)? I have searched MSDN and Google and only found some sample samples. Any experience sharing or recommended articles?
thanks in advance,
George
|
|
|
|
|
STL has deque implementation, "#include <deque>" and use the std::deque, i think you will get the answers for your question.
|
|
|
|
|
Thanks Rajkumar,
I can debug into it. But the symbols looks -- not quite user friendly.
Just want to find out how it is implemented internally and some best practices about how to use it. Any ideas?
regards,
George
|
|
|
|
|
1 - from wikipedia[^] :
"There are at least two common ways to efficiently implement a deque: with a modified dynamic array or with a doubly-linked list. For information about doubly-linked lists, see the linked list article."
2 - deque is a very simple data structure, there is no good or bad patterns to use it, you simply add to the front or back of the queue.
also see this excellent article : http://www.codeproject.com/KB/stl/vector_vs_deque.aspx[^]
|
|
|
|
|
What's the difference between vector and dequeue ?
I did not read your post carefully.
Maxwell Chen
modified on Saturday, March 1, 2008 7:54 AM
|
|
|
|
|
Hi Maxwell,
I think you can refer to The C++ Standard Library book, section 6.3, and there is a complete list of comparison between deque and vector.
regards,
George
|
|
|
|
|
Thanks!
Maxwell Chen
|
|
|
|