dupchecked22222../cacpdo0/2chb/463/72/tech155077246321750534476 C++相談室 part141 ->画像>9枚 ◎正当な理由による書き込みの削除について:      生島英之とみられる方へ:

C++相談室 part141 ->画像>9枚


動画、画像抽出 || この掲示板へ 類似スレ 掲示板一覧 人気スレ 動画人気順

このスレへの固定リンク: http://5chb.net/r/tech/1550772463/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。

1デフォルトの名無しさん2019/02/22(金) 03:07:43.52ID:MgOIx7iK
次スレを立てる時は本文の1行目に以下を追加して下さい。
!extend:on:vvvvv:1000:512

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

前スレ
C++相談室 part137 (正しくはpart138)
http://2chb.net/r/tech/1535353320/
C++相談室 part139
http://2chb.net/r/tech/1538755188/
C++相談室 part140
http://2chb.net/r/tech/1547326582/

このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.103【環境依存OK】
http://2chb.net/r/tech/1530384293/

■長いソースを貼るときはここへ。■
 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

2デフォルトの名無しさん2019/02/22(金) 05:33:28.83ID:7jsMxmv+
Cの場合は
#define BIT(n) (1<<n)
if(data & BIT(3)){ data &=~BIT(3); }
みたいなやり方をするんだが、C++の場合は#defineは使わない方がいいらしいけどどういう書き方が
一般的なのだろう。

3デフォルトの名無しさん2019/02/22(金) 05:43:25.43ID:kNNcPZDM
inlineにしてる。

4デフォルトの名無しさん2019/02/22(金) 05:45:32.03ID:9HNz13T8
そういう場合にマクロ使うなと言われるのは、単にインライン関数にした方がややこしいバグを産みにくいってだけ
別にどっちでもいい

5デフォルトの名無しさん2019/02/22(金) 05:51:49.61ID:kNNcPZDM
そろそろonline関数も必要だよな。

6デフォルトの名無しさん2019/02/22(金) 06:59:58.96ID:uV/D6RzS
マクロ関数 BIT() の部分、マスク生成をinline関数にするか、
引数を2つ取って、整数値の指定ビットを落とした値を返すinline関数にするか、
if ~ の部分まで含めて、変数の指定ビットを落とすinline関数にするか…。

と思ってちょいと考えたら、この場合は if 不要と気づいた。
最初から 0 か、ビット操作の結果か、いずれにせよ data の bit3 は 0 になるね。
本筋とは関係ない部分だけど。

7デフォルトの名無しさん2019/02/22(金) 08:00:05.86ID:7jsMxmv+
>>3
inline関数ですか?
constexperでも関数は作れると思いますが、inlineの方がベターなのでしょうか?
constexper int BIT(int bitno){ return 1<<bitno;}

usingを使ってこんな書き方ができますが、マクロの変換はできないのでしょうか?
using Func = int(*)(int);

あとtemplateはあまり使ったことがないですが、なんかマクロ変換に使えそうな気がします。

8デフォルトの名無しさん2019/02/22(金) 08:17:36.02ID:9HNz13T8
constexprは暗黙的にinlineつくからconstexprでもいい

using Funcの部分は根本的に勘違いしてると思う
それの場合intを受け取りintを返す関数のポインタの"型"に
Funcという別名つけてるだけやで

9デフォルトの名無しさん2019/02/22(金) 08:29:39.37ID:9HNz13T8
あと前スレ>>999
PCゲームやスマホゲーでも、STL使おうが使わまいが標準のヒープを直接は使わないことはよくあるよ
コンシューマへの移植性やパフォーマンスのためにカスタムのメモリマネージャ作ってるメーカーなんてザラにある
PCだから/メモリ有り余ってるからお仕着せのライブラリを適当に使うだけでいい、と思ってるなら何も分かってない

10デフォルトの名無しさん2019/02/22(金) 08:34:10.02ID:nGlWTBX9
現実の開発では、とりあえず動くようにしてから余った時間で最適化したほうが速くなるんだけどね

11デフォルトの名無しさん2019/02/22(金) 08:39:17.41ID:nqPCiyAK
まぁオブジェクトコードから臭いを嗅ぎ取った事は
無いな、感じられる人は耳鼻科行った方が良いかと

12デフォルトの名無しさん2019/02/22(金) 09:28:57.73ID:15zpzt8/
>>9
スレ跨ぐなカス
いつゲームの話なんかしたんですかねえ???????
それともゲームしか入ってないんですか?????????

13デフォルトの名無しさん2019/02/22(金) 09:55:02.52ID:n7WbXSSq
>>9だけど、俺前スレ>>996じゃないよ

14デフォルトの名無しさん2019/02/22(金) 17:51:49.69ID:PtH+29Wq
「C」からって限定条件なら tcl/tk + canvas はありだと思うが
別に tcl の勉強しなくても使えるし

15デフォルトの名無しさん2019/02/22(金) 19:08:44.27ID:zu/11utG
Cから tcl/tk はどうやって使うの?

16デフォルトの名無しさん2019/02/22(金) 19:16:25.53ID:kNNcPZDM
ワイドスタジオ使っちゃえば?

17デフォルトの名無しさん2019/02/23(土) 10:20:57.99ID:zem2FMDi
void ff()
{
std::packaged_task<int()> pt([](){std::this_thread::sleep_for(std::chrono::seconds(5));return 0;});
auto fut(pt.get_future());

std::thread th(std::move(pt));
th.detach();

//int v(fut.get());
}

上記のように、taskの完了を待機せず、packaged_taskの寿命が尽きても実行時にエラーも出ないのですが
このようなプログラムはありですか

18デフォルトの名無しさん2019/02/23(土) 11:42:14.30ID:+DV3f+Dk
そいつにリソース占領させてみればいい

19デフォルトの名無しさん2019/02/23(土) 12:14:03.42ID:zem2FMDi
解決しました

20デフォルトの名無しさん2019/02/23(土) 18:45:10.43ID:3YtKndGk
紅蓮弐式のほうが強い。
ハイ論破。

21デフォルトの名無しさん2019/02/24(日) 14:23:19.37ID:YwY0sV++
C++ を使っても綺麗にならない
C++ を使ってる意味が無い

22デフォルトの名無しさん2019/02/24(日) 19:25:23.97ID:iK4D+UQi
C++に綺麗さを求めるの初めて見た。

23デフォルトの名無しさん2019/02/24(日) 20:13:55.34ID:+qyzr+Wj
最低でもインデントくらい揃えてほしいけどな

24デフォルトの名無しさん2019/02/24(日) 21:31:26.79ID:BOQZpNHf
揃えさせられるPythonの読みにくさを見るとある程度柔軟な方がいい

25デフォルトの名無しさん2019/02/24(日) 23:59:09.46ID:haqs87u6
>>24
お、おう

26デフォルトの名無しさん2019/02/25(月) 00:01:28.93ID:Jz0DexUX
つまりJavaか。

27デフォルトの名無しさん2019/02/25(月) 01:25:43.15ID:Jktx5+0Z
なんでやねん

28デフォルトの名無しさん2019/02/25(月) 01:34:14.73ID:1EOktSCH
ランタイム速度最速を謳ってバカに新機能の実験台になってもらう。
それがc++

29デフォルトの名無しさん2019/02/25(月) 06:06:13.74ID:pgIYnQ9M
>>22
ん?
普通に求めるでしょ?
見栄えとかアルゴリズムとか

30デフォルトの名無しさん2019/02/25(月) 06:43:23.26ID:AQp51hox
Most elementary use of C++

31デフォルトの名無しさん2019/02/25(月) 07:14:51.09ID:RhTHp1T7
>>29
多分そういう意味じゃない

32デフォルトの名無しさん2019/02/25(月) 07:40:11.99ID:4l/+z2Zp
古いサイトとか見てるとグローバルな関数に::ってつけるこだわりがよくわからん
::CreateProcessとかさ

33 ◆QZaw55cn4c 2019/02/25(月) 08:14:06.58ID:0evRXBiA
>>32
自分の定義した関数にはつけず、win32api には付けて区別しています…

34デフォルトの名無しさん2019/02/25(月) 09:12:10.78ID:RhTHp1T7
公式「バランス調整はVIP部屋を参考にする」
桜井「○○の使用率ガー」

アホ「調整はVIPの使用率できめるらしい」←????

35デフォルトの名無しさん2019/02/25(月) 09:12:42.56ID:RhTHp1T7
誤爆

36デフォルトの名無しさん2019/02/25(月) 10:45:46.00ID:rMTHv0xs
>>32
大規模開発ならスコープ明示するのはよくやること
std省略NGのとこも珍しくないしな

37デフォルトの名無しさん2019/02/25(月) 12:17:07.75ID:y5m/9TYH
>>31
だから綺麗さなんて曖昧な表現だけだと突っ込まれるって話

38デフォルトの名無しさん2019/02/25(月) 18:50:34.75ID:Jz0DexUX
では評価関数を。

39デフォルトの名無しさん2019/02/25(月) 23:50:43.17ID:sPAFtFpG
double の 999999998 と 999999999 の積が正しい答えである 999999997000000002 じゃなくて 999999997000000000 になります

なんででしょうか
double の範囲に余裕でおさまってますよね?

40デフォルトの名無しさん2019/02/26(火) 00:18:43.14ID:belfWXD5
仮数部の最大値9007199254740992を超えているから

41デフォルトの名無しさん2019/02/26(火) 00:20:50.15ID:H+xdnOpD
>>39
つ 有効桁数

42デフォルトの名無しさん2019/02/26(火) 00:22:22.81ID:kx+LOcr9
>>40-41
10^300 とかまで大丈夫だって思ってはいけないのですね
初めて理解しました

43デフォルトの名無しさん2019/02/26(火) 14:43:31.98ID:8+7ktUtN
桁落ち

44デフォルトの名無しさん2019/02/26(火) 15:56:22.96ID:5MxkS3P7
浮動小数点は元々、誤差があるから、大雑把な数値でよい

正確な数値を求める場合は、整数型か、decimal を使う

45デフォルトの名無しさん2019/02/26(火) 16:22:19.66ID:aKbIPEAT
>>32
同じ関数で、MFC 版と Win32 版があることがあり、混乱が生じて、
切り分けの難しい不具合を生じる可能性を避けるため、そうしている。

C++だと、実引数を省略することもできる場合があり、その場合、Win32版を
使っているつもりが、MFC版が勝手に呼び出されて、動作が自分の思ったものと
少し違ってしまう可能性があるかもしれない。この時、コンパイラは何の
警告も出してくれないかもしれない。それを避けたいため、絶対に
Win32版を呼び出したい場合には、:: を付けることがある。

46デフォルトの名無しさん2019/02/26(火) 19:26:51.90ID:7oeDt7bv
DoxygenがモダンC++に対応していないんだけど、何か代わりの物はありますか?

47デフォルトの名無しさん2019/02/26(火) 22:24:56.64ID:t7v3BAso
キーボードのPageUpとPageDownの使い方が判りません、他のボタンも。

48デフォルトの名無しさん2019/02/26(火) 23:24:35.69ID:S/5yarce
C++のthreadってOSの無いマイコン環境でも動作するんだろうか?
threadが使えるってことは、ハードウエア的に最低でもタイマー割り込みを使う必要が
あるんじゃなかろうか? そうするとそういうタイマーなどのハードリソースはすべて自前で
用意するというのが前提のマイコンではどうするんだろとふと疑問に思った。

49はちみつ餃子 ◆8X2XSCHEME 2019/02/27(水) 01:13:25.57ID:FtVEDFBt
>>48
どうにもならんのじゃない?
仕様に完全準拠した処理系 (ライブラリ) は提供できんってだけだろ。

50デフォルトの名無しさん2019/02/27(水) 01:32:45.56ID:apYcTfdI
effective Modern C++ / Scott Meyersには
C++11の偉業として
 C++の平行対応作業の大部分がコンパイラ開発側が負担する形で実現されたおかげで、標準
規格としてC++の歴史上はじめてどのプラットフォームでも動作が変わらないマルチスレッドプログラム
の開発が可能となりました。
と書かれている。
「どのプラットフォームでも」と書かれているがOSのないマイコンだってプラットフォームだからそれを含まない
と可笑しいとおもうが、、

51デフォルトの名無しさん2019/02/27(水) 01:37:31.77ID:3Jl+ieqT
>>50
そこは、対応しているプラットフォームでは、という前提がつくのは自明だと思うぞ、

52デフォルトの名無しさん2019/02/27(水) 01:59:24.57ID:VmfRF6bC
>>46
例えば何に対応してないの?

53デフォルトの名無しさん2019/02/27(水) 09:01:57.37ID:MitD/HmJ
そもそも、マイコンにスレッドなんてあるのか?

main 関数しか無いのでは?

54デフォルトの名無しさん2019/02/27(水) 09:20:12.60ID:fYEBa3GD
マイコンには関数も変数も無いだろ
機械語セットのどこにも関数とか変数とかの命令は無いじゃん
変数が存在してるように見えるのはコンパイラのおかげ

55はちみつ餃子 ◆8X2XSCHEME 2019/02/27(水) 12:06:10.51ID:FtVEDFBt
C/C++ というのはそういうランタイムサポートが期待できない環境、いわゆる「ベアメタル」でも使い物になる
システムプログラミング言語であるというのがキモの言語だろ。
フルセットで使える環境なら std::thread という共通インターフェイスを使ってねというだけのことで、
リソースが限られたアーキテクチャでもフルセットが使えるべきというほどのもんではない。

56デフォルトの名無しさん2019/02/27(水) 12:51:06.39ID:Gf38Q9uK
>>48
(組み込みの)マイコンでは、普通、single thread なんじゃないかな。
マルチスレッドを使えるOSを作るのは結構複雑。

>>53
そういうOSをマイコンに作れば使えるようにはなるだろうけど、そこまでは
やってないことも多いと思う。そもそもマルチスレッドはプログラミングが
複雑になり予想も難しくなるのでバグが入り易い。カメラや炊飯器が誤動作して
も困る。

57デフォルトの名無しさん2019/02/27(水) 14:09:36.66ID:+TCpifLa
>>53
mainが無いのもあった気がする

58デフォルトの名無しさん2019/02/27(水) 15:17:57.76ID:6BQDuKk1
>>53
PCよりテヘロジニアス化(専用機をCPUに統合)が進んでるので、GPGPUみたいな感じってネットで読んだことあるな。

59デフォルトの名無しさん2019/02/27(水) 15:37:08.27ID:HrTieKXO
>>56
どんなマイコンを想像してるのか知らんけど組込みOSならメモリー数KB程度から動作する
https://www.eforce.co.jp/products/microc3c

>>57
mainなんて単なるC言語とかのお約束だからスタートアップルーチンに手を入れられるなら変えることはいくらでもできるよ

60デフォルトの名無しさん2019/02/27(水) 15:48:15.61ID:jy5tl2qf
サービスなんてエントリーポイント2つあるし

61デフォルトの名無しさん2019/02/27(水) 18:55:35.12ID:BQO9B3mv
template<class T>
int print(T v)
{
 printf("%d",v);// intの場合
 printf("%lf",v);// doubleの場合
}

printfを使うことは必須なんですが、どうすれば実現できます?

62デフォルトの名無しさん2019/02/27(水) 19:11:05.97ID:qHrg9QHU
特殊化しよう

63デフォルトの名無しさん2019/02/27(水) 19:14:17.63ID:lylxu9As
typeidで分岐すれば

64デフォルトの名無しさん2019/02/27(水) 19:17:04.78ID:ZZbXSlBN
>>52
戻り値の型をautoと書くとオーバーロードを認識しなくなるとかです。

65デフォルトの名無しさん2019/02/27(水) 19:23:09.27ID:lylxu9As
auto戻り値なんてメリットあるか?

66デフォルトの名無しさん2019/02/27(水) 19:31:54.53ID:EHh9wz5w
コンパイル時の条件で型が変わるときはautoで済ますと楽

67デフォルトの名無しさん2019/02/27(水) 19:43:36.93ID:1o0vhyUy
>>61
単純にオーバーロードすれば?

68デフォルトの名無しさん2019/02/27(水) 19:53:26.31ID:ZZbXSlBN
>>65
decltype使うときとかです。

69デフォルトの名無しさん2019/02/27(水) 19:56:24.14ID:ZZbXSlBN
std::enable_if<>を使うと超長くなるんだけど、doxygenは戻り値の型の欄を改行してくれないので、関数名や説明の欄が横一文字とかになってしまいそうです。
何とかしてほしいです。

70デフォルトの名無しさん2019/02/27(水) 20:23:21.57ID:Lz5cBdad
>>65
constexpr auto succ(auto num) {
return ++num;
}

71デフォルトの名無しさん2019/02/27(水) 20:31:28.87ID:ajs1Ye6I
>>61
%lfて…わかってやってる、ワケないよな

72デフォルトの名無しさん2019/02/27(水) 20:40:31.82ID:G+GrvvOb
>>61
printf("%s", std::string(v).c_str());

73デフォルトの名無しさん2019/02/27(水) 20:45:05.91ID:G+GrvvOb
>>72
ミスった
std::stringじゃなくてstd::to_stringが正しい

74デフォルトの名無しさん2019/02/28(木) 07:48:59.08ID:nAsBylgf
なるほど、まず文字列に変換、統一してから %s で表示か。
>>62 の「テンプレート関数の特殊化」を教える例題って説も納得いくけど、
std::string の変換関数の好例でもあるな。

>>71 %lf は規格で認められてる変換指定だね、一応。
間違って使う奴があまりに多いので現状追認で追加された、
という経緯らしいけど。
どうやら C90 では未定義、C99以降は %f と同様みたい。

75デフォルトの名無しさん2019/02/28(木) 12:32:13.81ID:yyOtWed3
>>73
%06d とか %7.3f とかできなくなるやん

76722019/02/28(木) 13:07:02.05ID:g9ECmttI
>>75
質問主がデフォルトの書式だからとりあえずそのままで書いた
型ごとに書式を指定するなら上にもあるように特殊化するしかないな

77742019/02/28(木) 15:32:45.18ID:nAsBylgf
自分で書いといてアレだけど、
C++に含まれるCの標準関数ってどうなってるんだろ?
Cの規格に追従して自動的に更新されてくのか、
ある時点で分裂したら再統合されるまで離れる一方なのか。

後者だとしたら、C99以降でprintf()の%lfが正当になったとしても
C++に関してはどのバージョンでも未定義、って危険があるな。

78はちみつ餃子 ◆8X2XSCHEME 2019/02/28(木) 16:24:48.52ID:KlP/6TOW
>>77
今のところつかず離れずを維持してる。
C++ 中の C 関数は「この C 規格を参照」という感じで明記しているので、
ある程度になると状況を見て参照先を変更するってだけ。

まあ関数についてはそれでいいとして、
その他のところも記法は統一して欲しいよなぁ。

C の _Noreturn と C++ の [[noreturn]] はどっちかに統一するのじゃ駄目だったんかなぁ? とか。

79デフォルトの名無しさん2019/02/28(木) 17:54:53.03ID:zeNaE6xz
vector<object*> v
がありまして、んでobjectクラスはメンバ変数int numを持ってるとします
このときですねv.at(1)->num, v.at(2)->num,....v.at(n)->numでvをsortしたいなーってのがあるんですけど上手い方法無いもんでしょうか
全然思いつかなくて

80デフォルトの名無しさん2019/02/28(木) 18:01:05.88ID:3CdGs56r
>>78
そう言うのは好みだからどっちかが大人になって折れるかよほど力の差があるとかでないと統合は無理

81デフォルトの名無しさん2019/02/28(木) 18:07:46.80ID:zeNaE6xz
>>79ですが解決しました。失礼しました。
https://stackoverflow.com/questions/16366978/stdsort-on-a-vector-of-class-pointers
こちらですね

82デフォルトの名無しさん2019/02/28(木) 18:41:06.34ID:IByT54N8
英語だ!!!

83 ◆QZaw55cn4c 2019/02/28(木) 20:13:33.80ID:FII1Vkt+
>>61
確か double に対応する書式指定は "%f" であって "%lf" ではない、という記憶がありますが

84デフォルトの名無しさん2019/02/28(木) 20:22:30.93ID:SJVUajxC
K&Rのfloatは引数にするとdoubleに昇格するというルールが残っているのでしょう

85デフォルトの名無しさん2019/02/28(木) 23:35:18.37ID:IM+bn+eP
本質ではなく、どうでもいいところにしか突っ込めないんだなw

86デフォルトの名無しさん2019/02/28(木) 23:37:27.00ID:ufQTgCzR
プロトタイプ宣言されたfloat引数にはfloatで渡すけど
可変引数にはfloatは渡せないままなんだな何故か

87デフォルトの名無しさん2019/02/28(木) 23:45:49.79ID:SJVUajxC
>>86
va_list にそんな制限あったっけ?

88デフォルトの名無しさん2019/02/28(木) 23:51:53.97ID:LhFhdmbG
可変長引数関連はスタック周りを弄るコードを「マクロで」wrapしたものだから
C言語と互換性を持たせるためには仕様の詳細まで引き継ぐしか致し方なかったんじゃないの知らんけど

C++専用のva_listを名前を変えて作ったら解決したかもしれんが
知らんけど

ただしそうしたとしたら、extern "C"したのにC言語から呼ばれへん
何で!?となってプチ大混乱が生じそう
知らんけどな…

89デフォルトの名無しさん2019/02/28(木) 23:53:46.30ID:LhFhdmbG
printf()ではdoubleを出力できるのに、
scanf()ではfloatしか受け取れない(doubleをスキャンする機能が無い)というのは
C言語の七不思議のうちの一つ

90デフォルトの名無しさん2019/02/28(木) 23:56:03.03ID:SJVUajxC
MSDNの関連記事 読んでない
https://msdn.microsoft.com/ja-jp/magazine/dn913181.aspx

91デフォルトの名無しさん2019/03/01(金) 00:15:41.73ID:fP7U0W+N
しかしさすがにscanf()でdoubleをスキャンできるようにする近代化は一筋縄ではいかなさげ

92デフォルトの名無しさん2019/03/01(金) 13:14:40.93ID:ozM8zBQ9
>>89
えっ

93デフォルトの名無しさん2019/03/01(金) 19:20:57.20ID:HVxvwZsK
>>84
不定長引数関数ならば、という縛りがつきます

94デフォルトの名無しさん2019/03/01(金) 19:21:39.88ID:HVxvwZsK
>>91
普通に書式"%lf" でできるのではないですか?

95デフォルトの名無しさん2019/03/01(金) 19:33:29.87ID:WfqePbUu
>>89
それ何処の世界のC言語の話?

96デフォルトの名無しさん2019/03/01(金) 20:08:46.93ID:WfqePbUu
>>87
規格に書いてあるよ

97デフォルトの名無しさん2019/03/02(土) 10:59:08.67ID:+L4gK20K
出鱈目ばっかり書き込むスレですか?

98デフォルトの名無しさん2019/03/02(土) 11:55:35.34ID:0O78HlO0
>>93
できた!できたわ>>93素敵!!!11!!

99デフォルトの名無しさん2019/03/02(土) 12:04:22.76ID:0O78HlO0
ところで質問なのですが代入やコピー構築時に所有権を移動するクラスFooを造りたいのですが、
Foo::Foo(Foo& rhs) : m_p(rhs.m_p) { rhs.m_p = NULL; } // 引数が非constのコピコン
Foo& Foo::operator=(Foo& rhs) { m_p = rhs.m_p; rhs.m_p = NULL; return *this; } // 引数が非constの代入演算子
を定義して、VS2010とかで警告レベルを4に引き上げると
 C4239TypeからType&への変換です
という警告が出るのです

これはFooのムーブコンストラクタを定義したら直るので初めてムーブコンストラクタを定義したいのですが、そこで質問

Q1. ムーブコンストラクタにおいてはコピーされる側の変更はマジで不要?
   つまり、所有権移動が絡む今回のFooの場合でも次の書き方でおk?
Foo::Foo(const Foo&& rhs) : m_p(rhs.m_p) { }

Q2. ムーブコンストラクタにおいてコピーされる側を変更しても(実行効率以外は)無害?
   つまり、所有権移動が絡む今回のFooの場合でコピコンにならって次の書き方をしても安全?
Foo::Foo(Foo&& rhs) : m_p(rhs.m_p) { rhs.m_p = NULL; }

100デフォルトの名無しさん2019/03/02(土) 12:09:49.85ID:0O78HlO0
訂正orz
>>98
誤: >>93
生: >>94

>>99
誤: コピーされる側
正: ムーブされる側

101デフォルトの名無しさん2019/03/02(土) 12:23:27.09ID:LLfR4tsY
rhsにNULL入れてるってことはrhsのデストラクタで解放されたら困るってことでしょ
一時オブジェクトだろうが何だろうが破棄されるときにデストラクタは走るから、
その例だとNULL入れる必要はある

というかその例は綺麗にムーブを使うべき例

102デフォルトの名無しさん2019/03/02(土) 12:37:35.01ID:0O78HlO0
>>101
>rhsにNULL入れてるってことはrhsのデストラクタで解放されたら困るってことでしょ
なるほど確かに…
ていうか鋭い

>というかその例は綺麗にムーブを使うべき例
ホンマや(゚Д゚;)ムーブコンストラだけで動いたわ㌧クス、

103デフォルトの名無しさん2019/03/02(土) 12:51:51.79ID:0O78HlO0
実験してから質問せいやというご批判があるかもしれないので釈明
実験はした
しかしコピコンが定義されているとムーブコンは呼ばれなかった(から、>>99のQ1のムーブコンでもちゃんとイゴイタ)のである

104デフォルトの名無しさん2019/03/02(土) 14:47:21.97ID:66qf4QbX
えw
実験するのめんどくさいから質問してたわw
ダメだったんだ、ごめんなさい。

105デフォルトの名無しさん2019/03/02(土) 15:15:55.45ID:oy0Ht86m
コンパイルエラーがとれなくて困ってます

■ ヘッダー側
template<class T>
class Test
{
public:
  Test(void (*func)(T)) {}
  Test(void (*func)(const T&)) {}
};
typedef Test<int *> TestPtr; // テンプレート引数がポインタ型

■ 呼び出し側
static void func1(int *x) {}
static void func2(const int *x) {}

void main()
{
  TestPtr test1(func1); // OK
  TestPtr test2(func2); // コンパイルエラー
}

VC2008だと以下のエラーになります。
1 番目の引数を 'void (__cdecl *)(const int *)' から 'void (__cdecl *)(T)' に変換できません。

func2みたいにconst付けるとなんでダメなんでしょうか?

106デフォルトの名無しさん2019/03/02(土) 15:52:41.75ID:0ZOGECoI
>>104
実験もせずに待つって、マナー以前に自分のためにならんだろ
答えが返ってくるまでボケっとしてんのかと

>>105
関数ポインタは引数の型が違うと別の型になる

107デフォルトの名無しさん2019/03/02(土) 15:54:45.54ID:uEwpVDqh
VC++でmsado15.dllをインポートしようとしても参照されずエラーになるのですが原因は何でしょうか?

108デフォルトの名無しさん2019/03/02(土) 16:25:34.65ID:gxSP/QDn
>>107
それだけでわかるか。エラー内容くらい書け

109デフォルトの名無しさん2019/03/02(土) 16:41:21.42ID:uEwpVDqh
>>108
C:\Program Files\Common Files\system\ado\msado15.dll に対応するエディターはありません。

このファイルの種類(.dll)のアプリケーションがインストールされていることを確認してください。


重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態
エラー (アクティブ) E1696 ソース ファイルを開けません "C:/Users/owner/Documents/Visual Studio 2017/Projects/20190227/20190227/Debug/msado15.tlh" 20190227 C:\Users\owner\Documents\Visual Studio 2017\Projects\20190227\20190227\Source.cpp 6

ソースは以下の通り
#include <stdio.h>
#include <tchar.h>
#if (WINVER >= 0x0601) // Windows 7 以降
#import "msado60.tlb" no_namespace rename("EOF", "adoEOF")
#else
#import "C:\Program Files\Common Files\system\ado\msado15.dll" no_namespace rename("EOF", "adoEOF")
#endif

110デフォルトの名無しさん2019/03/02(土) 17:30:18.82ID:oy0Ht86m
>>106
なるほど。
typedef Test<const int *> TestPtr;
にしたらコンパイル通りました!どもです!

111デフォルトの名無しさん2019/03/02(土) 18:12:08.54ID:uEwpVDqh
>>109
必要かどうかわからなかったのですが
regsvr32.exeでmsado15.dllを登録

その後いろいろいじってビルドしてみるとコンパイルできました。
ただし出力ができませんでしたがコンパイルはできたのでとりあえず良しとします。

msado15.dllのようなDLLはC(VC)++で扱うのは難しいですね。
インテリセンスが働きませんから…

112デフォルトの名無しさん2019/03/02(土) 18:48:27.86ID:Gk4CLPf8
「c++ import dll」で検索!

113デフォルトの名無しさん2019/03/02(土) 20:32:59.25ID:YCnAoXOq
マクロは名前空間無いからな

114デフォルトの名無しさん2019/03/02(土) 22:58:26.16ID:9ABljqhX
はじめまして。
C++でスケジューラのようなものを作りたいのですが、
相談に乗っていただけますでしょうか?

C++/MFCのMDIを使用して、ウィンドウ内に複数のウィンドウを配置したいと思っています。
一つのウィンドウにはリスト形式でタスクの一覧を、別のウィンドウでは
ガントチャート形式でタスクの時間ごとにグラフを描画し、その他のウィンドウは各情報を表示出来ればと思っています。

そこで、上記のようなものを作るにあたって、
タスク一覧のウィンドウとガントチャートのウィンドウへドラッグ&ドロップで行き来したいのですが、
そもそもそのような事は可能でしょうか?

また、チャートの描画をするにあたって、グラフは2Dで描画しようと思っているのですが、
2Dのグラフィックライブラリ等を利用した方が簡単に実装出来るでしょうか?
もし良いライブラリ等があればご教示いたければ幸いです。

私自身、開発言語はC++かC#しかまともに使用した経験がないのですが、
実行環境のスペックがあまり高いものを準備出来ないので、
Core2Duo/メモリ2G程度、良くても型落ちのi3程度で、
実行速度も考慮したくC++を選択した次第です。
もし最適な言語や、開発手法があれば教えていただけると嬉しいです。

無知な部分が多いと思いますが、皆さんの意見をお聞かせ頂ければと思いますので、よろしくお願いいたします。

115さまよえる蟻人間 ◆T6xkBnTXz7B0 2019/03/02(土) 23:07:26.95ID:HH5zv832
それなら、OLE D&Dを実装することになる。具体的には、IDataObject, IDataSource, IDropTargetインターフェースの実装。

116デフォルトの名無しさん2019/03/02(土) 23:32:17.29ID:4PbQivqk
c++でテンプレ使って実装を別ファイルで隠す場合、

// h //////////////////////////////////////////////////
template<typename T> class cls
{
public:
template<typename U> U func();
private:
T var = 0;
};

// cpp1 //////////////////////////////////////////////////
template<> template<> char cls<char>::func<char> { return var; }
template<> template<> int cls<char>::func<int> { return var; }
template<> template<> char cls<int>::func<char> { return var; }
template<> template<> int cls<int>::func<int> { return var; }

// cpp2 //////////////////////////////////////////////////
template<typename T> template<> char cls<T>::func<char>(){ return var; }
template<typename T> template<> int cls<T>::func<int>(){ return var; }
template<> class cls<char>;
template<> class cls<int>;

