C++相談室 part137

■ このスレッドは過去ログ倉庫に格納されています
2018/07/14(土) 17:53:02.14ID:FOAGvAbs
次スレを立てる時は本文の1行目に以下を追加して下さい。
!extend:on:vvvvv:1000:512

C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。

前スレ
C++相談室 part135
https://mevius.5ch.net/test/read.cgi/tech/1522495206/

このスレもよろしくね。
【初心者歓迎】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
2018/08/04(土) 05:12:55.60ID:iUNKVgUH
素人ばっかりかw
「More Effective C++」の項目1 だろ

Effectiveも読んでいない奴が、プログラミングやってるのが不思議。
どの言語でも、Effectiveは、入門書の次に読む本やぞ

参照は、確実にNULL じゃない場合。
また、参照に再代入はしない事
2018/08/04(土) 05:25:27.41ID:YA1hWK5Y
HRESULTも知らないヒヨッ子がいきってるな
2018/08/04(土) 06:40:25.30ID:O/qEXyQX
参照に再代入ってどうやんの
2018/08/04(土) 07:29:12.24ID:o+LfwS0J
cからのコードが多い場合は統一のために参照渡しにしないってのはあるかな。
2018/08/04(土) 07:33:54.06ID:YA1hWK5Y
extern "C"に参照渡しなんかするかよ
2018/08/04(土) 07:42:44.96ID:Xh+3QD0k
たかが参照にストレスを感じるようになったら、C/C++プログラマをやめた方がいい。引退時。
2018/08/04(土) 08:00:44.90ID:mQQzn2Q+
>>506
C++を知らない老害が自分の為に決めた規約
積極的に逆らおう
519デフォルトの名無しさん
垢版 |
2018/08/04(土) 08:29:49.29ID:Xh+3QD0k
私見を言わせてもらうと、多様性を受け入れ状況に合わせて柔軟に合わせていくのもプログラマあるいは技術者の重要なスキルなので、
一神教的な偏狭な人は若年性認知症とまで言ってのける気はないがかなり情報処理能力が低くなっているはずなので、プログラミングをやめた方がいい。
520デフォルトの名無しさん
垢版 |
2018/08/04(土) 09:34:28.56ID:0uMuTyGR
プログラミングがどうこういうより国語を勉強しろ。
2018/08/04(土) 09:35:16.17ID:o+LfwS0J
柔軟なのと規約を決めないのはまた別だけどね。
多様性といって新しい言語使って同じ過ちを繰り返している人を何人も見てると
色々バカバカしくなるってところはある。
老害と同じくらい歴史を見ない若造も有害という現実を見るのも良い。
2018/08/04(土) 09:50:53.54ID:2dadGiC9
まあ少なくとも>>506が老害であるのは確か
実務経験が少ない若者が多いのも当たり前
2018/08/04(土) 09:53:11.49ID:F7vd0ILk
老害なんて言っている奴、10年後に自分がそう呼ばれるって事気がついてないのかな・・・
2018/08/04(土) 09:55:58.68ID:2dadGiC9
老人全てが老害になるわけではない
害があるから老害と呼ばれる
2018/08/04(土) 09:59:13.29ID:2dadGiC9
>>521
歴史?

過去発生した問題点や注意点を伝えるのは上司や先輩の役目

言語自体の歴史、CPU自体の歴史なんか
興味があるヤツだけ勉強すれば良い
2018/08/04(土) 10:02:32.30ID:F7vd0ILk
数人のグループで開発しているなら、あえてコーディング規約を設けずしても出来るだろうが
100人、1000人規模で開発しているなら、工業製品としての品質管理として必要になるでしょう
2018/08/04(土) 10:03:35.96ID:pDxZw3/e
>>525
ぼくがしらないのはまわりがおしえないから
さすがゆとり
2018/08/04(土) 10:08:29.90ID:2dadGiC9
ん?
おれは伝える側の人間だが
2018/08/04(土) 10:11:50.81ID:2dadGiC9
100人規模1000人規模のソフト開発で
若者に言語の決定権があるってのは
すごい会社だね
2018/08/04(土) 10:20:39.15ID:+vznLLf6
おかしくはない

