次スレを立てる時は本文の1行目に以下を追加して下さい。
!extend:on:vvvvv:1000:512
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。
前スレ
C++相談室 part133
http://mevius.5ch.net/test/read.cgi/tech/1511509970/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.102【環境依存OK】
http://mevius.5ch.net/test/read.cgi/tech/1509780815/
■長いソースを貼るときはここへ。■
http://codepad.org/
https://ideone.com/
[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
C++相談室 part134
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 5fcb-Q2eK)
2018/01/20(土) 09:05:42.21ID:mJKRg6iz0147144 (ワッチョイ ff80-Pey1)
2018/02/16(金) 07:56:00.35ID:DpsRPWWQ0148デフォルトの名無しさん (ワッチョイ 57fc-T3WU)
2018/02/16(金) 08:03:01.53ID:TOIQut300 >>146
explorer.exeへのショートカットを作ってプロパティで作業ディレクトリを指定するか、
COMでIShellLink::SetWorkingDirectoryを使って同じことをするあたりか?
explorer.exeへのショートカットを作ってプロパティで作業ディレクトリを指定するか、
COMでIShellLink::SetWorkingDirectoryを使って同じことをするあたりか?
149134 (ワッチョイ 9f23-TT3E)
2018/02/16(金) 09:56:21.20ID:+b2iJMK40 みなさんありがとうございます。
std::mapにLRUや最大要素数の仕組みを持たせた派生クラスでも
無いかと思ったのですが、標準ではやっぱり無いですか。
>>143のように、std::mapをメンバの一つに持たせた独自クラスを
一から作っていくことになるんですかね。
std::mapにLRUや最大要素数の仕組みを持たせた派生クラスでも
無いかと思ったのですが、標準ではやっぱり無いですか。
>>143のように、std::mapをメンバの一つに持たせた独自クラスを
一から作っていくことになるんですかね。
150デフォルトの名無しさん (ワッチョイ 9f12-pjg9)
2018/02/16(金) 10:11:55.71ID:JoalkiMd0 amazonランキングの謎を解く とか言う本でmove-to-frontを見た
本の紹介「Amazonランキングの謎を解く」
http://www.kenkyuu.net/whatsnew/2011/08/book2011-08-01.html
>「move-to-front規則」(最後に売れた順に並べる、つまり、注文のたびに1位にジャンプする)
Move To Front - Wikipedia
https://ja.wikipedia.org/wiki/Move_To_Front
本の紹介「Amazonランキングの謎を解く」
http://www.kenkyuu.net/whatsnew/2011/08/book2011-08-01.html
>「move-to-front規則」(最後に売れた順に並べる、つまり、注文のたびに1位にジャンプする)
Move To Front - Wikipedia
https://ja.wikipedia.org/wiki/Move_To_Front
151デフォルトの名無しさん (ワッチョイ 57fc-T3WU)
2018/02/16(金) 10:54:10.09ID:TOIQut300 ageだね
152デフォルトの名無しさん (ワッチョイ 378a-TkRA)
2018/02/16(金) 14:25:37.67ID:UjPhOEUu0153デフォルトの名無しさん (ブーイモ MM3b-mhGK)
2018/02/16(金) 18:05:58.99ID:GGXfeEqkM 江添さんのC++17本予約しようかな
154デフォルトの名無しさん (ワッチョイ 1f7e-T3WU)
2018/02/16(金) 18:26:06.12ID:waI0am5S0 予約しなくても売れ残るからいつでも買える
155デフォルトの名無しさん (アウアウカー Sa6b-s4hu)
2018/02/16(金) 20:04:35.13ID:1Lr9lxEpa C++を勉強しようと思ってる者ですが書籍を探しております。Cはある程度書けるのでそれを前提とした書籍が欲しいです
156デフォルトの名無しさん (ワッチョイ bf0e-qi38)
2018/02/16(金) 20:33:50.33ID:Rc+MuzY40 C++ クイック入門&リファレンス
プログラミング言語C++ 第4版
プログラミング言語C++ 第4版
157デフォルトの名無しさん (ワッチョイ 9f60-qi38)
2018/02/16(金) 20:36:34.10ID:9b60nRDg0 >>155
C++11 以前だが accelerated c++, ここでフォローするよ
C++11 以前だが accelerated c++, ここでフォローするよ
158デフォルトの名無しさん (ワッチョイ 57fc-T3WU)
2018/02/16(金) 20:37:11.23ID:TOIQut300 禿4は俺も推奨する
C++11の良本だ
C++11の良本だ
159デフォルトの名無しさん (アウアウカー Sa6b-s4hu)
2018/02/16(金) 21:09:12.34ID:+EaaPhKWa めっちゃ高いけどその価値あるのね
160デフォルトの名無しさん (ブーイモ MMbf-zxnT)
2018/02/16(金) 21:46:03.21ID:5AmFsIq1M161デフォルトの名無しさん (ワッチョイ 9f4c-C9DI)
2018/02/16(金) 22:03:34.89ID:qDhjnryl0 誰がハゲやねん
162デフォルトの名無しさん (マクド FF6b-xgEu)
2018/02/17(土) 09:43:48.64ID:Lqib7/b9F 以下のようにconst char*型の文字列でchar*型の変数を初期化したいときに
strcpyやstrlenを書かずにstd::stringを利用して短くかけないかと思うのですが
msvcだとエラーにならず、clang, gccだとdeleteでセグメンテーション違反になります。
どうすればより良い感じになるでしょうか?const_castはできれば使いたくないです。
#include <string.h>
#include <string>
#include <iostream>
int main()
{
const char* asdf = "asdf";
// char* psz2 = new char[strlen(asdf)+1];
// strcpy(psz2, asdf);
std::string *psz = new std::string(asdf);
char* psz2 = &(*psz)[0];
std::cout << psz2 << std::endl;
delete psz2;
return 0;
}
strcpyやstrlenを書かずにstd::stringを利用して短くかけないかと思うのですが
msvcだとエラーにならず、clang, gccだとdeleteでセグメンテーション違反になります。
どうすればより良い感じになるでしょうか?const_castはできれば使いたくないです。
#include <string.h>
#include <string>
#include <iostream>
int main()
{
const char* asdf = "asdf";
// char* psz2 = new char[strlen(asdf)+1];
// strcpy(psz2, asdf);
std::string *psz = new std::string(asdf);
char* psz2 = &(*psz)[0];
std::cout << psz2 << std::endl;
delete psz2;
return 0;
}
163デフォルトの名無しさん (ワッチョイ 378a-TkRA)
2018/02/17(土) 09:51:35.08ID:mykV+fTk0 delete psz2なんてしちゃだめconst関係ない
164デフォルトの名無しさん (ワッチョイ 1f7e-T3WU)
2018/02/17(土) 10:21:38.22ID:4SqFrjwY0 何故stringそのものじゃなくて内部データをdeleteしようと思ったのか
newで確保した配列じゃないからdeleteはできない
stringの内部データは静的な配列と動的な配列を組み合わせて表現されている
mscvの場合先頭16文字はchar[16]でそれ以降は動的な配列に入るようになっている
psz[0]のアドレスはchar[16]の先頭アドレスなので当然deleteできない
msvcはdeleteに失敗しても落ちないのかな
newで確保した配列じゃないからdeleteはできない
stringの内部データは静的な配列と動的な配列を組み合わせて表現されている
mscvの場合先頭16文字はchar[16]でそれ以降は動的な配列に入るようになっている
psz[0]のアドレスはchar[16]の先頭アドレスなので当然deleteできない
msvcはdeleteに失敗しても落ちないのかな
165デフォルトの名無しさん (ワッチョイ ff80-Pey1)
2018/02/17(土) 10:47:53.57ID:IU1gsQgu0166デフォルトの名無しさん (ワッチョイ 9fcb-8YMj)
2018/02/17(土) 11:22:13.08ID:++v6vSjK0 ハンガリー人まだ絶滅してないのか。
stringはnull terminatedでないからpszはおかしい。
psz2もnull terminatedの保証がないからc_strを使うべき。
うまくいったらstrdupも調べとこうな。
stringはnull terminatedでないからpszはおかしい。
psz2もnull terminatedの保証がないからc_strを使うべき。
うまくいったらstrdupも調べとこうな。
167デフォルトの名無しさん (ワッチョイ d793-MfWd)
2018/02/17(土) 11:25:45.81ID:szUqPRvW0 >>162
char* psz2 = &(*psz)[0]; って
char* psz2 = psz->c_str(); と同じなのかな?
いずれにせよ delete psz; は出来る(するべき?)だけど、
delete psz2; は出来ないんじゃないかな。
char* psz2 = &(*psz)[0]; って
char* psz2 = psz->c_str(); と同じなのかな?
いずれにせよ delete psz; は出来る(するべき?)だけど、
delete psz2; は出来ないんじゃないかな。
168デフォルトの名無しさん (ワッチョイ 378a-TkRA)
2018/02/17(土) 11:30:29.43ID:mykV+fTk0 必要ないところでnew/delete使う人は根本からして何も分かってない
169デフォルトの名無しさん (ワッチョイ ff8a-NmL4)
2018/02/17(土) 15:18:23.73ID:YAgvIyFy0170デフォルトの名無しさん (ワッチョイ bf0e-qi38)
2018/02/17(土) 16:50:38.35ID:Q4Uv6cZz0 >>162
弁護士の唐沢です
しっかり「char* const」と「const char*」の違いを認識しなさい
const char*は参照先の定数を変更しない事を保証する宣言であり、char*は参照先の定数を変更できる為、const char*で保持するアドレスをchar*にコピーする事は言語仕様により禁止されています。それは分かるよね?
最初に宣言したポインタを間違えて別アドレスで上書きしないようにconstで固定したいのなら、char* constを使うようにしましょう。とりあえずとりいそぎ
弁護士の唐沢です
しっかり「char* const」と「const char*」の違いを認識しなさい
const char*は参照先の定数を変更しない事を保証する宣言であり、char*は参照先の定数を変更できる為、const char*で保持するアドレスをchar*にコピーする事は言語仕様により禁止されています。それは分かるよね?
最初に宣言したポインタを間違えて別アドレスで上書きしないようにconstで固定したいのなら、char* constを使うようにしましょう。とりあえずとりいそぎ
171デフォルトの名無しさん (ワッチョイ 9fe1-/1mG)
2018/02/17(土) 17:22:58.60ID:0j+aLKWi0 >>162
strdupという手があるが何がしたいのか今一つ分からない
const char* asdf = "asdf";
char *p = strdup(asdf);
std::cout << p << std::endl;
delete p;
strdupという手があるが何がしたいのか今一つ分からない
const char* asdf = "asdf";
char *p = strdup(asdf);
std::cout << p << std::endl;
delete p;
172デフォルトの名無しさん (ブーイモ MM3b-zxnT)
2018/02/17(土) 17:31:15.32ID:CLg9GPlRM >>170
それ誰に指摘してんの?とりいそぎ。
それ誰に指摘してんの?とりいそぎ。
173デフォルトの名無しさん (ワッチョイ 1f7e-T3WU)
2018/02/17(土) 17:34:22.09ID:4SqFrjwY0 >>167
データは連続しているので同じになる
16文字まではスタックを使い、それ以上の長さになるとヒープにコピーされる
実装ではメンバの配列には何かしらのエスケープ文字が入る
ちなみにmsvcでは実装の都合上free(&str[0])で強引に解放できる
データは連続しているので同じになる
16文字まではスタックを使い、それ以上の長さになるとヒープにコピーされる
実装ではメンバの配列には何かしらのエスケープ文字が入る
ちなみにmsvcでは実装の都合上free(&str[0])で強引に解放できる
174173 (ワッチョイ 1f7e-T3WU)
2018/02/17(土) 17:49:08.26ID:4SqFrjwY0 補足
スタックとヒープを使い分けるかどうかは実装依存
gcc、clang、msvcでは行われている
したがって短い文字列でnewを避けるためにstringを使わないというのは意味が無い
スタックとヒープを使い分けるかどうかは実装依存
gcc、clang、msvcでは行われている
したがって短い文字列でnewを避けるためにstringを使わないというのは意味が無い
175デフォルトの名無しさん
2018/02/17(土) 18:06:03.81 >>171
strdupで確保した領域をfreeでなくdeleteするのは正しいの?
strdupで確保した領域をfreeでなくdeleteするのは正しいの?
176デフォルトの名無しさん (ワッチョイ 5781-qput)
2018/02/17(土) 18:09:26.31ID:Lp1rq1Kt0 良いみたいだ
中でmallocで確保している
中でmallocで確保している
177デフォルトの名無しさん (ワッチョイ 5781-qput)
2018/02/17(土) 18:10:04.88ID:Lp1rq1Kt0 違う、freeで開放する
178デフォルトの名無しさん (ワッチョイ bf0e-qi38)
2018/02/17(土) 18:14:21.37ID:Q4Uv6cZz0179デフォルトの名無しさん (ワッチョイ 9fb3-dLOu)
2018/02/17(土) 18:18:24.62ID:DOQJ47ER0 昔から気になってるんだが「解放」だよね...
180デフォルトの名無しさん (ワッチョイ 5781-qput)
2018/02/17(土) 18:25:00.27ID:Lp1rq1Kt0 そうでした、ごめんね
181デフォルトの名無しさん (ワッチョイ 9f5a-T3WU)
2018/02/17(土) 18:25:45.10ID:JVoP/9zU0182はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-T3WU)
2018/02/17(土) 18:45:39.74ID:uBckbaXI0 >>162
ぶっちゃけた話、 strcpy が一番短いと思う。
ぶっちゃけた話、 strcpy が一番短いと思う。
183デフォルトの名無しさん
2018/02/17(土) 18:59:50.35 >>182
strdup という答えが出てるのに何言ってるの?
strdup という答えが出てるのに何言ってるの?
184はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-T3WU)
2018/02/17(土) 19:05:58.96ID:uBckbaXI0185デフォルトの名無しさん (ワッチョイ 9fbd-RFe/)
2018/02/17(土) 19:07:20.59ID:u7LZaTzx0 >>166
接頭辞を見ればデータ内容の属性がワカルというメリットは他に代え難い
ttp://local.joelonsoftware.com/wiki/間違ったコードは間違って見えるようにする
あといちいちthis->xと書くよりも、すすんでm_xと書きましょう
接頭辞を見ればデータ内容の属性がワカルというメリットは他に代え難い
ttp://local.joelonsoftware.com/wiki/間違ったコードは間違って見えるようにする
あといちいちthis->xと書くよりも、すすんでm_xと書きましょう
186デフォルトの名無しさん (ワッチョイ 9fbd-RFe/)
2018/02/17(土) 19:21:01.63ID:u7LZaTzx0 strdup()だと明示的に開放コードをどっかに書かなくてはならなくて必ず忘れるので
せっかくC++なのでスマポ的にwrapすると良いと思う
せっかくC++なのでスマポ的にwrapすると良いと思う
187デフォルトの名無しさん (ワッチョイ 9f5a-T3WU)
2018/02/17(土) 19:37:41.81ID:JVoP/9zU0 ホワイトボックスなCでは許せるが
ブラックボックスなC++の流儀には全く合わない
それがstrdup
ブラックボックスなC++の流儀には全く合わない
それがstrdup
188167 (ワッチョイ d793-MfWd)
2018/02/17(土) 19:53:11.68ID:szUqPRvW0 >>173-174 教えてくれてありがとう。
返されるアドレスは等しい値なのか、という単純な質問だったんだけど、
読み直してみたら分かりにくい質問文だと思っていた次第。
それにしても &(*psz)[0] って結構ややこしいのね。
オーバーロードされた[]演算子が返すcharへの参照、
に対してアドレス演算子&を作用させた結果、て感じかな。
返されるアドレスは等しい値なのか、という単純な質問だったんだけど、
読み直してみたら分かりにくい質問文だと思っていた次第。
それにしても &(*psz)[0] って結構ややこしいのね。
オーバーロードされた[]演算子が返すcharへの参照、
に対してアドレス演算子&を作用させた結果、て感じかな。
189162 (ワイモマー MMbf-xgEu)
2018/02/17(土) 20:37:30.76ID:uaRb1j8RM すみません、たくさんレスありがとうございます。
_strdupにしてみたら期待の動作ができました。
ありがとうございました。
_strdupにしてみたら期待の動作ができました。
ありがとうございました。
190162 (ワイモマー MMbf-xgEu)
2018/02/17(土) 21:27:34.68ID:uaRb1j8RM また質問してすみません。
msvc(vs2017)だとコンパイラをC++17にしても以下のプログラムで
C2664 'void (T *&)': 引数 1 を 'hoge *' から 'hoge *&' へ変換できません。
となってしまうのですが、コードにバグが有るでしょうか?msvcのバグでしょうか?
GCCやClangではコンパイルできます。
#include <memory>
struct hoge {};
template <class T>
inline void safe_delete(T*& p) {
if (p) {
delete p;
p = nullptr;
}
}
int main() {
std::unique_ptr<hoge, decltype(&safe_delete<hoge>)> sp{new hoge(), safe_delete<hoge>};
return 0;
}
msvc(vs2017)だとコンパイラをC++17にしても以下のプログラムで
C2664 'void (T *&)': 引数 1 を 'hoge *' から 'hoge *&' へ変換できません。
となってしまうのですが、コードにバグが有るでしょうか?msvcのバグでしょうか?
GCCやClangではコンパイルできます。
#include <memory>
struct hoge {};
template <class T>
inline void safe_delete(T*& p) {
if (p) {
delete p;
p = nullptr;
}
}
int main() {
std::unique_ptr<hoge, decltype(&safe_delete<hoge>)> sp{new hoge(), safe_delete<hoge>};
return 0;
}
191デフォルトの名無しさん (ワッチョイ ff80-Pey1)
2018/02/17(土) 22:11:53.16ID:IU1gsQgu0 (T *&)
そもそも、ポインタ・参照を、同時に使えるのか?
そもそも、ポインタ・参照を、同時に使えるのか?
192片山博文MZ ◆T6xkBnTXz7B0 (スププ Sdbf-ZgEC)
2018/02/17(土) 22:23:52.63ID:EwTJGG8Pd new hoge()は変数じゃないから、代入できない。
>>165
独習C++ はいいですね、特に演習問題「std::stringを再実装する」を絶賛します
これが書けるようになったらC++初級者をかたってもいいかもしれない、もしかすると解答は載ってなかったかもしれないけれども
独習C++ はいいですね、特に演習問題「std::stringを再実装する」を絶賛します
これが書けるようになったらC++初級者をかたってもいいかもしれない、もしかすると解答は載ってなかったかもしれないけれども
194デフォルトの名無しさん (ワッチョイ 9fcb-zxnT)
2018/02/17(土) 22:35:58.70ID:++v6vSjK0196デフォルトの名無しさん (ワッチョイ 9fcb-zxnT)
2018/02/17(土) 22:51:12.84ID:++v6vSjK0197デフォルトの名無しさん (ワッチョイ ff8a-NmL4)
2018/02/17(土) 22:52:19.16ID:YAgvIyFy0 頭悪いヤツが多様するハンガリアン
198デフォルトの名無しさん (ワッチョイ ff8a-NmL4)
2018/02/17(土) 22:54:25.25ID:YAgvIyFy0 嫌いだからハンガリアン意地でも使わなかった
dwやらszやらせっかくのフリーフォーマッとが台なしだよ
dwやらszやらせっかくのフリーフォーマッとが台なしだよ
199デフォルトの名無しさん (ワッチョイ bf0e-qi38)
2018/02/17(土) 22:59:56.16ID:Q4Uv6cZz0 フリーフォーマットはクソコードの温床ナリよ
200デフォルトの名無しさん (ワッチョイ 1f7e-T3WU)
2018/02/17(土) 23:03:12.11ID:4SqFrjwY0 型を変えるたびに変数名も変えるのか
ごくろうやな
ごくろうやな
202デフォルトの名無しさん (ワッチョイ 9ff9-GHyv)
2018/02/17(土) 23:22:18.45ID:2kmwzB0g0 >>195
システムハンガリアンは弊害ばかりだろうけど、アプリケーションハンガリアンは適切に使えば有益だよ。
システムハンガリアンは弊害ばかりだろうけど、アプリケーションハンガリアンは適切に使えば有益だよ。
203デフォルトの名無しさん (ワッチョイ 1f7e-T3WU)
2018/02/17(土) 23:25:09.87ID:4SqFrjwY0 mとかいらなくねってなって削ったら_から始まるようになった
204デフォルトの名無しさん (ワッチョイ 9fbd-RFe/)
2018/02/17(土) 23:38:55.74ID:u7LZaTzx0 データの属性としてサイズとか型そのものを明示したいときはシステムハンガリアンするしかないし、
よってWIN32APIがシステムハンガリアンを使って定義されるのは全く正しい
問題なのはアプリケーションハンガリアンすべきときと
システムハンガリアンすべきときが区別できない香具師が適当に使うと
被害甚大だということやがな…
よってWIN32APIがシステムハンガリアンを使って定義されるのは全く正しい
問題なのはアプリケーションハンガリアンすべきときと
システムハンガリアンすべきときが区別できない香具師が適当に使うと
被害甚大だということやがな…
205デフォルトの名無しさん (ワッチョイ d77f-T3WU)
2018/02/17(土) 23:41:05.97ID:YmD9lILj0 今時システムハンガリアンは無いだろ
20年前で時間が止まってるのかよ
20年前で時間が止まってるのかよ
206デフォルトの名無しさん (ワッチョイ 9fbd-RFe/)
2018/02/17(土) 23:42:44.53ID:u7LZaTzx0207デフォルトの名無しさん (ワッチョイ d77f-T3WU)
2018/02/17(土) 23:49:32.45ID:YmD9lILj0 ググればいいだろ
積極的批判
システムハンガリアンを使っているソースコードを修正してデータ型を変更した際、同時に変数名も変更するコストがかかる。変更を怠ると、たちまち不整合となり、保守の障害となるだけで一利もない。
C++やC#のような言語では型付けが存在するためにシステムハンガリアンを使用することによる利点はない[3]。
移植性を阻害する。
総称型、メタプログラミングとの相性が悪い。
消極的批判
いわゆる良書と呼ばれるようなC++本で、現在[いつ?]システムハンガリアンを採用している例が皆無。
かつてWindows API/MFCにおいてハンガリアンを全面的に採用していたMicrosoft自身が、.NET Frameworkではハンガリアンを禁止[1]している。
積極的批判
システムハンガリアンを使っているソースコードを修正してデータ型を変更した際、同時に変数名も変更するコストがかかる。変更を怠ると、たちまち不整合となり、保守の障害となるだけで一利もない。
C++やC#のような言語では型付けが存在するためにシステムハンガリアンを使用することによる利点はない[3]。
移植性を阻害する。
総称型、メタプログラミングとの相性が悪い。
消極的批判
いわゆる良書と呼ばれるようなC++本で、現在[いつ?]システムハンガリアンを採用している例が皆無。
かつてWindows API/MFCにおいてハンガリアンを全面的に採用していたMicrosoft自身が、.NET Frameworkではハンガリアンを禁止[1]している。
208デフォルトの名無しさん (ワッチョイ d7b3-hxII)
2018/02/17(土) 23:52:28.19ID:YEFSbrC50 申し訳ないがコピペディアからのウィキペはNG
209デフォルトの名無しさん (ワッチョイ 1f7e-T3WU)
2018/02/17(土) 23:54:40.85ID:4SqFrjwY0 型なんてマウスオーバーなりすれば表示されるだろ
変数名に書いておかなきゃわからないとかメモ帳で書いてるのかよ
変数名に書いておかなきゃわからないとかメモ帳で書いてるのかよ
210はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-T3WU)
2018/02/18(日) 00:10:56.39ID:OOIPfNvY0 >>190
デリータはポインタが指す先のリソースを後始末するのが仕事であって、
ポインタが無効になるという処理は unique_ptr の側でやってくれるので、
ヌルを代入する必要はない。
むしろ unique_ptr 内で管理しているものをデリータが勝手に弄るのは好ましくないので、
参照で受けるのはやめてさしあげろ。
私なりに仕様を読んでこの場合をエラーにする根拠は発見できなかったが、
エラーになってくれる方がありがたい場面だと思う。
デリータはポインタが指す先のリソースを後始末するのが仕事であって、
ポインタが無効になるという処理は unique_ptr の側でやってくれるので、
ヌルを代入する必要はない。
むしろ unique_ptr 内で管理しているものをデリータが勝手に弄るのは好ましくないので、
参照で受けるのはやめてさしあげろ。
私なりに仕様を読んでこの場合をエラーにする根拠は発見できなかったが、
エラーになってくれる方がありがたい場面だと思う。
211デフォルトの名無しさん (ワッチョイ d7f2-T3WU)
2018/02/18(日) 00:16:38.53ID:Ct2k6iqr0 デリータに渡されるのは左辺値と限らないからだろう。
212はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-T3WU)
2018/02/18(日) 00:25:54.07ID:OOIPfNvY0 N3337 だと 516 ページの説明がデリータの要件だと思うんだけど、
デリータ d の型が D で ptr の型が unique_ptr<T, D>::pointer のとき式 d(ptr) が valid であることと書いてあって、
ptr が rvalue か lvalue かってのは特に指定がない。 (どこかに書いてあったりする?)
この説明で言ってる ptr が変数名なのだとしたら暗に lvalue とほのめかしてるようにも思えなくもないし、よくわからん。
わからんことは避けて通りたい。
デリータ d の型が D で ptr の型が unique_ptr<T, D>::pointer のとき式 d(ptr) が valid であることと書いてあって、
ptr が rvalue か lvalue かってのは特に指定がない。 (どこかに書いてあったりする?)
この説明で言ってる ptr が変数名なのだとしたら暗に lvalue とほのめかしてるようにも思えなくもないし、よくわからん。
わからんことは避けて通りたい。
213はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-T3WU)
2018/02/18(日) 00:30:57.46ID:OOIPfNvY0 私なりの見解としては未定義だと思ってる。
未定義ならばやったらエラーになる方向にしてくれる方がありがたいという思い。
未定義ならばやったらエラーになる方向にしてくれる方がありがたいという思い。
214デフォルトの名無しさん (ブーイモ MM3b-zxnT)
2018/02/18(日) 00:35:36.09ID:ju8BsRCFM >>206
ABIにシステムハンガリアン関係ないだろ…
APIを指してるとして、呼び出し側はリファレンスマニュアルなりIDE機能なりを利用して引数の型情報も
システムハンガリアンが付いている仮引数名と同時に参照しているはずだよね?情報重複してるけど本当に必要?
仮引数名のシステムハンガリアンの有無に関わらず、APIのシグネチャは用意に変更してはならないものだけど、
そもそも仮引数名はシグネチャじゃないからシステムハンガリアンがついていたって何の保証にもならないよ?
ABIにシステムハンガリアン関係ないだろ…
APIを指してるとして、呼び出し側はリファレンスマニュアルなりIDE機能なりを利用して引数の型情報も
システムハンガリアンが付いている仮引数名と同時に参照しているはずだよね?情報重複してるけど本当に必要?
仮引数名のシステムハンガリアンの有無に関わらず、APIのシグネチャは用意に変更してはならないものだけど、
そもそも仮引数名はシグネチャじゃないからシステムハンガリアンがついていたって何の保証にもならないよ?
215はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-T3WU)
2018/02/18(日) 00:51:32.90ID:OOIPfNvY0 重複する情報をコンパイラの支援なく一致させ続けることが出来るだろうか。 いや、できない。
って話よね。
まあ世の中にはそういうのを検査するツールとかもあるんだろうけどさぁ、
そういうツールを導入できる環境ならまともな IDE だって使えるだろう。
って話よね。
まあ世の中にはそういうのを検査するツールとかもあるんだろうけどさぁ、
そういうツールを導入できる環境ならまともな IDE だって使えるだろう。
216162 (マクド FF6b-xgEu)
2018/02/18(日) 08:06:35.40ID:F3zIry6ZF >>210
>>211
レスありがとうございます。
shared_ptrだと行けるのでなんかすればコンパイル通るのではないかと
思ったのですがだめなんですね〜。
普通に使う用とカスタムデリータに使う用と二種類用意してやり過ごしてみたいと思います。
template <class T>
inline void safe_release(T*& p) {
if (p) {
p->Release();
p = nullptr;
}
}
template <class T>
inline void custom_deleter(T* p) {
p->Release();
// p = nullptr; no meaning
}
>>211
レスありがとうございます。
shared_ptrだと行けるのでなんかすればコンパイル通るのではないかと
思ったのですがだめなんですね〜。
普通に使う用とカスタムデリータに使う用と二種類用意してやり過ごしてみたいと思います。
template <class T>
inline void safe_release(T*& p) {
if (p) {
p->Release();
p = nullptr;
}
}
template <class T>
inline void custom_deleter(T* p) {
p->Release();
// p = nullptr; no meaning
}
217デフォルトの名無しさん (ワッチョイ 9fbd-RFe/)
2018/02/18(日) 12:41:44.81ID:OWXn9djh0 >>207
藻前はレスをきちんと読んでいないのではないか
>システムハンガリアンを使っているソースコードを修正してデータ型を変更した際、同時に変数名も変更するコストがかかる。(>>207)
に直接対応する元レス>>206は、
>データの属性としてサイズとか型そのものを明示したいとき(>>204)
について述べているのでデータ型変更時のコストを言い立てても批判にならない
消極的批判については、アプリケーションハンガリアンすべきときと システムハンガリアンすべきときが
区別できない香具師の的外れな批判がクソウゼーからそうなったのかもしれん、
(ちな両者を区別できない香具師への警戒も>>204で言及済み
藻前はレスをきちんと読んでいないのではないか
>システムハンガリアンを使っているソースコードを修正してデータ型を変更した際、同時に変数名も変更するコストがかかる。(>>207)
に直接対応する元レス>>206は、
>データの属性としてサイズとか型そのものを明示したいとき(>>204)
について述べているのでデータ型変更時のコストを言い立てても批判にならない
消極的批判については、アプリケーションハンガリアンすべきときと システムハンガリアンすべきときが
区別できない香具師の的外れな批判がクソウゼーからそうなったのかもしれん、
(ちな両者を区別できない香具師への警戒も>>204で言及済み
218デフォルトの名無しさん (ワッチョイ 9fbd-RFe/)
2018/02/18(日) 12:42:38.82ID:OWXn9djh0 >>214
十分賢いIDEが人間のミスを完璧に排除してくれるんならそうかもしれんが
システムハンガリアンをしてはいけないという積極的理由にはやはりならないのであった
それとも「間違ったコードは間違って見えるようにする 」(>>185)の効能を全否定する?
APIの定義は変わらなくとも、それを利用するソースコードがころころ変わり得るわけで、
byStrLength
にある日だれかがDWORD型の値を突っ込んだとしたら…
こういうケースを考えたら、「接頭辞を見ればデータ内容の属性がワカルというメリット(>>185)」は
ありえないぐらい賢いIDEでも使わないと他に代え難いと思うがどうか、
>>198
>嫌いだからハンガリアン意地でも使わなかった
おk ようやく建設的な議論に着手できる、
十分賢いIDEが人間のミスを完璧に排除してくれるんならそうかもしれんが
システムハンガリアンをしてはいけないという積極的理由にはやはりならないのであった
それとも「間違ったコードは間違って見えるようにする 」(>>185)の効能を全否定する?
APIの定義は変わらなくとも、それを利用するソースコードがころころ変わり得るわけで、
byStrLength
にある日だれかがDWORD型の値を突っ込んだとしたら…
こういうケースを考えたら、「接頭辞を見ればデータ内容の属性がワカルというメリット(>>185)」は
ありえないぐらい賢いIDEでも使わないと他に代え難いと思うがどうか、
>>198
>嫌いだからハンガリアン意地でも使わなかった
おk ようやく建設的な議論に着手できる、
219デフォルトの名無しさん (ワッチョイ 1f7e-T3WU)
2018/02/18(日) 13:01:54.53ID:Tc3/Tap60 あり得ないくらいバカなプログラマのことなんか考慮してない
220デフォルトの名無しさん (ワッチョイ d7b3-hxII)
2018/02/18(日) 13:02:14.72ID:hSV7DJYb0 マウスオーバーで変数の型を確認できたり、縮小変換に警告を出してくれたりする程度のありふれた機能が、ありえないぐらい賢いとな
お前さんはメモ帳でコーディングしてるのか
お前さんはメモ帳でコーディングしてるのか
>>220
emacs にもそんな機能がほしいと思うことがあります
emacs にもそんな機能がほしいと思うことがあります
222デフォルトの名無しさん (スッップ Sdbf-0Jtz)
2018/02/18(日) 13:20:53.92ID:y51LwXumd システムハンガリアンでミスを減らせるなんて事はない
むしろ害悪
むしろ害悪
223デフォルトの名無しさん (ワッチョイ 1f7e-T3WU)
2018/02/18(日) 13:27:53.30ID:Tc3/Tap60224はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-T3WU)
2018/02/18(日) 13:30:05.77ID:OOIPfNvY0225デフォルトの名無しさん (ワッチョイ 378a-TkRA)
2018/02/18(日) 13:38:55.48ID:R2RwPqEs0 今時システムハンガリアンを使うやつはあり得ないくらいのバカだということが決定しました
226デフォルトの名無しさん (ブーイモ MM3b-zxnT)
2018/02/18(日) 13:41:43.01ID:IMbK2zhKM >>218
間違ったコードは間違ったように見えるようにする、について、
あなたが指し示した引用元が言及してるのはアプリケーションハンガリアンについてなんだけど…
システムハンガリアンについては否定的意見。
ちゃんと読んだの?
間違ったコードは間違ったように見えるようにする、について、
あなたが指し示した引用元が言及してるのはアプリケーションハンガリアンについてなんだけど…
システムハンガリアンについては否定的意見。
ちゃんと読んだの?
228デフォルトの名無しさん (ブーイモ MM3b-zxnT)
2018/02/18(日) 14:15:44.65ID:IMbK2zhKM >>218
APIの仮引数にシステムハンガリアンをつけたことで、間違ったAPI呼び出しが間違ったように見えるのはいつ?
APIのリファレンスなり宣言文なりを自分のコードと見比べたときでしょ?その時必ず型情報も見てるよね?情報重複してるよ?
あとIDEが自動でミスを排除してくれるなんて書いてないよ?ちゃんと読んで
APIの仮引数にシステムハンガリアンをつけたことで、間違ったAPI呼び出しが間違ったように見えるのはいつ?
APIのリファレンスなり宣言文なりを自分のコードと見比べたときでしょ?その時必ず型情報も見てるよね?情報重複してるよ?
あとIDEが自動でミスを排除してくれるなんて書いてないよ?ちゃんと読んで
229デフォルトの名無しさん (ワッチョイ 1f7e-T3WU)
2018/02/18(日) 15:46:49.02ID:Tc3/Tap60 入れる変数の型と引数の型を確認しない奴とかいるのか
暗黙の型変換は警告を出せばいいし
どうしても見落とすのならコンパイルエラーにしてしまえばいい
あとメンバ変数もテキストの色を変えればいいからm_もいらない
暗黙の型変換は警告を出せばいいし
どうしても見落とすのならコンパイルエラーにしてしまえばいい
あとメンバ変数もテキストの色を変えればいいからm_もいらない
230デフォルトの名無しさん (ワッチョイ ff8a-NmL4)
2018/02/18(日) 16:01:36.00ID:dLlRK2Wa0 m_はホント見苦しい
231デフォルトの名無しさん (ワッチョイ bfe7-JyXB)
2018/02/18(日) 20:07:07.34ID:8oVyjimH0 m_だけならまだ我慢できるけど
this->を必ず付けるルールと併用するのは本当にやめろどっちかにしろ
this->を必ず付けるルールと併用するのは本当にやめろどっちかにしろ
232デフォルトの名無しさん (ワッチョイ 9fb9-T3WU)
2018/02/18(日) 20:15:52.43ID:eae4wPFh0 > this->を必ず付けるルール
破門だろ
C++使うなそんなボケどもは
破門だろ
C++使うなそんなボケどもは
233デフォルトの名無しさん (ワッチョイ 9f12-pjg9)
2018/02/18(日) 21:14:42.68ID:SQcbDAgv0 ちげえんだよなぁ
thisというキーワードが存在してるから、その存在そのものが、それを書かねばならないような強制力を産み出してる
「存在するが、書かなくてもいい」っていうどっちつかずが、一番論争になる
その反対が「存在しないから書けない」だ
これだと単純明快だ
なんせ、書けない
「書くべきか書かざるべきか」のどーーーでもいい二択に迫られると、とたんに宗教になる
thisというキーワードが存在してるから、その存在そのものが、それを書かねばならないような強制力を産み出してる
「存在するが、書かなくてもいい」っていうどっちつかずが、一番論争になる
その反対が「存在しないから書けない」だ
これだと単純明快だ
なんせ、書けない
「書くべきか書かざるべきか」のどーーーでもいい二択に迫られると、とたんに宗教になる
234デフォルトの名無しさん (ワッチョイ 9fb9-T3WU)
2018/02/18(日) 21:16:52.71ID:eae4wPFh0 キーワードが存在するのと実体が存在することの違いがそんなに大事なのか?
じゃあvtableのキーワードが存在しないことを、おまえはどう考えている?
じゃあvtableのキーワードが存在しないことを、おまえはどう考えている?
235デフォルトの名無しさん (ワッチョイ bf37-ytZF)
2018/02/18(日) 21:33:09.71ID:Pbt6vSqU0 >>231
オケツに_をつけてますわ
オケツに_をつけてますわ
236デフォルトの名無しさん (ワッチョイ ff8a-NmL4)
2018/02/18(日) 21:33:14.46ID:dLlRK2Wa0 おれがそのソースを引き継いだらまず初めにやることは一つ
「this->」から「」への全ソース一括置換
「this->」から「」への全ソース一括置換
237デフォルトの名無しさん (ワッチョイ d7f2-T3WU)
2018/02/18(日) 21:56:25.56ID:Ct2k6iqr0 「m_」はダメで「_」ならいいってのはなんというか、合理的な理由よりも感覚・感情的なものかね。
this-> つけるほうが分かりやすくていいと思うのですが、変てこな接尾辞・接頭辞よりも
239デフォルトの名無しさん (ワッチョイ d77f-T3WU)
2018/02/18(日) 22:00:36.01ID:tWqaO5mz0 m_xxx も xxx_ もなんの保証にもならんからな
this->は必ずメンバになるけど
this->は必ずメンバになるけど
240デフォルトの名無しさん (ワッチョイ 9f4c-C9DI)
2018/02/18(日) 22:37:59.28ID:UEE7OeWn0 _はグーグルスタイルの圧力
241デフォルトの名無しさん (ワッチョイ ff76-BAP3)
2018/02/18(日) 22:42:10.00ID:WjKwYRHz0 余計な命名規約を作るくらいなら言語機能を使った方が良いわな
this->派だわ
this->派だわ
242デフォルトの名無しさん (ワッチョイ bf0e-qi38)
2018/02/18(日) 23:21:23.43ID:AjuHfv4B0 thisで明示した方が所在がハッキリして良いナリ
当職は名前空間もusingせずに明示しろ派ナリ
安易な省略はタイプ数を減らすという軽微なメリットと引き換えに可読性を落としケアレスミスを誘発するという恐ろしいデメリットを孕むナリ
当職は名前空間もusingせずに明示しろ派ナリ
安易な省略はタイプ数を減らすという軽微なメリットと引き換えに可読性を落としケアレスミスを誘発するという恐ろしいデメリットを孕むナリ
243デフォルトの名無しさん (ワッチョイ 1f7e-T3WU)
2018/02/19(月) 00:00:39.93ID:hDVR9PRD0244デフォルトの名無しさん (ワッチョイ ff8a-NmL4)
2018/02/19(月) 00:14:25.92ID:o8qstbSZ0 _付けるなら変数の後ろだろ
245デフォルトの名無しさん
2018/02/19(月) 00:18:14.94 C/C++なら必然的に末尾に付けるしかない
先頭に_付けるような情弱は死ねばいい
Perl/Pythonだと先頭に付けるけどな
先頭に_付けるような情弱は死ねばいい
Perl/Pythonだと先頭に付けるけどな
246デフォルトの名無しさん (ワッチョイ 17c3-T3WU)
2018/02/19(月) 00:42:17.66ID:SSx66hQd0 やらんけど、前一つなら規約には引っかからないんじゃなかったけ
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- テレビ朝日 本社から男性が転落し死亡。関連会社社員か 当たった通行人が左肩軽傷 [阿弥陀ヶ峰★]
- テレビ朝日本社から20~30代の関連会社社員とみられる男性が転落し死亡 六本木けやき坂通りの通行人にはけが人なし [少考さん★]
- 高市早苗首相が天理教系企業に“巨額発注” 総額5000万円 本人は「政治団体の活動に必要な支出」と回答 ★2 [Hitzeschleier★]
- 小島瑠璃子さん、代表取締役を務める会社を破産申請 [牛丼★]
- 「残クレ」でマイホーム、国が銀行向け保険 新型住宅ローン普及促す -日経 ★3 [少考さん★]
- 【サッカー】日本代表、FIFAランキング“4位”の強豪イングランドとの対戦が正式決定! 来年3月に聖地ウェンブリーで激突へ [久太郎★]
- (´・ω・`)クリスマスが今年もやってくる~
- 関西住みのニューハーフ、彼氏が欲しくて泣く
- 千晴さん千晴さん
- 晃←コレの読み方wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
- 【悲報】ジャップ、日中戦争に賛成が5割弱...軍歌の音が聞こえる... [856698234]
- 俺も猫か犬と布団で寝たい
