回答編集履歴

2

追記

2022/10/24 09:06

投稿

8524ba23
8524ba23

スコア38352

test CHANGED
@@ -5,6 +5,28 @@
5
5
  - しかも呼出先では実質constとして扱う(書込みしない)はずだしこれまで問題なかった。
6
6
  - それに今後このコードはUNICODEビルドなんて絶対しないから、`T`をつけなくてもいいだろう。
7
7
 
8
-
9
8
  といった理由だと思います(でも大丈夫だろうか?)
10
9
 
10
+ なお、リストコントロールなどMFCでのconst外し技について考察している過去記事とMFCソースも参考としてあげておきます。
11
+
12
+ [(Visual C++)CStringをLPTSTRにキャストしてはいけない理由。](http://www.sutosoft.com/room/devdiary/old/dev200105.html)
13
+ > (おそらく) よって、この場合はLPTSTRにキャストしても良い場合である。 事実MFCのCListCtrl::SetItem関数でもconstを外している。
14
+
15
+ C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\src\mfc\winctrl2.cpp
16
+ ```C++
17
+ BOOL CListCtrl::SetItem(int nItem, int nSubItem, UINT nMask, LPCTSTR lpszItem,
18
+ int nImage, UINT nState, UINT nStateMask, LPARAM lParam, int nIndent)
19
+ {
20
+ ASSERT(::IsWindow(m_hWnd));
21
+ ASSERT((GetStyle() & LVS_OWNERDATA)==0);
22
+
23
+ LVITEM lvi;
24
+ lvi.mask = nMask;
25
+ lvi.iItem = nItem;
26
+ lvi.iSubItem = nSubItem;
27
+ lvi.stateMask = nStateMask;
28
+ lvi.state = nState;
29
+ lvi.pszText = (LPTSTR) lpszItem;
30
+ ```
31
+
32
+

1

追記

2022/10/24 08:37

投稿

8524ba23
8524ba23

スコア38352

test CHANGED
@@ -3,6 +3,8 @@
3
3
  [LPCSTR, LPCTSTR and LPTSTR](https://stackoverflow.com/a/7313635)の回答と近いですが
4
4
  - 非constなTCHAR配列へのポインタを要求しているが、CStringでGetBufferするのが面倒くさかった。
5
5
  - しかも呼出先では実質constとして扱う(書込みしない)はずだしこれまで問題なかった。
6
+ - それに今後このコードはUNICODEビルドなんて絶対しないから、`T`をつけなくてもいいだろう。
7
+
6
8
 
7
9
  といった理由だと思います(でも大丈夫だろうか?)
8
10