好きにやれ動くブツだけもってこい
2018/08/04(土) 10:27:14.97ID:UzBGgsy3
いや別に好きにすればいいとは思うのだが
勝手に自分で選んだ言語固有の問題にぶち当たって
人に泣きつくなっつー馬鹿みたいな話があまりに多いんで。
>>525
まともに聞いてくれれば問題ない。
2018/08/04(土) 10:54:42.16ID:VXqPvtUW
出来たばかりの最新規格の機能ならともかく
C++98以前からずーっとある言語の基本機能を大した理由もなく縛ってるのは阿呆でしょ
(「大した理由」があるなら縛ってもいいのよ、本当に大した理由ならな)
2018/08/04(土) 11:09:59.74ID:9+U//wQd
>>460
横だがDLLにstd::stringとかSTLのオブジェクトを渡したり返したりする設計ェ、、、
std::string程度なら現実には動くが、STLの内部動作のバージョン間の整合を誰も保証してくれない以上、
そういう設計をされるともはや誰も動作を保証できなくなる

STLに限らずOpenCVやCRT絡みのオブジェクトでもそう、
というわけでこういうライブラリのバージョンの統一を担保できない状況ではchar[]の登場と相成りぬ、
2018/08/04(土) 11:20:42.46ID:Xh+3QD0k
char[]を使う関数をDLLにして、その関数をstd::string版関数オーバーロード的なラッパーをヘッダーに記述するでしょ、普通。
というか、std::string専用である必要はなく、template関数にしとけばSTLportだろうかstdだろうかEASTLだろうが対応可能になる。
2018/08/04(土) 11:23:58.97ID:SzDDeCK/
バイナリでの保証を考えると STL を使いにくいってのは確かにあるよな。
COM のような形式を使えばオブジェクト指向をバイナリレベルで管理することも出来るが、
それはそれで別の規約に縛られてしまうわけで。

どんな規約にするにせよ不満は有るよ。
一貫した規約が無い不満よりは規約に不満を持つ方がマシな世界になりがちなのが現実。
536デフォルトの名無しさん
垢版 |
2018/08/04(土) 11:33:14.55ID:CpwGeL+S
そんなもん文字列のポインタ渡せばしまい
頭悪いのって悩む必要がないどーでもいい事で悩むからな

それぞれの完結したモジュールでどのバージョンのSTL使おうが関係ないからな

string ahoをaho.c_str()で渡すだけ
2018/08/04(土) 11:50:08.73ID:9+U//wQd
>>534
ワカル
それは全く普通の設計でおすなあ、
538デフォルトの名無しさん
垢版 |
2018/08/04(土) 11:54:01.62ID:CpwGeL+S
頭悪いシロウトほど可変長の文字列クラスをいちいち使いたがるからな
539デフォルトの名無しさん
垢版 |
2018/08/04(土) 11:57:27.88ID:CpwGeL+S
もしかしてvectorとかもいちいち自分で全部ラップしってんの
とにかく頭が悪すぎるわ
2018/08/04(土) 11:59:57.25ID:9+U//wQd
ここで問題なのは可変長の文字列クラスを使いたがる類の素人なのではなくて、
DLLのcallerとcalleeでSTLやCRTのバージョン相違しているケースを想像できない類の素人なのでは…
541デフォルトの名無しさん
垢版 |
2018/08/04(土) 12:07:08.58ID:CpwGeL+S
このスレにいるような知恵遅れがどんな作り方しても
ぜんぜん問題にならない

STL ver baka
void bakabaka(char const* aho_) {
 std::string baka("shine");
 ahoaho1(baka.cstr());
}

STL ver aho つかったdll
void ahoaho1(char const* aho_) {
}

