Re: const char assignments
On Wed, 30 May 2007 11:28:52 +0200, Eberhard Schefold
<eberhard.schefold@de.bosch.com> wrote:
MrAsm write:
The assembly code is the *same*, the compiler is smart enough to
understand what I want from the C-style cast, and the C++
reinterpret_cast<...> thing is just longer and more bloated.
The generated assembly code is the same. But we're not programming
assembly, for good reason.
I showed that generated assembly code is the same to show that there
is no run-time check or other difference between my "utter nonsense"
and the C++ style cast.
Casts can be dangerous, I think we can agree to that.
Yes, we agree.
But sometimes they are necessary or useful.
For example, when using QueryInterface(), I use the C style (void **)
cast for the 'ppvObject' argument:
HRESULT QueryInterface(
REFIID iid,
void ** ppvObject
);
Maybe some C++ guru would prefer using reinterpret_cast (or other form
of C++ cast), but I like more the C style cast in this case, because I
find it leaner, not bloated, and also I find C style cast easy to read
in this case.
Another example would be for inserting items in CListCtrl's:
<CODE url="http://www.codeproject.com/listctrl/listctrldemo.asp">
// Use the LV_ITEM structure to insert the items
LVITEM lvi;
CString strItem;
for (int i = 0; i < m_nItems; i++)
{
// Insert the first item
lvi.mask = LVIF_IMAGE | LVIF_TEXT;
strItem.Format(_T("Item %i"), i);
lvi.iItem = i;
lvi.iSubItem = 0;
lvi.pszText = (LPTSTR)(LPCTSTR)(strItem);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
CAST HERE
...
}
</CODE>
I find no problem in using these kinds of C style casts.
Of course, I respect who prefers the C++ style casts (which I found
more verbose and bloated in these contexts, but in other more complex
contexts I think that C++ casts like dynamic_cast might be necessary).
I just don't consider the C style cast a "utter nonsense", and I
believe that banning C style casts is like banning 'continue' in for
loops or having rules like "functions must have only one exit point"
and similar things.
However, I would like to stop here to avoid flames :)
I hope I made my point clear.
MrAsm