Sponsored Content
Top Forums Programming Why this const variable is not changing even after applying const_cast? Post 302518096 by Loic Domaigne on Thursday 28th of April 2011 02:49:39 PM
Old 04-28-2011
Unless I am mistaken, modifying any object that was actually defined as const leads to an undefined behavior (which 10 at the end might indeed result).

I checked on Gnu/Linux : it seems that g++ simply replace i by the value of 10 during compilation (even tough it computes 11), as we can verify on the produced assembler code:

Code:
main:
.LFB957:
   .cfi_startproc
   .cfi_personality 0x3,__gxx_personality_v0
   pushq %rbp
   .cfi_def_cfa_offset 16
   movq  %rsp, %rbp
   .cfi_offset 6, -16
   .cfi_def_cfa_register 6
   subq  $16, %rsp
   movl  $10, -4(%rbp)
   leaq  -4(%rbp), %rax
   movl  $11, (%rax)            # here it is 11 
   movl  $10, %esi              # but 10 is used for cout
   movl  $_ZSt4cout, %edi
   call  _ZNSolsEi
   movl  $_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_, %esi
   movq  %rax, %rdi
   call  _ZNSolsEPFRSoS_E
   movl  $0, %eax
   leave
   ret
   .cfi_endproc

To verify this claim, it had the weird idea to qualify the const int i variable as volatile (why on the earth would we need to always re-read a const value from memory?). And tata: I got then 11.

Obviously, this is highly compiler/system depends. So the bottom line is: don't do that.

Cheers, Loïc
 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

IFS changing the variable value

Hi, I have a while read loop that reads files in a directory and process. The files have spaces in between, so I have the IFS=\n to to read the whole line as one file name. The read works fine but I have a problem with another variable that I set in the beginning of the script. The variable... (1 Reply)
Discussion started by: pvar
1 Replies

2. Shell Programming and Scripting

Changing a variable Question

I have a variable: $FILENAME = /XXXX/XXXX/XXXX/file.dat I want to set another variable that will give me this: $FILENAME2=filea.dat So basically i'm chopping up variable $FILENAME. Not sure cut will do this as i'm looking at different directories so the characther length may be... (2 Replies)
Discussion started by: Pablo_beezo
2 Replies

3. Programming

C++ type-casting a member variable in const methods

Is it permitted to type-cast a member variable passed in as a parameter in a member const method .. I am doing something like : in a return-type method () const { variable other = long(member variable) } this other assigned variable is not updating and I wonder if type-casting in such... (1 Reply)
Discussion started by: shriyer123
1 Replies

4. Programming

const_cast confusion

See code below. It appears that i and j inhabit the same address yet hold different values. Can anyone shed light on this? int main() { const int i= 3; int* j = const_cast<int*>(&i); *j = 5; cout << j << endl << &i << endl; cout << *j << endl << i; } (4 Replies)
Discussion started by: StuartH
4 Replies

5. Programming

C++ program is crashing on re-assigning const static member variable using an int pointer

Hi, Can any one tell me why my following program is crashing? #include <iostream> using namespace std; class CA { public: const static int i; }; const int CA::i = 10; int main() { int* pi = const_cast<int*>(&CA::i); *pi = 9; cout << CA::i << endl; } (6 Replies)
Discussion started by: royalibrahim
6 Replies

6. Shell Programming and Scripting

Changing variable name in for loop

Hi All please help if possible. I am a Unix novice. I have a similar question to the one posted by yonderboy at about a year ago. However his solution does not work for me. The pseudo code for my problem is as follows: for fund in 1 2 3 4 if (FTP is successfully) then FILE_SENT_fund... (2 Replies)
Discussion started by: Seether
2 Replies

7. Shell Programming and Scripting

Changing the variable using awk?

Dear all, I have kind of used both the awk/sed command and found them really useful. But at the necessity I am having right now, I need help. Actually, I would like to do the following in file script.sh PATH535="/eos/uscms/store/user/pooja04//analysis2012/535/mc/summer12/002/tt/" ... (2 Replies)
Discussion started by: emily
2 Replies