なにが問題になるわけ?
もうね知恵遅れのいうことは意味が分からないわけ
2018/08/04(土) 12:08:24.92ID:73YctOjT
>>484
極めて同意
仕事だと、過去のしがらみや、コーディングルール等に縛られて、思い通りにできない。
自分で地道に実験してゆくしかない
2018/08/04(土) 12:16:41.91ID:9+U//wQd
いやほんと
呼び出し元と同じ完結したモジュール内で定義された関数にはconst std::string& ahoやconst std::vector &vecで渡し、
DLLで定義された関数にはaho.c_str()や&(vec[0])で渡す、と区別すればwrapperは要りませんなあ、
いやはや>>541は便利なやり方をいろいろご存知ですなあ、、
2018/08/04(土) 12:54:24.58ID:Rdsot1y5
>>519
「〜なので、〜なので、○○だ」
読んでとまどいを覚える日本語文ですね
2018/08/04(土) 12:56:26.35ID:Rdsot1y5
>>532
K&R2 の世界の人にとっては、十分に未知な領域なのでしょう…
私は K&R2 自体がすでに「堕落したもの」と考えております
2018/08/04(土) 13:59:14.93ID:f+sj1d72
>>506
某エディタにこの宗教にご執心の開発者がいるな
547デフォルトの名無しさん
垢版 |
2018/08/04(土) 18:05:43.06ID:Xh+3QD0k
ポリモーフィズム(多態性)を可読性を下げる欠点ではなく、可読性を上げる長所と考えるのがC++プログラマとしての信仰の基本なので、
様々な記述方法を許す多態性を嫌うのなら、C++を棄教せねばならないでしょう。
演算子オーバーロードを耐えられる情報処理能力があるなら、参照渡しにも耐えられるはずで、参照渡しだけ目の敵にするのはただの原理主義ですね。
2018/08/04(土) 18:58:53.47ID:YA1hWK5Y
原理主義なんて高尚なもんじゃなくただのバカ
2018/08/04(土) 20:01:37.83ID:5qDWXahz
>>547
なのでなのでは?
2018/08/05(日) 00:20:51.12ID:Sl8YWqHi
>>547
言葉のニュアンス的には原理主義というより教条主義と言った方がこの場合は近いかも
2018/08/05(日) 05:07:56.69ID:xG+zmDln
だれかたすけてください。
https://dotup.org/uploda/dotup.org1602882.zip
こういうプロジェクトを作ったんですよ。
一応、ゲームっぽいものですが本質はそこじゃなくて。
えーっと、前方参照の解決がよくわからないので直し方教えてください。
普段小さなコードしか扱ってないのでソース分割あまりしないのでわけがわかりません。
コンパイルが通るにはどうしたらよいでしょうか。

お願いします。
2018/08/05(日) 08:56:46.93ID:WhsUmrtL
ツッコミどころはいっぱいあるけど
とりあえずGameIssue.hの中でRougeStageの定義が見えてないからincludeしろ
2018/08/05(日) 17:21:41.90ID:JAQP+wl+
>>506
http://www.kh.rim.or.jp/~nagamura/misc/stroustrup-interview.html
「変数を参照しているのか逆参照しているのかがいつもわからなくなる、だから必ずポインタを使う。アスタリスクが思い出させてくれるから」

C++ の参照は、呼び出し元の記述では参照として渡しているつもりなのか、実体を渡しているのかは区別できず、
呼び出し先の宣言で、はじめて参照か実体かがわかるんですね

個人的には C# のように、呼び出し側でも参照渡しを明示するのがスマートだと思います
そのコーディング規約は良心的だと思います
2018/08/05(日) 17:44:24.77ID:kXrZdLCy
>>553
参照渡しを明示、とは具体的にどんな方法でしょう?
2018/08/05(日) 17:48:52.51ID:3KDX12Zf
ref とかoutとかじゃね?
2018/08/05(日) 17:55:52.90ID:JAQP+wl+
>>554
https://ideone.com/FMEesh
呼び出し側にもキーワード "ref" を記述します
2018/08/05(日) 18:07:51.68ID:lZNE8En/
ゲーム的にはコレか?

Rog-O-Matic - Wikipedia
https://en.wikipedia.org/wiki/Rog-O-Matic
2018/08/05(日) 18:26:33.87ID:kXrZdLCy
>>556
C#ではなくC++での方法を聞きたかったのですが (^_^;)
2018/08/05(日) 18:32:14.36ID:yKLkGD1M
>>506
constなしで参照渡しするなっていうコーディング規約ならgoogleも採用してるよ
2018/08/05(日) 18:34:25.86ID:QdoPuPH9
立てました。移動はご自由に。

