【初心者歓迎】C/C++室 Ver.101【環境依存OK】 [無断転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
2017/07/18(火) 07:07:27.20ID:vzMDiUgd
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。

◆ソースのインデントについて
半角空白やTABでのインデントはスレに貼ると無くなります。
そのため、アップローダーに上げるのも手ですが直接貼る場合は、
全角空白か に置換すると見栄えだけはよくなります。

【アップローダー】(質問が長い時はココ使うと便利)
http://codepad.org/ (コンパイルもできるし出力結果も得られる[]privateをチェック)
http://ideone.com/ (時間帯によってはcodepadが重い事があるのでここも利用)

前スレ
【初心者歓迎】C/C++室 Ver.100【環境依存OK】
http://mevius.2ch.net/test/read.cgi/tech/1478440682/
2017/08/23(水) 18:53:12.02ID:Bqf1nBHj
>>519
なにが?
2017/08/23(水) 18:59:53.02ID:HlA0mWJs
C++ 標準委員会のドワンゴ江添は、職務質問の手荷物検査を拒否したら、
警官10人に、現場で1時間半以上、拘束されたらしい

捜査でもない、任意の行政処分なのにw

それで東京都を訴えた
2017/08/23(水) 19:04:14.64ID:svL9mCb4
日頃から発言がおかしい勘違い君だからな。
2017/08/23(水) 19:07:29.72ID:Rd2CDMDC
>>517
そう言う単純な奴ならたいして変わらんので>>515みたいな変化を嫌う老害はvarを使いたがらない
Dictionary<string, Dictionary<string, string>> M = new Dictionary<string, Dictionary<string, string>>();
とか使い始めたら同じの2個もいらんやんってなる
524デフォルトの名無しさん
垢版 |
2017/08/23(水) 19:13:12.59ID:svL9mCb4
ここ数年、どのスレで論破されるとキレて老害連呼しだす人がいたが、
おそらく、ID:Rd2CDMDC は同一人物だろう。
2017/08/23(水) 19:34:08.26ID:/4+aEImc
右辺にクラス名が現れるときだけauto使う派
FruitFlavor flavor = fruit.GetFlavor()
auto unko = (Unko)GetFuck()
2017/08/23(水) 19:36:20.34ID:8VCPyRKy
複雑な型は事前にtypedefして使う派。
2017/08/23(水) 19:36:35.05ID:GX5TSqZj
ラムダ式のときもauto使うしなー
2017/08/23(水) 19:40:35.97ID:GX5TSqZj
>>526
C++11以降ならtypedefよりusingがよいぞい
https://msdn.microsoft.com/ja-jp/library/dn467695.aspx
2017/08/23(水) 19:57:11.83ID:VR+2stBC
老害は過去のレスには詳しいw
530デフォルトの名無しさん
垢版 |
2017/08/23(水) 20:13:58.21ID:elGjkRqx
restrictなんかもそのうちdstのsrc言及有無、srcのdst参照有無を縛る修飾に成るんだろうな
2017/08/24(木) 05:55:50.39ID:5zDLSTW7
>>525
同意

関数が何を返すか分かるから右辺が関数の場合でも構わないけど
関数の戻り値にauto使う奴らは殲滅したい
532デフォルトの名無しさん
垢版 |
2017/08/24(木) 09:53:17.83ID:FefNdqnS
タイプが面倒というPGはコメントも書かないし、単体テストも端折るし、
他の人が書いたソースにバグがあるかどうか真剣に読まない。バグ製造機。
プロジェクトにこういう人が一人でもいると、全体の品質が下がるばかりか
全体の士気まで下がるから厄介。態度の悪さを指摘すると老害連呼のウイルスプログラマ。
2017/08/24(木) 18:33:33.36ID:dK94ZXMf
>>532
他人のコードのバグを見つけるとか極悪じゃないか?
2017/08/24(木) 19:29:06.97ID:++6qy4SY
>>533
えっっ?
最近はコードの机上検証はしないって?
2017/08/25(金) 14:56:45.51ID:nyf+izFi
>>531
ちょっと聞きたいんだけど、
std::vectorをprivateメンバに持つクラスに、vectorのサイズを返すメンバ関数を作る場合、
返値の型はstd::vector::size_typeにするの?
それとも適当にsize_tとかで返しちゃう?

前者だとprivateメンバの型が外側に漏れてる感じが気持ち悪くて嫌だし、
後者は型が違うのが嫌だから、
autoで返しちゃいたいんたけど、殲滅されるべきなのかな
2017/08/25(金) 15:13:47.84ID:g+9HiqWa
>>535
typedefかusingを使う
2017/08/25(金) 17:04:11.95ID:mWX/padL
intでいいよ
2017/08/25(金) 17:08:02.77ID:mWX/padL
メンバ関数ごとに型が違うなんて使いづらすぎる
2017/08/25(金) 17:28:28.06ID:te52+8O3
intは流石にだめだろ
2017/08/25(金) 17:47:23.39ID:mWX/padL
intでサイズ的に十分ならint
2017/08/25(金) 17:48:31.18ID:mWX/padL
>>539
なぜ?
2017/08/25(金) 18:03:18.25ID:M7y+0IYN
>>541
sizeof(int) == 4 && sizeof(size_t) == 8という環境がある。
intは符号あり、size_tは符号なし。
543デフォルトの名無しさん
垢版 |
2017/08/25(金) 18:06:14.26ID:KodDhcxm
size_tを符号なしにした馬鹿は誰だよ。
2017/08/25(金) 18:15:01.16ID:mWX/padL
>>542
だから、
intで収まるならintで
2017/08/25(金) 18:19:04.85ID:te52+8O3
>>544
もとからintならあれだが、いちいち別の型であるintにキャストする積極的な理由はなんだ?
2017/08/25(金) 18:20:08.57ID:mWX/padL
intをオーバーする心配をするなら
size_tをオーバーする心配も
メモリが足りない心配も
処理が遅すぎて使い物にならない心配も
2017/08/25(金) 18:20:36.17ID:te52+8O3
>>546
そうじゃなくてわざわざ型変換する理由は何?
2017/08/25(金) 18:21:19.25ID:mWX/padL
統一
2017/08/25(金) 18:25:11.29ID:mWX/padL
>>542の環境の場合、多くの場合ムダにデカい変数を扱うことになる

もちろん、巨大なデータを扱う可能性があるならムダではない
と同時に、>>546も心配する必要がある
2017/08/25(金) 18:26:03.20ID:te52+8O3
>>548
何と何を統一するの?

int n = static_cast<int>(v.size());
という面倒な表記?それとも
int n = v.size();
とかいう-Wall で死ぬ表記?

auto n = v.size();
って書かずにキャストをどうしてもしたいのはなぜなのか
2017/08/25(金) 18:30:18.05ID:mWX/padL
クラスを使う人が、内部的にvectorを意識する必要もないし、それようにわざわざ専用の型を使う必要もない

intは他の処理でも多く使われているので、使う側からすれば一番変換が少ない

巨大なデータを扱う処理に関する記述で、size_tで統一してるならそれでも
符号無しで統一してるのも考えにくいけど
2017/08/25(金) 18:35:08.21ID:mWX/padL
>>550
そういう面倒なことをクラスのユーザーにさせないため
2017/08/25(金) 18:48:22.24ID:s9vD7wq8
ID:mWX/padLみたいな前近代的なマが早くくたばりますように
2017/08/25(金) 19:08:25.29ID:te52+8O3
>巨大なデータを扱う処理に関する記述で、size_tで統一してるならそれでも
符号無しで統一してるのも考えにくいけど

STLのsizeはsize_tで統一されてんのにお前が乱してるんだろw
2017/08/25(金) 19:21:24.07ID:g+9HiqWa
>そういう面倒なことをクラスのユーザーにさせないため

どんな理屈だよ
vectorをラップしたクラスにat()やoperator[]を設けたらint指定でアクセスするのか
ユーザは負数に成り得る変数を注意しながら使えってか
何のための型だよ
2017/08/25(金) 19:27:33.63ID:wHQvIY8a
>vectorをラップしたクラスにat()やoperator[]を設けたらint指定でアクセスするのか
あたりめーだ
真人間ならラップは手段であって目的じゃねーから
>ユーザは負数に成り得る変数を注意しながら使えってか
バカ乙
計算をミスらないことと演算がオーバーフローしないことだけ注意すんだよ
2017/08/25(金) 19:38:23.61ID:mWX/padL
>>554
STLを意識させないためにクラスで包んでるんだろうに
意識させるならパッケージング失敗では?
2017/08/25(金) 19:38:41.32ID:g+9HiqWa
>>556
>あたりめーだ
>真人間ならラップは手段であって目的じゃねーから
ごめん、意味分からん

>計算をミスらないことと演算がオーバーフローしないことだけ注意すんだよ
だから、わざわざvector::size_typeなものをintに変換する必要がないじゃないの
0からmax_size()までの範囲なんだからさ
2017/08/25(金) 19:40:58.71ID:g+9HiqWa
>>557
だからtypedefやusingを使うって話だよ
2017/08/25(金) 19:41:24.55ID:mWX/padL
vectorから他の実装に変えたらクラスの仕様も変えるのか?
2017/08/25(金) 19:42:44.43ID:mWX/padL
>>559
いちいちメンバ関数ごとに型を定義する?
本気で言ってるの?
2017/08/25(金) 19:47:10.01ID:mWX/padL
クラスやメンバ関数ごとに型を定義したら、
それらの数値を複数用いて演算した結果はどうすんの?
まさかauto?
2017/08/25(金) 19:50:17.50ID:mWX/padL
クラスが値に関して責任を持つ
当たり前

クラスが値や型に対して責任を持たずにただ値をスルーパスするだけの糞クラスなんかは
ローカルで個人で使う物だけにとどめておきな
2017/08/25(金) 19:51:00.23ID:mWX/padL
ただメールを転送するだけの役に立たない糞上司と同じ
2017/08/25(金) 20:00:01.80ID:g+9HiqWa
>>561
?
クラス内に
typedef typename std::vector<T>::size_type size_type
でいいんじゃないの
2017/08/25(金) 20:14:31.61ID:mWX/padL
>>565
vector以外のデータは無いっていう前提?
または、クラスで扱うサイズをすべてそれで統一?

仮にそうだとして、
じゃあ別のクラスのsize_typeや他の型と演算した結果はどういう型にするつもり?
2017/08/25(金) 20:16:04.43ID:mWX/padL
使う側に考えさせる
使う側の手間を考えない実装
2017/08/25(金) 20:18:17.34ID:mWX/padL
vectorをそのまま継承した程度のクラスなら、
当然vectorのインターフェースを保つべきと思うよ
今回はvectorはただのデータのひとつ
2017/08/25(金) 20:19:47.38ID:mWX/padL
実装上、たまたまvectorを使っただけ
もしかしたら変えるかも

といった、ごく普通のクラス設計だと仮定した場合の話
2017/08/25(金) 20:26:53.78ID:cjqQUnES
てか普通コンテナのサイズはsize_typeでとるだろ
別のクラスのsize_typeもsize_typeで取れ

勝手にintにキャストしてwarningまみれにすんな死ね
2017/08/25(金) 20:29:55.07ID:mWX/padL
コンテナはただのクラス内のデータのひとつ
内部の設計事情を外部に出す必要はない
2017/08/25(金) 20:32:07.80ID:mWX/padL
>>562 >>566 に対して、何も回答がない
2017/08/25(金) 20:32:27.95ID:g+9HiqWa
>>566
>vector以外のデータは無いっていう前提?
実装を替える必要があるってのは後で作り変えるって意味?それって設計の問題で関係なくね?
静的動的問わずポリモーフィズムするって意味なら最初からそういった設計をするでしょ
今回の話はvectorをラップしているクラスの話でしょ、何で関係ない話を持ち込むの?

>または、クラスで扱うサイズをすべてそれで統一?
size_typeで統一されるならそれでイイんじゃないの?君の言うintに統一と何ら変わらない
それなら内包しているvectorと同じsize_typeを使った方のが余計な記述も減るしバグも減る

>じゃあ別のクラスのsize_typeや他の型と演算した結果はどういう型にするつもり?
それって君の言うint統一でも同じじゃね?

何か話がどんどんズレていない?
2017/08/25(金) 20:33:01.08ID:cjqQUnES
お前はそれでいいんじゃないか?
intで出せばいいじゃん
他のコンテナと整合取れないから使われないだけで、法に触れてるわけでもないし
2017/08/25(金) 20:37:36.90ID:mWX/padL
>>573
私の書き込みの前提は >>568 >>569

クラスの中にvectorやlistや他のコンテナのデータもあるかもしれない
それぞれが、コンテナ独自のサイズの型を定義してるかもしれない
コンテナが返すサイズを加工して返すかもしれない
比較的大きなクラスの話

ただvectorを包んだだけなら当然vectorのインターフェースを継承すべき
2017/08/25(金) 20:51:59.32ID:g+9HiqWa
>>575
何その後出しの仮定
取り敢えず、君が幾らでも解釈を広げていくなら話す意味ないわ

それにそのクラス使いたくないわ
絶対何もかも詰め込んだ糞クラスだと思うわ
2017/08/25(金) 21:41:43.35ID:KodDhcxm
stlが糞ならautoも糞。これだけ。
2017/08/25(金) 22:47:35.80ID:Eu3G8mvr
auto g() {
 // auto最高や
}
2017/08/25(金) 22:49:29.48ID:M7y+0IYN
ご利用は計画的に
2017/08/25(金) 23:42:52.91ID:Eu3G8mvr
auto 計画通り() -> auto {}
2017/08/26(土) 00:15:55.89ID:pK4duJs2
int でいーんと違うかな? (違う)
2017/08/26(土) 00:18:45.88ID:m69mKCvs
この強烈な加齢臭
昭和生まれはお帰りください
2017/08/26(土) 02:07:31.06ID:YVaPdeR/
平成もあと数年だが在位64年は無茶苦茶長いよな
2017/08/26(土) 02:50:01.47ID:h4RGPr+8
C++ Core Guidelines より
ES.106: Don't try to avoid negative values by using unsigned
https://github.com/isocpp/CppCoreGuidelines/blob/v0.8/CppCoreGuidelines.md#Res-nonnegative
ES.107: Don't use unsigned for subscripts
https://github.com/isocpp/CppCoreGuidelines/blob/v0.8/CppCoreGuidelines.md#Res-subscripts
2017/08/26(土) 11:13:16.50ID:mPuoCwlf
↑便所の落書き
2017/08/26(土) 18:00:34.61ID:WfLpSPQA
size_tって何だっけ?
最近c#脳なので忘れた
2017/08/26(土) 22:37:42.94ID:XR3UemNV
きっと何かのサイズだろう
rsize_tが出てきたあたりで規格を読むのがめんどくさくなった
2017/08/26(土) 23:05:29.50ID:4huu8k7X
unsigned int
2017/08/26(土) 23:27:40.18ID:gTZoGI5S
xmlだったかloggerだったかのヘッダオンリーライブラリでsize_t絡みのワーニングを
消そうとintをsize_tに変更すると別の場所にワーニングが出て、そこも直すとまた別
の場所にの繰り返しで使うのやめたことがあった。
2017/08/28(月) 10:50:45.03ID:D1yS1ByC
インクルードディレクトリの優先順位変えたらうまくいったり
591デフォルトの名無しさん
垢版 |
2017/09/02(土) 17:05:03.82ID:Vkplowcj
http://opencv.jp/cookbook/opencv_img.html#image-resize
ここのソースコードをコピペしてコンパイルしようとしたのですが
関数 `cv::Mat::release()' 内:
test.cpp:(.text._ZN2cv3Mat7releaseEv[_ZN2cv3Mat7releaseEv]+0x47): `cv::Mat::deallocate()' に対する定義されていない参照です
collect2: error: ld returned 1 exit status
このようなエラー文が出てしまいます
使っているOSはdebian stretchです
/usr/include/opencv2には必要なファイルはありました
コンパイルオプションを色々調べて試したのですがうまく行きませんでした
どのようにコンパイルすればいいのでしょうか
2017/09/02(土) 17:46:32.93ID:Ti9M8tGK
>>591
エラーメッセージの通り、定義されてない関数を呼んだんでしょ
必要なライブラリをリンクしてないんじゃないの?
593デフォルトの名無しさん
垢版 |
2017/09/02(土) 17:57:11.82ID:Vkplowcj
解決しました
すみませんでした
ライブラリのリンク方法をきちんと理解してなかったみたいです
2017/09/03(日) 01:01:10.24ID:HP/Rq3By
もちろん、具体的にどうやって解決したかは書きません
595デフォルトの名無しさん
垢版 |
2017/09/03(日) 02:48:50.72ID:hOhj+ods
>>594
-l のあとにopencv_必要なライブラリで解決しました
g++ test.cpp -lopencv_core -lopencv_imgproc -lopencv_highgui
2017/09/03(日) 23:14:47.80ID:SkKZ7pGs
g++はソースでライブラリを指定できないの?
597デフォルトの名無しさん
垢版 |
2017/09/04(月) 09:53:17.44ID:MN7/X5Lc
ソースでリンクとかvisual studioかよ
2017/09/05(火) 17:26:13.07ID:SopTNKp+
質問です
DLLの中で宣言したvectorを呼び出し側のEXEから使うのにスマートな方法は
どんな方法がありますか?
599デフォルトの名無しさん
垢版 |
2017/09/05(火) 17:29:23.60ID:b+ZxWLYj
class CFirstClass {
public: virtual const char* GetString() const = 0;
};
class CNinja : public CFirstClass {
public: virtual ~CNinja();
virtual const char* GetString() const;
};
class CMaster : public CFirstClass {
public: virtual ~CMaster();
virtual const char* GetString() const;
};
class CJohnin : public CNinja, public CMaster {
public: virtual ~CJohnin();
};
CNinja::~CNinja(){ }
CMaster::~CMaster(){ }
CJohnin::~CJohnin(){ }
const char* CNinja::GetString() const { return "忍者"; }
const char* CMaster::GetString() const { return "マスター"; }
int main() {
CJohnin johnin;
cout << dynamic_cast<CNinja&>(johnin).GetString() << endl;
cout << johnin.CMaster::GetString() << endl;
return 0;
}

GetStringの戻り値charから*を消したらエラーになるんですが、
これがポインタじゃなければならない理由は何でしょうか?
2017/09/05(火) 18:18:30.94ID:HWiXORhG
>>599
文字と文字列は違う。C文字列は、ヌル文字で終わる文字配列、または文字の並びへのポインタ。
2017/09/05(火) 18:37:05.61ID:WkIFt9xI
* は、ポインタ

まさか君は、ポインタを知らないのか?w
602デフォルトの名無しさん
垢版 |
2017/09/05(火) 18:37:39.05ID:b+ZxWLYj
>>600
>または文字の並びへのポインタ。

これはきちんと理解できてませんでした。大変勉強になりました。ありがとうございます。
2017/09/05(火) 18:43:08.96ID:2NcRAW/h
>>600
> または文字の並びへのポインタ
お前がポインタを勉強しなおしてこい
2017/09/05(火) 18:44:45.37ID:fgaIXgJY
>>599
>return "忍者"
だから char * で受けないといけない
2017/09/05(火) 18:50:39.70ID:6fI5wuGG
そして リテラルの "文字列" って static で保持しなくていいの? までテンプレ
2017/09/05(火) 19:50:20.12ID:duOUbFWD
>>603
>文字の並びへのポインタ
をchar**と解釈したのか?
ちょっと気になった

文字の並びの先頭アドレス
でどうだろう
2017/09/05(火) 20:01:40.54ID:D99g/mXF
>>603
片山先生になんて失礼な態度なんだ
2017/09/05(火) 20:08:04.50ID:HWiXORhG
>>607
先頭アドレスと言う方が正確だよね。先生と呼ぶのはやめようね。個人崇拝禁止ってルールだから。
2017/09/05(火) 22:30:28.03ID:NIuXE25q
片山先生www
2017/09/05(火) 22:59:11.90ID:nPfvfHCk
文字列リテラルがchar*に勝手に変換されてるのかよ。糞言語だな。
2017/09/05(火) 23:20:23.43ID:HWiXORhG
戦国武将を崇拝する事は人●しを崇拝する事になるし、ハッカーを崇拝する事はハッキングを崇拝する事になる。
個人崇拝にとらわれず、正しい道を歩まねばならない。
2017/09/05(火) 23:28:12.79ID:j8EMa+Cj
>文字列リテラルがchar*に勝手に変換
そんなクソ言語はCだけ
2017/09/05(火) 23:58:54.60ID:duOUbFWD
>>612
char const*なりconst char*ならおk?
614612
垢版 |
2017/09/06(水) 00:03:55.15ID:Ta85KmCo
>>613
それなら別にええやろ
615613
垢版 |
2017/09/06(水) 00:06:53.44ID:lX1AC/o9
日が変わったのね

領海いや了解です
まぁ歴史的理由とは言えクソではある
ROM化するときもどっちだよ?ってな話にはなるね
2017/09/06(水) 00:18:48.47ID:6Ek+YiOk
>>613
char[] = "samurai";

はどうなるんだよ。欠陥だらけの言語だな。
2017/09/06(水) 06:42:27.45ID:lz1Lh31S
それのどの辺が欠陥?
2017/09/06(水) 09:50:26.00ID:3N8FGDgc
char hoge[] = "samurai";
const char hage[] = "harakiri";
無問題
2017/09/07(木) 22:47:37.15ID:jsOYkjhe
↑どうしようもないバカ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況