Why do I get a compiler error, when applying the increment operator to a constant variable
If I declare a constant variable
int const n=100; cout<<n+1<<endl;
The console shows the value as 101
but when I write a code like this:
int const n=100;
n++;
cout<<n<<endl;
There is a compile time error:
main.cpp: In function 'int main()':
main.cpp:6:5: error: increment of read-only variable 'n'
Is the second case different from the first case?
c++
|
show 3 more comments
If I declare a constant variable
int const n=100; cout<<n+1<<endl;
The console shows the value as 101
but when I write a code like this:
int const n=100;
n++;
cout<<n<<endl;
There is a compile time error:
main.cpp: In function 'int main()':
main.cpp:6:5: error: increment of read-only variable 'n'
Is the second case different from the first case?
c++
1
Why did you declare it constant if you were planning to change it?
– Ayxan
Nov 10 '18 at 13:24
The exact error message should be given.
– ederag
Nov 10 '18 at 13:28
@ederag It's pretty obvious what the exact error message would be in case of trying to increment a constant variable. OP asks for the difference of incrementing and creation of temporary values liken+1
.
– πάντα ῥεῖ
Nov 10 '18 at 13:32
@πάνταῥεῖ Sure. Just recalling good practices for a new user. Having the exact message makes the question easily reachable by searching for the error message. Remember that SO is not a forum. Good questions are useful not only to the original poster.
– ederag
Nov 10 '18 at 13:40
@ederag Satisfied now?
– πάντα ῥεῖ
Nov 10 '18 at 13:46
|
show 3 more comments
If I declare a constant variable
int const n=100; cout<<n+1<<endl;
The console shows the value as 101
but when I write a code like this:
int const n=100;
n++;
cout<<n<<endl;
There is a compile time error:
main.cpp: In function 'int main()':
main.cpp:6:5: error: increment of read-only variable 'n'
Is the second case different from the first case?
c++
If I declare a constant variable
int const n=100; cout<<n+1<<endl;
The console shows the value as 101
but when I write a code like this:
int const n=100;
n++;
cout<<n<<endl;
There is a compile time error:
main.cpp: In function 'int main()':
main.cpp:6:5: error: increment of read-only variable 'n'
Is the second case different from the first case?
c++
c++
edited Nov 10 '18 at 13:45
πάντα ῥεῖ
72.1k973136
72.1k973136
asked Nov 10 '18 at 13:12
Mudit Sharma
142
142
1
Why did you declare it constant if you were planning to change it?
– Ayxan
Nov 10 '18 at 13:24
The exact error message should be given.
– ederag
Nov 10 '18 at 13:28
@ederag It's pretty obvious what the exact error message would be in case of trying to increment a constant variable. OP asks for the difference of incrementing and creation of temporary values liken+1
.
– πάντα ῥεῖ
Nov 10 '18 at 13:32
@πάνταῥεῖ Sure. Just recalling good practices for a new user. Having the exact message makes the question easily reachable by searching for the error message. Remember that SO is not a forum. Good questions are useful not only to the original poster.
– ederag
Nov 10 '18 at 13:40
@ederag Satisfied now?
– πάντα ῥεῖ
Nov 10 '18 at 13:46
|
show 3 more comments
1
Why did you declare it constant if you were planning to change it?
– Ayxan
Nov 10 '18 at 13:24
The exact error message should be given.
– ederag
Nov 10 '18 at 13:28
@ederag It's pretty obvious what the exact error message would be in case of trying to increment a constant variable. OP asks for the difference of incrementing and creation of temporary values liken+1
.
– πάντα ῥεῖ
Nov 10 '18 at 13:32
@πάνταῥεῖ Sure. Just recalling good practices for a new user. Having the exact message makes the question easily reachable by searching for the error message. Remember that SO is not a forum. Good questions are useful not only to the original poster.
– ederag
Nov 10 '18 at 13:40
@ederag Satisfied now?
– πάντα ῥεῖ
Nov 10 '18 at 13:46
1
1
Why did you declare it constant if you were planning to change it?
– Ayxan
Nov 10 '18 at 13:24
Why did you declare it constant if you were planning to change it?
– Ayxan
Nov 10 '18 at 13:24
The exact error message should be given.
– ederag
Nov 10 '18 at 13:28
The exact error message should be given.
– ederag
Nov 10 '18 at 13:28
@ederag It's pretty obvious what the exact error message would be in case of trying to increment a constant variable. OP asks for the difference of incrementing and creation of temporary values like
n+1
.– πάντα ῥεῖ
Nov 10 '18 at 13:32
@ederag It's pretty obvious what the exact error message would be in case of trying to increment a constant variable. OP asks for the difference of incrementing and creation of temporary values like
n+1
.– πάντα ῥεῖ
Nov 10 '18 at 13:32
@πάνταῥεῖ Sure. Just recalling good practices for a new user. Having the exact message makes the question easily reachable by searching for the error message. Remember that SO is not a forum. Good questions are useful not only to the original poster.
– ederag
Nov 10 '18 at 13:40
@πάνταῥεῖ Sure. Just recalling good practices for a new user. Having the exact message makes the question easily reachable by searching for the error message. Remember that SO is not a forum. Good questions are useful not only to the original poster.
– ederag
Nov 10 '18 at 13:40
@ederag Satisfied now?
– πάντα ῥεῖ
Nov 10 '18 at 13:46
@ederag Satisfied now?
– πάντα ῥεῖ
Nov 10 '18 at 13:46
|
show 3 more comments
2 Answers
2
active
oldest
votes
Is the second case different from the first case?
Yes they are fundamentally different.
int const n=100;
n++;
The increment operator obviously cannot applied for a const
(ant) variable, because the const
keyword prevents it to be changed after the initial definition. That's why the compiler error is issued.
In the other case, the variable itself isn't changed, but another temporary value is created when it's passed to the operator<<()
of std::cout
.
add a comment |
In the first case the compiler is asked to compute the output of adding a constant to an integer. This causes no error.
In the second case, the compiler is asked to change the value of a constant. This is illegal and results in a compiler error.
add a comment |
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53239287%2fwhy-do-i-get-a-compiler-error-when-applying-the-increment-operator-to-a-constan%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
Is the second case different from the first case?
Yes they are fundamentally different.
int const n=100;
n++;
The increment operator obviously cannot applied for a const
(ant) variable, because the const
keyword prevents it to be changed after the initial definition. That's why the compiler error is issued.
In the other case, the variable itself isn't changed, but another temporary value is created when it's passed to the operator<<()
of std::cout
.
add a comment |
Is the second case different from the first case?
Yes they are fundamentally different.
int const n=100;
n++;
The increment operator obviously cannot applied for a const
(ant) variable, because the const
keyword prevents it to be changed after the initial definition. That's why the compiler error is issued.
In the other case, the variable itself isn't changed, but another temporary value is created when it's passed to the operator<<()
of std::cout
.
add a comment |
Is the second case different from the first case?
Yes they are fundamentally different.
int const n=100;
n++;
The increment operator obviously cannot applied for a const
(ant) variable, because the const
keyword prevents it to be changed after the initial definition. That's why the compiler error is issued.
In the other case, the variable itself isn't changed, but another temporary value is created when it's passed to the operator<<()
of std::cout
.
Is the second case different from the first case?
Yes they are fundamentally different.
int const n=100;
n++;
The increment operator obviously cannot applied for a const
(ant) variable, because the const
keyword prevents it to be changed after the initial definition. That's why the compiler error is issued.
In the other case, the variable itself isn't changed, but another temporary value is created when it's passed to the operator<<()
of std::cout
.
edited Nov 10 '18 at 13:39
answered Nov 10 '18 at 13:20
πάντα ῥεῖ
72.1k973136
72.1k973136
add a comment |
add a comment |
In the first case the compiler is asked to compute the output of adding a constant to an integer. This causes no error.
In the second case, the compiler is asked to change the value of a constant. This is illegal and results in a compiler error.
add a comment |
In the first case the compiler is asked to compute the output of adding a constant to an integer. This causes no error.
In the second case, the compiler is asked to change the value of a constant. This is illegal and results in a compiler error.
add a comment |
In the first case the compiler is asked to compute the output of adding a constant to an integer. This causes no error.
In the second case, the compiler is asked to change the value of a constant. This is illegal and results in a compiler error.
In the first case the compiler is asked to compute the output of adding a constant to an integer. This causes no error.
In the second case, the compiler is asked to change the value of a constant. This is illegal and results in a compiler error.
answered Nov 10 '18 at 13:18
John Murray
809514
809514
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53239287%2fwhy-do-i-get-a-compiler-error-when-applying-the-increment-operator-to-a-constan%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
1
Why did you declare it constant if you were planning to change it?
– Ayxan
Nov 10 '18 at 13:24
The exact error message should be given.
– ederag
Nov 10 '18 at 13:28
@ederag It's pretty obvious what the exact error message would be in case of trying to increment a constant variable. OP asks for the difference of incrementing and creation of temporary values like
n+1
.– πάντα ῥεῖ
Nov 10 '18 at 13:32
@πάνταῥεῖ Sure. Just recalling good practices for a new user. Having the exact message makes the question easily reachable by searching for the error message. Remember that SO is not a forum. Good questions are useful not only to the original poster.
– ederag
Nov 10 '18 at 13:40
@ederag Satisfied now?
– πάντα ῥεῖ
Nov 10 '18 at 13:46