C++相談室 part130 [無断転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
2017/03/31(金) 08:47:49.65ID:UkLjKqcm0
次スレを立てる時は本文の1行目に以下を追加して下さい
!extend:on:vvvvv:1000:512

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

前スレ
C++相談室 part129
http://echo.2ch.net/test/read.cgi/tech/1483940967/

このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.100【環境依存OK】
http://echo.2ch.net/test/read.cgi/tech/1478440682/

■長いソースを貼るときはここへ。■
 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
2017/03/31(金) 16:52:18.52ID:CoeIAoH10
STLつかうと一気に実行ファイルサイズが10倍に?!

環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない

すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。

C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?

#include <stdafx.h>
後死ね。

言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。

---- テンプレ ここまで ----
3デフォルトの名無しさん (ワッチョイ 3f78-QHHb)
垢版 |
2017/03/31(金) 17:03:31.51ID:qlAKv2q70
>>1
2017/04/01(土) 09:35:38.04ID:JSPgwSTt0
テンプレートで曖昧なものは強制的に解決させる方法ってあります?
template<typename A, typename B> void func(A a, B b);
func(2.f,3.f); // float
func(2.,3.); // double
func(2.f,3.);// floatで呼び出したい
2017/04/01(土) 10:06:09.92ID:vvD/Bq3hr
こういう質問を見ると
何処に落とし穴が有るのだろうと勘ぐってしまう
2017/04/01(土) 10:15:43.84ID:vxnrpS460
「強制的に」の解釈だろうね
7デフォルトの名無しさん (ワッチョイ cf29-MCV6)
垢版 |
2017/04/01(土) 10:21:35.44ID:8wn5/JcH0
func<float, float>(2.f, 3.);
2017/04/01(土) 11:36:07.15ID:3A8hlFXh0
'f' 一文字で済む方法が2行上に示されているが…

func(2.f,(float)3.); // てへっ

出題の意図は func(2.f,3.); には手を加えないでということかにゃ?
スペシャライゼーションか非テンプレート版でイグザクトマッチを
用意すればいいじゃないかな

func(2.,3.f); の時は float 優先なのか第一引数優先なのか
ロジックによっては元の設計を見直すべきかも
2017/04/01(土) 11:43:51.07ID:JSPgwSTt0
>>8
>出題の意図は func(2.f,3.); には手を加えないでということかにゃ?
そういうことです
static_castが可能な型同士に限定されるとは思いますが

>スペシャライゼーションか非テンプレート版でイグザクトマッチ
なるほど

なおfunc(2.,3.f)でもfloatですね
10デフォルトの名無しさん (ワッチョイ a356-8BmZ)
垢版 |
2017/04/01(土) 11:59:09.40ID:gOIdtRSt0
お前にテンプレートはまだはやい
2017/04/01(土) 12:50:11.46ID:vvD/Bq3hr
>スペシャライゼーションか

実用性皆無の糞コードしか想像出来ない
12デフォルトの名無しさん (ワッチョイ 3f3b-MCV6)
垢版 |
2017/04/01(土) 18:22:19.01ID:2DXDopa10
そもそも糞コードしか書けない人は何に対してもそうだろ
2017/04/01(土) 19:25:28.02ID:Pijd2zbh0
練習しなきゃ良いコードは書けるようにならない
2017/04/01(土) 19:35:34.93ID:iUvRbgEsr
そうだな
ただ練習したら必ず良いコードが書ける訳でもない
例えばPODをコピーするのにpragma pack1してmemcpyし始めるK&Rおじさんとか
2017/04/01(土) 19:38:01.60ID:p1TV7r2C0
個人的には関数引数の弱い型への変換という
C++言語規約上の暗黙的変換とは逆の流れを引き起こすような記述を
通常と同じような見かけの記述にすることは紛らわしいと希ガス

コード共通化を重視するなら>>7に従うか、あるいはfunc(2.f, 3.f)にするとかして呼び出し元で型を明示し、
そうではなくて弱い型への暗黙的変換を伴うバージョンのfunc()が他とは別のコードになる(スペシャライゼーション対象足りえる
なら、スペシャライゼーションの代わりにfuncを別名にするとかとにかく一目でわかるようにするのが実用的
かと、
2017/04/01(土) 21:58:54.19ID:Pijd2zbh0
>>14
練習とは既にあるより良い方法を真似することだから身につかないのは練習になっていないかやる気が無いかだ
17デフォルトの名無しさん (ワッチョイ 3f6f-MCV6)
垢版 |
2017/04/02(日) 07:31:30.34ID:NX0JHgEX0
誰か15を日本語訳してくれ
2017/04/02(日) 07:42:27.51ID:0DgUIb4er
>>17
・func(0.0f, 0.0)は一見精度落ちない様に見えるがfloatに落ちるのが嫌
・だからfnuc<float>の様な明示的な呼び出しにするか、fnuc_fの様な名前で工夫すべき
・template<> func<double,float>なんて特殊化する暇があったら
 非テンプレートのfuncf作れ
・つまりfloat v;「v=0.0;」もコンパイラーの警告だけなのでNG
・もう変数名はシステムハンガリアンしか無いぜ
2017/04/02(日) 08:00:42.30ID:0DgUIb4er
型変換に於ける定数のルールはC++11で見直されたので
「v=0.0;」は例が良くなかったな。まあいいか
2017/04/02(日) 08:01:44.33ID:M04XElTC0
>>18
最後の二つはイラン
やっても良いが第1項目の対策としては過剰すぐる、
2017/04/02(日) 11:47:36.98ID:XLcHLDuG0
計算がメインの、建築用CADとか、航空流体力学のちょっとしたソフトとかだと、過剰ではないかもしれない

doubleとfloatとでの四つの組み合わせがちょくちょく登場する計算、
funcのfloatとdoubleの組み合わせで厳密に誤差計算しているような気がする
もしもそうだとすると単精度の誤差すらも気にするようなヤバいシステムがコードの背後に見える
……トカマク式核融合炉の制御ソフトの一部かもな
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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