8. UNIX for Dummies Questions & Answers

Getting input and changing variable?

Hi I am new to scripting and have a function in my .sh script file that outputs a html radio button form weather_forecast_config() { echo "" echo "<html><head><title>Welcome</title></head>" echo "<body>" echo "<h2>Weather Forecast - Change City</h2>" echo "<form name="input"... (5 Replies)
Discussion started by: scriptnewbie
5 Replies

9. UNIX for Dummies Questions & Answers

Changing Path Variable

Blank Blank Blank (11 Replies)
Discussion started by: pvibien
11 Replies

10. Shell Programming and Scripting

Applying sed against a file from a list of values stored in a variable

Hi Forum. I have the following challenge at work that I need to write a script for. I have a file abc.txt with the following contents: 4560123456 4570987654 4580654321 I want to be able to search/replace in abc.txt - the first 4 characters anything starting with 4560 to 7777; 4570... (3 Replies)
Discussion started by: pchang
3 Replies
rudecgi(3)							   User Manuals 							rudecgi(3)

NAME
rudecgi - access formdata in CGI applications SYNOPSIS
#include <rude/cgi.h> rude::CGI CGI(); static void finish(); static const char *version(); static void setPathDelimiter(char delimiter); static void addPathMapName(const char *pathname ); static void setPathMapVoid(const char *emptyname); static void parsePathMap(bool shouldParse); static void parsePath(bool shouldParse); static void parseCookies(bool shouldParse); static void maxPostLength(long bytes); void setCaseSensitive(bool isCaseSensitive); int numValues() const; int numValues(const char *fieldname) const; const char *fieldnameAt(int position) const; bool exists(const char *fieldname) const; bool isFile(int index) const; bool isFile(const char *fieldname) const; bool isFile(const char *fieldname, int position); const char *datasource(int index) const; const char *datasource(const char *fieldname) const; const char *datasource(const char *fieldname, int position) const; const char * operator[](const char *fieldname); const char * operator[](int x); const char *value(int index) const; const char *value(const char *fieldname) const; const char *value(const char *fieldname, int position) const; const char *length(int index) const; const char *length(const char *fieldname) const; const char *length(const char *fieldname, int position) const; const char *contenttype(int index) const; const char *contenttype(const char *fieldname) const; const char *contenttype(const char *fieldname, int position) const; const char *filename(int index) const; const char *filename(const char *fieldname) const; const char *filename(const char *fieldname, int position) const; const char *filepath(int index) const; const char *filepath(const char *fieldname) const; const char *filepath(const char *fieldname, int position) const; std::ostream& operator<<(std::ostream& os,const CGI& cgi); DESCRIPTION
The RudeCGI library is used to access formdata within C++ CGI applications. EXAMPLES
Examples, how-to's and tutorials can also be found at the rudeserver.com website Basic Usage #include <rude/cgi.h> #include <iostream> using namespace std; using namespace rude; int main(void) { // Obtain the cgi instance // CGI cgi; // Print out standard CGI HTTP Response header // cout << "Content-Type: text/html0; // Print out HTML // cout << "<html><body>" << "You selected the color: " ; // use the cgi object to obtain form data // cout << cgi["color"]; cout << "</body></html>"; return 0; } SEE ALSO
rudeconfig(3), rudedatabase(3), rudesocket(3), rudesession(3) REPORTING PROBLEMS
Before reporting a problem, please check the rudeserver.com web site to verify that you have the latest version of rudecgi; otherwise, obtain the latest version and see if the problem still exists. Please read the FAQ at: http://www.rudeserver.com/ before asking for help. Send questions and/or comments to matt@rudeserver.com AUTHORS
Copyright (C) 2000 Matthew Flood (matt@rudeserver.com) This software is provided "as-is," without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. See the distribution directory with respect to requirements governing redistribution. Thanks to all the people who reported problems and suggested various improvements in rudecgi; who are too numerous to cite here. Version 4.1.1 January 11, 2006 rudecgi(3)
All times are GMT -4. The time now is 09:29 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy