[過去ログ] C++相談室 part137 (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
1(2): (ワッチョイ 12c3-4saf) 2018/08/27(月)16:02 ID:vY3QDx2y0(1/2) AAS
次スレを立てる時は本文の1行目に以下を追加して下さい。
!extend:on:vvvvv:1000:512
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。
前スレ
C++相談室 part137
省11
922(2): さまよえる蟻人間◆T6xkBnTXz7B0 (ワッチョイ d7b3-uTcE) 2018/10/03(水)01:11 ID:gXNqr2Qf0(1) AAS
>>921
template <size_t t_n>
void my_func(std::array<data_t, t_n>& a)
{
...
}
923: (オッペケ Sr4b-N9wp) 2018/10/03(水)01:18 ID:S2BN/gu+r(2/3) AAS
>>922
なるほ
ありがとうございます
924: (オッペケ Sr4b-N9wp) 2018/10/03(水)01:18 ID:S2BN/gu+r(3/3) AAS
>>922
なるほ
ありがとうございます
925(3): (ワッチョイ 1708-ClIk) 2018/10/03(水)03:04 ID:plRFOjxw0(1) AAS
>>912 >>915
ありがとうございました。やっぱそうだったんですね
しかし検索しても全然出てこないというかどう検索したら良いものか。C++98とかの時代になるんですかねぇ
926(1): はちみつ餃子◆8X2XSCHEME (ワッチョイ bf6f-aemA) 2018/10/03(水)05:02 ID:jiQInXAP0(1/3) AAS
>>925
たぶんそれより更に前の話だったと思う。
「c++ for文 宣言 スコープ」でググったらこういうのとかヒットした。
外部リンク[html]:www.ksky.ne.jp
D&E でも言及があって、 if 文でのルールと合わせる形で修正したという話が載ってる。
927: (ワッチョイ 373d-0kAr) 2018/10/03(水)05:31 ID:F+YgKz680(1) AAS
>>916
VC++ですら廃止予定だけど
外部リンク[aspx]:msdn.microsoft.com
928: はちみつ餃子◆8X2XSCHEME (ワッチョイ bf6f-aemA) 2018/10/03(水)05:33 ID:jiQInXAP0(2/3) AAS
ARM (The Annotated C++ Reference Manual; 外部リンク:amzn.asia ) を確認してみたら、
「初期設定文が宣言ならば、宣言された変数のスコープは for 文を囲むブロックの終わりまでである」
というような記述がある。 (要するに古い仕様)
このあたりから C++98 になるまでの間に修正したってことなんじゃないかと。
929(1): (ワッチョイ 9702-aemA) 2018/10/03(水)07:01 ID:IEc6BJqm0(1/2) AAS
>>926
キーワードと完全に同じ綴りのマクロがあると
標準ヘッダが動作保証外になる
ISO/IEC9899:2011 7.1.2 Standard headers の段落4
930: (スッップ Sdbf-wTw4) 2018/10/03(水)11:00 ID:e50Rb7+yd(1/2) AAS
>>925
最初期の処理系、AT&T cfront の頃からの仕様だから 1980年台だと思う
ちなみに有名な Annotated C++ Reference Manual (ARM) は
この cfront のリファレンスマニュアルに注を付けたもの。
Mac II が出た頃の Mac のソフト開発者は Apple の MPW という開発環境の上で
AT&T のリファレンスマニュアル見ながら cfront で開発していた。
931: (スッップ Sdbf-wTw4) 2018/10/03(水)11:03 ID:e50Rb7+yd(2/2) AAS
>>925
>しかし検索しても全然出てこないというかどう検索したら良いものか。
当時まだ処理系と独立して言語仕様を策定/記述したものは存在していなくて、
上記の cfront のリファレンスマニュアルと cfront の実際の動作が c++ の仕様でした。
932(1): (ワッチョイ 17b3-kFNE) 2018/10/03(水)12:23 ID:eWsEWXO50(1) AAS
>>929
そんなもん古い環境で使うなら標準ヘッダのインクルード後に定義するに決まってるだろ
現行の標準に合わせたいけど仕方なく古い環境でも動くようにしたい場合のテクニックなんだから
933: (ワッチョイ 9702-aemA) 2018/10/03(水)13:10 ID:IEc6BJqm0(2/2) AAS
>>932
俺だったらこう書くぜ
{ for(int i = 0; i < 1; i++) ; }
{ for(int i = 0; i < 1; i++) ; }
前提にしている環境を誤解させかねない変態コードには反対だ
934(1): (ワッチョイ 9f23-wTw4) 2018/10/03(水)13:21 ID:2zzoZNSm0(1) AAS
ヘタレな俺は c 同様直近のブロックの頭で宣言してました
935: はちみつ餃子◆8X2XSCHEME (ワッチョイ bf6f-aemA) 2018/10/03(水)17:25 ID:jiQInXAP0(3/3) AAS
>>934
今では C でもブロックの頭という縛りは無いやで。
936(1): (オッペケ Sr4b-N9wp) 2018/10/03(水)22:30 ID:T5RLH7Axr(1/2) AAS
std::array ってコンパイル時にサイズが決まっていることを想定して作られてるんだよね?
だったら、「可変長ではないがサイズは実行時に決まる」というメモリが連続な配列がほしいなら生配列を使え、というのが C++ を作った人の気持ちなの?
937(1): (アウアウウー Sadb-mlbx) 2018/10/03(水)23:04 ID:p3pJJViFa(1) AAS
それこそvectorじゃないの
938(1): (ワッチョイ 1704-ClIk) 2018/10/03(水)23:19 ID:frDsf1q90(1/2) AAS
>>936
いや、昔はイニシャライザーリストがなかったので、初期化式が使えるオブジェクトの立ち位置だった。
イニシャライザーリストが入ったのでほぼ産廃。constexprの対応もなく死んでいる。
基本的に配列っぽいものがほしかったらベクター使ってっていう趣旨だったと思う。
939(3): (オッペケ Sr4b-N9wp) 2018/10/03(水)23:26 ID:T5RLH7Axr(2/2) AAS
>>937-938
vector ってメモリ空間連続ですか?
だったら迷わずこれ使うんですが
940(1): (ワッチョイ 1704-ClIk) 2018/10/03(水)23:29 ID:frDsf1q90(2/2) AAS
>>939
&V[0]すると一本のメモリの先頭が取れると規格書に書いてあると聞いた。
これは、サイズを拡張するなどのメモリ変更があるまで同じものを指してると思う。
941(1): (ワッチョイ c48a-Aquf) 2018/10/04(木)00:07 ID:zm1AtLvQ0(1) AAS
>>939
迷わず使っていいですよ
942(2): (ワッチョイ 9bc3-dNAh) 2018/10/04(木)00:35 ID:b1qTAw9u0(1) AAS
C++11からvectorのメモリ空間は連続でなければならないと規格で決められた
安心していいよ
943: (オッペケ Sr10-/FYQ) 2018/10/04(木)00:40 ID:bav+IDITr(1) AAS
>>940-942
ありがとうございます
しかしメモリが連続じゃないといけない外部ライブラリに vector 渡すの結構緊張しますね
少し飛躍するのですが、vector の入れ子は流石に連続とは限りませんよね?
944(1): (アウアウウー Sa30-z023) 2018/10/04(木)00:58 ID:s35zoLCpa(1) AAS
メモリ連続させたいならvectorの入れ子はよして。
最初arrayで考えてたなら画像とか行列とかそんな感じかな?
945: (スップ Sdc4-+rwh) 2018/10/04(木)01:32 ID:ezH2Wklod(1/3) AAS
>>942
太古から実際には連続だし規格として明記されたのは C++03 から。
C++11 で連続と規格化されたのは string (basic_string) の方。
946: (オッペケ Sr10-/FYQ) 2018/10/04(木)01:57 ID:CYtCz8O/r(1) AAS
>>944
いえ、もともとは生の一次元配列を使ってて、array の方が取り回しが良いのかなと考えただけです
実際は vector が最強ということですね
入れ子云々は本当に気になっただけです
多次元配列は、色々諦めて Boost を使っています
947(4): (ワッチョイ de8a-F3g9) 2018/10/04(木)03:00 ID:SxiNReMs0(1) AAS
変数名とかクラス名にめちゃくちゃ毎回悩む
従業員の名前、社員番号、階級みたいなクラスを作るときのクラス名とかって普段どうしてる?
Employeeだけで良いのだろうか
DataとかInfoとか意味のあるようでないような命名が頭をよぎってしまう
仮に従業員をEmployeeとしたときに会社名と従業員リストのDictionary<string, List<Employee>>の変数名とかどうすりゃええねんってなる
CompanyではないしCompanyDataだとそれっぽいが的確でもなさそうだし...
948: (スップ Sdc4-+rwh) 2018/10/04(木)03:38 ID:ezH2Wklod(2/3) AAS
emproyees でいいだろ
for (consy auto& emproyee : emproyees["Microsoft"]) ...
949: (スップ Sdc4-+rwh) 2018/10/04(木)03:39 ID:ezH2Wklod(3/3) AAS
rじゃなくてlか
950: さまよえる蟻人間◆T6xkBnTXz7B0 (スププ Sd94-hQIv) 2018/10/04(木)04:00 ID:MLculXgyd(1) AAS
MapCompanyNameToEmployees
951: はちみつ餃子◆8X2XSCHEME (ワッチョイ e66f-vBoO) 2018/10/04(木)04:12 ID:1wg41Y300(1) AAS
>>939
vector が連続と明記されたのは C++03 だが、
C++ 標準の体制としては仕様の「欠陥」と認められた項目については過去の版にさかのぼって適用されることがあり、
vector が連続であるというのもそのひとつのはず。
つまり、 C++98 を名乗る処理系でも vector は連続であるべきで、実際にほとんどそうなっていると思う。
952: (ワッチョイ 1e81-toeJ) 2018/10/04(木)04:54 ID:MQvrn7bB0(1) AAS
>>947
クラス名・変数名に迷ったら書き込むスレ。Part28 [無断転載禁止]©2ch.net
2chスレ:tech
953: (ワッチョイ a6b3-XM+q) 2018/10/04(木)19:12 ID:Ohr0xwue0(1) AAS
>>947
素直に日本語使えばええやんけ。
954: (ワッチョイ 26bd-PkCJ) 2018/10/05(金)00:43 ID:SgefIaql0(1/7) AAS
英語の複数形は便利すぐる
emproyee_list[]の代わりにemproyees[]で済む
大文字小文字でキャメルケースも使えるしほんと出来過ぎ
955: (ワッチョイ 0cb3-vBoO) 2018/10/05(金)01:05 ID:lAZe+Hwv0(1) AAS
単独かコンテナで意味が大きくかわるのに
字面の違いがsのありなしは微妙すぎていまいちだと思ってる
956(1): (ワッチョイ 529f-QTQU) 2018/10/05(金)06:55 ID:226EunUa0(1) AAS
しかしそこまでメモリに直触りするならvectorでない方がいい気がするんだが。
957(1): (ワッチョイ 9f02-vBoO) 2018/10/05(金)07:56 ID:Zg//fZBj0(1) AAS
だよな
生メモリがいるなら生メモリ使えってこと
958: (オッペケ Sr10-/FYQ) 2018/10/05(金)08:13 ID:8YBbWag1r(1) AAS
>>956-957
サイズの取得とかオシャレにできないじゃん
959: (ワッチョイ 8ad7-vBoO) 2018/10/05(金)12:49 ID:cQzHZ22n0(1/3) AAS
生メモリのサイズの管理の仕方さえ忘れたか
960(1): (ワッチョイ 6ee3-BkfR) 2018/10/05(金)18:47 ID:4ThlZrTR0(1/7) AAS
>>947
g_dictCompanyInfo
961: (ワッチョイ 6ee3-BkfR) 2018/10/05(金)18:49 ID:4ThlZrTR0(2/7) AAS
>>960
もし、今後絶対、employee の情報しか入れないと言い切れるのなら、
g_dictCompanyEmploees
でもいい。何か追加する予定なら、>>960 のように「g_dictCompanyInfo」
962: (ワッチョイ 6ee3-BkfR) 2018/10/05(金)18:51 ID:4ThlZrTR0(3/7) AAS
>>947
最初の従業員のデータについては、
EmployeeInfo
二番目の dictionary の方は、
g_dictCompanyEmploeeInfo_s
963: (ワッチョイ 928a-SWBM) 2018/10/05(金)20:18 ID:2Vgho4wC0(1) AAS
g_とか_sとかなんなんだそれ
964: (ワッチョイ ba12-A6IM) 2018/10/05(金)21:02 ID:eXLBKWdN0(1) AAS
秘密の呪文
965: (ワッチョイ 4634-C4cH) 2018/10/05(金)21:42 ID:s/+stmcD0(1) AAS
ハンガリアン記法とかいうMSが編み出した負の遺産
966: (ワッチョイ 9bc3-dNAh) 2018/10/05(金)21:54 ID:wRA0FWgN0(1) AAS
型付けるハンガリアンは糞だけど、グローバル変数にg_付けるのは普通でしょ
付けないの?
967: (ワッチョイ df7f-vBoO) 2018/10/05(金)21:56 ID:zW6/2yxd0(1/3) AAS
グローバル変数使わないしg_つけてもなんの役にも立たないし
968: (ブーイモ MM98-Ww/X) 2018/10/05(金)22:29 ID:dsZIcecxM(1) AAS
スコープを示すハンガリアンは変数のスコープを不必要に広げることに対する心理的抵抗を低減するという点で害悪
969: (ワッチョイ c0f2-vBoO) 2018/10/05(金)22:48 ID:qdFd1sVz0(1) AAS
あの複雑怪奇な名前解決ルールを受け入れているC++使いからしてみれば、変数が
ローカルかグローバルかなんてわざわざ目印付けるほどのことじゃないのかも
970: (ワッチョイ 26bd-PkCJ) 2018/10/05(金)22:49 ID:SgefIaql0(2/7) AAS
パブロフの犬カヨ
グローバル変数の先頭に「g_」を付け続けると
そのうち先頭に「g_」とつけただけで
971: (ワッチョイ 26bd-PkCJ) 2018/10/05(金)23:02 ID:SgefIaql0(3/7) AAS
しかしいかにクラスFooに関連するオブジェクトは全部Fooのコンストラクタかsetterで渡すか一時オブジェク
トとしてメソッドの引数として都度渡すのがオブジェクト指向設計としての理想とはいえ実際には対数表のカ
スタマイズ版みたいにかなり普遍的な意味を持つテーブルTが存在する前提でいっぱいクラスを定義したい
ときもあるわけでそういうときはテーブルTをグローバル変数とした方がスマートに書けるTがこの世に1つし
かないのにいちいちインスタンス毎にTへのポインタを持たせるのですかみたいな、
で、そうするとグローバルであることの目立つ標識が欲しいところだがオリジナルの規則を考えるのもアホら
しいので使用人口が多そうな「g_」を使う
972: (ワッチョイ 8ad7-vBoO) 2018/10/05(金)23:05 ID:cQzHZ22n0(2/3) AAS
60億人がシステムハンガリアンの良さを発見できなかった
そういうことだ
973: (ワッチョイ 8ad7-vBoO) 2018/10/05(金)23:06 ID:cQzHZ22n0(3/3) AAS
せっかく自動化したものを蒸し返す愚行
機械に使われる人間に自ら志願するようなことでしかない
974: (バッミングク MMc2-Ww/X) 2018/10/05(金)23:14 ID:MM5jcfpFM(1) AAS
ハンガリアン記法が滅亡した時にgとかsとかのスコーププレフィックスも一緒に絶滅したと思うの。
975: (ワッチョイ 26bd-PkCJ) 2018/10/05(金)23:19 ID:SgefIaql0(4/7) AAS
もうそういうのは見飽きたからハンガリアン無差別否定派とアプリケーションハンガリアン推進派が頃しあって消滅してくれたらいいのに…
976: (ワッチョイ 6ee3-BkfR) 2018/10/05(金)23:22 ID:4ThlZrTR0(4/7) AAS
「ハンガリアン記法を使うと、コードの断片からでも何かを発見できる。」
977: (ワッチョイ 6ee3-BkfR) 2018/10/05(金)23:25 ID:4ThlZrTR0(5/7) AAS
C#では、メンバ変数 aaa をアクセスする時には、必ず、
「this.aaa」
とするらしい。これは、C++で、ハンガリアン記法を使った場合の、
「m_aaa」
に該当する。this. と m_ では、後者のほうが短く便利。
m_ も、this. も付けない場合、たとえば、コンストラクタで
同じ意味の仮引数を使いたい場合に、何らかの別の名前を
省1
978: (ワッチョイ 0104-SWBM) 2018/10/05(金)23:26 ID:eEmdo3hB0(1) AAS
サイズ変更してキャパシティ変更になったらデリートかかる可能性が高いのでそういうことを一応管理しないといけない。
979: (ワッチョイ 26bd-PkCJ) 2018/10/05(金)23:28 ID:SgefIaql0(5/7) AAS
>C#では、メンバ変数 aaa をアクセスする時には、必ず、
>「this.aaa」
>とするらしい。
mjd?
いつから?次の元号から??
980(1): (ワッチョイ 965b-zn+7) 2018/10/05(金)23:29 ID:3VgmxBOW0(1/2) AAS
一般的に言われているシステムハンガリアンのデメリットはg、s、mには当てはまらない。
iとかdwとかlpszみたいな糞接頭辞とは分けて考えたほうがいいと思うよ。
981: (ワッチョイ 6ee3-BkfR) 2018/10/05(金)23:31 ID:4ThlZrTR0(6/7) AAS
個人的には、以下のような命名規則は大いに役立っており、
コード全体を見ずにコードの断片を見るだけで、何も考えずに
コーディングが出来ることが多くなる。おかげでずいぶん楽になった。
char *pszText;
char szText[256];
CString strText;
char **ppszText;
省3
982(1): (ワッチョイ df7f-vBoO) 2018/10/05(金)23:36 ID:zW6/2yxd0(2/3) AAS
m_がついててもそれがメンバである保証が何もないからなあ。無駄なだけ
983(1): (ワッチョイ 6ee3-BkfR) 2018/10/05(金)23:39 ID:4ThlZrTR0(7/7) AAS
>>980
個人的には、i や dw は滅多に使わない。
lpszは、自分では使わない。pszは使う。
なぜなら、lpsz の「l」 は、16BIT時代から32BIT 時代へ移行したときの産物だから、
今は時代遅れなので。
ところで、dwRead と書くと、宣言を見返さなくても、読み込みバイト数を表す DWORD 値だと
分かって便利。dwWrite だと、その書き込み版となる。変数名が規則変化するのでとっても便利。
省7
984: (ワッチョイ 26bd-PkCJ) 2018/10/05(金)23:46 ID:SgefIaql0(6/7) AAS
命名のプレフィックスに関する個人的な熱い想いはカプセルの内側に隠蔽すると良い
そういう意味で「m_」は比較的どうでも良い
985(1): (ワッチョイ 965b-zn+7) 2018/10/05(金)23:50 ID:3VgmxBOW0(2/2) AAS
>>982
それを言うならあらゆるシンボル名が正しくそれを示している保証なんてないと思うよ。
>>983
そういうのはoopやtmpと相性が悪いんで…
986: (ワッチョイ d980-A6IM) 2018/10/05(金)23:51 ID:elz6X2140(1) AAS
こういう話だけは食い付きがいい
さすがドカタ
987: (ワッチョイ df7f-vBoO) 2018/10/05(金)23:52 ID:zW6/2yxd0(3/3) AAS
そうだよ。だから最低限にしないといけない
無駄なものをつけるのはいらんバグを増やすだけで悪
988: (ワッチョイ 26bd-PkCJ) 2018/10/05(金)23:54 ID:SgefIaql0(7/7) AAS
個人的にはCのライブラリ関数名に「g_」がついていないのを遺憾に思う
989: (スップ Sd02-YLcB) 2018/10/05(金)23:54 ID:ZMQnisBBd(1) AAS
今時ハンガリアン使うアホがいたとは驚きなんだがw
もう絶滅したと思ってた
990: (ワッチョイ 6ee3-BkfR) 2018/10/06(土)00:00 ID:JjdhAE/r0(1/4) AAS
>>985
>そういうのはoopやtmpと相性が悪いんで…
どういう意味?
991: さまよえる蟻人間◆T6xkBnTXz7B0 (スププ Sd70-hQIv) 2018/10/06(土)00:06 ID:SJezKYMvd(1) AAS
OOP == オブジェクト指向プログラミング
TMP == テンプレート/temporary
992: (ワッチョイ 6ee3-BkfR) 2018/10/06(土)00:07 ID:JjdhAE/r0(2/4) AAS
何で相性が悪いのかが分からぬ。
993: (ワッチョイ 26bd-PkCJ) 2018/10/06(土)00:11 ID:d9G2ZJ030(1) AAS
いかにハンガリアン否定派といえども
いざ実際ハンガリアンで書かれた変数名を見たら体が反応してしまうということなんだろJK
鍛錬が足りん
994: (ワッチョイ 6ee3-BkfR) 2018/10/06(土)00:14 ID:JjdhAE/r0(3/4) AAS
ずっと前に、ハンガリアン記法で書かれた比較的大きなソース・コードを見て
とても分かりやすかったので自分もそれに習っただけなんだよね。
995: (ワッチョイ ee9f-vBoO) 2018/10/06(土)00:23 ID:PyrakEMK0(1) AAS
実際みんなが叩いてるから叩いてるってやつはいるだろうな
俺も別に悪くはないと思うよ
自分から進んで使おうとは思わないが
996: (ワッチョイ 4634-C4cH) 2018/10/06(土)00:28 ID:GMmUDkcN0(1/2) AAS
型が殖える度に変数名のプレフィックスがどんどんどん殖えていくなんてコーダー側からしたら不毛なだけ
いざ型名変えたいと思っても後ろを振り向くのが怖くなる
997: (ワッチョイ 6ee3-BkfR) 2018/10/06(土)00:33 ID:JjdhAE/r0(4/4) AAS
でも、BOOL 値の変数の先頭に b を付けたりすると、ミスを発見するのに大いに役立つ
事があるよ。
998: (ワッチョイ 4634-C4cH) 2018/10/06(土)00:36 ID:GMmUDkcN0(2/2) AAS
読む側にとってはな
書く側は細心の注意を払わないといけない
簡単に後戻りできないからな
メンテ効率最悪なんだよ
999: (ワッチョイ 965b-zn+7) 2018/10/06(土)00:38 ID:CdYUXXMG0(1) AAS
次はpart139でいいのか?
1000: (ワッチョイ 0104-SWBM) 2018/10/06(土)00:42 ID:tQclXtq/0(1) AAS
ハンガリアンは、集団にその命名方法が周知されていないといけないので、周知するところから始めないといけない。
周知できればコスト低減できるが、それまでのコストをどうみつもる?
1001(1): 1001 ID:Thread(1/2) AAS
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 39日 8時間 40分 40秒
1002(1): 1002 ID:Thread(2/2) AAS
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
省7
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 1.169s*