//////////////////////////////////////////////////

cpp1みたいに全部型指定していく場合はビルド出来るんだけど、
cpp2みたいに別けて型指定していくと出来ない。

cpp2みたいな事を実現可能な方法って無いですかね?
そもそも書き方が間違ってる?

117さまよえる蟻人間 ◆T6xkBnTXz7B0 2019/03/02(土) 23:37:15.79ID:HH5zv832
ヘッダーで特殊化の方法を指定しないといかんとちゃう? 知らんけど。

118デフォルトの名無しさん2019/03/02(土) 23:45:00.12ID:0O78HlO0
cls::func()の定義を
 U cls::func()
ではなしに、
 void cls::func(U& x)
とかにすればおkなキモス、

なおそうするとテンプレートの特殊化以前に関数のオーバーロードで解決できてしまうヨカン、
void cls::func(char& x) { x = (char)var; }
void cls::func(int& x) { x = (int)var; }
void cls::func(double& x) { x = (double)var; }
void cls::func(std::string& x) { x = std::string(var, '0'); }
...
いくらでも作れる……!

119さまよえる蟻人間 ◆T6xkBnTXz7B0 2019/03/02(土) 23:54:10.30ID:HH5zv832
IDataSourceじゃなくてIDropSourceだ。ごめんを。

120デフォルトの名無しさん2019/03/02(土) 23:59:54.93ID:4PbQivqk
>>117
特殊化の方法、、、私の知識では分からないですね、、、

>>118
hを、
template<typename U> void func(U& dest);
cppを、
template<typename T> template<> void cls<T>::func(char& dest){ dest = var; }
としてみましたが、状況は変わらずでした。


これ、全組み合わせを書かなきゃダメなんですかね?
template<T, U> みたいなのを、
template<T, int> みたいな感じで一部だけ型指定していくのは無理、
というのは見た事があります。

121さまよえる蟻人間 ◆T6xkBnTXz7B0 2019/03/03(日) 00:04:53.16ID:KlFuUPR7
特殊化を知らない?

122デフォルトの名無しさん2019/03/03(日) 00:12:10.08ID:ET38y2ec
cpp2の翻訳単位内で完全に実体化させないとどうやっても外からはよべないので
少なくともcpp2の中ではそのように書かないといけないと思う

123デフォルトの名無しさん2019/03/03(日) 00:24:16.88ID:kd4WdA4I
確実にcppに実体作りたきゃ明示的インスタンス化は個別にしなきゃ駄目だろ

124デフォルトの名無しさん2019/03/03(日) 00:24:32.19ID:1zX/ygG4
>>121
この場合の特殊化は、どのような記述になるのでしょうか?

>>122
なるほど、やっぱり無理なんですかね?


これ、元となっているのは、

// h /////////////////////////////////////////////////
template<typename T> class cls
{
public:
int func();
private:
T var;
};

// cpp ////////////////////////////////////////////////////
template<typename T> int cls<T>::func(){ return var; }
template class cls<char>;

/////////////////////////////////////////////////////////////

みたいな感じで func() に戻り値の型指定を追加したいな、
って事でやりはじめたんですよね。

綺麗に書くのが無理そうならば、必要な物を全部書いていきます、、、