C++相談室 part138
https://mevius.5ch.net/test/read.cgi/tech/1533459756/
2018/08/05(日) 18:35:44.95ID:C8NdcnMU
>>558
お前はC++とかより日本語の勉強しなよ…
2018/08/05(日) 18:56:17.20ID:K/INtz2h
単純にc++だけで閉じてれば参照で統一ってのもありだろうけれど
c++ってそういう言語じゃないんだよね。
大抵大規模なコードは過去のcソースとごっちゃになってる。
2018/08/05(日) 19:04:35.58ID:lZNE8En/
>>551
まずは非常にどうでもいいことだが、AddBug(SharedItem I) こういうモノがあると非常に縁起が悪い

他、小姑みたいなスペルミスの指摘は以下

Sheld盾の綴りはshield (Fieldと同じ原理)
Acsessとaccess、
CollectoerとCollector
TyleとTile
InfmationとMakeTemporaryInfomationとinformation
Initilaize、Initialize
PraramA、parameterA

RougeStage.hとRogue
564デフォルトの名無しさん
垢版 |
2018/08/05(日) 22:24:16.29ID:yKLkGD1M
いい加減な方法でビルドはできるようにしたのに遊べないよ!
なんとかしろ、作者

GameIssue.h 12行目付近の
class TemporaryInfmation;
をいかに書き換える。
//class TemporaryInfmation;
template <typename RougeStage> class TemporaryInfmationTmpl;
using TemporaryInfmation = TemporaryInfmationTmpl<RougeStage>;

RougeStage.hの3行目付近の
class RougeStage;
~
TemporaryInfmationTmpl(RougeStage* RS) {
をいかに書き換える。
template <typename RougeStage>
class TemporaryInfmationTmpl {
public:
TemporaryInfmationTmpl(RougeStage* RS) {

StatusCollector.hのStatusクラスの
SetDirection()が2個定義されているのでどちらかを消す。
565551
垢版 |
2018/08/05(日) 23:51:00.40ID:xG+zmDln
こんにちは。色々ご指摘ありがとうございます。
これまだ、脳内コーディングでシステム組んだだけでコンパイルが通って無いように、デバッグさえしてません。
なんとなーく、ローグのAI書いたら面白いんじゃないかと思って書き始めたのですが、沼にハマってしまいました。
とりあえず、前方参照の件は解決したみたいです。
その後大量のエラーと格闘していますが、支離滅裂なエラー(?)が大量に出ていて吐きそうです。

とりあえず、この件については閉めます。
ありがとうございました。
2018/08/06(月) 00:29:53.59ID:b7eNDjo0
>>553-556
/* ref */

引数内で、コメントを使えば?
2018/08/06(月) 04:28:30.45ID:EZAi1/yQ
>>559
templateの右辺値参照もダメとか
さすがに修正が必要だな
2018/08/06(月) 11:34:49.72ID:aJPEpevk
>>567
別の項にmoveコンストラクタ、move代入演算子、perfect forwardingするときは右辺値参照使ってええよって書いてあるから、右辺値参照は対象外なんだと思う。

>>565
できたら遊ばせてねー
2018/08/06(月) 12:01:58.56ID:aJPEpevk
aiでautoってことは遊ぶんじゃなくて遊ばれちゃうのか…
2018/08/06(月) 13:00:05.48ID:6LLA+7Q/
Googleコーディング規約は古臭くてオワコンだからみんなはISOで作ってる規約を使おうね!
って禿先生が講演で言ってた
571551
垢版 |
2018/08/06(月) 18:02:56.58ID:L/6qyfUO
>>596
ステージ生成してAIに解いてもらおうと。
そのAI書かないといけないんですけどね。
2018/08/06(月) 18:04:44.92ID:L/6qyfUO
しかし、ロジカルなことしたいのに、それ以外のエラーで死にかけるのは困ったなぁ。。。
2018/08/06(月) 18:26:13.93ID:0lSQ8xAg
>>572
アルゴリズムの間違いの発見や修正に比べたら、コンパイルエラーの解消なんてコンパイラさんが親切に教えてくれてるんだから、簡単なことだよ。
ロジカルなことしたいなら、コードの記述もロジカルに頑張れ
2018/08/06(月) 19:18:24.62ID:L/6qyfUO
はい。がんばります。
2018/08/06(月) 19:34:04.04ID:ykSda89u
>>570
今現在コード書いてないオワコン禿げのいう事のが信用ねーわ。
江添とかも同類。
コードをまともに書いてないやつが言語仕様決めてるってのがc++のクソなところ。
2018/08/06(月) 19:45:02.37ID:Xt7Beabr
>>575
コードがマトモに書ける人は書く方が忙しいので仕様どころではないって割とありそう
2018/08/06(月) 22:20:17.51ID:zDoA3miN
ryzen threadripper 2950X 16C32T 3.5GHz〜4.4GHz !!
なんだか最近急にすごくなっていませんか?
2018/08/06(月) 23:09:33.16ID:L/6qyfUO
今までのAMDが怠けてただけだよ!
2018/08/06(月) 23:12:22.15ID:zQ2KZFwb
floatのゼロ割りって、infになるものの、別にそれ自体が問題ではなくて、
それがクラッシュに繋がるような演算を行うことが問題であって、
例えば条件分岐で一定の大きさ以下の場合のみ参照するようにしているなら問題ないですよね?
2018/08/06(月) 23:30:48.85ID:Xt7Beabr
ゼロで割り算したい意図は?
2018/08/06(月) 23:38:20.39ID:wPUCa9qR
>>579
うん
>>580
ゼロで割りたいなんて一言も書いてない
582579
垢版 |
2018/08/06(月) 23:40:51.75ID:zQ2KZFwb
>>580
物体の速度なのでゼロのときがあるんです。
例えば、ある距離に到達する時間を求めるとなると、その距離を速度で割るのでゼロ割りがあり得ます。
583579
垢版 |
2018/08/06(月) 23:43:04.07ID:zQ2KZFwb
>>581
ありがとうございます。
ゼロで割ること自体を回避するのって、けっこう厄介なんですよね・・・。
ある程度小さい場合は演算しないとか、どれくらい小さかったらいいの?みたいなことを考えないといけないので・・・。
無限大のときにどうする?という考え方の方が対処し易いように思います。
2018/08/07(火) 06:50:16.11ID:PssQ1NSH
今Python + Opencvで画像処理をしているのですが、速度の問題でこれをC++に書き換えたいです
Pythonのnumpyみたいなものはc++にも有りますか?
OpencvのMatを(多次元配列に格納するなりして)C++で弄くれると嬉しいのですが
2018/08/07(火) 07:05:01.46ID:rmdm0Ojo
まずOpenCVはもともとC++で書かれてるライブラリであってPythonのはラッパーだって所から始めようか
2018/08/07(火) 08:33:46.01ID:dagdXeyj
>>575
めっちゃコード書いてんじゃん
2018/08/07(火) 15:24:28.59ID:pMC2Ofi2
江添っちはコード例はたくさん書いてるけど、
アプリケーションとして完成したものはひとつだけしか見たことねぇ。

今はドワンゴにいるし、社内で使うツールを書いたりすることもあるのかなぁ?
2018/08/07(火) 15:40:59.13ID:3k81+fEr
snprintfには第一引数をNULLにすることで本来何文字の領域があればよかったかを判断できるみたいだけど
wchar_tにはそのようなものはないだろうか?
2018/08/07(火) 15:59:59.84ID:8+yE0dxd
>>570
もしかして先月の27日、行ってきたの?
2018/08/07(火) 16:51:22.86ID:rmdm0Ojo
おう行ってきたぞ
内容は知ってる話が多かったけど本人の口から聞けて楽しかった
2018/08/07(火) 20:17:28.47ID:7soFSQAi
int main(int argc, char** argv)
このchar**って他に変えれたりする?tcharとかwchar_tとか
2018/08/07(火) 20:20:21.90ID:p+v0mQmH
Win32では、int wmain(int, wchar_t**)に変えられるよ。環境変数の引数も付けるのは変態かも知れん。
2018/08/07(火) 20:21:20.30ID:7soFSQAi
>>592
wmainになるのね
助かります
2018/08/07(火) 20:28:56.24ID:rmdm0Ojo
標準で認められてるmain関数はint main();とint main(int argc, char** argv);だけ
それ以外は処理系の独自拡張
2018/08/07(火) 20:40:16.10ID:8+yE0dxd
>>590
何か変わったこと言ってたらレビューplz
2018/08/08(水) 00:08:10.74ID:N8tx/Inn
実は宗教的な会合ではなかろうか
教祖もしくは弟子・伝道者・教皇の御言葉を拝聴する、それが宗教だ

現状、全ての教祖・開祖が生きている時代なので、それを感じないだけだ
10年後くらいにはぼつぼつ死にはじめる
そこからが正念場だ

サイモン&ガーファンクルも生きてるし、K&Rも生きてる、ついでに、ビャーネ・ストロヴストルップとかESRも生きてる
21世紀の今がそういう時代というだけだ
2018/08/08(水) 00:15:12.33ID:35SEMuEM
>>596
デニス・リッチーは2011年に亡くなった
2018/08/08(水) 00:32:10.97ID:bKO8QxvP
イタコがふえるんやなぁ・・・。
2018/08/08(水) 05:08:18.88ID:d90b/R1Y
宗教だと? 失礼だな
俺は禿を盲信なんかしてねえよ
newなんかいらねえと俺は初版の当時から思っていたし
動的例外指定なんぞISOで否定されてんだぞ
2018/08/08(水) 05:53:47.96ID:bKO8QxvP
ジェネリックなメモリ確保はどのみち必要だと思うよ。構文がどうであれ。
あと、動的にコンストラクタとか呼ばないといけないし必要だと思うよ。
個人的にnewはライブラリ屋さんが使えばいいものだと思ってる。
2018/08/08(水) 06:09:55.58ID:d90b/R1Y
placementみたいのがあれば充分
2018/08/08(水) 06:18:49.25ID:bKO8QxvP
タイプ量増えて嫌カモ。
new T[] ってできるのは結構強いと思う。
まぁ、自分でやる事はないけど。
2018/08/08(水) 07:00:42.37ID:/7C7gkY0
A, Bそれぞれコンソールアプリケーションで作成
AがBをCreateProcessする状況を作成しました

Aを実行したらBの専用のコマンドプロンプトが立ち上がって次々に処理をするのかな?って思ってたのですが
実際はAが立ち上げたコマンドプロンプトにBも出力などしてます
これ分離することできないのでしょうか
2018/08/08(水) 07:11:53.05ID:d90b/R1Y
タイプ量って、それは現状の構文での話やん
コンストラクタを実行する構文がたとえば3文字のキーワードでできるなら
その主張は崩れる
2018/08/08(水) 07:12:46.84ID:HlzHxdvD
startコマンド
2018/08/08(水) 07:13:58.46ID:EhLv0UZk
CreateProcess で "start cmd /c B.exe" を起動するんじゃだめ?
2018/08/08(水) 07:16:30.26ID:d90b/R1Y
template <typename T, typename ...ARGS>
T* create(ARGS ...args)
{
auto ptr = (T*)malloc(sizeof(T));
ptr->T(args...);
return ptr;
}
今C++をリメイクするならnewはクビだろ
2018/08/08(水) 07:29:04.25ID:eb4eIp4R
>>603
AllocConsole
2018/08/08(水) 08:30:47.37ID:lcYbehB0
メタプログラミングをやってみたいんだけど、テンプレートが中々難しい
みんなどうやって駆使してる?
2018/08/08(水) 08:31:50.27ID:jzgqxY6J
慣れ
2018/08/08(水) 12:14:27.90ID:rnBqZLRU
LPCTSTRをマルチバイトでもUnicodeでも対応して文字列操作するコードってどう書けば宜しいのでしょうか
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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