125デフォルトの名無しさん2019/03/03(日) 00:30:05.53ID:AQaNwhGs
要求仕様がいまいちよくわかっていないが(マテ
(1) 任意の型Tの値cls::varから任意の型Uの値を得たい(一種のconverterクラスを作りたい)
(2) 変換関数cls::func()の実装は隠蔽したい

ということならこんなんでど(ry
http://ideone.com/1Fh8sg

126デフォルトの名無しさん2019/03/03(日) 00:38:22.33ID:1zX/ygG4
>>123
やっぱりそういう物なのですかね

>>125
仕様はそんな感じです
ただ、func() の戻り値をテンプレ使用でなんとかする方法が無いのかな、と
サンプルもありがとうございます

127デフォルトの名無しさん2019/03/03(日) 00:49:52.61ID:AQaNwhGs
>func() の戻り値をテンプレ使用でなんとかする方法が無いのかな、と
func()の戻り値をテンプレにしつつ実装は「完全に」隠蔽したい(ヘッダファイルに書くわけにいかない)となると
やっぱコアとなる変換関数は、必要なTとUの全組み合わせについて「完全に」「非テンプレートで」書かないといけない希ガス
(なぜなら、テンプレートのままcppに書いたら他のcppから呼べない(現行コンパイラはテンプレートの分割コンパイルに対応していない

(2)の隠蔽の要求を多少緩和して、template<class U> void conv(int src, U& dst) { ... } を
ヘッダファイルに書いても良いということならUを返すcls::func()をconv()を1個書いたらできるようにはなる

※ 個人の感想です
※ コードには個人差があります

128デフォルトの名無しさん2019/03/03(日) 00:57:11.45ID:1zX/ygG4
>>127
となると、現在のやり方でコードを完全隠蔽したいとなると、
全組み合わせをcppに書けって事になりますよね、、、


なるほど、了解いたしました
付き合って頂いた皆様、ありがとうございます

129デフォルトの名無しさん2019/03/03(日) 01:15:53.21ID:AQaNwhGs
スマン>>127は言い過ぎたかもしれん…
全組み合わせをcppに書く作業をそのcppの中でテンプレートを定義して省力化することは可能かもしれん
ただし、そのcppの中で定義したのと同じシグネチャ(名前+引数)でユーザーコードが別のテンプレート関数を定義でもしたら、
ODRに違反することになる(この場合実際に変な挙動になる危険性が大きい)ので全体を無名namespaceで囲う必要がありそう
無名namespaceの中から選択的に関数をエクスポートできるのかは正直知らん
あんまりテンプレート絡みで無茶はやりたくナサス

130デフォルトの名無しさん2019/03/03(日) 01:30:06.83ID:kd4WdA4I
定義は共通でして
template int cls<char>::func<int>();
みたいなのを使う分だけ書けば良い

ただ、今回の場合クラス内テンプレート関数の特殊化しようとすると怒られるからさらに工夫が必要

131デフォルトの名無しさん2019/03/03(日) 01:33:24.30ID:ET38y2ec
ああ、確かに
使わない関数テンプレートをcppで定義してそれの明示的インスタンス化を通してやれば省力化できそう
この場合その使わない関数テンプレートを内部リンケージにしても、その中で実体化要求されたテンプレートのリンケージには影響はないはず

132デフォルトの名無しさん2019/03/03(日) 02:24:28.96ID:5EsDLzeQ
Visual Studioで通ってもgccで通らなかったりするからテンプレートの実体化は厄介。

133デフォルトの名無しさん2019/03/03(日) 02:47:42.46ID:dVINV85+
もはやコンパイラありきの言語

134デフォルトの名無しさん2019/03/03(日) 02:53:02.86ID:kd4WdA4I
VC++がC++擬きの別言語なだけだろ
今ごろになってやっと2 phase lookup対応させた

structとclassが違うとリンクでこけるのも糞

135デフォルトの名無しさん2019/03/03(日) 03:13:19.05ID:ET38y2ec
VS2017以降のMSVCは許してあげてほしい・・・

136デフォルトの名無しさん2019/03/03(日) 05:50:17.03ID:EorZPwcP
えっ、何か革新的なことをしているの?
C++は今までつかったことがなかったんだが、最近マイコンの開発に使ってから
かなり気に入っている。これならPCでも使えるかもと今考えているところ。

137デフォルトの名無しさん2019/03/03(日) 06:33:00.88ID:ChZC+e8W
組み込み用途だとC++よりCの方が融通効くと思うんだが
最近の組み込みはひょっとして随分恵まれてるのか

138デフォルトの名無しさん2019/03/03(日) 07:57:12.43ID:EUJr/Yte
>>137
お前さんの認識が古いだけ
数KBメモリーとモダンなプロセッサならC++で開発は普通にできる

139 ◆QZaw55cn4c 2019/03/03(日) 10:05:41.46ID:OccEVyH1
ふと思ったんですが、Java でデコレーターを記述するのに
BufferedReader br = new BufferedReader(new InpustStreamReader(System.in));
などと、new したオブジェクトのポインタを取っておかず、new したまま放置してしまう書き方がありますが、
スコープ内で new したオブジェクトは、スコープを外れるときに C++翻訳系が自分で delete する、と決め打ちしてしまうと、互換性で問題がでるでしょうか?

140デフォルトの名無しさん2019/03/03(日) 10:18:54.68ID:0vjeZZiI
そのポインタを別の場所にコピーしてたらどうなる?
頭悪すぎだろ

141 ◆QZaw55cn4c 2019/03/03(日) 10:23:45.41ID:OccEVyH1
>>140
では、あからさまに new したポインタを捨ててしまっている記述に限り自動で delete する、というのはどうですか?
目的は…classpath を共用したいのです、classpath はあらたに c++ で書くとして

142デフォルトの名無しさん2019/03/03(日) 10:26:03.14ID:0vjeZZiI
>>141
そのポインタは渡した先でどうなってると思う?
頭悪すぎだろ

143デフォルトの名無しさん2019/03/03(日) 10:31:40.12ID:8Bef4COm
よくわかんねえけど楽してJavaを移植したいってこと?
Boehm GCでも使ってみたらどうだ

144 ◆QZaw55cn4c 2019/03/03(日) 10:35:18.92ID:OccEVyH1
>>142
new したポインタを捨ててしまっている記述に限り、処理系で delete する、と決めるのですから「ポインタを渡した先」というのは存在しないことになります

>>143
C++ と Java で classpath ライブラリを共用したいのです!

145デフォルトの名無しさん2019/03/03(日) 10:35:19.96ID:oO/57lY2
make_uniqueがやりたいってことかね

146 ◆QZaw55cn4c 2019/03/03(日) 10:41:59.49ID:OccEVyH1
>>145
スマートポインタを導入せずとも、ナマポであっても classpath を共用できるようにならないものか
そのためには c++ 処理系にどんな制限or追加を課せばいいか?

147 ◆QZaw55cn4c 2019/03/03(日) 10:47:25.17ID:OccEVyH1
>>142
内容を誤解していました、すみません
あらためて回答します

プログラマが new したポインタ値を変数に取っておく記述をした場合は、delete の責任はプログラマにあるものとし、処理系では何もしないものとします

148デフォルトの名無しさん2019/03/03(日) 10:53:36.82ID:rOejoJLo
>>116
遅レスだけど、テンプレートはcppに隠蔽しようとか考えない方がいいと思う
dllとかにしたいなら別だけど・・

149デフォルトの名無しさん2019/03/03(日) 10:59:02.77ID:kd4WdA4I
javaでnewしているからってc++でnewするなって
classpath共用が何を意味しているのかは分からんが

150デフォルトの名無しさん2019/03/03(日) 11:02:05.72ID:AQaNwhGs
・繰り返し構文とgotoの全廃

151デフォルトの名無しさん2019/03/03(日) 11:24:20.63ID:0vjeZZiI
>>147
だからさあ
newして渡した先では殆どの場合はそれをフィールドに入れてるだろ
殆ど100%のケースでは「何もしない」に該当するんだよ

152デフォルトの名無しさん2019/03/03(日) 11:44:43.82ID:lodoh91K
>>147
そのオレオレC++拡張の仕様を自分で決めて自分で実装して公開してみな。
万に一つもないと思うが、それを有用だと思って喜ぶ人がいるかもよ。

153 ◆QZaw55cn4c 2019/03/03(日) 11:58:52.90ID:OccEVyH1
>>151
んんー、それは c++ 的な扱い(delete はプログラマの責任)でいいかと、私の思考に何が抜けているのかな?もう少し考えて見ます

154デフォルトの名無しさん2019/03/03(日) 12:18:50.69ID:kd4WdA4I
>>139
規格ではdeleteしないものをdeleteしたら互換性に問題が出る。
自動でdeleteしたかったらスマートポインタ使うべき
独自c++擬き想定しているならc++17使うのも当然okのはず

生のnew使わせるなんて今時のc++ではとんでもない悪手

155デフォルトの名無しさん2019/03/03(日) 13:13:27.54ID:5kJ1RFDr
VS2017は十分な出来なんだがテンプレートの展開中に内部エラーで転けることがあってそこだけは不満

156デフォルトの名無しさん2019/03/03(日) 15:47:18.29ID:5EsDLzeQ
shared_ptr でJavaやC#のガーベージ・コレクションとほぼ同じ役目が期待できるから別にいいのでは。
C++は、shared_ptrが正式採用されたC++11で別の言語になった印象すらあるわ。

157デフォルトの名無しさん2019/03/03(日) 15:57:24.31ID:8Bef4COm
循環参照が検出できないからJavaプログラムの参照をそのまま置き換えればオッケーというわけでもない
もちろんナマポよりは遥かにマシだけど

158デフォルトの名無しさん2019/03/03(日) 15:59:19.15ID:rOejoJLo
>>155
面倒だとは思うけど、時間あるなら再現するコードと共にバグ報告送ってやってくれ

159デフォルトの名無しさん2019/03/03(日) 16:11:53.27ID:E4UxtVYi
unique_ptr<hoge> up0(new hoge());

shared_ptr<hoge> sp0(new hoge());

と書いたときと

unique_ptr<hoge> up1 = new hoge();

shared_ptr<hoge> sp1 = new hoge();

と書いた時で
違いは生じますか?
生じるとしたらどんな違いですか?

160デフォルトの名無しさん2019/03/03(日) 16:19:53.78ID:D2G4oQ9F
副業解禁で激変する若者世代とマネージャー世代のキャリア観
https://www.businessinsider.jp/post-107782
フリーランスの職種20個の仕事内容と平均年収をわかりやすく解説
https://www.proof0309.com/entry/shokushu
時給1万円のバイトも。会社員向きのプチ副業を、“バイト芸人”が教える
https://headlines.yahoo.co.jp/article?a=20190226-00127948-bizspa-bus_all
副業が「会社にバレる人」と「バレない人」の大差
https://headlines.yahoo.co.jp/article?a=20190303-00268007-toyo-bus_all
正社員の10%以上が副業 中には過重労働で体調崩す人も
https://headlines.yahoo.co.jp/hl?a=20190227-00010000-wordleaf-bus_all
「副業で年2000万円稼ぐ男」に学ぶキャリア戦略
https://headlines.yahoo.co.jp/article?a=20190221-00266856-toyo-bus_all
加速する「副業社会」正社員の4割が「副業したい」 気になる収入はどれくらい?
https://headlines.yahoo.co.jp/hl?a=20190218-00010001-danro-life
おすすめ副業22選を現役フリーランスが解説【在宅も可能】
https://www.proof0309.com/entry/zaitaku-hukugyou
会社を辞めてフリーランスで働きたいあなたが知っておくべき10のこと
https://www.businessinsider.jp/post-165731
フリーランスと会社員、働き方の根本的な差 広がる「雇用されない働き方」の課題とは何か
https://toyokeizai.net/articles/-/263055
フリーランス人口は増える!今後は仕事もプロジェクト単位になる!?
https://freelance.mts-career.com/population/

161デフォルトの名無しさん2019/03/03(日) 17:35:34.30ID:8Bef4COm
>>159
直接初期化とコピー初期化の違いを説明するとクソややこしい話になるんだけど
結論から言えばその場合はどっちも全く同じ

162デフォルトの名無しさん2019/03/03(日) 17:53:40.63ID:E4UxtVYi
make_shared使った方が良い?

163デフォルトの名無しさん2019/03/03(日) 19:22:53.95ID:8Bef4COm
うん

164デフォルトの名無しさん2019/03/04(月) 04:26:14.48ID:FZO2lxM7
new 呼び出しが少なければ少ないほど精神衛生に良い。

165デフォルトの名無しさん2019/03/04(月) 06:09:53.20ID:eTdHd+Gg
複数の関数の戻り値を足し合わせる処理で、それぞれの関数の戻り値をチェックしたい場合のすっきりする方法は何かありますか?
std::string result;
result += func1(a);
result += func2(b);
result += func3(c);
の各func1,2,3の戻り値をresultに足す前に空でないかを確認したいのです (1つでも空があった場合はresultも空にしたい)
単純に一時変数を用意して一つずつ判定するしかありませんか?

166デフォルトの名無しさん2019/03/04(月) 06:27:48.33ID:iluilBaY
typename Iterator::container_type::value_type
こんな風に::で三個つなげるのは合法ですかね??

167デフォルトの名無しさん2019/03/04(月) 06:31:54.66ID:nFXsjzZK
エイリアス使えば

168デフォルトの名無しさん2019/03/04(月) 06:33:10.80ID:7Cz1/mIW
funcN() を追加する直前の result.size() を記憶しておいて、
足した後に長さが増えてなかったら、今呼んだ funcN() の結果は空だった、
と判定することはできるか。

string から整数になるだけで、一時変数を使うのは変わらない上に、
処理内容が分かりやすくなるわけでもないけど。

169デフォルトの名無しさん2019/03/04(月) 07:56:06.21ID:EZgqhZII
>>165
例外

170デフォルトの名無しさん2019/03/04(月) 08:09:41.73ID:t1tsHTRA
>>166
合法

171デフォルトの名無しさん2019/03/04(月) 15:31:21.38ID:V3vkr0fP
unique_ptr<int> u(new int[2]{4, 5}); // OK (A) -> int * が作られる u.get()[n] でアクセス可能 *u だめ

unique_ptr<int> u = make_unique<int>(6); // OK -> int * が作られる *u でアクセス可能 u[0] だめ

unique_ptr<int[]> u = make_unique<int[]>(2); // OK (B) -> int [] が作られる u[n] でアクセス可能 *u だめ *u.get() 可能

unique_ptr<int *> u = make_unique<int>(2); // コンパイルエラー (C)

unique_ptr<int *> u = make_unique<int *>(2); // コンパイルエラー (D)

unique_ptr<int *> u(new int *); // ok -> int ** が作られる *u = &hoge あれば **u でアクセス可能

(C)(D)がエラーになる理由と
(B)を(A)の様に同時に初期化したいとき
どう書けば良いか知りたいです

172デフォルトの名無しさん2019/03/04(月) 17:39:35.24ID:rgTuscQv
C 型が違う
D int*が2から作れない

173デフォルトの名無しさん2019/03/04(月) 19:03:47.51ID:iluilBaY
>>170
どうもありがとう。

1741652019/03/04(月) 22:26:16.82ID:eTdHd+Gg
>>168
>>169
ありがとうございます

結局こうすることにしてみました
auto addString = [&result] (std::string&& temp){
 if (temp.empty()){
  throw 0;
 }
 result += temp;
};
try{
 addString(func1(a));
 addString(func2(b));
 ・・・
}catch (...){
 return "";
}

175デフォルトの名無しさん2019/03/04(月) 23:05:47.73ID:IrD+1pkV
void f()
{
 static std::mutex mtx;
 std::lock_guard<std::mutex> lock(mtx);
 //何がしかの処理
}

これっていいの?

176デフォルトの名無しさん2019/03/04(月) 23:25:00.41ID:tJNb7RRD
C++11以降はセーフ、じゃなかったかな。

177デフォルトの名無しさん2019/03/05(火) 00:17:46.56ID:w8adCz4V
セーフなわけがあるか!!1111!11!!!!1!

178デフォルトの名無しさん2019/03/05(火) 00:55:28.26ID:Lvsoqpfj
C++11だろうがなかろうが関係なくセーフだよ。

179KAC2019/03/05(火) 01:01:35.52ID:zhV7s4kG
人によってセーフの定義が違ってたりしない?

180デフォルトの名無しさん2019/03/05(火) 01:03:06.00ID:w8adCz4V
C++11以降はセーフになったらしい(キリ
http://cpprefjp.github.io/lang/cpp11/static_initialization_thread_safely.html

181デフォルトの名無しさん2019/03/05(火) 01:04:55.09ID:w8adCz4V
Double Checked Lockingはジャヴァのメモリモデルがうまく対応できてなくて騒ぎになったことがある技法

182デフォルトの名無しさん2019/03/05(火) 01:11:12.97ID:w8adCz4V
もし関数内static変数の初期化をDouble Checked Lockingを使わずにスレッドセーフにしようとしたら、
関数に入る度に毎回馬鹿正直にクリティカルセクションに入るために1000クロックぐらい捨てることになってしまうま
スピンロックか何かの黒魔術で若干緩和する実装も有り得るかもしれんが基本は

ジャヴァではなくてC++の処理系がdouble checked lockingする分には
処理系がサポートするネイティブなアーキテクチャのみ考えれば良いから
問題が生じることは無いはずでとりあえずはめでたいと思うが、

183デフォルトの名無しさん2019/03/05(火) 01:34:00.08ID:Lvsoqpfj
グローバルなスタティック変数のように実行前に初期化する仕様にいまさら変えられない事情でもあったか。

184デフォルトの名無しさん2019/03/05(火) 01:38:41.08ID:w8adCz4V
リンカにシンボルを渡す手段がイマイチ決め手に欠くキモス

185デフォルトの名無しさん2019/03/05(火) 01:40:59.82ID:w8adCz4V
あと複数の翻訳単位間ではグローバル変数の初期化順序は保証されない(保証しようが無い)から
そういう混乱を避けるために関数内staticは関数に入ったとき初期化されてホスイ

個人的には使わないから知らんが

186デフォルトの名無しさん2019/03/05(火) 02:16:13.00ID:VDry4yCP
>>171
unique_ptr<int[]> u(new int[2]{6, 7});

187デフォルトの名無しさん2019/03/05(火) 02:54:35.71ID:YOwkwz81
std::dynarray ってどこ行ったん?
http://ezoeryou.github.io/boost-benkyokai-sapporo

188デフォルトの名無しさん2019/03/05(火) 03:25:14.57ID:VDry4yCP
なんだろう
この違和感

189デフォルトの名無しさん2019/03/05(火) 04:45:14.68ID:mm49B1QN
ライブラリを作るときは、hpp にはクラスの定義を、cpp には実装を書く、と理解しています。

クラスのメンバでない関数はどう扱うべきでしょうか。
hpp にプロトタイプ宣言を、cpp に中身を書く、というので合っていますか。

190デフォルトの名無しさん2019/03/05(火) 04:47:10.42ID:VDry4yCP
inlineは?

191デフォルトの名無しさん2019/03/05(火) 04:50:23.83ID:xaYVlIsQ
なぜヘッダはクラス限定だとおもったんだ?
それ以前にクラス以外では使用したことがないのか?

192デフォルトの名無しさん2019/03/05(火) 05:01:47.80ID:OG2z9OX5
宣言(Declaration)と定義(Definition)は用語なんで覚えといた方がいいよ

193デフォルトの名無しさん2019/03/05(火) 05:18:53.19ID:3HlR5qin
ヘッダに書くのはクラスだから関数だからとかじゃなくて、複数の翻訳単位(≒cpp)で共通で使うかどうかで決まる
1つのcppの中でしか使わず外に見せないクラスや関数はcppの中でいいよ

194デフォルトの名無しさん2019/03/05(火) 05:48:49.52ID:mm49B1QN
>>190
inline なので(苦笑


>>191
ハ?
回答の体をなしていない。
> hpp にプロトタイプ宣言を、cpp に中身を書く
というやり方は許容されるという意味か。


>>192
覚えました。それで?


>>193
であれば、今私は複数の cpp ファイルを持つ予定はないので、ヘッダファイルは全く不要ということになります。

195デフォルトの名無しさん2019/03/05(火) 05:55:22.28ID:3HlR5qin
ライブラリなんだろ?
自分はcpp1つでも、他の人のcppで使わせるためのクラスや関数があるはずだ
それをヘッダに書け

196デフォルトの名無しさん2019/03/05(火) 05:59:24.21ID:mm49B1QN
>>195
その際、「プロトタイプ宣言はヘッダで、中身は cpp ファイルに」というルールかマナーか慣習はありますか

197デフォルトの名無しさん2019/03/05(火) 06:13:55.29ID:Lvsoqpfj
>>196
特にないから適当に他人のマネしとけばいいと思う。

198デフォルトの名無しさん2019/03/05(火) 11:45:31.15ID:HwCl8Q1J
>>193
>1つのcppの中でしか使わず外に見せないクラスや関数はcppの中でいいよ

staticは付けた方が良いですか?(苦笑

199はちみつ餃子 ◆8X2XSCHEME 2019/03/05(火) 12:27:38.14ID:mHzXPPXa
内部リンケージにするには static を付けるよりも
無名の namespace に入れる方が良いやり方
みたいな雰囲気があるんだけど、
インデントが深くなるのがなんか嫌なんだよね。

インデントは文法に影響しないわけだから、
付けないという選択肢もとれるけど、
それはそれでなんだかなぁって感じだし、
結局は static を付けちゃうんよ。

無名 (unnamed) namespace って使う?

200デフォルトの名無しさん2019/03/05(火) 12:35:48.55ID:zIeyIuEy
関数よりファンクタの方が速いという情報を見たのですが、メンバ関数を入れ子クラスでメンバファンクタ化すると高速化が期待できますか?

201デフォルトの名無しさん2019/03/05(火) 12:41:35.39ID:xaYVlIsQ
コンパイラ次第だろ
実験

202デフォルトの名無しさん2019/03/05(火) 12:50:59.28ID:zIeyIuEy
VC2017で試したのですがテスト用の関数が単純すぎるのかグローバルのインライン関数、クラスのメンバ関数、クラスのメンバファンクタで差異が見られませんでした・・・

203デフォルトの名無しさん2019/03/05(火) 12:51:22.93ID:fI+Bf2nm
どこに書いてもいいだろ
他人の書いたコードなんてどうせ誰も読まないし
読ませたいならドキュメントしっかりさせたほうがいい

204デフォルトの名無しさん2019/03/05(火) 15:12:40.70ID:pv9Sbimr
>>202
その「ファンクタの方が速い」ってのは、一般的に関数ポインタを介するのと比較して、だよ
理由はインライン展開できるからであって、その実験で差異が出ないのは当然

205デフォルトの名無しさん2019/03/05(火) 19:05:23.76ID:A2wr9SaM
ストアドよりインデックスのほうが速いよってスレなかったっけ。

206デフォルトの名無しさん2019/03/05(火) 20:02:38.14ID:zIeyIuEy
>>204
なるほど
ありがとうございます

207デフォルトの名無しさん2019/03/05(火) 21:56:22.01ID:+aoESyYJ
>>199
使う理由としてはメンバ関数を内部リンケージにしたらリンク速くなるかもという期待だけだな
実際速くなるか調べたことないけど

明示的にstaticとある方が読みやすいし、無名はデバッガで見たときクソ見辛くなるし

c++はこういうダメ仕様多過ぎてうんざりだわ

208デフォルトの名無しさん2019/03/05(火) 22:06:02.21ID:fIhIM0AX
腐ったビルド戦略のせいで無駄なオブジェクトコードの重複を生じるのはゼロオーバーヘッド原則に反しないのか?は疑問だな
極一部のマニアしか使わない機能付けてオナニーしてる暇があったら、いいかげん時代錯誤なビルド処理の抜本的な見直しをやってほしい

209デフォルトの名無しさん2019/03/05(火) 22:21:06.27ID:R3KidTI1
メンバ関数の数はクラスのオブジェクト生成コストにどれくらい影響しますか?

210デフォルトの名無しさん2019/03/05(火) 22:30:58.04ID:+aoESyYJ
>>209
まず自分で計測しろ

211デフォルトの名無しさん2019/03/05(火) 23:07:56.79ID:rlRU3gS5
>>209
数によるコスト差0だよ

>>210
計測したことあんの?

212デフォルトの名無しさん2019/03/05(火) 23:19:26.52ID:R3KidTI1
ありがとうございます
というのもメンバ変数がなく多数の関数をまとめただけのクラスがあるのですが、次のどれがいいのか悩んでいまして
(1) 全部static関数にする
(2) クラスをnamespaceにして全部グローバル関数にする
(3) 呼び出す場所で逐次インスタンスを作成する
(4) 呼び出し側クラスでこのクラスのポインタをメンバとして持ち、コンストラクタでインスタンスを受け取るまたは生成する
この場合のベストプラクティスはありますか?

213デフォルトの名無しさん2019/03/06(水) 00:13:14.35ID:twKwvQwO
(1)か(2)を好みに応じて

214デフォルトの名無しさん2019/03/06(水) 00:17:08.38ID:URVwFrjm
特に何もないなら2

templateと組み合わせるなら1とか3は多用するけど4は無いな

2152122019/03/06(水) 00:21:02.86ID:pU9AS85W
ありがとうございます
(2)でやってみることにします

216デフォルトの名無しさん2019/03/06(水) 00:32:13.90ID:Uli2bEJM
1 は、どうして君はすべての関数を、static 関数にできると思ったの?
static関数と、関数のライブラリ・モジュール化は関係ない

3, 4 は、どうして君は、関数を使うのにインスタンスが必要なの?

インスタンスの関数は、他の言語ではメソッドと言って、
そのインスタンスのメンバ変数を使うものに対して、特別な名称を付けている。
つまり、各インスタンスで値が異なるもの

メソッドは、一般的な関数とは異なる。
メソッドや一般的な関数と、関数のモジュール化は関係ない

例えば、Ruby では、
Math.log2( 8 ) #=> 3.0

このようにインスタンスを作らなくても、呼べる関数をモジュール関数と言って、
各インスタンスから呼ぶ関数を、メソッドと言って区別している

2172122019/03/06(水) 00:42:25.73ID:pU9AS85W
そう言われるとそうですね
オブジェクト指向ではmain関数以外全部クラス/構造体で作成するものだという先入観がありました

218デフォルトの名無しさん2019/03/06(水) 01:06:06.33ID:Riy5qgFP
>>214
無理矢理4にしたいケースを考えると、同じインターフェースを持つ関数群A,Bを場合によって切り替えて使いたい場合に敢えてインスタンスのポインタとすることもあるかな。今回の質問者の場合には当てはまらないだろうけど。

219デフォルトの名無しさん2019/03/06(水) 01:10:14.42ID:MDLmYlCa
>>193
>1つのcppの中でしか使わず外に見せないクラスや関数はcppの中でいいよ
名前無しでも何でも良いが、その場合はクラスはnamespaceの中に入れないと危険が危なすぐる…

同じ名前空間に属する同じシグネチャのFoo::func()が異なる関数として複数のcppで定義された場合、
どっちが呼ばれるか定まらない処理系が実在する(VC++2010とか
多分ODR違反で未定義動作なんだと思う

220デフォルトの名無しさん2019/03/06(水) 01:13:13.20ID:paKD8ls/
曖昧さは、利点にも欠点にもなりうる。
namespaceのグローバル関数ではなくクラスのスタティック関数にすることで曖昧さがなくなりコンパイルエラーを避けられる場合がある。

221デフォルトの名無しさん2019/03/06(水) 01:14:08.29ID:MDLmYlCa
>>219訂正
CPPでクラスを定義する場合は無名namespaceに入れないと危険が危なすぐる、
無名namespaceは異なる翻訳単位間では別名として扱われるから安全

一方、名前付きnamespaceでは異なるCPPで偶然
同じ名前空間に属する同じシグネチャのFoo::func()が作られてしまう危険性を排除できない

222デフォルトの名無しさん2019/03/06(水) 01:21:31.24ID:MDLmYlCa
>>220
そのクラスに非staticなメソッドを設けたとたん、
>>219と同じ話でどのFoo::func()が呼ばれるかわからないという不正な動作をする危険性が生じる

驚くべきことに、VC++2010の場合リンカが何のエラーも警告も出さない
それでいてしっかり変な動作になる(a.cppで定義したFoo::func()を呼んだつもりがb.cppで定義された同じシグネチャの別のFoo:func()が呼ばれる

223KAC2019/03/06(水) 01:53:40.57ID:tePy6oFI
>>216
C/C++では、staticなどキーワードが全く違う複数の意味で使われるから注意な。

2242162019/03/06(水) 02:00:53.56ID:Uli2bEJM
Ruby では、関数名のバッティングを避けるため、2重に囲む。
module 内にclass か、class内にclassを作る

module Net
class HTTP end
class FTP end
end

# インスタンス
Net::HTTP.new
Net::FTP.new

225デフォルトの名無しさん2019/03/06(水) 02:06:24.72ID:Riy5qgFP
>>224
rubyボットはお呼びでないからもう巣に帰ってくれ

2262162019/03/06(水) 02:12:57.91ID:Uli2bEJM
static みたいな複雑な概念を、初心者が理解するのは難しい

スコープを限定する意味と、生成・破壊のタイミングの違いと、
2つの異なる概念を使うから、難しい

C++ は、すべてのリソースの生成・破壊のタイミングを追っかけるだけでも、大変

ドワンゴ江添の本「C++11/14 コア言語」にも書いてあるけど、

呼ばれる関数を探索する方法に、Andrew Koenig が提案した、実引数依存の名前探索 (ADL)もある

実引数依存の名前探索とは、C++において関数呼出時に与えられた引数の型に依存して、
呼び出す関数を探索 (lookup)する仕組みのことである。
英語ではKoenig lookup、argument dependent lookup (ADL)、argument dependent name lookupなどと呼ばれる

227デフォルトの名無しさん2019/03/06(水) 02:46:55.34ID:Riy5qgFP
>>216
>>212の(1)はクラスのstaticメンバ関数のことを言っているのだか、>>216>>226を見てるとそれを理解していないように思える。
いつも書籍や他人の発言を引用して~~では、という書き方ばかりしているのを見かけるが、自分の中に落とし込んで理解できてないならわざわざ書き込まないでくれ。

228デフォルトの名無しさん2019/03/06(水) 04:34:02.55ID:3uIPjLtJ
>>227
#激同

229デフォルトの名無しさん2019/03/06(水) 06:59:23.47ID:3Q0pfzsC
質問(ネタ振り)に対して見当違いな返答は混乱の元ってのはその通りとして。
読者の立場では、話題が広がってくのは嫌いじゃない。

投稿者の意見として消化しきれてなくても、
参考資料として「誰それの書いたナントカって本では…」と
紹介してくれるのも有難いし。

その上で「あの著者/本は間違いが多い、例えば…」とか、
「記述が古い、新しい規格でもっと便利な機能が追加された」みたいな
追加情報(具体的なもの)が出てくればなお嬉しい。

230デフォルトの名無しさん2019/03/06(水) 09:56:40.41ID:mg6kC0Yg
>>205
SQLの話ですか(苦笑)

231デフォルトの名無しさん2019/03/06(水) 18:18:48.94ID:paKD8ls/
名前なし名前空間を名前あり名前空間の中に作ることができる。便利ちゃあ便利。

namespace hoge {
namespace {
int foobar = 1;
};
};

232デフォルトの名無しさん2019/03/06(水) 21:53:00.33ID:paKD8ls/
64bit環境で文字列ストリームクラスstd::ostringstreamのインスタンスのスタックサイズが、
gccで376バイト, VS2017で232バイトもあるんだがもっと小さくできるんじゃないの?
ちなみに、std::string はgccとVS2017どちらも32バイト。
どうよ?

233はちみつ餃子 ◆8X2XSCHEME 2019/03/06(水) 22:13:52.26ID:7/fqDaVy
>>232
std::ostringstream は文字列の一種というよりも入出力の系統だし、
std::basic_ostream を抱えているのでそんなもんちゃう?

234デフォルトの名無しさん2019/03/06(水) 22:36:11.10ID:cpQrrMgl
継承してるしデータとして保持しておくものでもないしな

235デフォルトの名無しさん2019/03/06(水) 23:24:49.53ID:TjQtzcPT
>>232
質問と関係ないけどスタックサイズって何かわかってないだろ

236デフォルトの名無しさん2019/03/07(木) 01:12:44.42ID:FDOfvyow
このあとスタックがおいしくいただきました

237デフォルトの名無しさん2019/03/07(木) 01:36:59.97ID:7rstSYcJ
ostream, ofstream, ostringstreamのスタックサイズはgccとVS2017でそれぞれ以下のようになる。
gcc: ostream=112, ofstream=264, ostringstream=232
VS2017: ostream=272, ofstream=512 ostringstream=376

どうよ?

2382372019/03/07(木) 01:39:26.14ID:7rstSYcJ
間違えた。gccとVS2017は逆です。
何が言いたいというと、組み込みで気軽に使えるC++を目指すならiostream周りを何とかしないとね、という話。

239デフォルトの名無しさん2019/03/07(木) 01:41:48.62ID:1uoKMGSD
組み込みで気軽に使えるC++を目指してないしどこまで削れるかはベンダーの努力次第

2402372019/03/07(木) 01:45:06.81ID:7rstSYcJ
Cがコンパイル言語であるにもかかわらずprintf()系の構文解析でJITコンパイルする野暮ったさを解決すべく導入されたはずのiostreamがまったく活かされていないね。

241デフォルトの名無しさん2019/03/07(木) 01:45:09.29ID:E2AqWV/D
その程度のスタック消費でヒーヒー言うような組み込み案件でiostream使わんだろ

2422372019/03/07(木) 01:49:48.32ID:7rstSYcJ
>>241
スタック消費でヒーハー言う組み込み案件に進出するのもC++のひとつの課題なのでは有馬温泉

243デフォルトの名無しさん2019/03/07(木) 01:52:03.09ID:1uoKMGSD
組み込み界隈がC++を活用する目標があるのであってC++の目標ではない

244デフォルトの名無しさん2019/03/07(木) 01:56:44.60ID:E2AqWV/D
from_chars
to_chars使えって話だろ

それかfmt

245デフォルトの名無しさん2019/03/07(木) 03:10:47.55ID:V0jGdMU/
class C : public std::function<int(int)>{};

というクラスを定義して、

int f(int i){ return i + 1; }

void main()
{
C c = f;
int i = c(1);
}

みたいな使い方って出来ないのでしょうか?
functional のヘッダを読んでみましたがさっぱりでした

246はちみつ餃子 ◆8X2XSCHEME 2019/03/07(木) 03:21:15.84ID:fFrTWbSf
>>245
やりたいのはこういうこと?

class C : public std::function<int(int)>{
using std::function<int(int)>::function;
};

247はちみつ餃子 ◆8X2XSCHEME 2019/03/07(木) 03:25:38.52ID:fFrTWbSf
めっちゃ雑にやったけど、
実際にはスライシングに気を付けてな。

248デフォルトの名無しさん2019/03/07(木) 03:42:38.23ID:V0jGdMU/
>>246
すいません、
知識不足でそのusingが何を意味しているのか分かりませんが、
std::function<int(int)> と、
class C : public std::function<int(int)>{} を、
外側から同じように使いたいという感じです。

現在は、
class C { std::function<int(int)> F; };
みたいになっており、

C c;
c.F = f;
int i = c.F(1);

と、こんな風に使われています。
std::function<int(int)> を継承させてしまい、.Fを消したい感じです。

249はちみつ餃子 ◆8X2XSCHEME 2019/03/07(木) 04:00:06.05ID:fFrTWbSf
>>248
単純に

class C : public std::function<int(int)>{}

とした場合、当然だけどクラス C にデフォルトで定義されるコンストラクタは
C::C(void); と C::C(const C&); だから、型が int (*)(int) であるような値を受け取る余地はない。

using std::function<int(int)>::function;

を入れると基底クラス std::function<int(int)> のコンストラクタである
std::function<int(int)>::function; をあたかも C のコンストラクタみたいにできる。
そんだけ。
public 継承してれば std::function<int(int)> の他のメンバはそのまま C のメンバとして
見えるからおおよそ期待する挙動になると思う。

250デフォルトの名無しさん2019/03/07(木) 04:06:09.21ID:V0jGdMU/
>>249
なるほど、そういう意味だったのですね。
ちょっと試してみます。ありがとうございます。

251デフォルトの名無しさん2019/03/07(木) 08:20:27.58ID:Yz7Qf/Kl
>>237
2ファイル同時に編集なんてしたらあっという間に食い潰しそうね

252デフォルトの名無しさん2019/03/08(金) 01:15:31.98ID:jsJl1WSX
テンプレートで何とかなりませんかね。

253はちみつ餃子 ◆8X2XSCHEME 2019/03/08(金) 02:12:42.20ID:7lrcs+kH
>>252
何が?

2542372019/03/08(金) 06:55:44.25ID:orP5LHkV
>>244 が提示してくれた from_chars, to_chars をgccに導入するにはどうしたらいい?
WSLのubuntuを使ってるんだけど規定でfrom_chars, to_charsの定義されたヘッダーファイルが入ってないっぽい。

255デフォルトの名無しさん2019/03/08(金) 08:26:54.11ID:ZyNdKvhR
>>254
たしか8.0でまだ整数しか実装されてない

256デフォルトの名無しさん2019/03/09(土) 11:07:13.09ID:jx9iLAiD
C++テンプレートテクニック第三版っていつ出るんですかね?

257デフォルトの名無しさん2019/03/10(日) 00:54:12.40ID:3tC9wBDx
待っていても何も始まらない!
君が書くんだよ!

258デフォルトの名無しさん2019/03/10(日) 17:07:48.90ID:yzd/Af8M
テンプレート引数がクラスでpush_back()メンバを持っているというようなことを検査することはできますかね?

259デフォルトの名無しさん2019/03/10(日) 17:10:17.73ID:2Qm7LFrM
std::is_classとdetection idiomで可能かと

260デフォルトの名無しさん2019/03/10(日) 17:15:14.74ID:yzd/Af8M
でてくしょんいでおむってどの本見ればわかりますかね?

261デフォルトの名無しさん2019/03/10(日) 17:16:33.87ID:yzd/Af8M
decltype使えばいいのかな。

262デフォルトの名無しさん2019/03/10(日) 17:18:14.94ID:2Qm7LFrM
載ってる本あるのかなあ

どうやるのかだけなら、ここのサンプルコードを真似すればいいと思う
https://cpprefjp.github.io/reference/type_traits/void_t.html

263デフォルトの名無しさん2019/03/10(日) 17:21:49.62ID:yzd/Af8M
ありがとう。
ちょっと読んでみます。

264デフォルトの名無しさん2019/03/10(日) 22:01:07.26ID:yzd/Af8M
std::byteの使い方がよくわからない。
暗黙の何とかを避けるのに使うんだろか。

265デフォルトの名無しさん2019/03/10(日) 22:11:27.82ID:2Qm7LFrM
単純にバイトを表現する型というのが必要となった
char8_tと同じようなもん

266デフォルトの名無しさん2019/03/10(日) 22:30:00.78ID:yzd/Af8M
ソケットやファイルの入出力に使うって事かな?

267デフォルトの名無しさん2019/03/10(日) 22:49:36.48ID:8hqMg5Px
1バイトサイズの整数のつもりでcharを使ったらstreamで困ることがあったりしたしね。

268デフォルトの名無しさん2019/03/10(日) 23:15:04.53ID:yzd/Af8M
enum class byte : unsigned char { };
ってなってる。

269デフォルトの名無しさん2019/03/10(日) 23:21:10.96ID:6gF9+EwK
そのベースの型は実装依存
型を取りだして使えってことなんだろうか

270デフォルトの名無しさん2019/03/10(日) 23:21:22.34ID:ketqiw2j
なんでenum classなんだ?
typedefと何が違うの?

271デフォルトの名無しさん2019/03/10(日) 23:31:19.81ID:2Qm7LFrM
暗黙の型変換ができない

272デフォルトの名無しさん2019/03/10(日) 23:54:49.98ID:vvRzWHgY
こういうの行き過ぎた型安全に思えるけどね

273デフォルトの名無しさん2019/03/10(日) 23:57:35.21ID:6gF9+EwK
でも過去にそれで何かあったんでしょ
使うかどうかは任意だしある分には困らない

274デフォルトの名無しさん2019/03/10(日) 23:57:38.91ID:ketqiw2j
なるほど

275デフォルトの名無しさん2019/03/11(月) 00:01:39.15ID:4nU22VRt
is_enum_vがtrueになるとか違和感しかない

276デフォルトの名無しさん2019/03/11(月) 05:30:01.20ID:pTTv+VC9
>>265
なんで
uchar8_t
uchar16_t
uchar32_t
にしないんだろな

277デフォルトの名無しさん2019/03/11(月) 05:58:05.15ID:mFqdzmI2
既存のライブラリと衝突しまくるだろそれ

278デフォルトの名無しさん2019/03/11(月) 11:02:11.57ID:9rO3q8tQ
>>273
ひとりで全部作ってんのか?
誰か使い始めたらそれに巻き込まれるんだよ

279デフォルトの名無しさん2019/03/11(月) 13:49:05.84ID:kWR5MawD
WPFってどうなの

280デフォルトの名無しさん2019/03/11(月) 19:42:26.86ID:OenRxSRY

281デフォルトの名無しさん2019/03/11(月) 22:05:24.43ID:XA5PtgcF
getoptの標準化マダーチンチン(AA略

282デフォルトの名無しさん2019/03/12(火) 07:17:28.89ID:dEFL2K0T
void foo(std::function<void()> &&f){}

int main(){
auto lamda = [](){};
foo(lamda);
}
なぜコンパイルできるの?

283デフォルトの名無しさん2019/03/12(火) 07:23:08.39ID:FSVt1tPQ
>>281
オプションの渡し方がそもそも揺れてる

284デフォルトの名無しさん2019/03/12(火) 07:25:00.12ID:FSVt1tPQ
>>282
int main()
{
return main();
}
なぜコンパイルできるの?

285デフォルトの名無しさん2019/03/12(火) 11:46:00.90ID:6Uu2j9Xc
int main(std::function<void()> &&f){
return main([](){});
}

286デフォルトの名無しさん2019/03/12(火) 20:22:26.93ID:dEFL2K0T
すいません、低レベルのかたたちばかりでした。
聞くところ間違えました

287デフォルトの名無しさん2019/03/12(火) 20:30:56.16ID:Nd0ou12Q
なぜc++ main return省略でググらないのか

288デフォルトの名無しさん2019/03/12(火) 20:43:58.42ID:X3QnQcuN
getoptを標準化してしまうとハイフンで始まる変態ファイル名が鬼門になってしまうかな。

289デフォルトの名無しさん2019/03/12(火) 20:46:35.39ID:Zu3OGTTs
is_iterator、is_containerメタ関数はどうやったら作れるんでしょうね?

290デフォルトの名無しさん2019/03/12(火) 20:54:07.45ID:JuWddRAo
SFINAEでググれ、でいいんだろうか

291デフォルトの名無しさん2019/03/12(火) 20:55:53.60ID:Zu3OGTTs
スフィ姉は知っているんですが。
そのあとが。

292デフォルトの名無しさん2019/03/12(火) 21:00:20.04ID:cgm/opRe
iterator_traitsに通してメンバ型が得られるか確認する?
*とか++とかの操作について確認する?
containerはbeginとendでイテレータ取れるか確認する?

293デフォルトの名無しさん2019/03/12(火) 21:34:26.86ID:Zu3OGTTs
template <typename T>
using is_iterator = std::is_class<typename std::iterator_traits<T>::iterator_category>;
これは使えますかね?

294デフォルトの名無しさん2019/03/12(火) 21:58:48.29ID:l3wdXFC4
ぐぐればstack overflowがひっかかる

295デフォルトの名無しさん2019/03/12(火) 22:01:23.70ID:JuWddRAo
使えますかねって・・自分で試せるだろ

296デフォルトの名無しさん2019/03/12(火) 22:12:53.32ID:6dDI1fa3
マウントしててワロス

297デフォルトの名無しさん2019/03/12(火) 22:34:48.05ID:3laDxwEs
マウントは取りたいけど教えるのはめんどくさい

298デフォルトの名無しさん2019/03/12(火) 22:48:31.61ID:YKaKEG7g
結局はそれで何がしたいかによるんじゃね
標準のコンテナやそのイテレータで型分岐したいなら十分だけど、カスタム実装されたユーザー定義のイテレータがそのように実装されているかは分からんし
まあiterator_traitsの特殊化も追加で書くようにすれば使えるか

299デフォルトの名無しさん2019/03/12(火) 23:06:42.78ID:cgm/opRe
C++20からは一応イテレータはコンセプトがあるなあ
コンテナは知らん

300デフォルトの名無しさん2019/03/12(火) 23:12:51.59ID:YKaKEG7g
>>293
はダメな気がするな
template<typename T,typename=void>
struct is_iterator:std::false_type{};

template<typename T>
struct is_iterator<T,std::enable_if_v<std::is_class_v<typename std::iterator_traits<T>::iterator_category>>>:std::true_type{};

301デフォルトの名無しさん2019/03/12(火) 23:14:38.07ID:JuWddRAo
>>296,297
アホか、何がマウントだボケ
自分で試しもせずに2chに丸投げとか普通にダメだろ

>>298
iterator_traitsに与える型の要件(だけでいいかどうかはさておき)を満たすなら特殊化なんかいらんでしょ
リファレンス見る限り、iterator_traitsの特殊化はポインタのためだけにあると思う

302デフォルトの名無しさん2019/03/12(火) 23:27:20.69ID:Zu3OGTTs
>>300
どの本もそういう書き方になってるんだけど、その理由がわからない。
>>293は呼び出し方によっていろいろ問題が起きるんだけど、その理由がわからなさすぎる。
その辺がスッキリわかる本はないですかね。

303デフォルトの名無しさん2019/03/12(火) 23:39:14.10ID:YKaKEG7g
本は知らん
SFINAEが使えるのは宣言部分
そこで置換失敗すると宣言そのものが無かったことになる

304デフォルトの名無しさん2019/03/13(水) 12:04:15.67ID:lxBl+sTZ
>>297
マウントが取りたいだけで教える知識がないだけやねんw

305デフォルトの名無しさん2019/03/13(水) 12:37:00.35ID:mh4jyrHE
そう
分からない質問には自分で試せ
これがC++使ってる奴の特徴

306デフォルトの名無しさん2019/03/13(水) 12:47:27.60ID:QLyGxm6u
>>304,>>305
そう思うなら自分が教えてやれば?

307デフォルトの名無しさん2019/03/13(水) 20:50:37.56ID:u/DrurAb
規約はあるけど「実装が規約」をやっちゃってる部分が多くて、
しかもコンパイラのバージョン依存がひどいってのがc++だからな。
規約は語れても実際にどう動作するか語れない輩も多いだろうね。

308デフォルトの名無しさん2019/03/13(水) 21:07:13.50ID:QLyGxm6u
そういう構図じゃないと思うよ

309デフォルトの名無しさん2019/03/13(水) 21:25:53.81ID:Z/ka/TFK
どなたか iostreamの存在価値について熱く語ってくれないか。

310デフォルトの名無しさん2019/03/13(水) 21:34:23.99ID:VRJ3bLEu
いやだ

311はちみつ餃子 ◆8X2XSCHEME 2019/03/13(水) 21:38:23.77ID:xQTh8hgU

312デフォルトの名無しさん2019/03/13(水) 21:55:23.80ID:780qHyAl
VS2019って4月2日に出るのかな?

313デフォルトの名無しさん2019/03/13(水) 22:19:08.88ID:DKlmxwmb
米国時間4/2にローンチイベント行ってるから日本だと3日かな

314デフォルトの名無しさん2019/03/13(水) 22:44:27.53ID:mh4jyrHE
>>306
だから分からないのにマウント取るのやめたら?

315290=3012019/03/13(水) 23:05:00.60ID:QLyGxm6u
>>314
バカだろお前

ID:Zu3OGTTsはSFINAEでググれと言われてSFINAEは知ってると言ったろ
その上で>>302の書き込み見ておかしいと思わんのか?
それに>>300で答えは出てるだろうが

> だから分からないのにマウント取るのやめたら?
お前のことだよ

316デフォルトの名無しさん2019/03/14(木) 18:41:51.50ID:qKfDR5xc
>>313
待ちどおしいね。

317デフォルトの名無しさん2019/03/14(木) 20:57:09.31ID:HZIDFMYl
このスレの住人は、新しいVisual Studioでどんなことに期待してるの?

318デフォルトの名無しさん2019/03/14(木) 20:58:50.91ID:30TndOaO
>>317
マウントされないこと

319デフォルトの名無しさん2019/03/14(木) 21:00:03.79ID:O0o087YX
仕様通りに動いてくれりゃそれでいいわ。

320デフォルトの名無しさん2019/03/14(木) 21:20:35.00ID:nuZulfE1
C++20の早期対応

321デフォルトの名無しさん2019/03/14(木) 21:25:28.09ID:xC4JJLNw
clang対応

322デフォルトの名無しさん2019/03/14(木) 21:29:12.31ID:vJRyyCPl
C#での使い勝手向上

323デフォルトの名無しさん2019/03/14(木) 21:36:15.68ID:r+Z4K3kn
フロントエンドをVSCodeにしてくれ

324デフォルトの名無しさん2019/03/14(木) 21:45:44.62ID:rlbQlqp5
メモリ喰わずに軽くなって…

325デフォルトの名無しさん2019/03/14(木) 22:54:08.60ID:qKfDR5xc
何個まで願い事聞いてくれるんだろ。

326デフォルトの名無しさん2019/03/14(木) 23:13:56.40ID:3EvgP48J
>>317
Expressを出してくれ

327 ◆QZaw55cn4c 2019/03/14(木) 23:19:01.48ID:NTAm4EVS
>>317
MFC…

328デフォルトの名無しさん2019/03/15(金) 06:01:20.22ID:qA/WFgyI
Windows formsのC++へ移植してmfcを完全に抹消してくれ

329デフォルトの名無しさん2019/03/15(金) 06:06:32.23ID:nvk7uoI+
>>317
オープンソース化

330デフォルトの名無しさん2019/03/15(金) 08:11:25.59ID:2KXTO6ja
本当によくかけとるわ。
この人たちで標準委員やったほうがいいんじゃないかと思う。
https://ttsuki.github.io/styleguide/cppguide.ja.html

331デフォルトの名無しさん2019/03/15(金) 08:17:17.58ID:qA/WFgyI
ゴミ

332デフォルトの名無しさん2019/03/15(金) 08:54:09.40ID:fLDhqMRG
けっこう癖が強いよね。例外やpimpl否定したり。

333デフォルトの名無しさん2019/03/15(金) 08:57:01.66ID:LNWMUSed
危険思想だなw
ヤバすぎてヘドが出るw

334デフォルトの名無しさん2019/03/15(金) 09:06:08.50ID:Uugk/tx2
まあでかいプロジェクトはこんなもんだろう。
例外は実際よくないと思うわ。

335デフォルトの名無しさん2019/03/15(金) 09:48:31.74ID:Af9j6Fb3
pimpl否定ってあったっけ?
うちのプロジェクトも原則例外禁止
むかしは一律禁止だったけど

336デフォルトの名無しさん2019/03/15(金) 11:11:39.02ID:t9j+keaC
>>330
古くさいって言われてなかった?

337デフォルトの名無しさん2019/03/15(金) 11:55:34.06ID:E1i6RSEf
googleのスタイルガイドは和訳が古くて英語版しか読まなくなって何年にもなるが追いついてるのか?

338デフォルトの名無しさん2019/03/15(金) 12:05:48.86ID:PdhXv0FK
例外無しとか小規模の組み込み以外で意味あるのかね?

339デフォルトの名無しさん2019/03/15(金) 12:37:29.90ID:hyh/CKnF
例外使った時点で疎結合もへったくれもなくなると思うわ。
能力的に幅のあるプロジェクトで使うには難しいよ。

340デフォルトの名無しさん2019/03/15(金) 12:56:39.19ID:ng8+eCdq
>>339
> 能力的に幅のあるプロジェクトで使うには難しいよ。
これには同意するけど

> 例外使った時点で疎結合もへったくれもなくなると思うわ。
意味不明
例外以外の方法使っても似たようなことをする羽目になるだけ
なら意図が明確な例外のほうがマシ

341デフォルトの名無しさん2019/03/15(金) 14:16:54.97ID:9vyMIRpZ
戻り値なら呼び出し元と呼び出し先の間の結合だけだが、例外はよりコールスタックの根本の方へ結合が及ぶことがある
フレームワークのように、例外を使ってあえて中間をすっ飛ばしてコールスタックの上と下を結合させるケースもあるけどね

342デフォルトの名無しさん2019/03/15(金) 14:19:06.67ID:9vyMIRpZ
念の為補足するけど、Javaの検査例外みたいに常に直上での例外処理を強制するスタイルは戻り値と事実上等価だからここでは論外ね

343デフォルトの名無しさん2019/03/15(金) 14:31:16.21ID:yhzlHwio
つまり標準ライブラリのほとんどを使うなと言うこと?

344デフォルトの名無しさん2019/03/15(金) 14:37:11.61ID:yhzlHwio
そもそも例外使った方が疎結合になるだろうに

345はちみつ餃子 ◆8X2XSCHEME 2019/03/15(金) 16:00:22.80ID:q2a9nFaz
他の言語や過去の (例外をあまり想定していない) システムと接続することもあるし、
そういう全体のエコシステムを考えると例外がかえって面倒ということはあると思う。

C++ だけの (新規の) プロジェクトなら全く例外を使わないというのは極端なスタイルだと思うが。

346デフォルトの名無しさん2019/03/15(金) 16:32:10.73ID:SB/vZ5dO
例外があると、それが理由で上下の階層が深いシステムになりがちだと思うよ。
節度があれば正直なんでもいいが、言語的にクソ設計を許さないのならその方がありがたい。

347デフォルトの名無しさん2019/03/15(金) 16:54:37.47ID:oq4eakC3
c++じゃないところからc++のコード呼び出すなら例外外に出さないようにtry catchでラップするだけだし
逆で途中のコードが例外発生したために解放処理が飛ばされるってなら、raiiクラス化しろって話にならね?

通信経路でやり取りするなら相手が例外処理で実装されていようがされていなかろうがなんの関係もないし

348デフォルトの名無しさん2019/03/15(金) 17:57:31.19ID:BCAT3j7k
>>347
要は、メッセージングが至高ってことだな

349デフォルトの名無しさん2019/03/15(金) 18:59:44.81ID:0PFucV7H
つまりJavaが至高。

350デフォルトの名無しさん2019/03/15(金) 20:05:35.24ID:LNWMUSed
例外だしてどーすんの
ミッションクリティカルで直せるの?
意味ないじゃん

例外使いたきゃ専用言語使えばいい

351デフォルトの名無しさん2019/03/15(金) 20:09:02.33ID:qA/WFgyI
プログラミング言語の専門家に聞いて

352デフォルトの名無しさん2019/03/15(金) 20:37:29.42ID:ng8+eCdq
>>345
> 他の言語や過去の (例外をあまり想定していない) システムと接続することもあるし、
> そういう全体のエコシステムを考えると例外がかえって面倒ということはあると思う。
もうそういう極端な例でしか反論できないことはわかったよw

353デフォルトの名無しさん2019/03/15(金) 20:59:33.43ID:UMZlK7qa
江添勝てなかったか・・

354デフォルトの名無しさん2019/03/15(金) 21:09:50.31ID:2KXTO6ja
>>336
微妙に修正はされてる。
てかクソなc++本読むよりかよっぽど各機能の利点、問題点が簡潔に書けてると思うが。

355デフォルトの名無しさん2019/03/15(金) 21:13:26.14ID:BCAT3j7k
まだひっくり返る可能性はあると思うね

356デフォルトの名無しさん2019/03/15(金) 21:50:38.17ID:fLDhqMRG
>>335
pimplに限った話じゃないけど、前方宣言とそれによる定義の隠蔽が推奨されていない。

357デフォルトの名無しさん2019/03/15(金) 22:07:25.54ID:qA/WFgyI
Googleはな

358デフォルトの名無しさん2019/03/15(金) 22:38:20.91ID:4qwaELjT
>>338
大規模なところでも例外禁止あるから
mozillaもそうでしょ
AAAなゲームスタジオでも多い
性能引き出したかったらそういう厳しい制約がいるんだよ

359はちみつ餃子 ◆8X2XSCHEME 2019/03/15(金) 22:40:04.57ID:q2a9nFaz
>>352
グーグルのガイドラインが極端なのは当たり前だ。
超巨大なエコシステムで成り立ってるわけだし。
例外を使わない派がしばしばグーグルのガイドラインを持ち出すんだけど、
そのガイドラインにすら、最初から設計してたら違ったかもしれないという
文言があるので、 C++ を使った設計理念一般としての強い根拠にならんのよな。

私としては、一般的な C++ での設計の参考にするべきは標準ライブラリだと思う。
標準ライブラリはその言語の思想をよりはっきりと体現するものだし、
それに沿って作ったものは連携しやすくもある。
(昔からあるライブラリの一部は変な個所もあるが。)

>>346
C++ はクソ設計でもどうにか形には出来るっていう方向性だと思う。
まともな設計ならそれが一番良いにきまってるけど、
それが期待できない場合が大半だという現実がある。

360KAC2019/03/15(金) 22:48:06.41ID:rqfh3/aR
例外禁止とかの環境って、
newの失敗とか毎回チェックするの?

361デフォルトの名無しさん2019/03/15(金) 22:54:50.21ID:2KXTO6ja
規約を守る守らんってことにしか目がいかんのな。
やっぱ馬鹿ばっかだわ。

362デフォルトの名無しさん2019/03/15(金) 22:54:57.62ID:12ZNVc6t
>>360
newの失敗のチェックって何するの?
null返ったかどうかのチェック?

363デフォルトの名無しさん2019/03/15(金) 23:03:42.33ID:L+hp7qbL
例外処理機構が無かったら、メモリ確保に失敗しても、
そこから過去のロールバックができない

自己流で、long jump するぐらいなら、例外処理の方がよい

364デフォルトの名無しさん2019/03/15(金) 23:09:45.82ID:12ZNVc6t
>>363
いや、失敗したら駄目だろ。失敗しないのが正しい。
プログラミング言語如きが考慮すべき問題ではない。

365デフォルトの名無しさん2019/03/15(金) 23:18:26.60ID:fLDhqMRG
>>363
そのロールバックってのはCとmallocじゃできないようなものなのかな。

366デフォルトの名無しさん2019/03/15(金) 23:25:12.09ID:qA/WFgyI
new失敗とかコンピュータが壊れてるからチェックしても意味ない

367デフォルトの名無しさん2019/03/15(金) 23:27:22.88ID:qA/WFgyI
当然特殊なケースは除くからな
一応言っておかないと組み込みガー君とか宇宙線でエラーガー君が飛んでくるからな

368デフォルトの名無しさん2019/03/15(金) 23:37:27.23ID:WyRx2/31
>>359
>私としては、一般的な C++ での設計の参考にするべきは標準ライブラリだと思う。
設計ではなく使い方の参考に、という意味では賛成だけど
テンプレートバリバリの設計はあまりにもコストがかかるというのを知っといて欲しい
ああいうのは湯水のごとく時間をかけられるからやれるんであって

369デフォルトの名無しさん2019/03/15(金) 23:38:17.19ID:iTKvW/zw
きみらはあれか、元記事とか全然読まずにコメントするクチか
リンク元には「例外は全く新規のプロジェクトならデメリットよりメリットが優先するので使って良い。
ただ既存のグーグルプロジェクトは元々例外を想定していないのでこれに例外のパターンを導入する
とリスクのほうが多いのでやめるべき。ただし Windows については例外がある(駄洒落ではない)」
と書いてあるんだがちゃんと読んだか。ちなみに駄洒落ではない、は俺が追加したのでなく元の文にある

370はちみつ餃子 ◆8X2XSCHEME 2019/03/15(金) 23:45:56.39ID:q2a9nFaz
>>368
そんな極端な意味では言ってない。
手間が合理的な範囲内で「参考」には出来るよって程度の話。

371デフォルトの名無しさん2019/03/15(金) 23:48:42.07ID:5dVML2o5
エラーにはリカバリーすべきものとそうでないものがある
あとそのエラーが起こる頻度の違い

リカバリーしないものはその時点で即死するのが正しい
リカバリーするものでかつエラーが普通に起こるものはエラーコードで処理するのが正しい

となると残りのリカバリーするものでかつたまにエラーがおこるようなのが例外にする価値があるエラー
あと例外発生時のunwindが重いからそれでも問題にならないもの
となるとあんまり使えるとこないんだよね
そういうわけで最近例外なしの言語がでてきてる流れなんだろう

372KAC2019/03/15(金) 23:51:56.30ID:rqfh3/aR
>>366
コンピュータが壊れない限りメモリ確保が失敗しない環境って凄いな。。。

373デフォルトの名無しさん2019/03/15(金) 23:54:45.92ID:qA/WFgyI
出、出~www
一名いらっしゃいましたwww

374デフォルトの名無しさん2019/03/16(土) 00:07:16.61ID:HR8X4dmV
例外ってcatchしなきゃ投げたその場で落ちてくれるのがこの上なく便利だろう
問題残したまま実行続けて別の関係ないところで落ちるのが最悪
runtimeで落ちて困るような用途でも、
ソースコードあるやつなら静的解析で例外発生箇所網羅出来そうなものだが
網羅できればリソースリークする危険な場所わかるし、対処も出来るのにね

逆にソースコード無いライブラリやダイナミックリンクする奴は、例外含めて外部仕様としてかっちり決まっているべきものじゃね

375デフォルトの名無しさん2019/03/16(土) 00:11:00.29ID:oXtW8C30
>>374
> 例外ってcatchしなきゃ投げたその場で落ちてくれるのがこの上なく便利だろう

その場じゃなくstackが全部巻き戻ってからでしょ

376デフォルトの名無しさん2019/03/16(土) 00:15:00.35ID:U94TV9G4
>逆にソースコード無いライブラリやダイナミックリンクする奴は、例外含めて外部仕様としてかっちり決まっているべきものじゃね
んなもんコンテナで隔離する以外使い道ねーわ。

377デフォルトの名無しさん2019/03/16(土) 00:18:04.69ID:HR8X4dmV
>>376
仕様ってのは例外外に出すか出さないか、
出すなら出し得る例外の種類のリスト
出さないならエラー毎にエラーコードやら返し方やら決めるって話

378デフォルトの名無しさん2019/03/16(土) 00:23:45.45ID:oXtW8C30
そうなんだよね
例外の仕組みわかってないやつは平気で動的ライブラリの界面に
例外使ったりするんだよね
あと標準ライブラリ丸出しにするやつもしかり
それ誰も互換性保証してねーから

379デフォルトの名無しさん2019/03/16(土) 00:24:47.11ID:UXq90ll9
>>376
核戦争を生き抜くには。

380デフォルトの名無しさん2019/03/16(土) 00:24:57.90ID:HR8X4dmV
まあ標準ライブラリの例外の使い方のおかしさも気になるが

std::stoiで例外投げるバージョンしか無い上に何故かlogic_error扱いのinvalid_argumentやout_of_range投げる

いや、これ出る状況普通runtime_errorだよね

381デフォルトの名無しさん2019/03/16(土) 00:29:24.58ID:cz3ooqCT
>例外含めて外部仕様としてかっちり決まっているべきものじゃね

そこを言語の機構で保証できない、動的言語みたいななあなあ状態なのが残念なところだね。
それをきっちり保証しようとした検査例外はそれはそれで扱いづらいところがあるし。

382デフォルトの名無しさん2019/03/16(土) 00:29:25.98ID:U4afEAjj
>>371
リカバリーするかしないか、頻度が高いか低いか、どちらもプログラム(特にライブラリ)を書いてる時点では
言い切れないから困るんですよねぇ。

383デフォルトの名無しさん2019/03/16(土) 00:36:35.46ID:UXq90ll9
そこでプロパティ型なんですよ。

384デフォルトの名無しさん2019/03/16(土) 06:11:19.71ID:7Yfqh0Zg
>>372
無限にnewできる理想郷に住んでるんだろw
相手しなくていいよ

385デフォルトの名無しさん2019/03/16(土) 06:46:32.47ID:TLiwIm0H
復旧不可能な例外もあれば、些細な例外もあるよね。
戻り値チェックで十分でしょと思うようなところで例外を投げるJava/C#みたいな流儀だと、いちいちキャッチするのが面倒。

386デフォルトの名無しさん2019/03/16(土) 06:52:39.99ID:TLiwIm0H
Cでは戻り値で判定できたはずのエラー種別が例外クラスで細かく分類されてしまったことで、
エラー処理で書かなければならないコード量が増えて例外のキャッチ漏れまで起きる危険性が生み出された。

387デフォルトの名無しさん2019/03/16(土) 07:31:06.00ID:5/K53Ire
その程度の知識で語ってる奴は戻り値方式でも処理漏れするだろw

388デフォルトの名無しさん2019/03/16(土) 07:35:15.72ID:/kg6KhNe
例外の嫌なところは
処理できない案件を低水準側に丸投げするところなんだよな…

ユニックスのプロセスの死亡順序もそうだが、
計算機業界は常識が逆転してゐる…

389デフォルトの名無しさん2019/03/16(土) 07:38:02.24ID:/kg6KhNe
というわけでおそらくアプリの設計シチュの99%ぐらいは
 例外発生=プログラムの死亡
、とみなして良いはず
ここまで割り切るならはじめて例外はお手軽で便利と言える

390デフォルトの名無しさん2019/03/16(土) 12:28:02.50ID:UXq90ll9
例外をキャッチしたらプランBに移行するのが、真の戦闘のプロ。

391デフォルトの名無しさん2019/03/16(土) 12:49:25.73ID:V15J7n/y
例外なんてグローバル変数みたいなもの。
だから低レイヤで使うのは仕方ない

392デフォルトの名無しさん2019/03/16(土) 12:50:47.84ID:jRc2/nMs
std::cin >> a;

は入力を延々と待っている。
これ別スレッドから止めさせる方法はありますか?

393デフォルトの名無しさん2019/03/16(土) 13:10:50.41ID:V15J7n/y
stdin閉じるとどうなる?

394デフォルトの名無しさん2019/03/16(土) 15:40:22.15ID:/kg6KhNe
(組み込みはともかくアプリの場合は呼び出し元の方が高水準レイヤにあたるのではないかというツッコミが来ると思ったが
 来なかったので黙っていよう…

395デフォルトの名無しさん2019/03/16(土) 17:27:11.59ID:/kg6KhNe
>>390
プランBったって、プログラム起動時にあらかじめmallocしておいた何キロバイトかをfreeして
ダイアログを出して[OK]で終了、ぐらいなんじゃ…

396デフォルトの名無しさん2019/03/16(土) 19:15:22.19ID:zOgp3uDK
>>388
いや、プログラムでは、呼び出し側の方が高レベル、呼び出された側が低レベル
なので、呼び出された側が例外を投げた場合、高レベル側の関数で処理できる
ので適切。

397デフォルトの名無しさん2019/03/16(土) 20:00:47.57ID:TLiwIm0H
多くの例外の基底クラスになる exception にエラーコード整数値を出力する関数があればもう少しC寄りのエラー処理ができたと思うのだが。
既存のexceptionメンバ関数 const char *what() だけでは扱いが困難。

398デフォルトの名無しさん2019/03/16(土) 20:14:28.85ID:1JRLHvWf
std:::to_string();

399デフォルトの名無しさん2019/03/16(土) 20:14:39.74ID:w9XKSp7E
>>397
必要ならそういうクラスを定義するだけだろ

400デフォルトの名無しさん2019/03/16(土) 20:15:00.26ID:1JRLHvWf
sage

401デフォルトの名無しさん2019/03/16(土) 20:39:18.42ID:cz3ooqCT
ユーザーにエラー原因を示すだけならconst char*でも大して問題ないし、
catchした側でエラーコードによって何かするというのはたいていアンチパターン。

402デフォルトの名無しさん2019/03/16(土) 22:15:57.75ID:HR8X4dmV
文字をwchar_tで処理しているプログラムだと例外文字列作るのが面倒
まあ詳細な情報出さずに固定文字列にしてしまえばいいんだけど

403デフォルトの名無しさん2019/03/17(日) 00:42:25.28ID:OzxlZzXh
templateの使い道がいまいちわからん
STLやboostみたいなものは非常に有益だが

同僚がドヤ顔でコンテナを作ったって自慢してたが、
stlのコンテナを使わずにそいつのコンテナを使う理由が無い

404はちみつ餃子 ◆8X2XSCHEME 2019/03/17(日) 00:46:12.21ID:aA4z/LNt
>>403
困ってないなら使わなくてもいいと思うよ。
困る場面がある人のための機能。

405デフォルトの名無しさん2019/03/17(日) 00:48:31.10ID:UT79+Nc/
同じコードをコピペしなくて済むから、作業量も減るし、保守も楽になる。

406デフォルトの名無しさん2019/03/17(日) 00:56:16.88ID:NYZE0cFr
>>403
せやな
ただそれは作るものの需要の有無の問題だ

407はちみつ餃子 ◆8X2XSCHEME 2019/03/17(日) 00:58:29.44ID:aA4z/LNt
重複があることを事前に発見するのは難しい場合もあるから、
同じことを何度も書いている気がするなと思ったら
どうにかしてまとめることを検討するという程度でもいいかもね。

同じことをしないようにする、いわゆる DRY 原則というものはあるけど、
一方で、それを意識するあまりしなくてよい抽象化層を設けるのも馬鹿らしいということで、
必要になってからやるという YAGNI という考え方もある。

こういうのは程度問題なので、なんでもほどほどにね。

408デフォルトの名無しさん2019/03/17(日) 01:15:02.15ID:7ciqStwp
テンプレート(のパラメータにおける型の自動推論)と
関数のオーバーロードの合わせ技によるコードのまとめ力は異常

409デフォルトの名無しさん2019/03/17(日) 01:37:37.76ID:7ciqStwp
例えばストレージからintを読み込む関数、doubleを読み込む関数、unsigned charを読み込む関数を
同じ関数名と同じ引数の並び(例えばbool read(FILE* fp, <目的とする型>& x とか)ででオーバーロードしておけば、
template<class T1, class T2, class T3>
bool read_x3(FILE* fp, T1& x1, T2& x2, T3& x3) {
 if (!read(fp, x1)) { return false; }
 if (!read(fp, x2)) { return false; }
 if (!read(fp, x3)) { return false; }
 return true;
}
でもって、オーバーロードを実装した任意の型3個の組み合わせについて読込関数が実体化される
(実装されていない型に行き当たったらエラーになるからワカル
これはn個の関数と1個のテンプレートを書いただけで、n^3パターンもののユースケースに網羅的に対応できたことになるからスゲー強力

※ 個人の感想です

410デフォルトの名無しさん2019/03/17(日) 01:43:06.21ID:Jta37aFk
>>409
そこはfpも抽象化でしょ。
intハンドル、FILE*、iostream、HANDLE などなど派生関係のないものをtemplate化できる。

411デフォルトの名無しさん2019/03/17(日) 01:44:01.66ID:7ciqStwp
なおこのテクをつきつめれば、テンプレートの特殊化というのは普通の意味では要らなくなるキモス、
むしろ特定の型の組み合わせについて自動展開を禁止したいときに使う
(例えば可変長データのread関数を、データの先頭にデータの個数を書く約束で作ったとして、
 個数を読み込む関数を整数のread(fp, x)に限定したい場合、個数の型をdoubleにした特殊化テンプレートを書いてわざとエラーにするとか、

412デフォルトの名無しさん2019/03/17(日) 01:47:31.21ID:7ciqStwp
>>410
FILE* fpは十分汎用的でしかも最大限高速なので他への代替の必要性はほとんど考えられないし、
サンプルコードでむやみに凝っても仕方が無い

※ 個人の感想です

413デフォルトの名無しさん2019/03/17(日) 01:58:32.33ID:ADoP4x2u
テンプレートはヘッダに全部書かなきゃいかんのなんとかならんか?

414デフォルトの名無しさん2019/03/17(日) 02:06:35.73ID:NYZE0cFr
原理上どうにもならない

415デフォルトの名無しさん2019/03/17(日) 02:10:16.54ID:7ciqStwp
テンプレートの分割コンパイルは一度実装されたが1年がかりの複雑な仕事になったし
あまりに複雑すぎて普及に至っていないというようなことがプログラミング言語C++で読んだ記憶、

しかし、importキーワードがC++の予約語であるうちはまだ希望がある

416デフォルトの名無しさん2019/03/17(日) 02:10:32.44ID:Jta37aFk
FILE* fp は 標準のfgetc()の実行速度が遅くて残念。バッファリングしている甲斐がない。

417デフォルトの名無しさん2019/03/17(日) 02:26:35.34ID:UT79+Nc/
使いたい型決まっているなら別にできるだろ?
ヘッダで宣言だけ書いて、ソースで定義と明示的インスタンス化すればいいだけ

418デフォルトの名無しさん2019/03/17(日) 02:34:45.67ID:61bjcvzF
3大C++無限ループ話題

テンプレート実装の分割記述
getsetの実装

あと一つは?

419デフォルトの名無しさん2019/03/17(日) 03:18:11.89ID:4v9XGq5+
多重ループの抜け方

420デフォルトの名無しさん2019/03/17(日) 03:19:37.14ID:XP0TJBl2
STLにツリーがない理由を教えてください。

421デフォルトの名無しさん2019/03/17(日) 04:14:30.81ID:OzxlZzXh
あるクラスが非トリビアルなコピーコンストラクタをもっていることを検出したい
そのクラスのメンバの型が非トリビアルなコピーコンストラクタを持っていたとしても。

422デフォルトの名無しさん2019/03/17(日) 06:02:45.37ID:NYZE0cFr
>>418
メモリが云々

423デフォルトの名無しさん2019/03/17(日) 06:48:43.74ID:WBoQCy0z
>>413
テンプレートを抜き出してヘッダーファイルを生成するプリプリプロセッサを作ればいい

424デフォルトの名無しさん2019/03/17(日) 08:23:20.60ID:h3PfG3Ac
>>421
トリビアルコピー出来ないことを検出したいならis_trivially_copyableで充分だけどそれ以上のことがしたいの?

425デフォルトの名無しさん2019/03/17(日) 08:28:29.93ID:qh1L90Cw
>>409
糞抽象化の見本みたいなコードだなw。
そのうち使われなくなる種類のコードだ。

426デフォルトの名無しさん2019/03/17(日) 08:33:05.90ID:NYZE0cFr
名人様一名いらっしゃいました

427デフォルトの名無しさん2019/03/17(日) 11:20:51.42ID:2Lg7N/Z5
>>411
> 個数の型をdoubleにした特殊化テンプレートを書いてわざとエラーにするとか、
そういうときはdelete指定が使えるんじゃね?
というかis_floating_pointとかで弾いた方がいいとも思うけど

428デフォルトの名無しさん2019/03/17(日) 12:03:09.87ID:UT79+Nc/
>>409
x3とかつけない方が良くね?
てかvariable template使うところだね

429デフォルトの名無しさん2019/03/17(日) 13:22:57.65ID:UT79+Nc/
variadicだた

430デフォルトの名無しさん2019/03/17(日) 13:42:47.24ID:XP0TJBl2
バリスティック・テンプルね。

431デフォルトの名無しさん2019/03/17(日) 15:09:36.00ID:WBoQCy0z
>>425
サンプルにまでマウントするとかw

432デフォルトの名無しさん2019/03/17(日) 15:29:33.79ID:XP0TJBl2
マウントの定義を教えてください。

433デフォルトの名無しさん2019/03/17(日) 16:01:22.88ID:Ymi5ijHL
明確な定義があるわけじゃないけど、主に「勘違いした高卒が高等な他人を見下してること、もしくはその様」を指す語としてつかわれてんじゃないの

434デフォルトの名無しさん2019/03/17(日) 21:10:58.21ID:NYZE0cFr
>>432
意識高い系

435KAC2019/03/17(日) 21:23:45.76ID:nO6ODsyT
>>432
猿などが優位だと主張するために
相手に馬乗りになること

こういう場では、
相手に反論した(つもり)なら満足し、
反論を受けると過剰反応を示す奴をさすことが多い。

436デフォルトの名無しさん2019/03/17(日) 21:42:19.60ID:2Lg7N/Z5
>>435
>相手に反論した(つもり)なら満足し、
>反論を受けると過剰反応を示す奴をさすことが多い。
その説明だと某クソコテしか思い当たらないんだが・・・w

437 ◆QZaw55cn4c 2019/03/17(日) 21:57:43.35ID:8PHb1ymW
>>436
誰?

438デフォルトの名無しさん2019/03/17(日) 22:22:05.53ID:VD3ReUoA
オープンソース化されたWindowsの電卓を見たが、クッソ綺麗でモダンなコードだな

439デフォルトの名無しさん2019/03/17(日) 22:25:37.54ID:NYZE0cFr
多分7に入ってた電卓とは別物だな

440デフォルトの名無しさん2019/03/17(日) 23:22:31.89ID:0FN5yhQH
>>438
あの手のコードって意味ないよな
無意味に11や14で追加された機能をなんかを使いたがるやついるわー
そういったやつに限って仕事が遅い

ウンチクはいいから、さっさと終わらせろよ

441デフォルトの名無しさん2019/03/18(月) 00:13:57.67ID:HNvbYtsL
Windowsカーネルのオープンソース化待ってます

442デフォルトの名無しさん2019/03/18(月) 05:32:24.67ID:+E07qlDR
sort関数の比較関数を、クラスのメンバ関数として定義すると invalid use of non-static member function というエラーが出ます。
なぜこれは禁止されるのでしょうか。
また、どうやって解決したら良いですか。

443デフォルトの名無しさん2019/03/18(月) 05:33:36.55ID:HNvbYtsL
エラーメッセージ読みなよ

444デフォルトの名無しさん2019/03/18(月) 06:41:53.05ID:8TZ/BLJn
理屈を知ってる人には当然だけど、初めての人は混乱する部分じゃないかな。
sort で使う比較関数は色んな形で宣言できるけど、宣言する場所によって
エラーにならずに使える関数の形式が違うってやつ。

>>442 メンバ関数にした比較関数のプロトタイプ宣言はどんな感じ?

445デフォルトの名無しさん2019/03/18(月) 08:08:37.98ID:HNvbYtsL
非staticメンバをstaticのように使おうとしたときに出るエラーだからsortとか関係ない
Class::funcをsortに入れたんでしょ
Class().funcとするかfuncをstaticにするだけ

446デフォルトの名無しさん2019/03/18(月) 08:49:38.19ID:fJqFZa8b
今時はClass().funcでいけるんすか

447デフォルトの名無しさん2019/03/18(月) 09:58:55.92ID:7+YzgLjV
Class::funcってstaticじゃないの?

448デフォルトの名無しさん2019/03/18(月) 10:42:04.28ID:9EOa0iNV
->*みたいな書き方の意義がわかったら一人前どすな

449デフォルトの名無しさん2019/03/18(月) 11:13:12.39ID:27d4/ixp
ちなみにどんな意義があるの?

450デフォルトの名無しさん2019/03/18(月) 19:22:09.39ID:SgtRGl5R
>>444
bool mycomp(string a, string b);

です

451デフォルトの名無しさん2019/03/18(月) 20:05:14.79ID:c3AGzLzz
結局その場でラムダ式書くのが一番わかり易いんだよね

452 ◆QZaw55cn4c 2019/03/18(月) 20:09:56.80ID:e40iBeRc
>>448
>>449
http://2chb.net/r/tech/1434079972/39
なんと! private なメソッドを呼び出せるのです!

453デフォルトの名無しさん2019/03/18(月) 21:20:34.54ID:lCR32A1k
エクセルで使われているようなGUIにちょっとしたアニメーションをつけるには何使えばいい?

454さまよえる蟻人間 ◆T6xkBnTXz7B0 2019/03/18(月) 21:26:27.76ID:qJuL/kMQ
>>453
タイマー

455デフォルトの名無しさん2019/03/18(月) 21:43:42.87ID:lCR32A1k
>>454
例えば四角形の座標の終点の値と移動にかかる時間をするだけでヌルッと動いてくれる機能があるやつがいいです

456デフォルトの名無しさん2019/03/18(月) 21:45:05.39ID:ok5NeesM
普通にcのsort関数使えばいいのに。
キャストしたら負けとでも思ってんのかね。

457デフォルトの名無しさん2019/03/18(月) 21:59:25.97ID:MtU5H+Zb
>>455
cocos2d

458デフォルトの名無しさん2019/03/18(月) 22:47:37.12ID:DisgVN8i
std::initializer_list<int> l()
{
return std::initializer_list<int>{1,2,3};
}

std::vector<int> v()
{
return std::vector<int>{1,2,3};
}

int main()
{
for(auto i : l()){
std::cout << i << endl;
}
for(auto i : v()){
std::cout << i << endl;
}
}

0
0
0
1
2
3

なんで?

459デフォルトの名無しさん2019/03/18(月) 22:56:40.87ID:bBcTS09+
>>458
std::initializer_listはちょっと変わったクラスで、コピーやムーブしても中身が付いてこない
関数の戻り値にしてコピー省略とかが入ったとしても同様

460デフォルトの名無しさん2019/03/18(月) 23:23:21.73ID:qPN/SC1k
>>456
cのsort関数はアドレス連続性がないコンテナには使えないでしょ。
vector::sort()とCのsort()の速度はあまり変わらないので、わざわざCのsort()を使う理由がない。

461デフォルトの名無しさん2019/03/18(月) 23:28:12.28ID:c3AGzLzz
qsort「おっワイの出番か?」

462デフォルトの名無しさん2019/03/19(火) 00:00:01.33ID:V3eHYYxi
cのsortってラムダ渡せないし、ワザワザ面倒くさい記述してまで使う意味無いだろう。

463デフォルトの名無しさん2019/03/19(火) 00:37:48.08ID:wfF3ncvB
template<typename T>
T func(T a){
}
という関数の中身として、T が int なら a*2 を返し、T が double ならa/2 を返し、それ以外なら a を返す、という処理にしたい場合どう書いたら良いのでしょうか。

関数ごと特殊化する方法があるのは勉強したのですが、一行分の処理を特殊化するために関数ごと特殊化するべきなのでしょうか。

簡単化のため、必要さが全くない例になっていますがよろしくお願いします。

464デフォルトの名無しさん2019/03/19(火) 00:43:22.56ID:fW/dBWxG
STLが天才なのは分かったけど、遅くなりそうなのも分かってしまった。

465デフォルトの名無しさん2019/03/19(火) 00:49:23.69ID:fW/dBWxG
>>463
https://ideone.com/Oo65ND
これでいいのか知らんけど。

466デフォルトの名無しさん2019/03/19(火) 00:54:54.54ID:V3eHYYxi
>>463
簡単化しすぎて何を質問したいのかよくわからない
その例の程度の処理なら、intとdoubleの関数をオーバーロードして、template関数でデフォルトの処理も書けばいい
intとdoubleをどうしてもtemplate化したかったら特殊化で書けばいい

前後に長い共通処理がある場合の一部式だけ個別にしたいなら、関数オブジェクトで式を引数にとる補助template関数作って、上記手法で型毎にlambdaで式を変えて補助関数を呼び分ければいい

467デフォルトの名無しさん2019/03/19(火) 00:56:32.83ID:wfF3ncvB
>>466
特殊化する部分を関数として切り出して特殊化すれば良いということでしょうか。

468デフォルトの名無しさん2019/03/19(火) 06:48:59.95ID:smCJKSpo
>>450
まずは、エラーなくコンパイルが通って実行できるまで。
単純には、比較関数をクラスの外に出して「メンバ関数じゃない関数」にする。

たぶんソートしたいクラス中には比較する文字列以外のメンバもあるだろうから、
class myclass {
public:
 string s; // 比較対象の文字列
 int other; // それ以外のメンバ例
 ... // 他にもメンバ色々
};
こんな感じだと思う。

比較関数は、2つの myclass 型のオブジェクトのメンバ s 同士を比較するから、
bool mycomp(const myclass& a, const myclass& b)
{
 return a.s < b.s; // 辞書式の昇順
}

4694682019/03/19(火) 06:54:39.65ID:smCJKSpo
あるいは >>468 の段階はすでに通過してて、
「今度は比較関数をクラスのメンバ関数にしてみよう」と思ったのかな。

bool mycomp(string a, string b);
このプロトタイプでクラスの「staticでないメンバ関数」にすると、
その関数はクラスのオブジェクトを介して obj.mycomp((string)a, (string)b)
という形で呼び出さなきゃならないのよ。

ところが std::sort() が比較関数を呼び出す場合は
どのオブジェクトとも関係ない mycomp((string)a, (string)b) を呼ぼうとする。

「クラスのメンバだけど、クラスの個々のオブジェクトからは独立した関数」に
するために、関数の宣言に static を指定する。
class myclass {
public:
 string s; // 比較対象の文字列
 int other; // それ以外のメンバ例
 ... // 他にもメンバ色々
 static bool mycomp(const myclass& a, const myclass& b); // 比較関数
};

(「改行多すぎ」につき、もう一回だけつづく)

4704682019/03/19(火) 06:57:01.64ID:smCJKSpo
(>>469 の続き、長々とすまぬ)

関数の定義(クラス定義の外に書く場合)はこんな感じ。
bool myclass::mycomp(const myclass& a, const myclass& b)
{
 return a.s < b.s; // 辞書式の昇順
}
myclass のメンバ関数だと明示するために myclass:: をつけることと、
定義の方には static をつけない、てところが注意点。

std::sort() で使う時は、
std::sort(std::begin(objs), std::end(objs), myclass::mycomp);
「比較関数には myclass のメンバ関数の mycomp() を使ってくれ」と明示。
…する必要が(俺の環境では)あるんだけど、myclass 同士を比較することから、
自動的に myclass のメンバ関数も候補に入れてくれても良さそうな気がする。
なんでダメなんだろ?

471デフォルトの名無しさん2019/03/19(火) 07:25:56.87ID:aaAbvqyx
たかがソート一つ実行するのにこれってやっぱc++は失敗しとるわ。。

472デフォルトの名無しさん2019/03/19(火) 07:30:30.93ID:/K8ycOQq
どの言語も似たようなもんだろ

473デフォルトの名無しさん2019/03/19(火) 07:31:18.45ID:K4E5ztRO
>>468-470
丁寧に教えてくださりありがとうございます。

今のところは、>>468に書かれているようにクラスの外に出す、という方針で対応しておりました。

クラスの中で static をつけて宣言をする、というのが元々やりたかったことに一番近いように思います。重ね重ねありがとうございます。



>>470
> std::sort() で使う時は、
> std::sort(std::begin(objs), std::end(objs), myclass::mycomp);
> 「比較関数には myclass のメンバ関数の mycomp() を使ってくれ」と明示。

これは、mycomp() をクラス内で非static に宣言したときにも使えますか。
それとも、クラスの外で
bool myclass::mycomp(const myclass& a, const myclass& b)
{
 return a.s < b.s; // 辞書式の昇順
}
流に宣言、定義した場合に限りますか。

474デフォルトの名無しさん2019/03/19(火) 07:33:59.57ID:LjcR+vA2
何のために非staticにこだわるんだ?
メンバにアクセスしないならstaticつけとけよ

475デフォルトの名無しさん2019/03/19(火) 08:36:28.37ID:I3ez8Qch
比較関数をメンバ関数としてクラスに内在させるのが良くない
外部化するか、演算子オーバーロードする
どちらかと言うと比較関数を作らずに大小関係を定義する言語だ

実は、関数やクラスの間の包含関係がある
クラスを比較する関数はクラスの外部におかれるべきであって、メンバ関数にするのは筋が悪い
クラス内部に置くなら大小関係の定義にすべきだ
この手の階層関係は、規格書にもどんな教科書にも一切書かれてないけど、暗黙のうちに了解されている

476デフォルトの名無しさん2019/03/19(火) 09:31:11.81ID:wYd+ZeEZ
対称な演算子をインスタンスメンバにするのはセンス無いね

477デフォルトの名無しさん2019/03/19(火) 15:31:26.82ID:Pb8DX7io
>>463
template <typename T>
T func(T a) {
if constexpr (std::is_same_v<T, int>) return a * 2;
else if constexpr (std::is_same_v<T, double>) return a / 2;
else return a;
}

478デフォルトの名無しさん2019/03/19(火) 16:57:51.01ID:W9RsgnS5
namespaceを活用しろ

479デフォルトの名無しさん2019/03/19(火) 17:11:35.93ID:HTVBHQBE
>>477
これの方が関数として切り出して特殊化するより好きな見た目です

480デフォルトの名無しさん2019/03/19(火) 21:29:30.46ID:bWZzZfFH
>>477
それだと実行時に判断コストがかかるじゃん

481デフォルトの名無しさん2019/03/19(火) 21:29:55.51ID:QA3viZTS
if constexprってtypeidで情報取ってきて比較するみたいなオーバーヘッドが0になりますか?

482デフォルトの名無しさん2019/03/19(火) 21:33:24.72ID:Nfgw9yWF
おじさん久々にC++の仕事受けたんだけど
色々進化してて面食らってます

今、右辺値参照っての勉強中なんだけど
ムーブコンストラクタとかはへーへーほーほー言いながら何となく分かり始めた

んだけどさ、

int &&x = 2; // ok <-これだけ使い途が分からん

ローカル変数の右辺値参照て何に使うん?
実験してみた限り、勝手にムーブとかしてくれるわけでもなさそうだし
ローカル変数に&&付いてると何に使えてんな時便利なの?

483デフォルトの名無しさん2019/03/19(火) 21:34:25.38ID:/K8ycOQq
使わなくていい

484デフォルトの名無しさん2019/03/19(火) 21:40:02.75ID:kyorfls3
>>482
右辺値参照はほぼムーブコンストラクタのためにあると思っていいと思う
左辺値参照と同じように書けるというだけで、使うことはないかと

485デフォルトの名無しさん2019/03/19(火) 22:04:14.68ID:gYGT/BxR
変数宣言した右辺値参照そのものは左辺値という罠
極力そんな物作るべきじゃないね

486デフォルトの名無しさん2019/03/19(火) 22:05:37.07ID:8COf7JeC
俺今使い道思いついたんだけど披露してもいい?

487 ◆QZaw55cn4c 2019/03/19(火) 22:26:06.36ID:45LJYysD
>>486
どうぞどうぞ…

488デフォルトの名無しさん2019/03/19(火) 22:37:18.08ID:xP6m0cDT
>>480-481
if constexprは実行時コストゼロのはずだよ

489デフォルトの名無しさん2019/03/19(火) 22:53:01.58ID:bWZzZfFH
>>488
ifがなんで実行時ゼロなんだよ

490デフォルトの名無しさん2019/03/19(火) 23:23:47.41ID:hIuEq8sX
赤っ恥

491デフォルトの名無しさん2019/03/19(火) 23:26:12.29ID:/K8ycOQq
>>489
if constexprにするとコンパイル時に評価されて特定の分岐のみが実体化される

492デフォルトの名無しさん2019/03/19(火) 23:38:47.81ID:zcFktSXp
これですか。すごいね、これ。C++17からだけど。

constexpr if 文
https://cpprefjp.github.io/lang/cpp17/if_constexpr.html

493デフォルトの名無しさん2019/03/20(水) 00:20:58.62ID:wnXzlprR
>>484
回答ありがとう
なるほど、文法上は書けるから仕様上厳密な定義はされてるけど、普通は特に使わないで良いのね

494デフォルトの名無しさん2019/03/20(水) 00:27:33.64ID:K21QzJf5
初心者がやたらとアスタリスク使ってポインタの参照値を得ようとするのに似た感じがある。
他言語に移植しにくいだろ、テンプレート化しにくくなるだろ、と小一時間。

495デフォルトの名無しさん2019/03/20(水) 00:56:45.75ID:LskeNtBJ
アスタリスク使ってポインタの中身取ったらあかんのか・・・

496デフォルトの名無しさん2019/03/20(水) 03:19:15.41ID:abqqrm1b
multimap よりも set の vector の方が便利なのですが、異端ですか?

497デフォルトの名無しさん2019/03/20(水) 04:26:37.96ID:LuG6mmni
別に

498はちみつ餃子 ◆8X2XSCHEME 2019/03/20(水) 04:53:08.98ID:K9L8gFp5
>>482
既に回答がついているとおり、 rvalue 参照はほとんどムーブのための機能。
ローカル変数的に使う理由はあんまりない。

テンプレート関数の仮引数や auto 変数として rvalue 参照 (の記法) が現れたときは
特殊な推論規則 (ユニバーサル参照) が適用されるというのは気を付ける必要がある。

499デフォルトの名無しさん2019/03/20(水) 07:25:39.73ID:iA5XXTHz
ローカル変数もそうだけどintみたいなオブジェクト性が低いものに使っても意味ないわな。
rustの古いチュートリアルのmoveの例がなぜかintでクソだったけれど最近は文字列型になっとった。

500デフォルトの名無しさん2019/03/20(水) 08:44:38.76ID:LSg3zFHe
オブジェクト性

501デフォルトの名無しさん2019/03/20(水) 10:22:31.87ID:fk3FMvWg
考えうるメソッドが少ない=オブジェクト性が低い、とかじゃねえの
int型の変数.length() とかは流石に意味不明に見える

502デフォルトの名無しさん2019/03/20(水) 10:40:09.36ID:LuG6mmni
言いたいことは分かるが聞き慣れない言葉を使っているということでは

503デフォルトの名無しさん2019/03/20(水) 11:01:00.31ID:9pRMZ9XY
リテラルが右辺値ってのがよくわからんのだが

上の例のように右辺値参照でうけるとリテラルなのにそのアドレスがとれてしまう
かつ書き換え可能

なので右辺値参照にリテラルいれるときは、一旦名前のない領域にコピーされていると理解している

でもこれって通常の値の代入のときも名前のない領域にコピーしてからさらにコピーというセマンティクスなの?

504デフォルトの名無しさん2019/03/20(水) 11:29:19.49ID:sS5iHBwg
右辺値参照変数それ自体は左辺値だからね

505デフォルトの名無しさん2019/03/20(水) 15:37:27.50ID:oYbI5+uJ
右辺値を参照で束縛すると、その右辺値の寿命は束縛してる参照と同じところまで引き伸ばされる
この点は左辺値参照も右辺値参照も一緒

506デフォルトの名無しさん2019/03/20(水) 16:05:23.24ID:9pRMZ9XY
それ >>503 に関係ある?

507デフォルトの名無しさん2019/03/20(水) 16:16:24.82ID:oYbI5+uJ
どうして関係ないと思うの?

508デフォルトの名無しさん2019/03/20(水) 20:55:29.39ID:9pRMZ9XY
一見リテラルのアドレスが取れて書き換えられる、ように見えることに疑問を持ってる
言い方変えると
右辺値参照に代入するとき
リテラルが右辺値でなくて、そのコピーが右辺値なのでは?
そこに寿命がどう関係あるのかわからない

509デフォルトの名無しさん2019/03/20(水) 21:07:28.64ID:LskeNtBJ
アセンブラレベルで言うなら、即値なのかdataセクションにあるのかの違いじゃないの

510デフォルトの名無しさん2019/03/20(水) 21:31:53.81ID:iA5XXTHz
>オブジェクト性
コピーでも参照でも対してコストがかからんものというかそういうニュアンスなんだが
思った以上に伝わらんもんだな。
わかりやすいようにintと文字列を例に出してもこんなもんかもね。

511デフォルトの名無しさん2019/03/20(水) 22:56:30.82ID:B8C8ZXR4
アドレスが取れたら右辺値ではないみたいな論調だな

512デフォルトの名無しさん2019/03/20(水) 23:15:02.74ID:oYbI5+uJ
>>508
C++のリテラルというのは右辺値を生成する式なんだよ
「42」は値42を持つint型の右辺値を生成することを指示するリテラル
「"hello"」は中身が'h','e','l','l','o','\0'なchar[6]への参照を生成することを指示するリテラル
プログラムが実行時に扱うのは「リテラル」じゃなくてリテラルが生成した右辺値だ
その生成された右辺値は当然メモリ上にあっていいし書き換えられてもいい
(その必要がないならコンパイラがそうじゃないように最適化してももちろんいい)

「コピー」だと思うから違和感があるんじゃない?
リテラルなるものの実体が空の上やPCの隙間に隠れてるわけじゃないし、プログラムはそんなものは取り扱えない

513デフォルトの名無しさん2019/03/21(木) 00:07:41.99ID:2SUbybof
>>512
リテラルは右辺値でない、が正しい?
それなら半分なっとくだけど
ググるとリテラルは右辺値という説明がでてくる

514デフォルトの名無しさん2019/03/21(木) 00:13:13.37ID:2SUbybof
>>512
まだ半分なっとくできないのは、
上にも書いたけどリテラルで普通に代入するときも、
一旦右辺値を作ってから左辺にコピーする、というのかc++のセマンティクス?

なんか無駄すぎて釈然としない

515デフォルトの名無しさん2019/03/21(木) 00:14:13.96ID:FPuzf0hs
牛からは牛乳が出るけど牛は牛乳じゃないだろ?
そういうこと

516デフォルトの名無しさん2019/03/21(木) 00:20:16.95ID:FPuzf0hs
リテラルってのは文法要素なの
演算子とかキーワードとかコメントとかそういうものの仲間なの

実行時にはそんなものは出てこない
プログラムが扱えるのは「値」だけで、左辺値とか右辺値というのはその分類
int型の0x2Aという値を生成しろという命令をコンパイラに作ってもらうためにプログラマが書くものが「42」というリテラル
さっきからずっとそこを混同してる

517デフォルトの名無しさん2019/03/21(木) 01:01:57.88ID:7qm1Whlz
'\0' と L'\0' で違うしな

518デフォルトの名無しさん2019/03/21(木) 02:01:40.67ID:/XDYuiDC
>>503,514
数値リテラルは右辺値。
https://timsong-cpp.github.io/cppwp/n4659/expr.prim.literal#1

右辺値で参照を初期化する際は一時オブジェクト(=名前のない領域)が生成され、
それが参照されるというルールになってる。
https://timsong-cpp.github.io/cppwp/n4659/dcl.init.ref#5.2

参照を初期化する際のルールは代入のセマンティクスとは関係ない。
int i; i = 42 の代入で一時オブジェクトは不要。
代入がユーザー定義された T::operator=(T const&) に解決されるなら、
引数の参照を初期化する際に一時オブジェクトが作られることはある。

519デフォルトの名無しさん2019/03/21(木) 02:39:44.49ID:XdhJMiFj
即値になる場合があるから右辺値なのかね。

520デフォルトの名無しさん2019/03/21(木) 08:57:30.01ID:YzD9JPpd
そりゃ、代入の左辺にリテラルを置ける言語なんてまずないから。

521デフォルトの名無しさん2019/03/21(木) 09:47:23.84ID:MFgTD1Yv
コピーのコストを抑えつつ、二重に参照されないように元のオブジェクトを指す変数を無効にしたいってのが
moveに期待される機能。
即値だったり呼び出しの引数にコンストラクタごと放り込まれた場合には
上記のような二重に参照されるようなシチュエーションにはならんのでmove受けする関数が定義されてれば
その関数を呼びましょうってのがc++のmoveの取り扱い。
しかしこんなにもシンタックスが複雑で機能性も新しくてオーバーロードでさらに複雑になってるってのは
やっぱよくないと思うわ。
テンプレートの都合でオーバーロードが必要なのもわかるが明らかにやりすぎ。

522デフォルトの名無しさん2019/03/21(木) 23:38:07.17ID:/AmzWt7k
会社にもいるわ、そんなどうでもいいことをウンチクばっか垂れて一向に仕事が終わらないやつw
言語を設計するなら、必要かもしれんが大抵は不要

523デフォルトの名無しさん2019/03/21(木) 23:48:46.46ID:4AnWSc+d
「だからC++スゲー俺スゲー」ってやつじゃないの?それ
>>521がそうだとは思えんが

524デフォルトの名無しさん2019/03/21(木) 23:52:29.07ID:MDPJmZ4F
最近は彼らもRustにマウント奪われて必死なんだよ

525はちみつ餃子 ◆8X2XSCHEME 2019/03/21(木) 23:53:05.57ID:uQDXDHVg
理屈がわかってないのに仕事が終わってるのもそれはそれで不気味じゃない?

526デフォルトの名無しさん2019/03/21(木) 23:56:55.88ID:MDPJmZ4F
>>525
moveなんか理解してなくてもだいたいのC++の現場では仕事に支障ないよ

527デフォルトの名無しさん2019/03/21(木) 23:58:36.31ID:tdnDQnUt
>>526
マジで?!
それヤバくない?!

528デフォルトの名無しさん2019/03/21(木) 23:59:59.31ID:MDPJmZ4F
>>527
君はC++の30年の歴史を否定するのかい?

529デフォルトの名無しさん2019/03/22(金) 00:10:18.90ID:cT8zbTae
templateも使うことは、OKだがtemplateを用いたクラスを作ることは禁止されている場合がおおい
そもそも、設計段階で型が決定しないなんてことは、汎用ライブラリを書く以外はないだろ

530デフォルトの名無しさん2019/03/22(金) 00:22:46.08ID:aMVb4R4+
いやいや
決まっていてもそれが複数だった場合使うだろ
あと普通にライブラリは作るものじゃ

531デフォルトの名無しさん2019/03/22(金) 00:54:33.33ID:wBHxe+dJ
ていうか、普通に仕事をしていたら「ああここは処理共通だからまとめて・・
・・あとここをこうしとけば拡張にも対応できるし・・まあ客が無茶振りして
きたときの予防にそれなりに汎用性もたせとくか」とかやっているうちに
いつのまにかライブラリができあがってる、これがプロの仕事だ

532デフォルトの名無しさん2019/03/22(金) 00:55:35.30ID:wNvbYX88
委託業務メインなの?

533デフォルトの名無しさん2019/03/22(金) 01:10:14.13ID:LxKdyD8r
定数って参照透過性があるよね。
C++はconstexprがあるのだから、関数型プログラミングを超える、定数型プログラミングという新パラダイムを提唱したいと思います。

534はちみつ餃子 ◆8X2XSCHEME 2019/03/22(金) 01:14:02.50ID:6voZlles
コンパイル時レイトレーシングとかやってる人もいるけど狂気の産物って感じがして C++ ぽくて良い。

535デフォルトの名無しさん2019/03/22(金) 02:28:04.74ID:jw/5aFNH
しーぷら一筋30年~、速いの、上手いの、やっすいの~

536デフォルトの名無しさん2019/03/22(金) 02:37:28.24ID:M4ChOHMa
>>534
>コンパイル時レイトレーシング
一応訊くけど、ああいうのはレイ当てる3Dオブジェクトのデータは
全てC++のソースに書かないといけないことは分かってる?(モデリングデータをファイルから読んでコンパイル時にレイトレするのは当然不可能)
あの試み自体は面白いと思うけどね・・
実用性や(ソフトウェアの)ユーザーの利益にならないことをもてはやさないで欲しいもんだが

537デフォルトの名無しさん2019/03/22(金) 06:24:27.94ID:j45II+ff
プリレンダのゲームは大量にあるしレイトレーシングしとくのもその延長線上じゃない

538デフォルトの名無しさん2019/03/22(金) 08:03:01.00ID:VPBgCitj
コンパイル時ファイル入出力がサポートされればいいわけだ
それにレイトレーシングはまあ確かに冗談も含まれてるだろうけどそれだけ複雑で重い処理でも可能だという技術デモは価値があるだろう
画像にフィルタを適用するとかパターンが決まっているエフェクトを生成するだとか色々できて可能性はあると思うよ

539デフォルトの名無しさん2019/03/22(金) 08:17:25.29ID:sSVPAm0I
汎用的につかってもらうことを目的としているライブラリを除けば
コーディング時に型が決まっていないことなんてありえない

もしあるならそれは設計してないってことじゃん

templateなんて汎用的につかってもらうことを目的としているライブラリを書く場合にしか使わないだろ

後で、intからdoubleになるかもしれないから、なんて言ってるバカいるけど
きっちり設計しろよ

540デフォルトの名無しさん2019/03/22(金) 08:28:45.64ID:wNvbYX88

541デフォルトの名無しさん2019/03/22(金) 09:08:34.94ID:OAKB0NCU
>>538
コンパイル時にやることじゃない
新たなc++の巨大トラップだよ
ますますc++嫌いになった

542デフォルトの名無しさん2019/03/22(金) 09:11:15.22ID:VPBgCitj
>>541
俺は好きになったよ

543デフォルトの名無しさん2019/03/22(金) 09:31:33.91ID:OAKB0NCU
いいね、趣味で気楽に使ってる人は

544デフォルトの名無しさん2019/03/22(金) 09:52:12.19ID:VPBgCitj
ええやろ
楽しいわ

545デフォルトの名無しさん2019/03/22(金) 10:20:45.52ID:RSNtol3b
メタプログラミングってコンパイル時に評価してゼロオーバーヘッドとかすごいとは思うけど
学習コストや可読性と釣り合ってるか?

546デフォルトの名無しさん2019/03/22(金) 10:32:59.03ID:OAKB0NCU
仕事で4月になったらまた新しいメンバーシップ増えるけど
なまじ趣味でc++使ってたやつが一番困る
新しい機能使いたいだけでトータルの生産性考えないんだよね

547デフォルトの名無しさん2019/03/22(金) 10:41:23.85ID:wNvbYX88
そんな一部の現場の実情を忖度してたら競争に負けてしまうのではないか?

548デフォルトの名無しさん2019/03/22(金) 10:45:43.23ID:VPBgCitj
毎回同じこといってる奴いるよな
このスレには10人くらいしか居ないってネタは挙がってるし

549デフォルトの名無しさん2019/03/22(金) 11:07:13.15ID:v3KGlGVP
>>545
釣り合う点がどこなのかは人それぞれだから各自が判断してバランスいいところで使えばいい。
チーム開発ならプロジェクトごとに指針を決めれば良いかと。

550デフォルトの名無しさん2019/03/22(金) 11:11:55.43ID:nPC1T1eJ
>>545
やってることの性質にもよる
サーバーサイドなんかで潤沢なリソースを使って長時間動くものだとほとんど意味はないよ
その場合.NETやJavaのような実行時コード生成の方が遥かに柔軟性が高く、オーバーヘッドも実質的にはほとんどない

551はちみつ餃子 ◆8X2XSCHEME 2019/03/22(金) 12:34:15.37ID:6voZlles
>>536
それ自体はただの余興だけど、
コンパイラのバグを顕在化させる成果を出したりもしてるよ。
処理系の開発チームにとってもまずは問題を発見できなきゃ直せないからさ、
色んな形で使ってみる人だってそれはそれで必要なんだよ。
処理系の質が良くなるのは間接的にユーザの利益にだってなる。

552はちみつ餃子 ◆8X2XSCHEME 2019/03/22(金) 12:35:46.10ID:6voZlles
>>539
きっちり設計できている現場ばかりだったら本当によかったのにね。

553デフォルトの名無しさん2019/03/22(金) 14:12:54.65ID:M4ChOHMa
>>551
まぁその理屈はわからんでもないしメタプログラミングやってるとあの人のブログは勉強になるけどね
ただああいうのはブラックジョークの類であることを忘れると>>537みたいな勘違いした奴が出てくる

>>538
>画像にフィルタを適用するとかパターンが決まっているエフェクトを生成するだとか
それ、画像もコンパイル時に確定してるデータじゃないとあかんのやで?
(しかもconstexprなcharの配列みたいな、C++のコードに直さないといけない)

重ねて言うけど、面白い試みだけど実用的ではないんだよ、ああいうのをC++的だとかカッコいいとかもてはやすのはC++の衰退を招くだけ
趣味グラマは自分が趣味グラマであって時に実用性からかけ離れてるということを自覚すべき

554デフォルトの名無しさん2019/03/22(金) 14:23:16.46ID:M4ChOHMa
あ、でも
>>538
>コンパイル時ファイル入出力
これはやり過ぎな気もするけど個人的にはあっても良いとは思うw
ただ、画像のフィルタリングをコンパイル時にやるのとツール作って実行時にやるのとで
前者が便利な場面ってあるのかね?(しかも前者は非常に開発コストかかる

555デフォルトの名無しさん2019/03/22(金) 14:28:03.34ID:VPBgCitj
>>553
コンパイル時に確定しているデータがあるかもしれないし無いかもしれない
fstreamがコンパイル時に動くようになればいいだけ
そうなれば準備が面倒なプリプロセスも必要ない

研究に対して実用性がうんたらとかわけ分からないことを言うのはよくないなあ
様々なアイデアから自分の都合のいいところをつまんで実用化するのが末端の仕事だろうに
俺が使い道が思いつかないことに熱心になってると界隈が衰退するとかさすがに草生える

556デフォルトの名無しさん2019/03/22(金) 14:29:27.80ID:OAKB0NCU
静的なものはなんでもコンパイル時に解決するって思想が典型的なハンマー釘病なんだよ
コンパイル時だけが解じゃない

そのうち仕事で特に理由なくむやみに重いconstexprぶちこむやつがでてくるだろう
それでビルド時間5分10分長くなったりするわけだ
ほんとc++はクソ

557デフォルトの名無しさん2019/03/22(金) 14:32:15.97ID:VPBgCitj
>>556
問題があるならお前が指摘すればいいだけだし
リリースビルドのときだけコンパイル時計算になるようにすればいいだけ
工夫がたらんなあ

558デフォルトの名無しさん2019/03/22(金) 14:49:00.32ID:X0mnKdTP
>>555
constexpr関数みたいにコンパイル時にできる、実行時にしか出来ない、を「自動で振り分けて問題なく動く仕組み」
の範囲に全て収まるならそうだろうな

後半煽ってきたのでキツめに言わせて頂くが、コンパイル時レイトレはソース公開されてたろ?
あれを実用したゲーム開発の例を一つでも挙げてみろ
有意義な研究ならとっくに実用されてんだよボケ
あるいはボレロ氏の試みに同調して何もかも(ファイル入出力すら)コンパイル時に出来る言語にしよう、なんて動きが委員会に起きてるのか?
お前多分まともにメタプログラミング出来てるレベルじゃないのに調子乗ってるだろ

559デフォルトの名無しさん2019/03/22(金) 15:11:09.28ID:VPBgCitj
>>558
これだけ複雑な処理も出来るんですよっていうだけの話だからレイトレーシングである必要はない
それができるならこういうこともできるんじゃないか?ってなるのが普通
あとゲームのソースは公開されないから知るかとしか言いようがない
C++20でコンパイル時動的メモリが追加される予定だし、実行時でもコンパイル時でもタイミングが違うだけだからいつでも何でもできていいだろっていう流れは既にできている
標準化委員会がボレロを認知しているかは知らん

560デフォルトの名無しさん2019/03/22(金) 15:55:54.71ID:2qpWO6k3
コンパイラで高度なことが色々できるし、原理も実現も公開されてる、
興味を持って調べれば(ある程度なら)理解だってできるかもしれない。
というのはC++の素晴らしい部分だと思うのよ。

で、調べて知ったことを使って試したい、他の人に紹介したいってのは
これまた自然な気持ちだろう。自分もそういう面があるし。
実際に複数人で協力して作る実用プロジェクトで機能を使うかどうかは、
「コンパイル時間」だの「高度化・汎用化で読みにくくなる」だの、
トレードオフの問題になるけど。


分からないのは、「俺はこれ知ってる、お前は知らないだろ」と
他人より優位に立つ材料としてしか知識を使ってないような
投稿が見受けられることなんだよね。
ことにネット掲示板なんて、見ず知らずの他人同士なんだから、
相手をバカにしたって仕方ない、何の益もないだろうに。

561デフォルトの名無しさん2019/03/22(金) 16:19:37.76ID:M4ChOHMa
>>559
>それができるならこういうこともできるんじゃないか?ってなるのが普通
最初の方の主張からずいぶんと縮小したなw

>あとゲームのソースは公開されないから知るかとしか言いようがない
ググれ
ソースの公開なんかされてなくとも技術の動向くらいあちこちで紹介されてる

>C++20 いつでも何でもできていいだろっていう流れは既にできている
今調べたら確かにそうみたいだな、俺の認識不足だったし出来ることが増えること自体は悪くないと思う(前にもそう言ったが

ただ、
>コンパイル時にやるのとツール作って実行時にやるのとで前者が便利な場面ってあるのかね?
この疑問に答えて欲しいもんだけどね

>俺が使い道が思いつかないことに熱心になってると界隈が衰退するとかさすがに草生える
ならお前は使い道を知ってるんだろ?って話

562デフォルトの名無しさん2019/03/22(金) 16:33:55.31ID:M4ChOHMa
正直、ファイル(C++ではない)に書かれてる内容に従ってコンパイル時条件分岐とか手軽に出来たら
結構実用性はあると思うよ
ただその一方で、ここでプロとアマチュアのC++に対する意見がひどく乖離してる(このスレ見てたら気づいてないとおかしいが)ことに
全く問題意識が無いのであれば、それは結局自分が偉そうにしたいだけってことだと思うけどね

563デフォルトの名無しさん2019/03/22(金) 16:39:09.47ID:M4ChOHMa
constexprの拡張とか、そんなに開発現場(アマチュアでもソフト開発者等)から求められてなさそうなことにばかり
最近のC++は注力しすぎじゃないの、ってだけの話なんだけどね
ここでそれを言うと毎回荒れるんだよなぁ

564デフォルトの名無しさん2019/03/22(金) 16:45:13.61ID:7XQoWDDf
C++11すら使えないもんな

565デフォルトの名無しさん2019/03/22(金) 16:46:23.14ID:VPBgCitj
>>563
別に注力しすぎてはいない更新内容は多岐にわたる
constexprは派手だから注目されやすいだけ

https://cpprefjp.github.io/lang/cpp11.html
https://cpprefjp.github.io/lang/cpp14.html
https://cpprefjp.github.io/lang/cpp17.html
https://cpprefjp.github.io/lang/cpp20.html

566デフォルトの名無しさん2019/03/22(金) 16:48:03.99ID:d9SNUM0T
愛知県人注目。遠州地区の技術者も注目。


[急募]
豊川ハローワーク管内の求人で、SEの席に空きがあります。
四月スタートの仕事なので、急いで応募して下さい。報酬は、
月に20万円から60万円。

英語力は必須ではありませんが、『実はTOEICのスコア以上に
英語ができる』と面接では答えて下さい。(英語は入社してから
頑張って下さい。)

ネットワーク関係が得意だと言って下さい。JP1の経験があれば、
なおよし。ECUの経験があれば、さらによし。キャティアのマクロが
書ける人、大歓迎。(これらは、必須ではありません。)

567デフォルトの名無しさん2019/03/22(金) 16:48:35.97ID:OAKB0NCU
>>557
それがお前の案?
手動じゃんそれ
くそださいとしか

仕事では数十人規模でやってるわけで、そんな人力チェックしたくないわけよ
プルリクぐらいはやってるが全て見きれるわけじゃない

まずはビルド時間の推移とか、内訳を監視するタスクを回すことを考えるだろうが
そういう非生産的な仕事が増えることがクソなんだよ

568デフォルトの名無しさん2019/03/22(金) 16:51:03.18ID:7XQoWDDf

569デフォルトの名無しさん2019/03/22(金) 16:51:56.89ID:y6Rn9cx8
C++の新機能なんて大半の開発現場にはいらんだろ
前いたところは初心者向けの教科書を読めばだいたいわかる基本的な構文しか使ってなかった
constexprもなければテンプレートもラムダ式もなかった
コード書けん奴がコードレビューするからそんなもん使った日にはわかりやすく書けとか怒られた

570デフォルトの名無しさん2019/03/22(金) 16:54:51.52ID:wNvbYX88
>>569
マジで?!
それヤバくない?!

571デフォルトの名無しさん2019/03/22(金) 16:56:04.17ID:VPBgCitj
>>567
できあがった物の性能を少しでも上げようっていう話なんだがそれに価値を見いだせないならどうでもいいよ
つまんねえから口を開かないでくれ

572デフォルトの名無しさん2019/03/22(金) 17:00:41.61ID:M4ChOHMa
まぁconstexprのコンパイル時コストを気にするだけなら多分ifdefでdefine CONSTEXPRとかすればいいだろうけど
メタプログラミングはやっぱコンパイル時間長くなる
個人で開発してても無視出来ないわ・・

>>571
性能上げて比較結果を出してから言うべき

573デフォルトの名無しさん2019/03/22(金) 17:03:59.06ID:M4ChOHMa
ていうか>>560の言ったことを実証するかのような流れだなww

574デフォルトの名無しさん2019/03/22(金) 17:06:35.17ID:nPC1T1eJ
>>571
一般に、無駄な拘りに時間かけるのを避けてその分ボトルネック潰しに時間をかけたほうがソフトウェアのパフォーマンスは良くなるよ

575デフォルトの名無しさん2019/03/22(金) 17:54:21.92ID:pFUycIOf
>>563
求められているだろ?

576デフォルトの名無しさん2019/03/22(金) 18:34:40.09ID:LxKdyD8r
関数型同様、定数型プログラミングにもアンチがわいてきましたか。
アンチがわいたってことは、定数型プログラミングが世の中に受け入れられたってことでいいですね?

577デフォルトの名無しさん2019/03/22(金) 19:08:02.11ID:2qpWO6k3
その機能自体への好悪もあるか知れないけど、
「導入されたからには直ちに覚えて使わないのは罪悪」あるいは
「使わない奴は学習能力の劣る無能、使わないのでなく使えないんだろ」
みたいな、新機能の押し付けが嫌がられてるって部分もあるんでないかな。

578デフォルトの名無しさん2019/03/22(金) 19:19:05.75ID:wNvbYX88
実行時おじさん

579デフォルトの名無しさん2019/03/22(金) 19:21:05.55ID:OAKB0NCU
>>576
関数型持ち出すやつが、c++のconstexprの持ち上げたらいかんだろ
関数型はそんなキーワードなしに部分評価するだけで実現できんだから

580デフォルトの名無しさん2019/03/22(金) 19:23:25.37ID:YgnW0VV3
Googleの結論
Think twice before using template metaprogramming or other complicated template techniques;
think about whether the average member of your team will be able to understand your code well enough
to maintain it after you switch to another project, or whether a non-C++ programmer or someone casually browsing the code base will be able to understand the error messages or trace the flow of a function they want to call.

https://google.github.io/styleguide/cppguide.html#Template_metaprogramming

581デフォルトの名無しさん2019/03/22(金) 19:26:07.13ID:LxKdyD8r
【定数型プログラミングの掟】
> 「ブッ殺す」と心の中で思ったならッ!その時スデに行動は終わっているんだッ!

582デフォルトの名無しさん2019/03/22(金) 19:31:22.14ID:M4ChOHMa
でも終わったときめちゃくちゃ疲労してるんやで

583デフォルトの名無しさん2019/03/22(金) 20:21:58.70ID:nPC1T1eJ
>>580
それ逆効果じゃね
Google社員でも使いこなせない機能を使いこなす俺スゲェwww

584 ◆QZaw55cn4c 2019/03/22(金) 21:54:10.43ID:nrO+MVHg
>>534
>コンパイル時レイトレーシング
……

585デフォルトの名無しさん2019/03/22(金) 21:57:31.87ID:FYyZQ6ej
コンパイル時C++コンパイルをやったら尊敬する

586デフォルトの名無しさん2019/03/22(金) 22:28:07.22ID:1RSJEChR
正規表現のコンパイルならありかもしれないw

587デフォルトの名無しさん2019/03/22(金) 22:42:15.38ID:78R951f8
自分の知らない概念を勉強するって意味ならlispのマクロでも覚えたほうがはるかに有意義なんだが
そうしないだよね。
なぜならそれじゃ老害にマウントできないから。
まあそういうクソみたいな思想のやつが年取って老害化するんだけど。

588デフォルトの名無しさん2019/03/22(金) 23:22:27.03ID:C43yQc+Q
>>545
コンパイル時に決定していることしかできませんよ
コンパイル時に3の階乗を計算して、ドヤってるやついるけど、それなら6ってタイプしとけよw

589デフォルトの名無しさん2019/03/22(金) 23:29:13.79ID:LxKdyD8r
でもそれがLALR(1)パーサーを生成するなら?

590デフォルトの名無しさん2019/03/22(金) 23:36:46.32ID:tosUzxZE
コンパイルに時間かかるから、その間暇つぶしに裏でレイトレーシングして遊んでんのかと思った

591デフォルトの名無しさん2019/03/23(土) 00:40:56.99ID:A6OyMWzd
デイトレーシングってストーカーのことだっけ。

592デフォルトの名無しさん2019/03/23(土) 06:55:12.12ID:jegHMgvE
>>580
「同じプロジェクトで働く他の仲間はアホかもしれない、
あなたの仕事を引き継ぐ奴はボンクラかもしれない、
だから難しい機能を使うのは自重しましょう」って感じか?
一見「あなただけは特別な存在です」と言ってるように見えて、
実は現場の全社員を見下してるような文面だなぁ。
「技巧に走るより素直な書き方をしろ」って趣旨は分かるんだけど。

>>588
参加者の順列で生じるパターンの状態を記録する配列の要素数、
しかも参加者数は変更の可能性あり(コンパイル時には確定する)、
という場合なら contexpr の階乗関数を仕込む意味はありそうね。

593デフォルトの名無しさん2019/03/23(土) 07:22:13.12ID:WDi4jE89
長年プログラムの保守やってるの見るとその通りだが

594デフォルトの名無しさん2019/03/23(土) 08:07:02.46ID:T5eFVdJU
constexpr指定するだけのことが技巧的なのか知らなかった
I/Oや動的メモリと関係なさそうなところに脳死で適当に付けておくだけでいいのに

595デフォルトの名無しさん2019/03/23(土) 08:35:25.57ID:RdkKrV9k
霞ヶ関文学は禁止ってこった。

596デフォルトの名無しさん2019/03/23(土) 12:20:32.92ID:0OEv8pnV
基本的に新機能は分かりやすく書きやすくするためのものなんだけどな

597デフォルトの名無しさん2019/03/23(土) 12:50:41.97ID:p3DdVUb8
数学への回帰と先祖返りじゃないの
分かり易くなるんじゃない、難しくなるんだよ

598デフォルトの名無しさん2019/03/23(土) 13:37:38.67ID:v/SrloXk
template<typename Item>
Item Fool::InsertItem(const Item& item)
{
 //なにがしかの処理
 item.c_str()...
}

こんなコード見かけると吐き気がするわ
c_str()を持つ型しか使えないじゃん
なんのためにtemplate使ってんだよw

599デフォルトの名無しさん2019/03/23(土) 13:47:58.81ID:uJTAZAlu
c_strを持つ型に限定したいから問題無いけど。

600デフォルトの名無しさん2019/03/23(土) 13:49:44.59ID:T5eFVdJU
何か変か?
c_strを持っているクラスのみを想定しているんじゃないの
本当はSFINAEで消すべきかも知れないけど

601はちみつ餃子 ◆8X2XSCHEME 2019/03/23(土) 13:50:21.13ID:ByL/s3eU
>>598
だからコンセプトの導入が悲願とされてるんだよ。

602デフォルトの名無しさん2019/03/23(土) 14:34:53.50ID:JQCK5flX
>>598
程度のはsfinaeでいいんだけどね

603デフォルトの名無しさん2019/03/23(土) 14:56:23.90ID:EB4wgvrK
basic_stringの特殊化に限定するなら文字型を受け取るだけでいいと思うんだけど

604デフォルトの名無しさん2019/03/23(土) 15:01:12.26ID:fJspHuQc
>>598
constexprでコンパイル時に特定のメソッドがあるか調べられないの?

605デフォルトの名無しさん2019/03/23(土) 15:03:42.82ID:EB4wgvrK
それは型の情報だから、すでに言われてるようにメタプログラミングでsfinae使って調べるしかない

606デフォルトの名無しさん2019/03/23(土) 15:55:31.24ID:RdkKrV9k
吐き気がするだけで済んでいるのなら御の字。

607デフォルトの名無しさん2019/03/23(土) 16:15:35.83ID:T5eFVdJU
アレルギーが重症化すると辺境で難癖付けて騒ぎ出したりテンプレート指定すると何故か生産性が落ち出したりするからな

608デフォルトの名無しさん2019/03/23(土) 17:08:18.78ID:qcSb+DlG
pythonみたいにエラーメッセージ表示してくれるだけで大分マシになると思うんだけどな

609デフォルトの名無しさん2019/03/23(土) 18:52:42.53ID:4cH0E/is
そうなんだよね
1500行のエラーメッセージの代わりに「itemのメンバ関数c_str()が見つかりませんでした」ってコンパイラが言ってくれてたら
ここまでテンプレートは嫌われなかった

610デフォルトの名無しさん2019/03/23(土) 18:54:43.76ID:enzaJQTj
だからgoのコード生成系のアプローチのがマシってことなんだが馬鹿は脳内でしかビルドしないから通じない訳だ。

611デフォルトの名無しさん2019/03/23(土) 19:11:19.55ID:A6OyMWzd
これからは定数型プログラミングの時代。

612デフォルトの名無しさん2019/03/23(土) 19:15:22.30ID:EB4wgvrK
>>609
それはC++20でコンセプト入ったら実現されるはず(ライブラリ側で対応する必要あるけど

613デフォルトの名無しさん2019/03/23(土) 19:18:48.99ID:iMO+WCpL
過去の話をしてるのに未来の話で返されてもな

614デフォルトの名無しさん2019/03/23(土) 19:22:34.86ID:A6OyMWzd
エラーメッセージがわかりにくいなら、VC++を使うべき。

615デフォルトの名無しさん2019/03/23(土) 19:26:46.49ID:T5eFVdJU
過去のことなんかどうでもいい
未来だけ見て生きていこう

616デフォルトの名無しさん2019/03/23(土) 19:30:40.79ID:EB4wgvrK
>>613
コンセプトは最近出てきた概念じゃないぞ
C++11が0xとか呼ばれてた頃から言われてた話

617デフォルトの名無しさん2019/03/23(土) 21:03:26.04ID:16DhXZwe
>>614
vcはバグだらけで使い物にならない

618デフォルトの名無しさん2019/03/23(土) 21:40:53.85ID:eUSVaq66
>>598
嫌なら実体化しなければ良いんじゃ…
仮にFooのインスタンスを生成したとしても、Foo::InsertItem()を呼ばなければFoo::InsertItem()は実体化されないはず…

619デフォルトの名無しさん2019/03/23(土) 22:45:17.73ID:4cH0E/is
今思えばC++0xのコンセプト案はいろいろ酷かったな
あのまま入らなくてよかった

620デフォルトの名無しさん2019/03/23(土) 23:17:20.42ID:EB4wgvrK
コンセプトマップだとかコンセプトを満たすことを自己申告しなきゃいけないだとか
傍目に見て正直意味わからんかった

621デフォルトの名無しさん2019/03/23(土) 23:51:54.14ID:11jhwwP/
Axiomはとてもいいと思ったが、消えたのだな・・・

622デフォルトの名無しさん2019/03/23(土) 23:53:58.85ID:enzaJQTj
>>588
フーリエ変換の係数みたいなものは実行時には定数だけれど、事前に計算式で計算しておきたくはなる。
でもまあ普通に考えればビルド構成の問題だわな。
なぜコンパイラに無理やり突っ込むかと言えばまともにビルド構成を考える能力がないからっていうね。

623デフォルトの名無しさん2019/03/23(土) 23:54:27.98ID:4cH0E/is
axiomさんは契約アトリビュートとして生まれ変わったのだ

624デフォルトの名無しさん2019/03/24(日) 00:40:12.28ID:7x4/H6l4
C++の複雑さはオナニー的なところがある

625デフォルトの名無しさん2019/03/24(日) 01:38:06.52ID:b8r3VMdD
コンパイル時に決定してることしかできないなら、コード書く必要あるか?
1+2しか計算できないんだろ、2+3の結果が欲しかったら、コンパイルし直しw

626デフォルトの名無しさん2019/03/24(日) 02:05:19.27ID:xAoD2jBj
狭義のアルゴリズム(有限ステップで終わる)を記述する分にはそれで十分
無限ループを含む手続きを記述したかったら無限再帰すればええ
と考えればメモリが無限にあればコンパイルが終わるまでに任意の処理ができる

627デフォルトの名無しさん2019/03/24(日) 02:07:46.29ID:4oYv+rwZ
定数型プログラミングでコンパイラを創ろう。

628はちみつ餃子 ◆8X2XSCHEME 2019/03/24(日) 02:16:59.70ID:9ZLLLplX
コンパイル時に畳み込んで定数にした方がよいかどうかはコンパイラの最適化で頑張って欲しい話で、
それで足りない、さらなるチューニングが必要なときの記法が統一的だったらうれしいねっていう程度の話じゃないかな。
普段からそんなにコンパイル時計算を意図したりはしないよ。

629デフォルトの名無しさん2019/03/24(日) 02:25:38.27ID:Wmd2CxZH
P言語でC++中間コードを生成するスクリプトを書けばいいじゃない。
swigみたいな。
カスタムコンパイルやカスタムビルドはそのためにある。

630デフォルトの名無しさん2019/03/24(日) 02:33:38.88ID:4oYv+rwZ
ヤック、レック相当をメタプログラミングで実現することができるのではないか。
スピリチュアルな方向性ではなく。

631はちみつ餃子 ◆8X2XSCHEME 2019/03/24(日) 02:50:04.22ID:9ZLLLplX
PEG 相当のことを実現しているライブラリとしては Qi があるけど、
Yacc みたいに LALR をやってくれるのは知らないなぁ。
出来るのかな?

632デフォルトの名無しさん2019/03/24(日) 03:13:50.09ID:PmamUspu
>>628
個人的には、メタプログラミングで定数値のパラメータ作るのに構造体でメタプログラミングする必要が無くなったのはconstexprにかわしゃ

633デフォルトの名無しさん2019/03/24(日) 03:16:29.85ID:PmamUspu
ごめん間違って送信した、
constexprに感謝してるw
あとビット演算とか整数値の計算する関数もconstexprつけときゃテンプレートパラメータに渡せるし
高速化は二の次だと個人的には思ってる

634デフォルトの名無しさん2019/03/24(日) 03:23:59.40ID:4oYv+rwZ
STLあっての私たち。

635デフォルトの名無しさん2019/03/24(日) 03:30:27.34ID:b8r3VMdD
STLって遅くて使えなくない

636デフォルトの名無しさん2019/03/24(日) 03:32:16.98ID:4oYv+rwZ
確かに遅いね。

637デフォルトの名無しさん2019/03/24(日) 03:37:58.18ID:4oYv+rwZ
テンプレートメタプログラミングは永久機関。

638デフォルトの名無しさん2019/03/24(日) 05:16:54.07ID:xAoD2jBj
STLにCStringを入れて欲しい

639デフォルトの名無しさん2019/03/24(日) 05:41:26.93ID:NAaHZN6A
嫌です

640デフォルトの名無しさん2019/03/24(日) 05:51:09.56ID:0ur1Ot0v
男なら全部char[]

641デフォルトの名無しさん2019/03/24(日) 06:09:08.25ID:xAoD2jBj
sprintf_s()と_cuntof(array)がどこの環境でも標準で使えるならchar[]も悪くない選択肢ではある

642デフォルトの名無しさん2019/03/24(日) 08:26:16.35ID:3s1WkY0F
boost spiritはコンパイルが糞遅いし、何か間違えると何処が原因かさっぱりわからんし、
実用には程遠かったな。テンプレートでここまでできるという一発芸的な。

643デフォルトの名無しさん2019/03/24(日) 09:20:48.36ID:0R743LPx
テンプレートメタプログラミングって元々はアンチパターンとして提出した例だったんだけどね。
本当に愚者というのは度し難いというか。。

644デフォルトの名無しさん2019/03/24(日) 09:21:19.70ID:EkBj7yKG
CStringをこの世から完全に消し去って欲しい
せめてbasic_stringと互換性のあるインターフェースを持たせてからフェードアウトして欲しかった

645デフォルトの名無しさん2019/03/24(日) 09:23:21.86ID:Wmd2CxZH
CStringT::Format()系関数は、sprintf()系関数を2回呼ぶので冗長。
利用バッファサイズを事前に指定できないことが原因。

646デフォルトの名無しさん2019/03/24(日) 09:27:05.22ID:EkBj7yKG
>>643
だから天井人がお前ら下々に分かるレベルにしてやるよってことで様々な改良が加えられてるんだよなあ
それでもまだ分からないとなったらどこまでレベルを下げればいいんだってなって頭抱えちゃうよ

647デフォルトの名無しさん2019/03/24(日) 10:26:38.44ID:a59b/YMZ
CStringってなに?

648さまよえる蟻人間 ◆T6xkBnTXz7B0 2019/03/24(日) 10:31:25.24ID:SVMO04Wq
CStringは、Windows用のC++のクラスライブラリ、MFCの文字列クラス。

649デフォルトの名無しさん2019/03/24(日) 10:45:02.21ID:myNgr9GS
>>645
冗長って言われても一度パースしないと必要サイズはわからんからしょうがないだろ
まあ1KB程度のバッファー持って処理中に足りなくなったらパースし直すとかでもいいとは思うが

650デフォルトの名無しさん2019/03/24(日) 10:47:24.53ID:0ur1Ot0v
便利さを求めるならなんかフレームワーク使えよ
軽さを求めるならchar配列でゴリゴリ書けよ

651デフォルトの名無しさん2019/03/24(日) 10:52:30.12ID:EkBj7yKG
性能も利便性も標準より低いフレームワークさん・・・

652デフォルトの名無しさん2019/03/24(日) 11:06:49.87ID:Wmd2CxZH
>>649
素直にsnprintf()のように最大バッファサイズを指定するオーバーライド関数を追加すべきでしょ。
CStringT::Format()関数を呼び出す側は、あらかじめサイズを予想できる状況にあることが多い。

653デフォルトの名無しさん2019/03/24(日) 11:52:04.64ID:0R743LPx
>>646
天上人のつもりなのがそもそもの問題なんだがな。。
最近の標準委員は明らかにプログラム組んでなさそうな連中が決めてるような感じだし。
c++なんかは顕著だがそういうマウントの取り合いによる新機能拡充が一番現場を疲弊させてるっていうことを
なんでわからんかね。

654デフォルトの名無しさん2019/03/24(日) 11:52:05.81ID:EHuBBnjq
MFCが出来た頃のstd::stringはそりゃまあ酷いシロモノだったんじゃ
あまりCStringを責める気にはなれん

655デフォルトの名無しさん2019/03/24(日) 11:55:08.60ID:DVu1xjKe
いくらリリース時に型がすべて決まってるはずと言ったってDRYはそれなりに大事だろ

656デフォルトの名無しさん2019/03/24(日) 12:01:45.23ID:rLn5TxmP
>>653
標準化委員会の議論とまともに論理的な議論のできない5chを同一レベルで扱うなよ

657デフォルトの名無しさん2019/03/24(日) 12:05:08.13ID:4oYv+rwZ
しかし旧石器時代にSTLが作られたことを思うと、オーパーツと言ってよいのではないか。
数学的に洗練されたこの美しさ。
古代人は数学が得意だったのでは。

658デフォルトの名無しさん2019/03/24(日) 12:09:06.38ID:EkBj7yKG
>>654
まあそれはある
でもstlが普及してからも互換性が全くないまま終了したので負債になってしまったのは悲しい

659デフォルトの名無しさん2019/03/24(日) 12:09:46.38ID:Wmd2CxZH
それにしてもiostreamの醜さよ。

660デフォルトの名無しさん2019/03/24(日) 12:37:41.11ID:NSjukkr5
>>652
C言語に毒された老害かよw
欲しけりゃ自分で実装しろよ

661デフォルトの名無しさん2019/03/24(日) 12:46:47.36ID:DqM6OskA
>>648

>>647 はそんなの百も承知で書いてると思うが

662さまよえる蟻人間 ◆T6xkBnTXz7B0 2019/03/24(日) 12:47:06.43ID:rmV9lt2O
<strsafe.h>を知らない人が多いのか?

663デフォルトの名無しさん2019/03/24(日) 12:55:26.69ID:DqM6OskA
>>657
そうか?
全然そんなことないと思うぞ

MFCのはもっと酷かったからそれよりマシかなって程度

664デフォルトの名無しさん2019/03/24(日) 12:57:50.08ID:Wmd2CxZH
>>660
簡単だから当然、実装はする。
下手にバッファサイズを測る手間をかけるくらいならバッファサイズを渡せという話。
バッファサイズを渡せば速度が通常のCStringT::Format()より30~40%ほど改善するんだから、公式でも採用してもらいたいという趣旨。

665デフォルトの名無しさん2019/03/24(日) 13:07:04.34ID:Wmd2CxZH
gccとvcでは vsnprintf()の挙動が違う。va_listの内部実装が異なるからだろう。
gccの場合、同じva_listを使ってvsnprintf()を複数回呼び出すと…

666デフォルトの名無しさん2019/03/24(日) 13:26:03.77ID:tvGVd8WB
続きはCMのあとで!!

667デフォルトの名無しさん2019/03/24(日) 13:42:15.21ID:uLk8b7ur
>>664
どうせ弄るなら、va_listとか旧世紀の遺物つかわなくても、templateの可変長引数を使って1から作り直した方が良い。

668デフォルトの名無しさん2019/03/24(日) 13:44:34.27ID:EHuBBnjq
va_listを他の関数に渡した後で、va_startで初期化せずに再使用するのは未定義動作
何が起きても文句は言えないしコンパイラごとに挙動が違うのは当然というものだ

669デフォルトの名無しさん2019/03/24(日) 13:55:44.10ID:oV9fIVj4
string_viewはどうだろうか?

670デフォルトの名無しさん2019/03/24(日) 13:56:05.38ID:Wmd2CxZH
>>668
それはつまり、gccではCStringT::FormatV()相当の実装が困難ということを意味している。
バッファサイズを自分で渡す仕様が最適解ということ。

671デフォルトの名無しさん2019/03/24(日) 13:59:03.55ID:myNgr9GS
>>664
そんな旧態依然のインターフェイス欲しけりゃ自分でやれやってことだろ

672デフォルトの名無しさん2019/03/24(日) 14:13:40.53ID:Wmd2CxZH
それにつけてもostringstreamの醜さよ。

673デフォルトの名無しさん2019/03/24(日) 14:40:52.61ID:EkBj7yKG
streamサイコー<<<<<<

674デフォルトの名無しさん2019/03/24(日) 14:51:51.49ID:a59b/YMZ
clang++使ってみたら、std::async使えない・・・
さすが、フリーだな

675デフォルトの名無しさん2019/03/24(日) 14:52:15.46ID:b6oq5ESd
clang++使ってみたら、std::async使えない・・・
さすが、フリーだな

676デフォルトの名無しさん2019/03/24(日) 16:30:35.16ID:4oYv+rwZ
>>672
何処がひどいですか?

677デフォルトの名無しさん2019/03/24(日) 16:50:49.33ID:GJPzxHHg
CStringのくそ設計にいまさら文句言ってもなぁ
そもそもメンバ関数、しかもdestination側と言う時点で使う側の利便性考えていない

678デフォルトの名無しさん2019/03/24(日) 16:55:28.18ID:xAoD2jBj
遅いしフラグがいっぱいあるし読みにくいし
ostream& T::operator<<(ostream&, const T&)やistream& T::operator>>(ostream&, T&)をTにつき一種類しか定義できないから
万全の汎用性を有しているかというとそうでもないし、

唯一の長所は型安全なところだが、意図通りの出力になるまでどうせトライ&エラーすることになるのだから
それ以下の工数でprintf()の書式ミスを発見できるわ;;

679デフォルトの名無しさん2019/03/24(日) 16:58:49.26ID:xAoD2jBj
CStringをdestination側に使うときの書き方はスゲーカンタン
 CString cstr;
 cstr = "Hello World!\n";
でおkコピー程度でCstring::Format()を使う必要はナス、

ソース側に使うときはむしろstd::stringよりカンタン
 printf("%s\n", cstr);
で通る

680デフォルトの名無しさん2019/03/24(日) 17:01:05.52ID:xAoD2jBj
まあ個人k的にはprintf("%s\n", (char*)cstr); ぐらいで手を打つが

681デフォルトの名無しさん2019/03/24(日) 17:10:19.89ID:b6oq5ESd
CStringなんて使うのはc言語だけだろ

682デフォルトの名無しさん2019/03/24(日) 17:19:45.54ID:PmamUspu
>>653
ここはマウント取りたいだけのバカが沢山居るけどさすがに標準化委員会は違うだろ
ただソフト開発者や標準・boost以外のライブラリ設計者はほぼ居ないんだろうなとは思うが

683デフォルトの名無しさん2019/03/24(日) 17:32:06.96ID:GJPzxHHg
標準化委員会はよくも悪くも開発者目線だなあとしか
提案者の用途さえ満たせれば良い的な仕様が多々見られる

最近だとto_charsとfrom_charsなんてまさにそんな感じ

684 ◆QZaw55cn4c 2019/03/24(日) 17:44:39.67ID:6DYvLdXI
>>678
>フラグがいっぱいあるし

この i/o stream のフラグってきちんと定義されているのでしょうかね…
処理系に依存してテキトーな気がしてしかたがない
http://2chb.net/r/tech/1434079972/30 を書くときにさんざん調べたつもりなのですが、よくわからなかったことを記憶しています。
今みると、嫌々 stream.fail() でごまかしていたようです

685デフォルトの名無しさん2019/03/24(日) 21:04:38.58ID:0R743LPx
>>656
江添レベルの奴がやってる時点であんまここと変わらんだろ。
初心者に初めからautoで宣言させたコード実行させようとするような馬鹿だぞ。
初心者のためよりも自分のエゴ満たすためってのがあまりに優先されすぎてる。

686デフォルトの名無しさん2019/03/24(日) 21:11:22.21ID:EkBj7yKG
>>682
そんなわけないが
研究者だけでなく様々な企業のエンジニアも参加している
お前らの好きな組み込み業界や自動車業界も人を派遣してる

687デフォルトの名無しさん2019/03/24(日) 21:17:23.06ID:EHuBBnjq
つい最近まで「トライグラフは現場でバリバリ使いまくってるから無くしちゃダメー!」って必死に訴えてる人達がいっぱい居たのが標準化委員会だよ

688デフォルトの名無しさん2019/03/24(日) 21:37:39.78ID:GJPzxHHg
初心者にauto使わせるのは悪くないというかむしろそうすべきだろ。
現場が疲弊云々はそんな現場辞めてしまえとしか
標準化委員会はc++バリバリに使っている現場の意見が十分反映されているのだから

文句があるなら委員会に参加すれば良いんだよ

689デフォルトの名無しさん2019/03/24(日) 22:05:21.71ID:iBzlPNVB
>>687
IBMだけな・・・

690デフォルトの名無しさん2019/03/24(日) 22:08:27.13ID:zVUhrel1
>>688
C++を使わせないのが正しい。

691KAC2019/03/24(日) 22:12:29.07ID:baOwhHMi
>>690
そうじゃない
688の思想は、Cにも取り入れる方向だろう

692デフォルトの名無しさん2019/03/24(日) 23:03:50.83ID:0R743LPx
あれで現場の意向が本当に入ってると思ってる奴がいるのか?
c++の衰退とかデータで見ても信じない連中なのかね。。
まるでどこぞの統計データを今でも信じてる連中みたいだ。

693デフォルトの名無しさん2019/03/24(日) 23:18:22.54ID:Wmd2CxZH
メモリやCPUが安価で高性能になれば、コンパイル言語全般のシェアが下がるのは当然なのでは。

694デフォルトの名無しさん2019/03/24(日) 23:22:35.66ID:dT6Xb8jy
>>693
時代は静的型だよ

695デフォルトの名無しさん2019/03/24(日) 23:31:19.17ID:KmR/jJEd
現場にはcとc++が違うことを知らない奴も多いwww

696デフォルトの名無しさん2019/03/24(日) 23:38:44.81ID:GJPzxHHg
実際現場の意見入っている感じするじゃない?
どちらかと言うと実装側の都合でデグレードされたりすることが多い
コンセプトいい加減入れろよと
エラーメッセージわかりづらいし、SFINAE面倒くさいんだよ

697デフォルトの名無しさん2019/03/24(日) 23:40:40.71ID:PmamUspu
>>688
>初心者にauto使わせるのは悪くないというかむしろそうすべき
型や参照、ポインタ、修飾とかの違いでコンパイルエラーになるのを経験しないのは危険だと思うけどねぇ
推論された型を勘違いした上にたまたま通ってしまう可能性もあるわけだし

便利なのは否定しないけど静的型付け言語であるC++のパラダイムを変えるような機能ではない

698デフォルトの名無しさん2019/03/24(日) 23:46:22.50ID:dT6Xb8jy
>>697
そういうことを言っていいのは出来合いのtypedefを使わないで全ての型名を愚直に書いている奴だけ

699デフォルトの名無しさん2019/03/24(日) 23:53:18.03ID:PmamUspu
>>698
重箱の隅
>>685から読み直してみ

700デフォルトの名無しさん2019/03/24(日) 23:56:09.01ID:4oYv+rwZ
キリバンゲット!!

701デフォルトの名無しさん2019/03/25(月) 00:05:20.37ID:lHhl7aCC
>>685
この書き込み自体がもうね
江添の考え方に反対するならそう言えば良いのに、エゴとか完全に個人攻撃しちゃっているじゃない

702デフォルトの名無しさん2019/03/25(月) 01:23:08.49ID:dMeCWU6I
結局ビャーネって何を作ったの?
言語の仕様なんかは磯さんが決めてんでしょ

703 ◆QZaw55cn4c 2019/03/25(月) 01:44:06.00ID:/j2VHiDc
すべてはユダヤの陰謀だあぁぁ!!!

704デフォルトの名無しさん2019/03/25(月) 01:47:24.45ID:LV8gdQ4G
陰謀論を唱えるような人は、先入観が強すぎて不具合の原因を見つけ出せずに時間を浪費するタイプの人だから、プログラマをやめるべき。

705デフォルトの名無しさん2019/03/25(月) 07:31:49.87ID:+RmEIgLd
政治なんですよ政治

706デフォルトの名無しさん2019/03/25(月) 07:46:27.12ID:mW0SiMKO
MISRA-C 2004 の本は、トヨタなど大企業の50人が書いた本だけど、
ドワンゴ江添の本は、彼1人で書いたから、超人技!

Linux プログラミング・インタフェース、Michael Kerrisk、2012

この本とともに、神の書と言える!

KADOKAWA が言ってる。
当社はプログラミングの会社ではないけど、
なぜか、プログラマーが多いし、募集もしていますw

707デフォルトの名無しさん2019/03/25(月) 11:25:12.65ID:MuEFgcsw
>>686 裁判費用をクラウドファウンディングで捻出する予定はありますか

708デフォルトの名無しさん2019/03/25(月) 11:39:13.03ID:LV8gdQ4G
首都は「ヌルスルタン」、前大統領の名前に改称 : 国際 : 読売新聞オンライン
https://www.yomiuri.co.jp/world/20190325-OYT1T50119/

709デフォルトの名無しさん2019/03/25(月) 21:09:33.79ID:DI1df1TX
ファンクタって1回だけ使うならインスタンス生成する分関数より高コストで繰り返し使うなら生成済みのインスタンスを再利用できるから低コストという認識であってます?

710デフォルトの名無しさん2019/03/25(月) 21:21:15.56ID:CfE+HAKL
一切知りません

711デフォルトの名無しさん2019/03/25(月) 21:21:26.20ID:8+7iDICf
あってません

712デフォルトの名無しさん2019/03/25(月) 22:35:05.39ID:8zmAEr9n
>>701
あの教え方が本当に初心者のためになると思ってんの?
完全に書く側の都合による本にしかなってない。
ああいうメモリ意識の低い本で教えることはc++を使わせる上でマイナスにしかならん。

713デフォルトの名無しさん2019/03/26(火) 00:05:13.64ID:Pu4N06vt
>>712
なるだろ?
想定している利用者像が違うだけ
始めにauto使わないように慣らされたら、どうでも良い場面で型指定するバカに育って逆に面倒臭いだろ

まあ一番の害悪はnewやdelete、果てはmallocやfree使わせる奴だが

動的多次元配列でnewをループで入れ子にするのとか最悪

714デフォルトの名無しさん2019/03/26(火) 00:09:39.69ID:Xorohn3v
昨今のスクリプト言語は大抵autoじゃねえの
そうすりゃ初心者と型システムの都合なんてのはクソくらえ、だ
入門者にゃ型なんて意味無しじゃん
それに初心者にどうやってマイナスかどうか確かめたのか怪しい

ついでに型&autoとメモリ意識とは違うからな

715デフォルトの名無しさん2019/03/26(火) 00:12:14.24ID:Pu4N06vt
大体intとかあまり生で使わんよね
少なくともtypedefしておくもんじゃね

716デフォルトの名無しさん2019/03/26(火) 00:29:37.47ID:otrrnTwO
このスレ住民は、 auto によってコンパイル時には分からない意図せぬ動作で困った経験ってある?

717デフォルトの名無しさん2019/03/26(火) 01:09:42.91ID:pnr0HSCh
c++って便利なのは便利なんだが、やっぱ遅いよ
stream,asyncなんか、使い物にならん

718デフォルトの名無しさん2019/03/26(火) 01:11:09.93ID:SW23xWSB
c++が遅かったら何が速いんだ

719デフォルトの名無しさん2019/03/26(火) 01:12:08.10ID:qIOvz7c6
いや、コードを書いてるやつがいつまでも成長しない
だからコードが遅くなる
それがC++wwww

720KAC2019/03/26(火) 01:19:01.25ID:E0p6Aumv
>>715
いや、流石にintは生で使うだろ。
intで十分な意味持ってるんだが、
どんなtypedefするんだ?

721デフォルトの名無しさん2019/03/26(火) 01:22:01.94ID:pnr0HSCh
>>718
つD

722デフォルトの名無しさん2019/03/26(火) 01:34:39.27ID:SW23xWSB
そんな流行ってないもんでまともな仕事ができるかw

723デフォルトの名無しさん2019/03/26(火) 03:04:08.84ID:5DO30Xtv
Visual Studio使ってたらインテリセンスがautoをコンパイル前に展開して表示してくれるけど

724デフォルトの名無しさん2019/03/26(火) 03:05:29.57ID:5DO30Xtv
テンプレート以外で変数がコンパイル前に決まらないことってあるの?
テンプレートならauto使う必要なくね

725デフォルトの名無しさん2019/03/26(火) 03:35:14.19ID:D6PYEJQv
テンプレートだからこそ使いたい。

726デフォルトの名無しさん2019/03/26(火) 03:48:53.98ID:fe5vrK8S
>>653 >>686
経験豊富なプログラマが沢山参加しているのが事実なら、船頭多くして
船山に登る状態なのかも知れない。

727デフォルトの名無しさん2019/03/26(火) 04:01:17.90ID:fe5vrK8S
>>692
実感として、年々汚くて使いにくい仕様が増えている気がする。

728デフォルトの名無しさん2019/03/26(火) 07:21:28.81ID:JExaD8IX
>>714
たいていのスクリプト言語は動的型付け
autoと同じと考えてるならレベル低すぎ

729デフォルトの名無しさん2019/03/26(火) 09:23:59.45ID:Uaj934aJ
>>722
仕事で流行ってる流行ってないなんて関係ないだろw

730デフォルトの名無しさん2019/03/26(火) 09:42:45.74ID:SW23xWSB
流行ってない=情報がない、人がいない、資産がない=ゴミ

731デフォルトの名無しさん2019/03/26(火) 11:19:13.28ID:T41fm+6R
ビジネスの都合しか考えられないゴミ
JavaとかC#使ってれば

732デフォルトの名無しさん2019/03/26(火) 12:49:08.72ID:hIENxLfE
ビジネスの都合でc++って場合が多いだろ
ここに居るような奴等は

733デフォルトの名無しさん2019/03/26(火) 15:10:01.00ID:5W15sMAG
>>727
wとかsとか付いたのが無駄に増えて面倒になったな

int32_t とか uint32_t とか uint64_t とかは賛成

734デフォルトの名無しさん2019/03/26(火) 17:06:14.62ID:fe5vrK8S
>>733
そういう名称の問題だけに限った話ではなくて、結論から言えば、仕様を
多数決で決めてしまうと初心者向けの言語になる。スクリプト言語とかに
近いような。

構造的な問題とか、統一感的な問題とかもあるし、そもそも、C/C++の
良さまで失うような標準仕様だとかも、例えば、boost などの、
stl = standard template library なんかも、ここでは信者が多いかの
用に見えるけど、まるでC/C++とは思想の異なる全く別のスクリプト言語の
ような仕様になっている感じがする。

735デフォルトの名無しさん2019/03/26(火) 17:40:36.88ID:hIENxLfE
>>734
STL否定している時点で、そもそもC++の想定しているユーザーからは外れているんじゃね
iostreamならともかく

736デフォルトの名無しさん2019/03/26(火) 17:46:54.15ID:NEQZ2SJi
>>735
1998年くらいまでのC++はまあまあ良いと思っていたが、それ以後、別の
言語になってきてる気がする。特にここの人はSTL信者が多いが、
実は、98年くらいまでのC++とは似ても似つかないものだよ。
それを使ったコードには、往年の C の片鱗さえも残ってない。
だから、言語名から C という冠を下ろすべきだ。

737デフォルトの名無しさん2019/03/26(火) 17:51:58.82ID:hIENxLfE
信者も何も標準コンテナ使わずに何使うんだよ
自前で書くとかそれこそダメな方向だろう
eastlなんかでも使用感をなるべく標準に近づけているのに

738デフォルトの名無しさん2019/03/26(火) 18:00:25.71ID:XEttPGHl
C++98以前のC++が今より良いってどんなマゾだよ

739デフォルトの名無しさん2019/03/26(火) 18:04:33.55ID:hIENxLfE
template自体嫌いなんかな
それもうCで良いじゃない

740はちみつ餃子 ◆8X2XSCHEME 2019/03/26(火) 18:10:49.26ID:qKdh3SVz
C++ の仕様に STL などというものは存在しない。
かつて STL と呼ばれていたものは完全に C++ の一部になっているし、
仕様の他の項目と区別する方法はない。
C++ 使いが C++ の機能を使うのは当たり前だ。

気に入らないと思うのは自由だし、良くない部分だって実際あるが、
常識的には標準が用意しているライブラリは言語の利用方法を体現するものであって、
言語の基本思想と極端に乖離してるわけないだろ。

741デフォルトの名無しさん2019/03/26(火) 18:36:42.18ID:5P0efKyY
標準ライブラリだからといって使う義務はないわけで
最小限のランタイムで動くnative言語というところがc++を使う理由になってるプロジェクトが多いだろう
その目的にそぐわないのが今の標準ライブラリのデザイン
メタプログミングの遊び場とかしている

ただし20年前と比べるのはどうかと思うが

742はちみつ餃子 ◆8X2XSCHEME 2019/03/26(火) 18:44:59.17ID:qKdh3SVz
標準ライブラリをどうしても使わなきゃならんってことはないけど、
使わないための積極的な理由がなきゃ標準を選択するよ。
リソースが制限されているところで使わないっつーならそれはそれでいいよ。
それも出来るのが C++ だからな。

743デフォルトの名無しさん2019/03/26(火) 19:08:13.59ID:NEQZ2SJi
結論から言えば、STLはライブラリとしての「センス」が悪い。

POSIX の fopen()系や printf() 系などは使いやすいと思っていたが、
STLにはそれを感じないし、coutも変だったが STLもそれと同じ轍を踏んでる感じ。

744デフォルトの名無しさん2019/03/26(火) 19:17:04.87ID:+JfIlK2p
>>743
お前さんのレスからは、「僕の好みじゃないからヤダヤダ」という程度のことしか見えてこない。

745デフォルトの名無しさん2019/03/26(火) 19:19:36.63ID:NbUyZWCM
誰でも頭が良くなる、プログラムが書けるようになる方法が発見される 86052
https://you-can-program.hatenablog.jp

746デフォルトの名無しさん2019/03/26(火) 19:23:47.27ID:/YNua4WM
メイヤーズは最高に美しいライブラリと言っている

747デフォルトの名無しさん2019/03/26(火) 19:27:39.30ID:otrrnTwO
すっぱい葡萄
http://ja.wikipedia.org/wiki/%E3%81%99%E3%81%A3%E3%81%B1%E3%81%84%E8%91%A1%E8%90%84
 自分のものにしたくてたまらないにもかかわらず、努力しても到底かなわない対象である場合、
 人はその対象を「価値の無いもの」「自分にふさわしくないもの」と見なそうとし、
 それをあきらめの理由として納得し、心の平安を得ようとするものである。
 フロイトの心理学では、これを防衛機制および合理化の例とする。また、社会心理学においては、認知的不協和の例とされる。
 英語には、この寓話を元に生まれた熟語として "sour grapes" があるが、これは「負け惜しみ」を意味する。

748デフォルトの名無しさん2019/03/26(火) 19:27:52.44ID:NEQZ2SJi
やっぱりネットは駄目だ。
頭の悪いプログラマが支配してる。

749デフォルトの名無しさん2019/03/26(火) 19:29:16.09ID:fe5vrK8S
>>747
意味不明だな。誰でも入手できるライブラリで、なおかつ、
昔のC/C++より誰でも出来るスクリプト言語よりだというのに。
言ってることが逆さま。

750はちみつ餃子 ◆8X2XSCHEME 2019/03/26(火) 19:30:19.23ID:qKdh3SVz
cout よりも printf が相対的に良いという人はたくさんいると思うが、
iostream が特に駄目ってだけで、
C++ 的に見れば printf がセンスいいとはとても言えんぞ……

751デフォルトの名無しさん2019/03/26(火) 19:31:00.18ID:eqSsbUbG
昔みたいにドヤ顔してboost使う必要がなくなったのはいいことだと思うよ。標準が充実していってさ。
最初からヌエ的な発展しかありえないのはそういうものだと思うし。

752デフォルトの名無しさん2019/03/26(火) 19:31:45.68ID:5p1uA41w
>>747は多分>>743とかに向けたつもりだと思うんだが
なぜか逆の立場の>>749がダメージ受けてるという

753デフォルトの名無しさん2019/03/26(火) 19:34:05.19ID:5p1uA41w
あ、すまん逆ではなかったな

754デフォルトの名無しさん2019/03/26(火) 19:39:12.76ID:fe5vrK8S
ただ、多数決というのは、正しくも良くも無いけどな。

755デフォルトの名無しさん2019/03/26(火) 19:48:04.23ID:gp3lODpj
だったら君が最高の言語を作ればいい
設計は君の最高のセンスをふんだんに盛り込んで独裁的にやればいいよ

756デフォルトの名無しさん2019/03/26(火) 19:59:43.01ID:otrrnTwO
とりあえず全員ダメージ受けとけ。

757デフォルトの名無しさん2019/03/26(火) 20:35:50.63ID:OoUi3Qk7
stlのないC++なんてクリープ入れないコーヒーみたいなもん

758デフォルトの名無しさん2019/03/26(火) 21:11:51.51ID:ExDeReqX
>>740
C++ の仕様にSTLがないって本当かいな、と思って調べたら
確かに n3337.pdf (C++11のドラフト?) には STL という単語が出てないね。
STLのセンスが良いか悪いか、使うべきか使わざるべきか、
その辺について意見を出せるほど見識はないんで、事実の報告だけ。


『プログラミング言語C++』第4版に「STLなんちゃら」って章が
いくつか載ってるから、仕様の言葉だと思ってたわ。

759デフォルトの名無しさん2019/03/26(火) 21:17:41.21ID:zBAPpXX5
プログラミング言語C++に後にSTLとなるテンプレートライブラリ作ってストロストラウップに勧めに来た奴が居たので
ストロストラウップが試したら、彼が信条とする「良いライブラリ10箇条に全部あてはまってこりゃスゲーとなったという
エピソードがあったような
なかったような

760デフォルトの名無しさん2019/03/26(火) 21:25:01.06ID:5p1uA41w
STLは俗称だし、定義も曖昧
皆そう呼ぶのが便利だからSTLという呼び方してるだけ

HPの研究所で働いてたAlex Stepanovが発案して94年あたりに持ち込んだっぽい
ライブラリじゃなくて、いわゆる「汎用コンテナ(データ構造)ライブラリ」についてBjarneが重要と考えたチェックリストのほぼ全部にパスした

761デフォルトの名無しさん2019/03/26(火) 21:30:19.89ID:pGZA6Dfc
c++の仕様にSTLが無くてもrange-based forのようにSTLが備えてるbegin,endに依存した構文は出てる。

762デフォルトの名無しさん2019/03/26(火) 21:41:34.25ID:aW2tbkLS
STLつってもどうせvectorとmapくらいしか使っとらんだろ。
まあそれで十分なんだが。

763デフォルトの名無しさん2019/03/26(火) 21:52:00.50ID:2lj4xCZe
STLという言葉を発することがもうほとんどなくないか?
stdは使うけど、まあどっちも輪郭のはっきりしない言葉だ

764デフォルトの名無しさん2019/03/26(火) 21:53:11.01ID:D6PYEJQv
STLは洗練されている。
素晴らしいデザイン。
コンセプトが入ったらさらに洗練できると思う。

765デフォルトの名無しさん2019/03/26(火) 21:58:59.96ID:5P0efKyY
>>742
リソースが制限されてるというより、最大限のパフォーマンス出す場合な
つまりリソースがリッチかどうかは直接関係ない
AAAのpcゲームとかね

パフォーマンスそこそこでいいならc++なんか使う理由がない
遊び以外

766はちみつ餃子 ◆8X2XSCHEME 2019/03/26(火) 22:03:45.01ID:qKdh3SVz
>>765
計算量はリソースの一種だで。

767デフォルトの名無しさん2019/03/26(火) 22:05:23.77ID:Pu4N06vt
最大限のパフォーマンスを出すために作ったeastlみたいなのも標準の使用感踏襲するくらいには標準の設計は良くできているよ

768デフォルトの名無しさん2019/03/26(火) 22:05:31.83ID:D6PYEJQv
STLはわしが育てた。

769はちみつ餃子 ◆8X2XSCHEME 2019/03/26(火) 22:17:08.86ID:qKdh3SVz
そうか。

770デフォルトの名無しさん2019/03/26(火) 22:23:19.39ID:d5snerrZ
tupleはSTL?

771デフォルトの名無しさん2019/03/26(火) 22:33:50.26ID:5P0efKyY
>>767
移行が楽になるようにむやみにapi変えないのはソフトウェアの定石
それより変わったところ、拡張されてるところに注目しようか

772デフォルトの名無しさん2019/03/26(火) 22:49:38.25ID:D6PYEJQv
C++2zには俺の作ったライブラリが標準搭載されると思う。

773デフォルトの名無しさん2019/03/26(火) 23:13:14.99ID:T41fm+6R
天下のマイクロソフトが考えたATLでもいいんだぞ

774デフォルトの名無しさん2019/03/26(火) 23:32:43.00ID:zBAPpXX5
ATL(adult T-cell leukemia-lymphoma)は語呂が悪い

775デフォルトの名無しさん2019/03/26(火) 23:38:15.00ID:zBAPpXX5
std::tuppleはPythonフリークが無理矢理ねじ込んだのではないか
C++11で追加された可変長テンプレートなくして有り得なかったコンテナやし
std::pairと被っとる

776デフォルトの名無しさん2019/03/26(火) 23:43:43.21ID:T41fm+6R
tupleなんかどの言語にもあるだろ
現代の言語の基本的概念の一つで当然サポートされるべき

777デフォルトの名無しさん2019/03/26(火) 23:49:19.01ID:WJaRDiZ5
ライブラリでサポートだけどな
これがダメなところ

778デフォルトの名無しさん2019/03/27(水) 00:07:37.22ID:QPwampGA
何で?

779デフォルトの名無しさん2019/03/27(水) 00:38:40.54ID:Wsy7XdfH
>>759
じゃあ、ストロストラウップの物を見る目が無い。
彼自身のセンスが悪いんだ。

780デフォルトの名無しさん2019/03/27(水) 00:42:46.01ID:bx8pTnoV
なんちゃらラウップは言いにくいからいつも
ビョーーンさん、と呼んでいる

781デフォルトの名無しさん2019/03/27(水) 00:47:30.04ID:Mw4em8Pz
tupleは型関数でも重宝するよね

782デフォルトの名無しさん2019/03/27(水) 00:56:42.26ID:ZXIZSYy+
タプルはなにが嫌といって get<0> とかいうのがものすごく嫌
要素が4個ぐらいになったら1年後ぐらいにコード書き直そうとして
・・えっとこの値取りだすの get<1> だっけ? get<2> だっけ?とか絶対なるから使わない

783デフォルトの名無しさん2019/03/27(水) 00:58:48.50ID:DfX99uD1
そんな貴方にenum定数

784デフォルトの名無しさん2019/03/27(水) 01:03:41.91ID:Mw4em8Pz
いい加減enumにメンバ関数定義させろと。
enum classの時にどうにかすべきだった気もするが。
後は静的なリフレクションも
enumと文字列の相互変換とか殆ど定型コードになるのにいちいち書くのが面倒すぎる。
マクロで書くのも微妙だし

785はちみつ餃子 ◆8X2XSCHEME 2019/03/27(水) 02:16:29.42ID:1nw30Wbv
>>779
センスがあるか無いか知らんけど、
すっぽすっぽ先生が是とした以上は C++ 的ではあるはずだろ。
それが駄目なら C++ が駄目だし、駄目なので君は使わなくていいよ。

786デフォルトの名無しさん2019/03/27(水) 02:25:21.92ID:Mw4em8Pz
標準コンテナ使わないらしい人の
抜群のセンスを見てみたいので、コードの一部でも見せて欲しいものだな

787デフォルトの名無しさん2019/03/27(水) 02:59:41.39ID:V3NaDuAs
Eigenが絶妙に不便なんだけど行列演算を標準でサポートする予定ってあるの?

788デフォルトの名無しさん2019/03/27(水) 03:31:56.74ID:Wsy7XdfH
>>786
アイデア盗まれるだけ損。

789デフォルトの名無しさん2019/03/27(水) 06:12:39.11ID:0QkCU47u
センスが悪いというだけで具体的にどこがどう悪いか、どんなだったらセンスが良いのか言わないと、説得力ゼロだな。

790デフォルトの名無しさん2019/03/27(水) 06:31:30.44ID:J3LATpLk
>>743
+1

791デフォルトの名無しさん2019/03/27(水) 06:40:01.31ID:J3LATpLk
>>780
禿

792デフォルトの名無しさん2019/03/27(水) 06:52:27.00ID:Ojl0EpZo
>>784
定型文ならtemplateで書けないの?

793デフォルトの名無しさん2019/03/27(水) 07:12:11.84ID:Mw4em8Pz
>>792
やりたいことは単にenumの値の識別子とその文字列を対応付けるだけなんだが、templateで書けるの?

enum class Color {
Red,
Green,
Blue
};
inline auto to_string(Color c)
{
switch (c){
case Color::Red:return "Red";
...
}
}
こんな感じのことがしたい

794デフォルトの名無しさん2019/03/27(水) 07:24:00.67ID:DfX99uD1
マクロ Stringizing Operator (#) を使うしかないのでは。

795デフォルトの名無しさん2019/03/27(水) 07:44:38.63ID:QPwampGA
>>789
×センスが悪い
○自分の趣味合わない
だから説明する必要なし嫌い嫌い言っておけばおk
ちょうど114514回目のstd:get嫌い民も現れたところだ

796デフォルトの名無しさん2019/03/27(水) 07:59:25.35ID:KDFmmUkx
ストラウストラップも例外入れるかどうかあたりまでは
かなり真剣に仕様を考えてた印象だけれどそれ以降はタガが外れた感じだ。
最近はもうどうしようもなくなってる。

797デフォルトの名無しさん2019/03/27(水) 08:00:04.09ID:Ojl0EpZo
>>793
その処理ならmapかunordered_map使うのが良くないだろうか?

798デフォルトの名無しさん2019/03/27(水) 08:06:10.74ID:QPwampGA
なお誰もストラウストラップに意見を出せるほどプログラミング言語の勉強をしていないもよう

799デフォルトの名無しさん2019/03/27(水) 08:07:01.17ID:Kgbo0Zp4
>>797
逆変換はunordered_mapだな

文字列化の方はswitch使うのが一番コンパイラがいい感じのコードにしてくれる

800デフォルトの名無しさん2019/03/27(水) 08:25:16.34ID:HgdvOlrd
関数の引数として vector<int> を参照渡ししたいのですが、これのデフォルト引数を空の vector<int> にする方法ってありますか

801デフォルトの名無しさん2019/03/27(水) 08:33:50.59ID:pdL3Pyxp
std::vector<int> &v = std::vector<int>() じゃないのん

802デフォルトの名無しさん2019/03/27(水) 08:43:24.12ID:HgdvOlrd
>>801
参照渡しでもそのやり方できますか?

803デフォルトの名無しさん2019/03/27(水) 08:45:04.79ID:pdL3Pyxp
やればわかる

804デフォルトの名無しさん2019/03/27(水) 09:24:45.56ID:7IO5xMdH
const?

805デフォルトの名無しさん2019/03/27(水) 09:33:08.23ID:p4oEJ8zd
>>786
センスうんぬんを言ったのはおれじゃないけど、
標準ライブラリ使わないという主張に対して、ソースがエレガントかどうかを問うのは目的がわかってない

端的にいうと標準ライブラリのオーバーヘッドが許容できないんだよ
多少記述が汚くなろうがパフォーマンス引き出すのが優先

cとc++のベンチだと結局cの方がいいスコアになってること多いだろ
(全てがそうでないのは知ってる)
そこをcと同等まで引き上げるわけだ

806デフォルトの名無しさん2019/03/27(水) 09:36:50.33ID:QPwampGA
だったらC使ってれば
それ以外の選択肢無いんだから

807デフォルトの名無しさん2019/03/27(水) 09:40:51.50ID:p4oEJ8zd
>>806
そこはアセンブラ使えばというところだろ

808デフォルトの名無しさん2019/03/27(水) 09:40:55.11ID:pdL3Pyxp
>>804
VC2017だとconstじゃなくてもいけた
てか参照のデフォルト引数ってconst限定だったのか
仕様変わったのかVCだけおかしいのか知らんけど

809デフォルトの名無しさん2019/03/27(水) 09:45:55.40ID:p4oEJ8zd
いうまでもなく、ボトルネックでないところは労力はかけない
メンテが楽な手法を使う
それに完全にゼロコストなものは普通に使うさ

810デフォルトの名無しさん2019/03/27(水) 09:52:34.13ID:U9bjaUkC
標準コンテナでcより遅くなるってどんなパターン?
単方向listで十分なのにlistだと双方向とかそんなやつ?
あんまりlist使わんからよくわからんが
vectorは使い方を余程間違えない限り大抵代替品より速いような

メモリ確保回りはallocator使えばいいし
data使えばただのメモリブロックだよね

811デフォルトの名無しさん2019/03/27(水) 10:01:31.18ID:QPwampGA
99%iostreamのこといってるからな

812デフォルトの名無しさん2019/03/27(水) 10:04:51.88ID:tQ4XPcUj
>>810
要素の追加時に容量の拡張が必要かどうかのチェックが入ったりするから、オーバーヘッドはゼロではないよ

813デフォルトの名無しさん2019/03/27(水) 10:08:24.05ID:U9bjaUkC
>>812
それpush_back or emplace_back使っているのが悪いのでは
cの同等コード書いてもチェックは必要だろ
チェック要らんことが分かっているならresizeしておけ

814デフォルトの名無しさん2019/03/27(水) 10:12:49.51ID:QPwampGA
Cで作っても同じでワロタ

815デフォルトの名無しさん2019/03/27(水) 10:22:17.37ID:tQ4XPcUj
>>813
便利なものがあれば人間は使ってしまうもんだ
その積み重ねがパフォーマンスの差に繋がる
俺は一般には便利なものを使って時間を節約することでボトルネック解消にかける時間を確保でき、
結果的にパフォーマンスはより高くなると思うけど、そこはスケジュールの制約次第だな

816デフォルトの名無しさん2019/03/27(水) 10:29:47.46ID:9ko5ghKo
Cマスター「C++は配列に追加するときにサイズチェックするから遅い(キリッ」

wwwwwwwwwwwwwwwwwwwwww
こんな雑魚がでかい顔してるからいつまでもセキュリティホールがなくならないんすなあ

817デフォルトの名無しさん2019/03/27(水) 10:34:12.90ID:9ko5ghKo
Cマスター「要素追加時にサイズチェックするという便利さの積み重ねがパフォーマンスを落とす(キリッキリッ」
やべえ笑い死にしそう
笑い事じゃないけど

818デフォルトの名無しさん2019/03/27(水) 12:49:47.89ID:DY72tOrL
プロファイラで調べて本当に問題あるならどうにかするけど
ただわざわざc的に書いても大抵誤差レベルでしか変わらんよね
どちらかと言うとバッファの確保の仕方を工夫した方が効果が大きい

819デフォルトの名無しさん2019/03/27(水) 13:05:12.78ID:fzYgEwLp
>>816
トレードオフもわからん雑魚

820デフォルトの名無しさん2019/03/27(水) 13:06:52.67ID:C+1U7WOU
>>810
・以下、要素数が N とする。

・C/C++ の原定義の固定長配列は、要素の代入に1クロックしかかからない。もちろん、
 O(1)で、物凄く速い。なお、固定長なので「代入」であり「追加」ではない。

・Listはリストだから1個の要素の追加はO(1)で、要素数に依存せず安定した速度が出るが、
 内部で、newされるはずなので、最低でも170クロックほどかかってしまう。

・Vectorは動的配列だから、最悪のケースでは要素の追加にO(N)の時間がかかり固定長配列より遅くなる
 と思う(よく知らない)。

821デフォルトの名無しさん2019/03/27(水) 13:34:58.24ID:tQ4XPcUj
>>817
複数の要素を追加するとき、わざわざ事前にまとめてリサイズするか?ということだよ
1要素ずつ処理するのは生ポならかえって面倒になることが多いし、見た目にいかにも非効率そうなコードに見えるから、大抵の人は自然にそうするだろう
一方vectorだとどうだろうね
心理的な問題なの

822デフォルトの名無しさん2019/03/27(水) 13:45:54.22ID:tQ4XPcUj
同じようなことはvectorに限らず一般的に言ええて、
例えばC++はRTTIの便利さ故にCと比較してプログラマが無駄なメモリの確保や破棄を行いやすい傾向がある
逆にCだと無駄に大きなバッファ作りがちだったり、バッファの使いまわしによりスレッドセーフでないコードを書きがちであったりする

823デフォルトの名無しさん2019/03/27(水) 13:46:41.13ID:tQ4XPcUj
すまんRTTIじゃなくてRAIIな

824デフォルトの名無しさん2019/03/27(水) 14:07:44.29ID:xtV64SvS
クロックなんてわからんじゃろ

825デフォルトの名無しさん2019/03/27(水) 14:29:28.16ID:t7f2HshG
VC++2017なんだけど
デストラクタで投げた例外をキャッチできずabortするのはVC++の仕様?
RAIIとラムダを駆使した自作finally内で
例外投げたらキャッチできずabortしてハマったわ
デストラクタ内で例外投げるのが汚いのは知ってたが
そうか、自作finallyもデストラクタ利用してるからダメなのかな

826デフォルトの名無しさん2019/03/27(水) 14:35:28.06ID:fzYgEwLp
デストラクタはデフォルトでnoexceptやで

827デフォルトの名無しさん2019/03/27(水) 14:54:30.22ID:t7f2HshG
サンクス
デストラクタをnoexcept(false)指定したらcatch出来たわ

てことは自作finallyは念のためnoexcept(false)指定にしたほうが良いのか
それか自作finally内で例外投げるのは完全禁止にするか
悩むわ

828デフォルトの名無しさん2019/03/27(水) 14:56:55.41ID:t7f2HshG
まぁでもよく考えたら
例外が発生して自作finallyが実行されてる時に
さらに自作finally内で例外飛ばしたら二重例外になるから危険か
なるほどなるのど

829デフォルトの名無しさん2019/03/27(水) 17:38:06.36ID:8XRRZQAn
>>820
意味がわからん
そもそもCでも固定長配列の代入は実データのコピーを伴いO(n)だ
アドレスや参照のやり取りならO(1)

830デフォルトの名無しさん2019/03/27(水) 17:50:46.31ID:fzYgEwLp
全体じゃなくて一要素やろ?

831デフォルトの名無しさん2019/03/27(水) 17:55:38.42ID:8XRRZQAn
あーそう言うことか
固定長的に使いたいなら始めにresizeするだけじゃない

便利だからチーム内で使ってしまう人がいることを問題にするより、使わずにいちいち独自コードで処理されて余計遅くなったり、バグ仕込まれたりする方が余程ヤバイだろ

832デフォルトの名無しさん2019/03/27(水) 18:00:35.88ID:xtV64SvS
先生、配列の長さにリミットを設ける方法を教えてください

833デフォルトの名無しさん2019/03/27(水) 18:00:36.53ID:fzYgEwLp
まぁそれでも範囲チェックは入るし、常にヒープ使われるし
それすら問題になるようなクリティカルな場所なら生配列なりarray使えばいいと思うけど
適材適所じゃないかねぇ

834デフォルトの名無しさん2019/03/27(水) 18:03:25.00ID:97C5Fzq7
operator[]なら範囲チェック入らんよ

835デフォルトの名無しさん2019/03/27(水) 18:14:58.29ID:QPwampGA
末尾に追加の話だろ

836デフォルトの名無しさん2019/03/27(水) 18:15:04.13ID:fzYgEwLp
うお、マジだ誤解してた

837デフォルトの名無しさん2019/03/27(水) 18:20:39.73ID:fzYgEwLp
>>836>>834
まぁ要素数わかってて末尾に入れてくのはナンセンスやね
速度を気にしない場所ならどうでもいいけど

838デフォルトの名無しさん2019/03/27(水) 18:39:59.51ID:ZT8Ntgus
よくあの時代にこのような洗練されたライブラリを設計できたものだと思います。
もしかすると宇宙人にもらったのかも。

839デフォルトの名無しさん2019/03/27(水) 20:06:12.42ID:KDFmmUkx
配列の長さチェックのオーバーヘッドとかなんかものすごくデジャブ感のある議論だな。
肯定、否定どちらにしてもマウンティングかましたくなる題材なんかね。

840デフォルトの名無しさん2019/03/27(水) 21:09:05.61ID:p4oEJ8zd
標準コンテナで問題になるのはやっぱりヒープだよ
境界チェックとか仮に無断だとしても一定時間で終わる処理
ヒープ使われると最悪システムコールで負荷変動大きすぎる

ちなみにアロケータは要素数で管理できないから面倒
あとvectorで最初にreserveしても最大長越えないチェックが必要で面倒

でこれらを解決するコンテナがboostにあるのでそれを使う

841デフォルトの名無しさん2019/03/27(水) 21:18:02.40ID:p4oEJ8zd
あと標準ライブラリのリンクリストはそもそもの設計が非効率
(クリーンな設計ではあるが)
素朴なcの実装と比べてかなり差がでる
これも代替がboostにある

842デフォルトの名無しさん2019/03/27(水) 21:25:03.72ID:4bSYNNTL
>>835
末尾追加の話なら、Cでも同じだけコストかかるだろ。
>>840
arrayならstackに積まれる。

843 ◆QZaw55cn4c 2019/03/27(水) 21:31:48.60ID:WdEToVPN
>>820
なんか変じゃないですか?
list や vector のときは要素の「追加」なのに、生配列だけ要素の「代入」と設定するのですか?
list や vector で要素の「追加」を考察するのなら、生配列の場合も要素の「追加」を検討してください

844デフォルトの名無しさん2019/03/27(水) 21:38:22.09ID:p4oEJ8zd
>>842
arrayは固定長
欲しいのは最大長を事前に確定しつつ、その範囲で可変長で使えるvector
という話ね

845デフォルトの名無しさん2019/03/27(水) 21:45:52.93ID:9ko5ghKo
ここのCマスター様は、現在の配列長と挿入インデックスのチェックしてreallocしてなんていう
パフォーマンスの悪い便利さに甘えた処理などしない
堂々とv[N]に無条件代入を行って超高速O(1)追加を実現するのだ

846さまよえる蟻人間 ◆T6xkBnTXz7B0 2019/03/27(水) 21:50:08.37ID:X5Tg+wiF
事前のresizeかreserveでええんとちゃう?

847デフォルトの名無しさん2019/03/27(水) 21:51:09.94ID:t38PuBqi
事前に分かるならスタック固定長でいいじゃん

848デフォルトの名無しさん2019/03/27(水) 22:02:47.67ID:gbxz82US
reserve あれば困る事なんてないやろ

849デフォルトの名無しさん2019/03/27(水) 23:54:55.06ID:QPwampGA
一般的には無いよ
局所的な話を持ち出してああだこうだ言ってるのが今
そして何をするつもりかは誰も知らん

850デフォルトの名無しさん2019/03/28(木) 00:42:33.33ID:yLTGLAEP
>>829
要素数がN、データの大きさは4バイト、と仮定した場合の話。

851デフォルトの名無しさん2019/03/28(木) 00:47:43.37ID:yLTGLAEP
>>843
4バイト整数のN要素の配列を仮定しているが、Cの単純な固定長配列だと
4バイト整数はコピーするのが当然。
ところが、Listだと、「追加」するしかない。動的配列である
Vectorも、基本的には「追加」が基本。そうでなければ「動的」と言わない。

852デフォルトの名無しさん2019/03/28(木) 00:53:54.09ID:AOcR4eqo
vector.data()、basic_string.c_str()はCと同じの配列の連続アドレスを保証する数少ないインターフェースでしょ。

853デフォルトの名無しさん2019/03/28(木) 01:07:32.08ID:Csoqrb4z
正直stringがゼロ終端を保証したのはちょっとどうかなと思ってる
いや便利なんだけどさ・・

854デフォルトの名無しさん2019/03/28(木) 01:15:59.09ID:eE4sGejC
>>853
特に不都合無いのだからいいだろう

855デフォルトの名無しさん2019/03/28(木) 01:39:16.25ID:AOcR4eqo
アドレスと一緒にバッファサイズを渡せないAPIが世の中に無数にある。ヌル終端は優しさ。

856デフォルトの名無しさん2019/03/28(木) 03:12:24.24ID:0b3fKrWQ
そもそも printf が

857デフォルトの名無しさん2019/03/28(木) 05:04:36.64ID:fRHhg+J8
>>851
なぜかC言語は固定配列でC++だと動的が基本らしい
前提違うのに速度ガーとか言われてもなぁw

858 ◆QZaw55cn4c 2019/03/28(木) 05:12:10.50ID:3LZYwZb1
>>855
ヌル文字をデータとして扱えない、という決定的なウィークポイントが発生しますね…
昔、ツールがヌル文字を扱えない、という点が後から発覚してとても困った経験があります

859デフォルトの名無しさん2019/03/28(木) 07:13:39.49ID:mfvsZ6Gk
>>851
ようゴCマスター様
マスター様は知らなくてビックリするけど、C++ではvectorやlistは要素数が実行時に決まるときに使うんだ
そして驚くべきことに、Cにも要素数が実行時に決まるときに使うための愚かしい機能がなぜか備わってるんだ
reallocっていうらしいんだけどさ
使うときは確保済みのバッファの長さをいちいち調べて、足りなかったら再確保して必要に応じて要素を全部コピーするらしいっすよ
もちろんそんな馬鹿げたオーバーヘッドを払う奴はC++かぶれのド素人だけだけどな
真のCプログラマは一度確保した配列の自由なインデックスにコピーすることでvectorの無意味なオーバーヘッドを回避し超高速O(1)を実現するのだ

860デフォルトの名無しさん2019/03/28(木) 08:00:11.54ID:PaLXcDGr
なんかツッコもうと思ったら既に>>813に書いてあった

861デフォルトの名無しさん2019/03/28(木) 10:11:22.12ID:yLTGLAEP
>>857
C++の配列は固定長が基本。
STLやboostは、C++とは異なる。

862デフォルトの名無しさん2019/03/28(木) 11:32:51.21ID:yLTGLAEP
>>859
>そして驚くべきことに、Cにも要素数が実行時に決まるときに使うための愚かしい機能がなぜか備わってるんだ
>reallocっていうらしいんだけどさ

Cでは、realloc は推奨されて無い。
Cで、要素数が実行時に決まるような集合を扱いたい場合は、自前で
ポインタでリンクする、リンクリストを使う。
毎回それをやると間違いやすいので、賢い人は、自前でリストライブラリを作って
それを用いて操作する。

863デフォルトの名無しさん2019/03/28(木) 11:39:08.71ID:dMtNAb9A
Linuxのソースなんだけど
close(0) close(1) close(2)って書いてあるの見つけたのだが
これってなんの効果が期待できるの?
ファイルディスクリプタ?だと思っていてオープン等をした値番号だと思ってたけど、0 1 2に該当するのがなんなのかと

864デフォルトの名無しさん2019/03/28(木) 12:01:08.00ID:5UOqavsG
stdin, stdout, stderr

865デフォルトの名無しさん2019/03/28(木) 12:18:22.29ID:des+yyG9
iteratorでstartとendの中に納まってることが保証されてるのに
各要素にアクセスするときにまた範囲チェックとかあると無駄やん
そりゃ書こうと思えばいくらでも危険なコードは書けるけど
安全なときはそういうの省いて高速化出来るのがCの良いところなのに
(レジスタの値が知らない間に壊れても正常に動くようにとか言ってるなら知らん)

866デフォルトの名無しさん2019/03/28(木) 12:31:30.80ID:yd30y0n6
>>861
固定とか決めつけてるのを別にしても何を言いたいのかさっぱりわからん

867デフォルトの名無しさん2019/03/28(木) 12:34:41.89ID:OvbnMtjj
>>862
で、そのオレオレ車輪の再発明クソライブラリは
std::vectorやstd::listより何が優れてるの?
範囲チェックしないから高速wなの?

868デフォルトの名無しさん2019/03/28(木) 12:45:22.23ID:yiBU3VRL
差異があるとすれば、deep copyだね
決めつけ良くない

869デフォルトの名無しさん2019/03/28(木) 12:48:36.64ID:ADAikd1k
>>862
ランタイムでサイズが決まる動的配列にリンクリスト使うのはさすがにダメすぎる

870デフォルトの名無しさん2019/03/28(木) 12:56:24.56ID:TvMamSuP
>>863
デーモンになりたいんだろうな

871デフォルトの名無しさん2019/03/28(木) 13:00:41.99ID:yLTGLAEP
>>869
そもそも、C で出来ないことは、コンピュータのアーキテクチャ上、ほぼ
絶対に出来ない事。
だから、Vectorが、効率面でCを上回ることは絶対に有り得ない。

872デフォルトの名無しさん2019/03/28(木) 13:05:17.92ID:AOcR4eqo
>>869,871
ソートはどうなの? (・∀・)ニヤニヤ

873デフォルトの名無しさん2019/03/28(木) 13:06:22.45ID:AOcR4eqo
春休みでスレの勢いが上がり、スレの品質が落ちた。

874デフォルトの名無しさん2019/03/28(木) 13:22:32.10ID:des+yyG9
義務教育でプログラミングとか教えたら
もっと変なの増えそう
python界隈に来ないで欲しい

875デフォルトの名無しさん2019/03/28(木) 13:29:56.71ID:t1sztID7
>>874
こういう金融とかの兵隊養成用だから競合はしないと思う
C++相談室 part141 	->画像>9枚

876デフォルトの名無しさん2019/03/28(木) 13:49:18.36ID:KoUoPeo+
そのへんの化石言語はいい加減消滅させるべき

877デフォルトの名無しさん2019/03/28(木) 13:51:20.07ID:0CdADxX3
化石じゃないまだドメイン次第で現役Fortranだってこの間新しい仕様出たし!ってつっかかられるぞ
08をちゃんと実装したコンパイラ出してから言ってくれよって気持ちだが

878デフォルトの名無しさん2019/03/28(木) 14:01:46.15ID:Csoqrb4z
>>873
お前が言うな

879デフォルトの名無しさん2019/03/28(木) 14:03:11.91ID:CwLqpfbs
_____(コボル)

答え COBOL

_____(フォートラン)

答え FORTRAN

これのどこが問題集やねん!

880デフォルトの名無しさん2019/03/28(木) 14:08:39.40ID:t1sztID7
来年度からこれが流通するぞ

881デフォルトの名無しさん2019/03/28(木) 15:14:03.54ID:KoUoPeo+
ほんと役人どもがやることはいつもずれてる

882デフォルトの名無しさん2019/03/28(木) 16:17:03.97ID:yLTGLAEP
>>880
その言葉を見る限り、あなたは日本人じゃない気がする。
この文脈で、あなたが言いたかったのは、
「来年度からこれが流通するぞ」ではなく
「来年度からこれが常態化するぞ」
という事だったと思うから。

883デフォルトの名無しさん2019/03/28(木) 17:38:04.05ID:ADAikd1k
>>871
それ言い出すなら逆もまたしかりだろ
extern "C"すればCで出来てC++に出来ないことはないぞ。

884デフォルトの名無しさん2019/03/28(木) 17:39:39.59ID:ADAikd1k
だいたいC++にはasmがあるしな
アセンブラで出来ることは出来るんじゃね

885デフォルトの名無しさん2019/03/28(木) 18:18:56.58ID:JEyrctWP
>>881
おまえらが役人からずれてるんだろ。
日本は公務員のための国やぞ。

886デフォルトの名無しさん2019/03/28(木) 18:20:50.90ID:KoUoPeo+
それは一理ある
日本は官僚統治国家だから

887デフォルトの名無しさん2019/03/28(木) 18:30:14.54ID:t1sztID7
公僕が・・・舐めてると潰すぞ

888デフォルトの名無しさん2019/03/28(木) 18:32:28.62ID:des+yyG9
888

889デフォルトの名無しさん2019/03/28(木) 18:42:36.05ID:pafVG92t
でも、ターゲットにRubyとC++を選択したのは正解だと思ってるよ。

890デフォルトの名無しさん2019/03/28(木) 18:43:27.34ID:KoUoPeo+
Rubyはない

891デフォルトの名無しさん2019/03/28(木) 18:45:09.06ID:yLTGLAEP
日本政府は日本人と将来の日本の年金などのための政治を行えばいいのだから、
日本人が作ったものを使うように推進するのは悪いことではない。
余りにも使いにくいもので無い限りは。
だからWordをやめて一太郎を使うようにしたり、Rubyを使うようにしたり
するとすれば、それは英断だよ。

892デフォルトの名無しさん2019/03/28(木) 18:45:11.14ID:JEyrctWP
RubyはWindowsでまともに動かないから、Linux採用するのかな。

893デフォルトの名無しさん2019/03/28(木) 18:48:52.21ID:pafVG92t
>>892
自分の環境では、Windowsで普通に動いてると思ってるけど。

894デフォルトの名無しさん2019/03/28(木) 18:49:56.61ID:JEyrctWP
関数型教えればいいのに。

895デフォルトの名無しさん2019/03/28(木) 18:58:40.35ID:KoUoPeo+
教えるなら実用性と手軽さからしてC++、Javascript、python

896デフォルトの名無しさん2019/03/28(木) 18:59:00.99ID:yiBU3VRL
>>883
えっ配列初期化子がC++でも使えるように?

897デフォルトの名無しさん2019/03/28(木) 19:00:37.17ID:des+yyG9
>>891
国産のを応援するのは判るが
それが利権になってただのクズが集まって来たり
金貰うと進歩が止まったりするのが日本の悪いところ

898デフォルトの名無しさん2019/03/28(木) 19:04:55.98ID:KoUoPeo+
国産であっても良いものでなければ応援するべきではない
Rubyは滅ぶべき言語トップ10に入る

899デフォルトの名無しさん2019/03/28(木) 19:07:54.30ID:OttlZ3Q/
>>896
書き方同じじゃなくても同様の事が出来るだろ
cで出来ないこと無いって話にたいしてなのだから

900デフォルトの名無しさん2019/03/28(木) 19:20:56.01ID:pafVG92t
PythonとRubyだったら、Rubyもそんなに悪くは無いと思う。
Pythonは可読性が悪いように感じる。空白インデントだけでブロックや
関数の終わりを決めてしまうので、内部関数が終わってるかどうか分からず、
人の書いたソースが読みにくくて困ったことがある。

901デフォルトの名無しさん2019/03/28(木) 19:39:26.72ID:lj2W5NqA
C++er的には
動的型の時点でノーサンキューだろ
そういうのが嫌でC++使ってるんじゃないのか

902デフォルトの名無しさん2019/03/28(木) 19:40:51.32ID:lj2W5NqA
特にRubyは教祖様が
絶対に型は書きたくない
って駄々こねてるから

これはもう日本のガラパゴス化が一層激しくなるな

903デフォルトの名無しさん2019/03/28(木) 19:43:44.68ID:jnmpmBFr
pyは読みより書きの方が問題
間違えてインデントけずっても気づかないことが多い

904デフォルトの名無しさん2019/03/28(木) 19:51:12.67ID:WN0VVTEM
>>901
個人的には型のある言語の方が好きだ。
型があった方が、変な問題にはまる率が下がるので開発が速く進む。
大規模開発には絶対、型が必要。
初心者にも大人気言語だった元祖のBASICも、Aが浮動小数点型、A$が文字列型で、
確か、A% が整数型。配列は DIM A(100) や、DIM B%(10,10) などで、
宣言は省略できる場合が多いが、ちゃんと型はあった。
Rubyなどは、A にあらゆる型が入れられるので、関数呼び出しなどが
かなり怖い。間違っていても問題の切り分けが出来ないので「はまったら」大変。
だから、とても慎重にコードを目で見ないといけなくなる。

905デフォルトの名無しさん2019/03/28(木) 19:52:41.47ID:wxB03uV3
>>903
Pythonで、良く分からなかったのが、インデントの空白の個数。
2個でも4個でも好きな量を選べるのだろうか?

906デフォルトの名無しさん2019/03/28(木) 19:55:00.97ID:KoUoPeo+
言語仕様上は揃ってさえいればいい

907デフォルトの名無しさん2019/03/28(木) 19:59:44.37ID:WN0VVTEM
>>906
やはりそうだったんだ。だから余計に解読できなかったんだな。
エディタでカラムを数えたり、上まで戻ったりして、やっと認識していた。
でも不安が残った。ブロックが終わってるのかどうか物凄く分かりにくい。

908デフォルトの名無しさん2019/03/28(木) 20:02:46.54ID:eE4sGejC
今のPythonはカオスだからな
見易い文法目指していたはずが
内包表記やらラムダやら見づらくする文法が増えて推奨までされている

フレーム作るか否かもわかりづらいことこの上ない

909 ◆QZaw55cn4c 2019/03/28(木) 20:22:58.04ID:3LZYwZb1
>>851
「実装A, B, C があり、機能 f について、A.f, B.f C.f のそれぞれに、こんなメリデメがあります!」
なら理解できますが、>>820 は、
「A.g, B.f, C.f のそれぞれにこんなメリデメがあります!」
でしょう?それって変じゃないですか?
A.g とかじゃなくて、A.f で比べて欲しいのですが?

910デフォルトの名無しさん2019/03/28(木) 20:33:45.97ID:BoT1RII7
>>908
最近の言語全般に言えることだな。
無駄機能入れすぎなんだよ。
クソみたいなシンタックス入れるくらいならライブラリを充実させるほうが正しい。

911デフォルトの名無しさん2019/03/28(木) 20:46:24.22ID:jnmpmBFr
メリデメっていうやつw
すまんがめっちゃ底辺臭する

912デフォルトの名無しさん2019/03/28(木) 20:56:41.12ID:JEyrctWP
ハイクラスの人はなんて言うんだよ。

913デフォルトの名無しさん2019/03/28(木) 21:07:04.95ID:siqlJJfC
>>882
お前さんの言い換えた方の日本語もかなり不自然だよ。他人の言葉尻をとらえてどうこう言えるほど、お前さんも日本語が得意な訳ではないだろう。
そもそも、普通の人はそんなことで日本人かどうか気にしたりしない。

914デフォルトの名無しさん2019/03/28(木) 21:20:29.56ID:1SvA7cSr
>>858
文字列の途中に格納することは新仕様でもできるでしょ?

915 ◆QZaw55cn4c 2019/03/28(木) 21:28:18.93ID:3LZYwZb1
>>912
「不正確な略語を口にするのは doubleplus-unwise である」
という事実をジョージ・オーウェルに学びました、彼は略語と esperant は毛嫌いしていたようです
https://ja.wikipedia.org/wiki/%E3%83%8B%E3%83%A5%E3%83%BC%E3%82%B9%E3%83%94%E3%83%BC%E3%82%AF

916デフォルトの名無しさん2019/03/28(木) 22:54:40.69ID:e7Ukr6X3
double型の変数a、bがあるとして、
a/bが整数かどうか判定するには

917デフォルトの名無しさん2019/03/28(木) 22:55:53.73ID:Qz7GRSnS
厳密には無理

918デフォルトの名無しさん2019/03/28(木) 23:04:52.64ID:e7Ukr6X3
なぜ>>917はベストを尽くさないのか

919デフォルトの名無しさん2019/03/28(木) 23:06:15.20ID:2+cLemOj
標準のコンテナなんて使う理由ある?
遅くて使い物にならん

ストリームなんて実用に耐えれないくらい遅いだろ

920デフォルトの名無しさん2019/03/28(木) 23:08:40.51ID:t1sztID7
もう飽きたからいいよ

921デフォルトの名無しさん2019/03/28(木) 23:14:08.39ID:e7Ukr6X3
ではa/bに最も近い整数はどうやったら出せますのん?

922デフォルトの名無しさん2019/03/28(木) 23:17:25.36ID:AOcR4eqo
(int)((a + 0.5) / b)

923デフォルトの名無しさん2019/03/28(木) 23:17:26.82ID:EVp1RRUC
a/bを丸めりゃいいと思うが?

924デフォルトの名無しさん2019/03/28(木) 23:21:48.84ID:KoUoPeo+
std::round(a/b)

925デフォルトの名無しさん2019/03/28(木) 23:22:20.86ID:e7Ukr6X3
両方の案を採ってC++14ではstd::floor(a / b + 0.5)にケテーイ?
C99なら丸め関数あるけど…

926デフォルトの名無しさん2019/03/28(木) 23:23:14.15ID:KoUoPeo+
CにあってなぜC++にないと思った

927デフォルトの名無しさん2019/03/28(木) 23:24:22.62ID:e7Ukr6X3
C99はもはやC++とは別物やし…

928デフォルトの名無しさん2019/03/28(木) 23:33:50.74ID:eE4sGejC
丸めって絶対の正解がないからな

9299222019/03/28(木) 23:36:38.79ID:AOcR4eqo
お恥ずかしい。素で間違えた。括弧の位置が違う。

930デフォルトの名無しさん2019/03/28(木) 23:49:56.39ID:JEyrctWP
>>918
それは自分に問いかける言葉だったんじゃ。

931デフォルトの名無しさん2019/03/29(金) 00:05:03.99ID:daDbIW6D
>>930
>>918についてはまだ誰も判定精度のベストを尽くしていない件について:
多分
 std::abs((a/b) - ((a/b)の小数以下を丸めた値)) <= std::numeric_limits<double>::min()
あたりがベスト?

932デフォルトの名無しさん2019/03/29(金) 00:08:06.95ID:KSfDlte3
>>931
いや、元ネタの話。

933デフォルトの名無しさん2019/03/29(金) 00:09:22.47ID:KSfDlte3
上田次郎の言葉。

934デフォルトの名無しさん2019/03/29(金) 00:20:10.55ID:0t+U2b3s
一太郎は自滅したからなぁ
どうしているのかと思えば名簿の話であんなことしていたのかと・・・
上手くやればいくらでも出来たのに勿体無い

935デフォルトの名無しさん2019/03/29(金) 00:38:09.37ID:Sh9jl/tc
>>931
いやこの場合はイプシロンじゃなくバイナリ一致で比較すべき

936デフォルトの名無しさん2019/03/29(金) 00:53:41.69ID:e60P0oPD
まだ428万なのに一勝で400くらいしか上がらなくなったんだけど中堅名乗ってええか?

937デフォルトの名無しさん2019/03/29(金) 00:53:59.93ID:e60P0oPD
誤爆

938はちみつ餃子 ◆8X2XSCHEME 2019/03/29(金) 00:59:27.21ID:PFvplbFR
>>910
おっ。
LISP で優勝って話?

939デフォルトの名無しさん2019/03/29(金) 01:45:14.97ID:DyQclHpC
lisp は大昔 emacs のカスタマイズするのにしょっちゅう書いてたけど
なんでこんなクソみたいな古代言語を有り難がるやつがいるのかいつも謎だった
普通に C 風の文法のスクリプトでも搭載してくれたほうがよっぽどありがたい

940はちみつ餃子 ◆8X2XSCHEME 2019/03/29(金) 02:03:38.50ID:PFvplbFR
>>939
Emacs Lisp は今でも生き残っている LISP 系の言語の中ではクソな方なので、それで判断されてもな……。
AutoLISP よりはマシだが。

941デフォルトの名無しさん2019/03/29(金) 02:15:27.46ID:e60P0oPD
どうしてC言語風のスクリプト言語が無いんだ
どいつもこいつも分かりにくいうえにデバッガも無いもん作りやがって

942デフォルトの名無しさん2019/03/29(金) 05:41:16.20ID:VktwsX1+
>>931
a = 1e15
b = 1e-15

943デフォルトの名無しさん2019/03/29(金) 05:42:05.38ID:VktwsX1+
941
あったけど流行らなかった
pythonの方が役にたつ

944デフォルトの名無しさん2019/03/29(金) 06:59:38.46ID:Eeymx9+7
>>916
int型にしてdouble型に戻したのと比較するとか、floor関数使ったのと比較する。

945デフォルトの名無しさん2019/03/29(金) 07:49:31.47ID:WBACpCX+
>>941
Cインタプリタってのがいくつもある

946デフォルトの名無しさん2019/03/29(金) 08:07:13.38ID:Ta+0qHqT
>>931
min()以下の非正規化数でも残差があればそれは整数じゃないんだから単純に0との比較でいい。

947デフォルトの名無しさん2019/03/29(金) 08:12:49.10ID:vRMp+NmG
固定小数型が標準でほしい

948デフォルトの名無しさん2019/03/29(金) 08:23:09.46ID:WBACpCX+
小数なんかいらん
ビッグインテジャークラスを標準でほしい

949デフォルトの名無しさん2019/03/29(金) 08:32:27.31ID:q1OkKHKh
設定はpythonでいいよ

950デフォルトの名無しさん2019/03/29(金) 09:40:31.26ID:e60P0oPD
>>945
あるけど誰も採用してない
何故かみんなオリジナルの言語を作り始める
相当慣れないとautotoolsとか解読困難だし
なんならこれもperlにすればよかったのに
おかげで出回ってるものもコピペを繰り返した秘伝のタレ状態だわ

951デフォルトの名無しさん2019/03/29(金) 10:25:09.68ID:c3N751dA
オリジナル言語といいつつ、
昔からあるautotoolsを持ち出すとか

952デフォルトの名無しさん2019/03/29(金) 11:34:19.48ID:r9qVljUb
>>933
ジミーカーターだよ

953デフォルトの名無しさん2019/03/29(金) 12:15:03.74ID:QqxpOyVg
python+ctypes最強やで

954デフォルトの名無しさん2019/03/29(金) 13:00:40.33ID:HmBCV24x
【速報】金券500円分タダでもらえる    
C++相談室 part141 	->画像>9枚      
 
①タイムバンクをインストール
iOS: https://itunes.apple.com/jp/app/%E3%82%BF%E3%82%A4%E3%83%A0%E3%83%90%E3%83%B3%E3%82%AF/id1253351424?mt=8     
Android: https://play.google.com/store/apps/details?id=jp.timebank   
②会員登録  
③マイページへ移動する。
④招待コード→招待コードを入力する [RirzTu]     

コードを入力した方に600円もらえます 
今なら更に500円ギフト券を貰った残高からただで買えます。  
貰ったギフティプレモはAmazonギフト券(チャージタイプ)に交換できます(電子マネー払いにて)  
   
数分で出来るので是非ご利用下さい      

955デフォルトの名無しさん2019/03/29(金) 13:00:55.65ID:zXK6y1Ir
プロセス間通信でよくね問題

956デフォルトの名無しさん2019/03/29(金) 18:35:30.88ID:NYOzkE7a
>>954
本当じゃん     

957 ◆QZaw55cn4c 2019/03/29(金) 18:38:47.41ID:tqWwggkn
>>940
では common lisp 準拠の xyzzy を推奨いたしましょう

958デフォルトの名無しさん2019/03/29(金) 18:58:22.81ID:KSfDlte3
パワハラ学んだほうが役に立つのにな。

959はちみつ餃子 ◆8X2XSCHEME 2019/03/29(金) 19:03:34.54ID:PFvplbFR
>>957
正直言って、 xyzzy とか lem の方が筋がいいわ。
この時代にダイナミックスコープとか正気の沙汰ではない。
(近頃の Emacs Lisp はレキシカルスコープにも出来るけど。)

960デフォルトの名無しさん2019/03/29(金) 19:13:35.93ID:SLNwR97S
emacsではdynamicもそれはそれで便利なんだが
エディタだから各関数がコンテキストによって挙動変えるけど、それを引数として渡す訳じゃないからね
dynamicのスタック的な状態変更は便利

961デフォルトの名無しさん2019/03/29(金) 21:18:40.18ID:ddIXjKBD
lispってまとめられがちだけれど言語としてのくくりで言えばalgol系くらいの意味合いしかない。
schemeとcommon lispだったらc#とjavaのがよっぽど近い。

962デフォルトの名無しさん2019/03/29(金) 23:20:11.58ID:/wIL6yoo
template<class B,class D>
class B : public D{
 //...
};

ってなにがしたいんだろ

963はちみつ餃子 ◆8X2XSCHEME 2019/03/30(土) 00:58:44.45ID:raLgb94a
>>961
ほんまそれ。
そんでもって現代で LISP って言ったら Common Lisp か Clojure あたりを想定して欲しいって思う。
(俺は Scheme 派だが)

964デフォルトの名無しさん2019/03/30(土) 13:00:53.68ID:syvaDn83
Java 8は関数型言語らしい。

965デフォルトの名無しさん2019/03/30(土) 13:16:14.77ID:JgN5T55+
まあFORTHとPostScriptの違いくらいかな

966デフォルトの名無しさん2019/03/30(土) 17:34:43.10ID:syvaDn83
ほぼ同じってことか。

967L2019/03/30(土) 17:36:09.42ID:thjEqqk2
[C++でブラウザアプリ]
田園風景とゆらゆら揺れるアサガオのテスト:
WebAssemblyが使えるブラウザならすぐ見れるよ:
http://nowsmartsoft.atwebpages.com/demo2/index.html

ひここもりなので、ここでしか見てもらえないんだ。

968デフォルトの名無しさん2019/03/30(土) 17:58:09.48ID:wKuhZLCD
>>967
相談じゃないんだろ。スレ違いだから巣に帰れ。

969デフォルトの名無しさん2019/03/30(土) 18:15:25.48ID:VC6Jp+wI
相談スレじゃねえだろ
ひけらかしスレだから合ってるだろ

970デフォルトの名無しさん2019/03/30(土) 18:17:34.73ID:syvaDn83
でも、この前、住所さらされたからな。

971はちみつ餃子 ◆8X2XSCHEME 2019/03/30(土) 20:56:32.41ID:raLgb94a
>>967
ところで以前のウェブサイト (NWSA だとか文字コードだとか平衡木の文書があったやつ) は完全に消えたの?
ブログは残ってるみたいだけど、最終更新はだいぶん前だし。

972デフォルトの名無しさん2019/03/31(日) 01:36:25.21ID:kdwrDA9x
uint64同士の掛け算でオーバーフローしていないことを確認するには
(long double) a * b <= UINT64_MAX
であってますか?

973デフォルトの名無しさん2019/03/31(日) 02:01:02.28ID:XYg5fWSm
> (long double) a * b <= UINT64_MAX

変形してこれでいいのでは?
a <= UINT64_MAX / b; // b!=0

974デフォルトの名無しさん2019/03/31(日) 08:45:18.44ID:kdwrDA9x
>>973
その手がありましたか
ありがとうございます

975デフォルトの名無しさん2019/03/31(日) 11:34:02.92ID:qtVJ0qYe
CPUのオーバーフローフラグを見る標準の手段が未だにないのが不満です

976デフォルトの名無しさん2019/03/31(日) 11:42:31.55ID:TSA6EeAl
mul_highみたいなの位標準化してくれればいいのにね
大抵のアーキテクチャでは命令として存在するのだし

977デフォルトの名無しさん2019/03/31(日) 12:23:30.31ID:JrOSOdLx
オーバーフローの前にキャリーフラグだろ…

978L2019/03/31(日) 14:05:02.11ID:vDO0/VaM
>>971
ああ、あれはやめた。
維持費がかかっていたので。

979はちみつ餃子 ◆8X2XSCHEME 2019/03/31(日) 14:16:24.03ID:8f3NbPLB
>>978
コンテンツは面白いので、データが残ってたら Github かどっかに置いてくんない?

980デフォルトの名無しさん2019/03/31(日) 15:51:07.66ID:MPbGMBOz
住所晒すやつのサイトなんて見ねえ
即NG

981デフォルトの名無しさん2019/03/31(日) 16:15:32.43ID:4SqFrjwY
自分のIPアドレスじゃねえだろ

982デフォルトの名無しさん2019/03/31(日) 17:20:07.40ID:vDO0/VaM
>>979
気持ちに添えなくてすまないが、残念ながら、今は公開する予定はない。

>>980
そんなに気にする人がいるとは思ってなかったんだけど、今後は晒さない。

983デフォルトの名無しさん2019/03/31(日) 17:22:28.81ID:vDO0/VaM
http://nowsmartsoft.atwebpages.com/demo_land/index.html

3D 地形を canvas 2D のワイヤーフレームで表示してみた。
ChromeよりFireFoxの方が速いらしい。

984デフォルトの名無しさん2019/03/31(日) 19:00:54.99
>>954
覇権争いのおこぼれかな。
一応貰っておいた     

985デフォルトの名無しさん2019/04/01(月) 00:06:38.24ID:sCEGrn1T
コンストラクタにアウトプット変数をつけるのって邪道ですか?

986デフォルトの名無しさん2019/04/01(月) 00:44:54.36ID:sCEGrn1T
↑出力用引数です。。。

987デフォルトの名無しさん2019/04/01(月) 00:54:01.89ID:1RmlgYYh
お好きにどうぞ

988デフォルトの名無しさん2019/04/01(月) 04:25:02.60ID:uqkfEU2b
set<int> を0からnまでの連番でお手軽に初期化する方法ってありますか?

for文でinsertしまくるのが普通ですか?

989さまよえる蟻人間 ◆T6xkBnTXz7B0 2019/04/01(月) 06:36:52.73ID:OIWsA4Np
C++11なら
std::set<int> = {1, 2, 3};
と書ける。

990デフォルトの名無しさん2019/04/01(月) 08:27:39.15ID:RynKy10x
std::iota

991デフォルトの名無しさん2019/04/01(月) 10:36:34.64ID:0fT1DSaw
array<int,3>={1,1,1};

初期化子より要素が3ケなのはわかるのに
なんで一々3って記述しなきゃいけないの?

992デフォルトの名無しさん2019/04/01(月) 10:54:40.61ID:4B82+HWP
配列初期化子が如何に便利か良く判る

993デフォルトの名無しさん2019/04/01(月) 12:16:32.59ID:xC6wZxP+
make_array関数でも作成すれば?

994デフォルトの名無しさん2019/04/01(月) 12:30:23.48ID:2+x4EAiR
>>985
別につけてもいいけどメソッドとかで返した方が使いやすくね?

995はちみつ餃子 ◆8X2XSCHEME 2019/04/01(月) 13:25:48.82ID:+c9Nhd8T
>>994
メソッドって言うなよ

996デフォルトの名無しさん2019/04/01(月) 13:31:15.62ID:1RmlgYYh
警察だ

997デフォルトの名無しさん2019/04/01(月) 13:36:56.63ID:o/H/iRdv
onCreateをbindしたいのですが、これはどうすればコンパイル通りますかね…

template<class T>
void test(T&& value){
auto onCreate = std::bind(std::fowrawd<T>(value)->onCreate,std::forward<T>(value),std::placeholders::_1);
}

998 【男の娘】 2019/04/01(月) 13:42:00.26ID:QUlyRw/u

999デフォルトの名無しさん2019/04/01(月) 13:53:43.17ID:2cPHsZN4


万葉集巻五 梅花の歌三十二首、并せて序
「初春令月、氣淑風和、梅披鏡前之粉、蘭薫珮後之香」
初春の令月にして氣淑(よ)く風和ぎ梅は鏡前の粉を披き、蘭は珮後(はいご)の香を薫す

1000デフォルトの名無しさん2019/04/01(月) 13:54:41.31ID:iIi946R+
>>997
私は解を見つけだが、それを示すにはあまりにも
余白が少なすぎる

mmp
lud20190619103341ca
このスレへの固定リンク: http://5chb.net/r/tech/1550772463/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。

TOPへ TOPへ  
このエントリをはてなブックマークに追加現在登録者数177 ブックマークへ



全掲示板一覧 この掲示板へ 人気スレ | Youtube 動画 >50 >100 >200 >300 >500 >1000枚 新着画像

 ↓「C++相談室 part141 ->画像>9枚 」を見た人も見ています:
C++相談室 part152
C++相談室 part149
C++相談室 part126
C++相談室 part155
C++相談室 part154
C++相談室 part153
C++相談室 part150
C++相談室 part148
C++相談室 part151
C++相談室 part137
C++相談室 part143
C++相談室 part138
C++相談室 part157
C++相談室 part166
C++相談室 part165
C++相談室 part164
C++相談室 part156
C++相談室 part158
C++相談室 part163
C++相談室 part161
C++相談室 part124
C++相談室 part159
C++相談室 part162
C++相談室 part142
C++相談室 part133
C++相談室 part144
C++相談室 part117
C++相談室 part135
C++相談室 part147
C++相談室 part146
C++相談室 part140
C++相談室 part139
C++相談室 part132
C++相談室 part137
C++相談室 part145
C++相談室 part134
C++相談室 part130
C++相談室 part136
C++相談室 part131
C++Builder相談室 Part21
0からの、超初心者C++相談室
Cygwin + MinGW + GCC 相談室 Part 8
Cygwin + MinGW + GCC 相談室 Part 3
C++相談室 part123 [無断転載禁止]©2ch.net
C++相談室 part129 [無断転載禁止]©2ch.net
C♯相談室 Part20
C言語相談室(上級者専用)
MFC相談室 mfc22d.dll
Mac G5 中古買入相談室
C#, C♯, C#相談室 Part75
C#, C♯, C#相談室 Part79
自営業 悩みごと相談室 40
C#, C♯, C#相談室 Part78
自営業 悩みごと相談室 46
MFC相談室 mfc23d.dll
0からの、超初心者C#相談室
C#, C♯, C#相談室 Part94
15:34:36 up 65 days, 16:33, 0 users, load average: 10.60, 10.40, 10.27

in 0.037399053573608 sec @0.037399053573608@0b7 on 062204