2ch勢いランキング アーカイブ

C++相談室 part141


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

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

前スレ
C++相談室 part137 (正しくはpart138)
ttp://mevius.5ch.net/test/read.cgi/tech/1535353320/">ttp://mevius.5ch.net/test/read.cgi/tech/1535353320/
C++相談室 part139
ttps://mevius.5ch.net/test/read.cgi/tech/1538755188/
C++相談室 part140
ttps://mevius.5ch.net/test/read.cgi/tech/1547326582/

このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.103【環境依存OK】
ttps://mevius.5ch.net/test/read.cgi/tech/1530384293/

■長いソースを貼るときはここへ。■
 ttp://http://codepad.org/
 ttp://https://ideone.com/

[C++ FAQ]
ttp://https://isocpp.org/wiki/faq/
ttp://http://www.bohyoh.com/CandCPP/FAQ/ (日本語)

----- テンプレ ここまで -----
-
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
デフォルトの名無しさん [] 2019/02/22(金) 05:33:28.83:7jsMxmv+
Cの場合は
#define BIT(n) (1<<n)
if(data & BIT(3)){ data &=~BIT(3); }
みたいなやり方をするんだが、C++の場合は#defineは使わない方がいいらしいけどどういう書き方が
一般的なのだろう。
デフォルトの名無しさん [] 2019/02/22(金) 05:43:25.43:kNNcPZDM
inlineにしてる。
デフォルトの名無しさん [sage] 2019/02/22(金) 05:45:32.03:9HNz13T8
そういう場合にマクロ使うなと言われるのは、単にインライン関数にした方がややこしいバグを産みにくいってだけ
別にどっちでもいい
デフォルトの名無しさん [] 2019/02/22(金) 05:51:49.61:kNNcPZDM
そろそろonline関数も必要だよな。
デフォルトの名無しさん [sage] 2019/02/22(金) 06:59:58.96:uV/D6RzS
マクロ関数 BIT() の部分、マスク生成をinline関数にするか、
引数を2つ取って、整数値の指定ビットを落とした値を返すinline関数にするか、
if ~ の部分まで含めて、変数の指定ビットを落とすinline関数にするか…。

と思ってちょいと考えたら、この場合は if 不要と気づいた。
最初から 0 か、ビット操作の結果か、いずれにせよ data の bit3 は 0 になるね。
本筋とは関係ない部分だけど。
デフォルトの名無しさん [] 2019/02/22(金) 08:00:05.86:7jsMxmv+

inline関数ですか?
constexperでも関数は作れると思いますが、inlineの方がベターなのでしょうか?
constexper int BIT(int bitno){ return 1<<bitno;}

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

あとtemplateはあまり使ったことがないですが、なんかマクロ変換に使えそうな気がします。
デフォルトの名無しさん [sage] 2019/02/22(金) 08:17:36.02:9HNz13T8
constexprは暗黙的にinlineつくからconstexprでもいい

using Funcの部分は根本的に勘違いしてると思う
それの場合intを受け取りintを返す関数のポインタの"型"に
Funcという別名つけてるだけやで
デフォルトの名無しさん [sage] 2019/02/22(金) 08:29:39.37:9HNz13T8
あと前スレ
PCゲームやスマホゲーでも、STL使おうが使わまいが標準のヒープを直接は使わないことはよくあるよ
コンシューマへの移植性やパフォーマンスのためにカスタムのメモリマネージャ作ってるメーカーなんてザラにある
PCだから/メモリ有り余ってるからお仕着せのライブラリを適当に使うだけでいい、と思ってるなら何も分かってない
デフォルトの名無しさん [sage] 2019/02/22(金) 08:34:10.02:nGlWTBX9
現実の開発では、とりあえず動くようにしてから余った時間で最適化したほうが速くなるんだけどね
デフォルトの名無しさん [sage] 2019/02/22(金) 08:39:17.41:nqPCiyAK
まぁオブジェクトコードから臭いを嗅ぎ取った事は
無いな、感じられる人は耳鼻科行った方が良いかと
デフォルトの名無しさん [sage] 2019/02/22(金) 09:28:57.73:15zpzt8/

スレ跨ぐなカス
いつゲームの話なんかしたんですかねえ???????
それともゲームしか入ってないんですか?????????
デフォルトの名無しさん [sage] 2019/02/22(金) 09:55:02.52:n7WbXSSq
だけど、俺前スレじゃないよ
デフォルトの名無しさん [] 2019/02/22(金) 17:51:49.69:PtH+29Wq
「C」からって限定条件なら tcl/tk + canvas はありだと思うが
別に tcl の勉強しなくても使えるし
デフォルトの名無しさん [sage] 2019/02/22(金) 19:08:44.27:zu/11utG
Cから tcl/tk はどうやって使うの?
デフォルトの名無しさん [] 2019/02/22(金) 19:16:25.53:kNNcPZDM
ワイドスタジオ使っちゃえば?
デフォルトの名無しさん [sage] 2019/02/23(土) 10:20:57.99: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の寿命が尽きても実行時にエラーも出ないのですが
このようなプログラムはありですか
デフォルトの名無しさん [] 2019/02/23(土) 11:42:14.30:+DV3f+Dk
そいつにリソース占領させてみればいい
デフォルトの名無しさん [sage] 2019/02/23(土) 12:14:03.42:zem2FMDi
解決しました
デフォルトの名無しさん [] 2019/02/23(土) 18:45:10.43:3YtKndGk
紅蓮弐式のほうが強い。
ハイ論破。
デフォルトの名無しさん [] 2019/02/24(日) 14:23:19.37:YwY0sV++
C++ を使っても綺麗にならない
C++ を使ってる意味が無い
デフォルトの名無しさん [] 2019/02/24(日) 19:25:23.97:iK4D+UQi
C++に綺麗さを求めるの初めて見た。
デフォルトの名無しさん [sage] 2019/02/24(日) 20:13:55.34:+qyzr+Wj
最低でもインデントくらい揃えてほしいけどな
デフォルトの名無しさん [sage] 2019/02/24(日) 21:31:26.79:BOQZpNHf
揃えさせられるPythonの読みにくさを見るとある程度柔軟な方がいい
デフォルトの名無しさん [sage] 2019/02/24(日) 23:59:09.46:haqs87u6

お、おう
デフォルトの名無しさん [] 2019/02/25(月) 00:01:28.93:Jz0DexUX
つまりJavaか。
デフォルトの名無しさん [sage] 2019/02/25(月) 01:25:43.15:Jktx5+0Z
なんでやねん
デフォルトの名無しさん [sage] 2019/02/25(月) 01:34:14.73:1EOktSCH
ランタイム速度最速を謳ってバカに新機能の実験台になってもらう。
それがc++
デフォルトの名無しさん [sage] 2019/02/25(月) 06:06:13.74:pgIYnQ9M

ん?
普通に求めるでしょ?
見栄えとかアルゴリズムとか
デフォルトの名無しさん [sage] 2019/02/25(月) 06:43:23.26:AQp51hox
Most elementary use of C++
デフォルトの名無しさん [sage] 2019/02/25(月) 07:14:51.09:RhTHp1T7

多分そういう意味じゃない
デフォルトの名無しさん [] 2019/02/25(月) 07:40:11.99:4l/+z2Zp
古いサイトとか見てるとグローバルな関数に::ってつけるこだわりがよくわからん
::CreateProcessとかさ
◆QZaw55cn4c [sage] 2019/02/25(月) 08:14:06.58:0evRXBiA

自分の定義した関数にはつけず、win32api には付けて区別しています…
デフォルトの名無しさん [sage] 2019/02/25(月) 09:12:10.78:RhTHp1T7
公式「バランス調整はVIP部屋を参考にする」
桜井「○○の使用率ガー」

アホ「調整はVIPの使用率できめるらしい」←????
デフォルトの名無しさん [sage] 2019/02/25(月) 09:12:42.56:RhTHp1T7
誤爆
デフォルトの名無しさん [sage] 2019/02/25(月) 10:45:46.00:rMTHv0xs

大規模開発ならスコープ明示するのはよくやること
std省略NGのとこも珍しくないしな
デフォルトの名無しさん [sage] 2019/02/25(月) 12:17:07.75:y5m/9TYH

だから綺麗さなんて曖昧な表現だけだと突っ込まれるって話
デフォルトの名無しさん [] 2019/02/25(月) 18:50:34.75:Jz0DexUX
では評価関数を。
デフォルトの名無しさん [sage] 2019/02/25(月) 23:50:43.17:sPAFtFpG
double の 999999998 と 999999999 の積が正しい答えである 999999997000000002 じゃなくて 999999997000000000 になります

なんででしょうか
double の範囲に余裕でおさまってますよね?
デフォルトの名無しさん [sage] 2019/02/26(火) 00:18:43.14:belfWXD5
仮数部の最大値9007199254740992を超えているから
デフォルトの名無しさん [sage] 2019/02/26(火) 00:20:50.15:H+xdnOpD

つ 有効桁数
デフォルトの名無しさん [sage] 2019/02/26(火) 00:22:22.81:kx+LOcr9

10^300 とかまで大丈夫だって思ってはいけないのですね
初めて理解しました
デフォルトの名無しさん [] 2019/02/26(火) 14:43:31.98:8+7ktUtN
桁落ち
デフォルトの名無しさん [sage] 2019/02/26(火) 15:56:22.96:5MxkS3P7
浮動小数点は元々、誤差があるから、大雑把な数値でよい

正確な数値を求める場合は、整数型か、decimal を使う
デフォルトの名無しさん [sage] 2019/02/26(火) 16:22:19.66:aKbIPEAT

同じ関数で、MFC 版と Win32 版があることがあり、混乱が生じて、
切り分けの難しい不具合を生じる可能性を避けるため、そうしている。

C++だと、実引数を省略することもできる場合があり、その場合、Win32版を
使っているつもりが、MFC版が勝手に呼び出されて、動作が自分の思ったものと
少し違ってしまう可能性があるかもしれない。この時、コンパイラは何の
警告も出してくれないかもしれない。それを避けたいため、絶対に
Win32版を呼び出したい場合には、:: を付けることがある。
デフォルトの名無しさん [] 2019/02/26(火) 19:26:51.90:7oeDt7bv
DoxygenがモダンC++に対応していないんだけど、何か代わりの物はありますか?
デフォルトの名無しさん [sage] 2019/02/26(火) 22:24:56.64:t7v3BAso
キーボードのPageUpとPageDownの使い方が判りません、他のボタンも。
デフォルトの名無しさん [] 2019/02/26(火) 23:24:35.69:S/5yarce
C++のthreadってOSの無いマイコン環境でも動作するんだろうか?
threadが使えるってことは、ハードウエア的に最低でもタイマー割り込みを使う必要が
あるんじゃなかろうか? そうするとそういうタイマーなどのハードリソースはすべて自前で
用意するというのが前提のマイコンではどうするんだろとふと疑問に思った。
はちみつ餃子 ◆8X2XSCHEME [sage] 2019/02/27(水) 01:13:25.57:FtVEDFBt

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

そこは、対応しているプラットフォームでは、という前提がつくのは自明だと思うぞ、
デフォルトの名無しさん [sage] 2019/02/27(水) 01:59:24.57:VmfRF6bC

例えば何に対応してないの?
デフォルトの名無しさん [sage] 2019/02/27(水) 09:01:57.37:MitD/HmJ
そもそも、マイコンにスレッドなんてあるのか?

main 関数しか無いのでは?
デフォルトの名無しさん [sage] 2019/02/27(水) 09:20:12.60:fYEBa3GD
マイコンには関数も変数も無いだろ
機械語セットのどこにも関数とか変数とかの命令は無いじゃん
変数が存在してるように見えるのはコンパイラのおかげ
はちみつ餃子 ◆8X2XSCHEME [sage] 2019/02/27(水) 12:06:10.51:FtVEDFBt
C/C++ というのはそういうランタイムサポートが期待できない環境、いわゆる「ベアメタル」でも使い物になる
システムプログラミング言語であるというのがキモの言語だろ。
フルセットで使える環境なら std::thread という共通インターフェイスを使ってねというだけのことで、
リソースが限られたアーキテクチャでもフルセットが使えるべきというほどのもんではない。
デフォルトの名無しさん [sage] 2019/02/27(水) 12:51:06.39:Gf38Q9uK

(組み込みの)マイコンでは、普通、single thread なんじゃないかな。
マルチスレッドを使えるOSを作るのは結構複雑。


そういうOSをマイコンに作れば使えるようにはなるだろうけど、そこまでは
やってないことも多いと思う。そもそもマルチスレッドはプログラミングが
複雑になり予想も難しくなるのでバグが入り易い。カメラや炊飯器が誤動作して
も困る。
デフォルトの名無しさん [] 2019/02/27(水) 14:09:36.66:+TCpifLa

mainが無いのもあった気がする
デフォルトの名無しさん [] 2019/02/27(水) 15:17:57.76:6BQDuKk1

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

どんなマイコンを想像してるのか知らんけど組込みOSならメモリー数KB程度から動作する
ttp://https://www.eforce.co.jp/products/microc3c


mainなんて単なるC言語とかのお約束だからスタートアップルーチンに手を入れられるなら変えることはいくらでもできるよ
デフォルトの名無しさん [sage] 2019/02/27(水) 15:48:15.61:jy5tl2qf
サービスなんてエントリーポイント2つあるし
デフォルトの名無しさん [sage] 2019/02/27(水) 18:55:35.12:BQO9B3mv
template<class T>
int print(T v)
{
 printf("%d",v);// intの場合
 printf("%lf",v);// doubleの場合
}

printfを使うことは必須なんですが、どうすれば実現できます?
デフォルトの名無しさん [sage] 2019/02/27(水) 19:11:05.97:qHrg9QHU
特殊化しよう
デフォルトの名無しさん [sage] 2019/02/27(水) 19:14:17.63:lylxu9As
typeidで分岐すれば
デフォルトの名無しさん [] 2019/02/27(水) 19:17:04.78:ZZbXSlBN

戻り値の型をautoと書くとオーバーロードを認識しなくなるとかです。
デフォルトの名無しさん [sage] 2019/02/27(水) 19:23:09.27:lylxu9As
auto戻り値なんてメリットあるか?
デフォルトの名無しさん [sage] 2019/02/27(水) 19:31:54.53:EHh9wz5w
コンパイル時の条件で型が変わるときはautoで済ますと楽
デフォルトの名無しさん [sage] 2019/02/27(水) 19:43:36.93:1o0vhyUy

単純にオーバーロードすれば?
デフォルトの名無しさん [] 2019/02/27(水) 19:53:26.31:ZZbXSlBN

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

constexpr auto succ(auto num) {
return ++num;
}
デフォルトの名無しさん [sage] 2019/02/27(水) 20:31:28.87:ajs1Ye6I

%lfて…わかってやってる、ワケないよな
デフォルトの名無しさん [sage] 2019/02/27(水) 20:40:31.82:G+GrvvOb

printf("%s", std::string(v).c_str());
デフォルトの名無しさん [sage] 2019/02/27(水) 20:45:05.91:G+GrvvOb

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

%lf は規格で認められてる変換指定だね、一応。
間違って使う奴があまりに多いので現状追認で追加された、
という経緯らしいけど。
どうやら C90 では未定義、C99以降は %f と同様みたい。
デフォルトの名無しさん [] 2019/02/28(木) 12:32:13.81:yyOtWed3

%06d とか %7.3f とかできなくなるやん
72 [sage] 2019/02/28(木) 13:07:02.05:g9ECmttI

質問主がデフォルトの書式だからとりあえずそのままで書いた
型ごとに書式を指定するなら上にもあるように特殊化するしかないな
74 [sage] 2019/02/28(木) 15:32:45.18:nAsBylgf
自分で書いといてアレだけど、
C++に含まれるCの標準関数ってどうなってるんだろ?
Cの規格に追従して自動的に更新されてくのか、
ある時点で分裂したら再統合されるまで離れる一方なのか。

後者だとしたら、C99以降でprintf()の%lfが正当になったとしても
C++に関してはどのバージョンでも未定義、って危険があるな。
はちみつ餃子 ◆8X2XSCHEME [sage] 2019/02/28(木) 16:24:48.52:KlP/6TOW

今のところつかず離れずを維持してる。
C++ 中の C 関数は「この C 規格を参照」という感じで明記しているので、
ある程度になると状況を見て参照先を変更するってだけ。

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

C の _Noreturn と C++ の [[noreturn]] はどっちかに統一するのじゃ駄目だったんかなぁ? とか。
デフォルトの名無しさん [sage] 2019/02/28(木) 17:54:53.03:zeNaE6xz
vector<object*> v
がありまして、んでobjectクラスはメンバ変数int numを持ってるとします
このときですねv.at(1)->num, v.at(2)->num,....v.at(n)->numでvをsortしたいなーってのがあるんですけど上手い方法無いもんでしょうか
全然思いつかなくて
デフォルトの名無しさん [sage] 2019/02/28(木) 18:01:05.88:3CdGs56r

そう言うのは好みだからどっちかが大人になって折れるかよほど力の差があるとかでないと統合は無理
デフォルトの名無しさん [sage] 2019/02/28(木) 18:07:46.80:zeNaE6xz
ですが解決しました。失礼しました。
ttp://https://stackoverflow.com/questions/16366978/stdsort-on-a-vector-of-class-pointers
こちらですね
デフォルトの名無しさん [] 2019/02/28(木) 18:41:06.34:IByT54N8
英語だ!!!
◆QZaw55cn4c [sage] 2019/02/28(木) 20:13:33.80:FII1Vkt+

確か double に対応する書式指定は "%f" であって "%lf" ではない、という記憶がありますが
デフォルトの名無しさん [sage] 2019/02/28(木) 20:22:30.93:SJVUajxC
K&Rのfloatは引数にするとdoubleに昇格するというルールが残っているのでしょう
デフォルトの名無しさん [sage] 2019/02/28(木) 23:35:18.37:IM+bn+eP
本質ではなく、どうでもいいところにしか突っ込めないんだなw
デフォルトの名無しさん [sage] 2019/02/28(木) 23:37:27.00:ufQTgCzR
プロトタイプ宣言されたfloat引数にはfloatで渡すけど
可変引数にはfloatは渡せないままなんだな何故か
デフォルトの名無しさん [sage] 2019/02/28(木) 23:45:49.79:SJVUajxC

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

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

ただしそうしたとしたら、extern "C"したのにC言語から呼ばれへん
何で!?となってプチ大混乱が生じそう
知らんけどな…
デフォルトの名無しさん [sage] 2019/02/28(木) 23:53:46.30:LhFhdmbG
printf()ではdoubleを出力できるのに、
scanf()ではfloatしか受け取れない(doubleをスキャンする機能が無い)というのは
C言語の七不思議のうちの一つ
デフォルトの名無しさん [sage] 2019/02/28(木) 23:56:03.03:SJVUajxC
MSDNの関連記事 読んでない
ttp://https://msdn.microsoft.com/ja-jp/magazine/dn913181.aspx
デフォルトの名無しさん [sage] 2019/03/01(金) 00:15:41.73:fP7U0W+N
しかしさすがにscanf()でdoubleをスキャンできるようにする近代化は一筋縄ではいかなさげ
デフォルトの名無しさん [] 2019/03/01(金) 13:14:40.93:ozM8zBQ9

えっ
デフォルトの名無しさん [sage] 2019/03/01(金) 19:20:57.20:HVxvwZsK

不定長引数関数ならば、という縛りがつきます
デフォルトの名無しさん [sage] 2019/03/01(金) 19:21:39.88:HVxvwZsK

普通に書式"%lf" でできるのではないですか?
デフォルトの名無しさん [sage] 2019/03/01(金) 19:33:29.87:WfqePbUu

それ何処の世界のC言語の話?
デフォルトの名無しさん [sage] 2019/03/01(金) 20:08:46.93:WfqePbUu

規格に書いてあるよ
デフォルトの名無しさん [] 2019/03/02(土) 10:59:08.67:+L4gK20K
出鱈目ばっかり書き込むスレですか?
デフォルトの名無しさん [sage] 2019/03/02(土) 11:55:35.34:0O78HlO0

できた!できたわ素敵!!!11!!
デフォルトの名無しさん [sage] 2019/03/02(土) 12:04:22.76: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; }
デフォルトの名無しさん [sage] 2019/03/02(土) 12:09:49.85:0O78HlO0
訂正orz

誤:
生:


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

というかその例は綺麗にムーブを使うべき例
デフォルトの名無しさん [sage] 2019/03/02(土) 12:37:35.01:0O78HlO0

>rhsにNULL入れてるってことはrhsのデストラクタで解放されたら困るってことでしょ
なるほど確かに…
ていうか鋭い

>というかその例は綺麗にムーブを使うべき例
ホンマや(゚Д゚;)ムーブコンストラだけで動いたわdクス、
デフォルトの名無しさん [sage] 2019/03/02(土) 12:51:51.79:0O78HlO0
実験してから質問せいやというご批判があるかもしれないので釈明
実験はした
しかしコピコンが定義されているとムーブコンは呼ばれなかった(から、のQ1のムーブコンでもちゃんとイゴイタ)のである
デフォルトの名無しさん [] 2019/03/02(土) 14:47:21.97:66qf4QbX
えw
実験するのめんどくさいから質問してたわw
ダメだったんだ、ごめんなさい。
デフォルトの名無しさん [sage] 2019/03/02(土) 15:15:55.45: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付けるとなんでダメなんでしょうか?
デフォルトの名無しさん [sage] 2019/03/02(土) 15:52:41.75:0ZOGECoI

実験もせずに待つって、マナー以前に自分のためにならんだろ
答えが返ってくるまでボケっとしてんのかと


関数ポインタは引数の型が違うと別の型になる
デフォルトの名無しさん [] 2019/03/02(土) 15:54:45.54:uEwpVDqh
VC++でmsado15.dllをインポートしようとしても参照されずエラーになるのですが原因は何でしょうか?
デフォルトの名無しさん [sage] 2019/03/02(土) 16:25:34.65:gxSP/QDn

それだけでわかるか。エラー内容くらい書け
デフォルトの名無しさん [] 2019/03/02(土) 16:41:21.42:uEwpVDqh

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
デフォルトの名無しさん [sage] 2019/03/02(土) 17:30:18.82:oy0Ht86m

なるほど。
typedef Test<const int *> TestPtr;
にしたらコンパイル通りました!どもです!
デフォルトの名無しさん [] 2019/03/02(土) 18:12:08.54:uEwpVDqh

必要かどうかわからなかったのですが
regsvr32.exeでmsado15.dllを登録

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

msado15.dllのようなDLLはC(VC)++で扱うのは難しいですね。
インテリセンスが働きませんから…
デフォルトの名無しさん [sage] 2019/03/02(土) 18:48:27.86:Gk4CLPf8
「c++ import dll」で検索!
デフォルトの名無しさん [sage] 2019/03/02(土) 20:32:59.25:YCnAoXOq
マクロは名前空間無いからな
デフォルトの名無しさん [sage] 2019/03/02(土) 22:58:26.16:9ABljqhX
はじめまして。
C++でスケジューラのようなものを作りたいのですが、
相談に乗っていただけますでしょうか?

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

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

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

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

無知な部分が多いと思いますが、皆さんの意見をお聞かせ頂ければと思いますので、よろしくお願いいたします。
さまよえる蟻人間 ◆T6xkBnTXz7B0 [sage] 2019/03/02(土) 23:07:26.95:HH5zv832
それなら、OLE D&Dを実装することになる。具体的には、IDataObject, IDataSource, IDropTargetインターフェースの実装。
デフォルトの名無しさん [] 2019/03/02(土) 23:32:17.29: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みたいな事を実現可能な方法って無いですかね?
そもそも書き方が間違ってる?
さまよえる蟻人間 ◆T6xkBnTXz7B0 [sage] 2019/03/02(土) 23:37:15.79:HH5zv832
ヘッダーで特殊化の方法を指定しないといかんとちゃう? 知らんけど。
デフォルトの名無しさん [sage] 2019/03/02(土) 23:45:00.12: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'); }
...
いくらでも作れる……!
さまよえる蟻人間 ◆T6xkBnTXz7B0 [sage] 2019/03/02(土) 23:54:10.30:HH5zv832
IDataSourceじゃなくてIDropSourceだ。ごめんを。
デフォルトの名無しさん [] 2019/03/02(土) 23:59:54.93:4PbQivqk

特殊化の方法、、、私の知識では分からないですね、、、


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> みたいな感じで一部だけ型指定していくのは無理、
というのは見た事があります。
さまよえる蟻人間 ◆T6xkBnTXz7B0 [sage] 2019/03/03(日) 00:04:53.16:KlFuUPR7
特殊化を知らない?
デフォルトの名無しさん [sage] 2019/03/03(日) 00:12:10.08:ET38y2ec
cpp2の翻訳単位内で完全に実体化させないとどうやっても外からはよべないので
少なくともcpp2の中ではそのように書かないといけないと思う
デフォルトの名無しさん [sage] 2019/03/03(日) 00:24:16.88:kd4WdA4I
確実にcppに実体作りたきゃ明示的インスタンス化は個別にしなきゃ駄目だろ
デフォルトの名無しさん [sage] 2019/03/03(日) 00:24:32.19:1zX/ygG4

この場合の特殊化は、どのような記述になるのでしょうか?


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


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

// 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() に戻り値の型指定を追加したいな、
って事でやりはじめたんですよね。

綺麗に書くのが無理そうならば、必要な物を全部書いていきます、、、
デフォルトの名無しさん [sage] 2019/03/03(日) 00:30:05.53:AQaNwhGs
要求仕様がいまいちよくわかっていないが(マテ
(1) 任意の型Tの値cls::varから任意の型Uの値を得たい(一種のconverterクラスを作りたい)
(2) 変換関数cls::func()の実装は隠蔽したい

ということならこんなんでど(ry
ttps://ideone.com/1Fh8sg
デフォルトの名無しさん [sage] 2019/03/03(日) 00:38:22.33:1zX/ygG4

やっぱりそういう物なのですかね


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

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

※ 個人の感想です
※ コードには個人差があります
デフォルトの名無しさん [sage] 2019/03/03(日) 00:57:11.45:1zX/ygG4

となると、現在のやり方でコードを完全隠蔽したいとなると、
全組み合わせをcppに書けって事になりますよね、、、


なるほど、了解いたしました
付き合って頂いた皆様、ありがとうございます
デフォルトの名無しさん [sage] 2019/03/03(日) 01:15:53.21:AQaNwhGs
スマンは言い過ぎたかもしれん…
全組み合わせをcppに書く作業をそのcppの中でテンプレートを定義して省力化することは可能かもしれん
ただし、そのcppの中で定義したのと同じシグネチャ(名前+引数)でユーザーコードが別のテンプレート関数を定義でもしたら、
ODRに違反することになる(この場合実際に変な挙動になる危険性が大きい)ので全体を無名namespaceで囲う必要がありそう
無名namespaceの中から選択的に関数をエクスポートできるのかは正直知らん
あんまりテンプレート絡みで無茶はやりたくナサス
デフォルトの名無しさん [sage] 2019/03/03(日) 01:30:06.83:kd4WdA4I
定義は共通でして
template int cls<char>::func<int>();
みたいなのを使う分だけ書けば良い

ただ、今回の場合クラス内テンプレート関数の特殊化しようとすると怒られるからさらに工夫が必要
デフォルトの名無しさん [sage] 2019/03/03(日) 01:33:24.30:ET38y2ec
ああ、確かに
使わない関数テンプレートをcppで定義してそれの明示的インスタンス化を通してやれば省力化できそう
この場合その使わない関数テンプレートを内部リンケージにしても、その中で実体化要求されたテンプレートのリンケージには影響はないはず
デフォルトの名無しさん [sage] 2019/03/03(日) 02:24:28.96:5EsDLzeQ
Visual Studioで通ってもgccで通らなかったりするからテンプレートの実体化は厄介。
デフォルトの名無しさん [sage] 2019/03/03(日) 02:47:42.46:dVINV85+
もはやコンパイラありきの言語
デフォルトの名無しさん [sage] 2019/03/03(日) 02:53:02.86:kd4WdA4I
VC++がC++擬きの別言語なだけだろ
今ごろになってやっと2 phase lookup対応させた

structとclassが違うとリンクでこけるのも糞
デフォルトの名無しさん [sage] 2019/03/03(日) 03:13:19.05:ET38y2ec
VS2017以降のMSVCは許してあげてほしい・・・
デフォルトの名無しさん [] 2019/03/03(日) 05:50:17.03:EorZPwcP
えっ、何か革新的なことをしているの?
C++は今までつかったことがなかったんだが、最近マイコンの開発に使ってから
かなり気に入っている。これならPCでも使えるかもと今考えているところ。
デフォルトの名無しさん [] 2019/03/03(日) 06:33:00.88:ChZC+e8W
組み込み用途だとC++よりCの方が融通効くと思うんだが
最近の組み込みはひょっとして随分恵まれてるのか
デフォルトの名無しさん [sage] 2019/03/03(日) 07:57:12.43:EUJr/Yte

お前さんの認識が古いだけ
数KBメモリーとモダンなプロセッサならC++で開発は普通にできる
◆QZaw55cn4c [sage] 2019/03/03(日) 10:05:41.46:OccEVyH1
ふと思ったんですが、Java でデコレーターを記述するのに
BufferedReader br = new BufferedReader(new InpustStreamReader(System.in));
などと、new したオブジェクトのポインタを取っておかず、new したまま放置してしまう書き方がありますが、
スコープ内で new したオブジェクトは、スコープを外れるときに C++翻訳系が自分で delete する、と決め打ちしてしまうと、互換性で問題がでるでしょうか?
デフォルトの名無しさん [sage] 2019/03/03(日) 10:18:54.68:0vjeZZiI
そのポインタを別の場所にコピーしてたらどうなる?
頭悪すぎだろ
◆QZaw55cn4c [sage] 2019/03/03(日) 10:23:45.41:OccEVyH1

では、あからさまに new したポインタを捨ててしまっている記述に限り自動で delete する、というのはどうですか?
目的は…classpath を共用したいのです、classpath はあらたに c++ で書くとして
デフォルトの名無しさん [sage] 2019/03/03(日) 10:26:03.14:0vjeZZiI

そのポインタは渡した先でどうなってると思う?
頭悪すぎだろ
デフォルトの名無しさん [sage] 2019/03/03(日) 10:31:40.12:8Bef4COm
よくわかんねえけど楽してJavaを移植したいってこと?
Boehm GCでも使ってみたらどうだ
◆QZaw55cn4c [sage] 2019/03/03(日) 10:35:18.92:OccEVyH1

new したポインタを捨ててしまっている記述に限り、処理系で delete する、と決めるのですから「ポインタを渡した先」というのは存在しないことになります


C++ と Java で classpath ライブラリを共用したいのです!
デフォルトの名無しさん [sage] 2019/03/03(日) 10:35:19.96:oO/57lY2
make_uniqueがやりたいってことかね
◆QZaw55cn4c [sage] 2019/03/03(日) 10:41:59.49:OccEVyH1

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

内容を誤解していました、すみません
あらためて回答します

プログラマが new したポインタ値を変数に取っておく記述をした場合は、delete の責任はプログラマにあるものとし、処理系では何もしないものとします
デフォルトの名無しさん [sage] 2019/03/03(日) 10:53:36.82:rOejoJLo

遅レスだけど、テンプレートはcppに隠蔽しようとか考えない方がいいと思う
dllとかにしたいなら別だけど・・
デフォルトの名無しさん [sage] 2019/03/03(日) 10:59:02.77:kd4WdA4I
javaでnewしているからってc++でnewするなって
classpath共用が何を意味しているのかは分からんが
デフォルトの名無しさん [sage] 2019/03/03(日) 11:02:05.72:AQaNwhGs
・繰り返し構文とgotoの全廃
デフォルトの名無しさん [sage] 2019/03/03(日) 11:24:20.63:0vjeZZiI

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

そのオレオレC++拡張の仕様を自分で決めて自分で実装して公開してみな。
万に一つもないと思うが、それを有用だと思って喜ぶ人がいるかもよ。
◆QZaw55cn4c [sage] 2019/03/03(日) 11:58:52.90:OccEVyH1

んんー、それは c++ 的な扱い(delete はプログラマの責任)でいいかと、私の思考に何が抜けているのかな?もう少し考えて見ます
デフォルトの名無しさん [sage] 2019/03/03(日) 12:18:50.69:kd4WdA4I

規格ではdeleteしないものをdeleteしたら互換性に問題が出る。
自動でdeleteしたかったらスマートポインタ使うべき
独自c++擬き想定しているならc++17使うのも当然okのはず

生のnew使わせるなんて今時のc++ではとんでもない悪手
デフォルトの名無しさん [sage] 2019/03/03(日) 13:13:27.54:5kJ1RFDr
VS2017は十分な出来なんだがテンプレートの展開中に内部エラーで転けることがあってそこだけは不満
デフォルトの名無しさん [] 2019/03/03(日) 15:47:18.29:5EsDLzeQ
shared_ptr でJavaやC#のガーベージ・コレクションとほぼ同じ役目が期待できるから別にいいのでは。
C++は、shared_ptrが正式採用されたC++11で別の言語になった印象すらあるわ。
デフォルトの名無しさん [sage] 2019/03/03(日) 15:57:24.31:8Bef4COm
循環参照が検出できないからJavaプログラムの参照をそのまま置き換えればオッケーというわけでもない
もちろんナマポよりは遥かにマシだけど
デフォルトの名無しさん [sage] 2019/03/03(日) 15:59:19.15:rOejoJLo

面倒だとは思うけど、時間あるなら再現するコードと共にバグ報告送ってやってくれ
デフォルトの名無しさん [] 2019/03/03(日) 16:11:53.27: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();

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

直接初期化とコピー初期化の違いを説明するとクソややこしい話になるんだけど
結論から言えばその場合はどっちも全く同じ
デフォルトの名無しさん [] 2019/03/03(日) 17:53:40.63:E4UxtVYi
make_shared使った方が良い?
デフォルトの名無しさん [sage] 2019/03/03(日) 19:22:53.95:8Bef4COm
うん
デフォルトの名無しさん [] 2019/03/04(月) 04:26:14.48:FZO2lxM7
new 呼び出しが少なければ少ないほど精神衛生に良い。
デフォルトの名無しさん [sage] 2019/03/04(月) 06:09:53.20:eTdHd+Gg
複数の関数の戻り値を足し合わせる処理で、それぞれの関数の戻り値をチェックしたい場合のすっきりする方法は何かありますか?
std::string result;
result += func1(a);
result += func2(b);
result += func3(c);
の各func1,2,3の戻り値をresultに足す前に空でないかを確認したいのです (1つでも空があった場合はresultも空にしたい)
単純に一時変数を用意して一つずつ判定するしかありませんか?
デフォルトの名無しさん [] 2019/03/04(月) 06:27:48.33:iluilBaY
typename Iterator::container_type::value_type
こんな風に::で三個つなげるのは合法ですかね??
デフォルトの名無しさん [sage] 2019/03/04(月) 06:31:54.66:nFXsjzZK
エイリアス使えば
デフォルトの名無しさん [sage] 2019/03/04(月) 06:33:10.80:7Cz1/mIW
funcN() を追加する直前の result.size() を記憶しておいて、
足した後に長さが増えてなかったら、今呼んだ funcN() の結果は空だった、
と判定することはできるか。

string から整数になるだけで、一時変数を使うのは変わらない上に、
処理内容が分かりやすくなるわけでもないけど。
デフォルトの名無しさん [sage] 2019/03/04(月) 07:56:06.21:EZgqhZII

例外
デフォルトの名無しさん [sage] 2019/03/04(月) 08:09:41.73:t1tsHTRA

合法
デフォルトの名無しさん [] 2019/03/04(月) 15:31:21.38: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)の様に同時に初期化したいとき
どう書けば良いか知りたいです
デフォルトの名無しさん [sage] 2019/03/04(月) 17:39:35.24:rgTuscQv
C 型が違う
D int*が2から作れない
デフォルトの名無しさん [] 2019/03/04(月) 19:03:47.51:iluilBaY

どうもありがとう。
165 [sage] 2019/03/04(月) 22:26:16.82:eTdHd+Gg


ありがとうございます

結局こうすることにしてみました
auto addString = [&result] (std::string&& temp){
 if (temp.empty()){
  throw 0;
 }
 result += temp;
};
try{
 addString(func1(a));
 addString(func2(b));
 ・・・
}catch (...){
 return "";
}
デフォルトの名無しさん [sage] 2019/03/04(月) 23:05:47.73:IrD+1pkV
void f()
{
 static std::mutex mtx;
 std::lock_guard<std::mutex> lock(mtx);
 //何がしかの処理
}

これっていいの?
デフォルトの名無しさん [sage] 2019/03/04(月) 23:25:00.41:tJNb7RRD
C++11以降はセーフ、じゃなかったかな。
デフォルトの名無しさん [sage] 2019/03/05(火) 00:17:46.56:w8adCz4V
セーフなわけがあるか!!1111!11!!!!1!
デフォルトの名無しさん [] 2019/03/05(火) 00:55:28.26:Lvsoqpfj
C++11だろうがなかろうが関係なくセーフだよ。
KAC [sage] 2019/03/05(火) 01:01:35.52:zhV7s4kG
人によってセーフの定義が違ってたりしない?
デフォルトの名無しさん [sage] 2019/03/05(火) 01:03:06.00:w8adCz4V
C++11以降はセーフになったらしい(キリ
ttps://cpprefjp.github.io/lang/cpp11/static_initialization_thread_safely.html
デフォルトの名無しさん [sage] 2019/03/05(火) 01:04:55.09:w8adCz4V
Double Checked Lockingはジャヴァのメモリモデルがうまく対応できてなくて騒ぎになったことがある技法
デフォルトの名無しさん [sage] 2019/03/05(火) 01:11:12.97:w8adCz4V
もし関数内static変数の初期化をDouble Checked Lockingを使わずにスレッドセーフにしようとしたら、
関数に入る度に毎回馬鹿正直にクリティカルセクションに入るために1000クロックぐらい捨てることになってしまうま
スピンロックか何かの黒魔術で若干緩和する実装も有り得るかもしれんが基本は

ジャヴァではなくてC++の処理系がdouble checked lockingする分には
処理系がサポートするネイティブなアーキテクチャのみ考えれば良いから
問題が生じることは無いはずでとりあえずはめでたいと思うが、
デフォルトの名無しさん [] 2019/03/05(火) 01:34:00.08:Lvsoqpfj
グローバルなスタティック変数のように実行前に初期化する仕様にいまさら変えられない事情でもあったか。
デフォルトの名無しさん [sage] 2019/03/05(火) 01:38:41.08:w8adCz4V
リンカにシンボルを渡す手段がイマイチ決め手に欠くキモス
デフォルトの名無しさん [sage] 2019/03/05(火) 01:40:59.82:w8adCz4V
あと複数の翻訳単位間ではグローバル変数の初期化順序は保証されない(保証しようが無い)から
そういう混乱を避けるために関数内staticは関数に入ったとき初期化されてホスイ

個人的には使わないから知らんが
デフォルトの名無しさん [] 2019/03/05(火) 02:16:13.00:VDry4yCP

unique_ptr<int[]> u(new int[2]{6, 7});
デフォルトの名無しさん [] 2019/03/05(火) 02:54:35.71:YOwkwz81
std::dynarray ってどこ行ったん?
ttp://http://ezoeryou.github.io/boost-benkyokai-sapporo
デフォルトの名無しさん [] 2019/03/05(火) 03:25:14.57:VDry4yCP
なんだろう
この違和感
デフォルトの名無しさん [sage] 2019/03/05(火) 04:45:14.68:mm49B1QN
ライブラリを作るときは、hpp にはクラスの定義を、cpp には実装を書く、と理解しています。

クラスのメンバでない関数はどう扱うべきでしょうか。
hpp にプロトタイプ宣言を、cpp に中身を書く、というので合っていますか。
デフォルトの名無しさん [] 2019/03/05(火) 04:47:10.42:VDry4yCP
inlineは?
デフォルトの名無しさん [] 2019/03/05(火) 04:50:23.83:xaYVlIsQ
なぜヘッダはクラス限定だとおもったんだ?
それ以前にクラス以外では使用したことがないのか?
デフォルトの名無しさん [sage] 2019/03/05(火) 05:01:47.80:OG2z9OX5
宣言(Declaration)と定義(Definition)は用語なんで覚えといた方がいいよ
デフォルトの名無しさん [sage] 2019/03/05(火) 05:18:53.19:3HlR5qin
ヘッダに書くのはクラスだから関数だからとかじゃなくて、複数の翻訳単位(≒cpp)で共通で使うかどうかで決まる
1つのcppの中でしか使わず外に見せないクラスや関数はcppの中でいいよ
デフォルトの名無しさん [sage] 2019/03/05(火) 05:48:49.52:mm49B1QN

inline なので(苦笑



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



覚えました。それで?



であれば、今私は複数の cpp ファイルを持つ予定はないので、ヘッダファイルは全く不要ということになります。
デフォルトの名無しさん [sage] 2019/03/05(火) 05:55:22.28:3HlR5qin
ライブラリなんだろ?
自分はcpp1つでも、他の人のcppで使わせるためのクラスや関数があるはずだ
それをヘッダに書け
デフォルトの名無しさん [sage] 2019/03/05(火) 05:59:24.21:mm49B1QN

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

特にないから適当に他人のマネしとけばいいと思う。
デフォルトの名無しさん [] 2019/03/05(火) 11:45:31.15:HwCl8Q1J

>1つのcppの中でしか使わず外に見せないクラスや関数はcppの中でいいよ

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

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

無名 (unnamed) namespace って使う?
デフォルトの名無しさん [sage] 2019/03/05(火) 12:35:48.55:zIeyIuEy
関数よりファンクタの方が速いという情報を見たのですが、メンバ関数を入れ子クラスでメンバファンクタ化すると高速化が期待できますか?
デフォルトの名無しさん [] 2019/03/05(火) 12:41:35.39:xaYVlIsQ
コンパイラ次第だろ
実験
デフォルトの名無しさん [sage] 2019/03/05(火) 12:50:59.28:zIeyIuEy
VC2017で試したのですがテスト用の関数が単純すぎるのかグローバルのインライン関数、クラスのメンバ関数、クラスのメンバファンクタで差異が見られませんでした・・・
デフォルトの名無しさん [sage] 2019/03/05(火) 12:51:22.93:fI+Bf2nm
どこに書いてもいいだろ
他人の書いたコードなんてどうせ誰も読まないし
読ませたいならドキュメントしっかりさせたほうがいい
デフォルトの名無しさん [sage] 2019/03/05(火) 15:12:40.70:pv9Sbimr

その「ファンクタの方が速い」ってのは、一般的に関数ポインタを介するのと比較して、だよ
理由はインライン展開できるからであって、その実験で差異が出ないのは当然
デフォルトの名無しさん [] 2019/03/05(火) 19:05:23.76:A2wr9SaM
ストアドよりインデックスのほうが速いよってスレなかったっけ。
デフォルトの名無しさん [sage] 2019/03/05(火) 20:02:38.14:zIeyIuEy

なるほど
ありがとうございます
デフォルトの名無しさん [sage] 2019/03/05(火) 21:56:22.01:+aoESyYJ

使う理由としてはメンバ関数を内部リンケージにしたらリンク速くなるかもという期待だけだな
実際速くなるか調べたことないけど

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

c++はこういうダメ仕様多過ぎてうんざりだわ
デフォルトの名無しさん [sage] 2019/03/05(火) 22:06:02.21:fIhIM0AX
腐ったビルド戦略のせいで無駄なオブジェクトコードの重複を生じるのはゼロオーバーヘッド原則に反しないのか?は疑問だな
極一部のマニアしか使わない機能付けてオナニーしてる暇があったら、いいかげん時代錯誤なビルド処理の抜本的な見直しをやってほしい
デフォルトの名無しさん [sage] 2019/03/05(火) 22:21:06.27:R3KidTI1
メンバ関数の数はクラスのオブジェクト生成コストにどれくらい影響しますか?
デフォルトの名無しさん [sage] 2019/03/05(火) 22:30:58.04:+aoESyYJ

まず自分で計測しろ
デフォルトの名無しさん [sage] 2019/03/05(火) 23:07:56.79:rlRU3gS5

数によるコスト差0だよ


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

templateと組み合わせるなら1とか3は多用するけど4は無いな
212 [sage] 2019/03/06(水) 00:21:02.86:pU9AS85W
ありがとうございます
(2)でやってみることにします
デフォルトの名無しさん [sage] 2019/03/06(水) 00:32:13.90:Uli2bEJM
1 は、どうして君はすべての関数を、static 関数にできると思ったの?
static関数と、関数のライブラリ・モジュール化は関係ない

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

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

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

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

このようにインスタンスを作らなくても、呼べる関数をモジュール関数と言って、
各インスタンスから呼ぶ関数を、メソッドと言って区別している
212 [sage] 2019/03/06(水) 00:42:25.73:pU9AS85W
そう言われるとそうですね
オブジェクト指向ではmain関数以外全部クラス/構造体で作成するものだという先入観がありました
デフォルトの名無しさん [sage] 2019/03/06(水) 01:06:06.33:Riy5qgFP

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

>1つのcppの中でしか使わず外に見せないクラスや関数はcppの中でいいよ
名前無しでも何でも良いが、その場合はクラスはnamespaceの中に入れないと危険が危なすぐる…

同じ名前空間に属する同じシグネチャのFoo::func()が異なる関数として複数のcppで定義された場合、
どっちが呼ばれるか定まらない処理系が実在する(VC++2010とか
多分ODR違反で未定義動作なんだと思う
デフォルトの名無しさん [sage] 2019/03/06(水) 01:13:13.20:paKD8ls/
曖昧さは、利点にも欠点にもなりうる。
namespaceのグローバル関数ではなくクラスのスタティック関数にすることで曖昧さがなくなりコンパイルエラーを避けられる場合がある。
デフォルトの名無しさん [sage] 2019/03/06(水) 01:14:08.29:MDLmYlCa
訂正
CPPでクラスを定義する場合は無名namespaceに入れないと危険が危なすぐる、
無名namespaceは異なる翻訳単位間では別名として扱われるから安全

一方、名前付きnamespaceでは異なるCPPで偶然
同じ名前空間に属する同じシグネチャのFoo::func()が作られてしまう危険性を排除できない
デフォルトの名無しさん [sage] 2019/03/06(水) 01:21:31.24:MDLmYlCa

そのクラスに非staticなメソッドを設けたとたん、
と同じ話でどのFoo::func()が呼ばれるかわからないという不正な動作をする危険性が生じる

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

C/C++では、staticなどキーワードが全く違う複数の意味で使われるから注意な。
216 [sage] 2019/03/06(水) 02:00:53.56:Uli2bEJM
Ruby では、関数名のバッティングを避けるため、2重に囲む。
module 内にclass か、class内にclassを作る

module Net
class HTTP end
class FTP end
end

# インスタンス
Net::HTTP.new
Net::FTP.new
デフォルトの名無しさん [sage] 2019/03/06(水) 02:06:24.72:Riy5qgFP

rubyボットはお呼びでないからもう巣に帰ってくれ
216 [sage] 2019/03/06(水) 02:12:57.91:Uli2bEJM
static みたいな複雑な概念を、初心者が理解するのは難しい

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

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

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

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

実引数依存の名前探索とは、C++において関数呼出時に与えられた引数の型に依存して、
呼び出す関数を探索 (lookup)する仕組みのことである。
英語ではKoenig lookup、argument dependent lookup (ADL)、argument dependent name lookupなどと呼ばれる
デフォルトの名無しさん [sage] 2019/03/06(水) 02:46:55.34:Riy5qgFP

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

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

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

その上で「あの著者/本は間違いが多い、例えば…」とか、
「記述が古い、新しい規格でもっと便利な機能が追加された」みたいな
追加情報(具体的なもの)が出てくればなお嬉しい。
デフォルトの名無しさん [] 2019/03/06(水) 09:56:40.41:mg6kC0Yg

SQLの話ですか(苦笑)
デフォルトの名無しさん [sage] 2019/03/06(水) 18:18:48.94:paKD8ls/
名前なし名前空間を名前あり名前空間の中に作ることができる。便利ちゃあ便利。

namespace hoge {
namespace {
int foobar = 1;
};
};
デフォルトの名無しさん [] 2019/03/06(水) 21:53:00.33:paKD8ls/
64bit環境で文字列ストリームクラスstd::ostringstreamのインスタンスのスタックサイズが、
gccで376バイト, VS2017で232バイトもあるんだがもっと小さくできるんじゃないの?
ちなみに、std::string はgccとVS2017どちらも32バイト。
どうよ?
はちみつ餃子 ◆8X2XSCHEME [sage] 2019/03/06(水) 22:13:52.26:7/fqDaVy

std::ostringstream は文字列の一種というよりも入出力の系統だし、
std::basic_ostream を抱えているのでそんなもんちゃう?
デフォルトの名無しさん [sage] 2019/03/06(水) 22:36:11.10:cpQrrMgl
継承してるしデータとして保持しておくものでもないしな
デフォルトの名無しさん [sage] 2019/03/06(水) 23:24:49.53:TjQtzcPT

質問と関係ないけどスタックサイズって何かわかってないだろ
デフォルトの名無しさん [sage] 2019/03/07(木) 01:12:44.42:FDOfvyow
このあとスタックがおいしくいただきました
デフォルトの名無しさん [] 2019/03/07(木) 01:36:59.97:7rstSYcJ
ostream, ofstream, ostringstreamのスタックサイズはgccとVS2017でそれぞれ以下のようになる。
gcc: ostream=112, ofstream=264, ostringstream=232
VS2017: ostream=272, ofstream=512 ostringstream=376

どうよ?
237 [] 2019/03/07(木) 01:39:26.14:7rstSYcJ
間違えた。gccとVS2017は逆です。
何が言いたいというと、組み込みで気軽に使えるC++を目指すならiostream周りを何とかしないとね、という話。
デフォルトの名無しさん [sage] 2019/03/07(木) 01:41:48.62:1uoKMGSD
組み込みで気軽に使えるC++を目指してないしどこまで削れるかはベンダーの努力次第
237 [] 2019/03/07(木) 01:45:06.81:7rstSYcJ
Cがコンパイル言語であるにもかかわらずprintf()系の構文解析でJITコンパイルする野暮ったさを解決すべく導入されたはずのiostreamがまったく活かされていないね。
デフォルトの名無しさん [sage] 2019/03/07(木) 01:45:09.29:E2AqWV/D
その程度のスタック消費でヒーヒー言うような組み込み案件でiostream使わんだろ
237 [] 2019/03/07(木) 01:49:48.32:7rstSYcJ

スタック消費でヒーハー言う組み込み案件に進出するのもC++のひとつの課題なのでは有馬温泉
デフォルトの名無しさん [sage] 2019/03/07(木) 01:52:03.09:1uoKMGSD
組み込み界隈がC++を活用する目標があるのであってC++の目標ではない
デフォルトの名無しさん [sage] 2019/03/07(木) 01:56:44.60:E2AqWV/D
from_chars
to_chars使えって話だろ

それかfmt
デフォルトの名無しさん [] 2019/03/07(木) 03:10:47.55: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 のヘッダを読んでみましたがさっぱりでした
はちみつ餃子 ◆8X2XSCHEME [sage] 2019/03/07(木) 03:21:15.84:fFrTWbSf

やりたいのはこういうこと?

class C : public std::function<int(int)>{
using std::function<int(int)>::function;
};
はちみつ餃子 ◆8X2XSCHEME [sage] 2019/03/07(木) 03:25:38.52:fFrTWbSf
めっちゃ雑にやったけど、
実際にはスライシングに気を付けてな。
デフォルトの名無しさん [sage] 2019/03/07(木) 03:42:38.23:V0jGdMU/

すいません、
知識不足でその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を消したい感じです。
はちみつ餃子 ◆8X2XSCHEME [sage] 2019/03/07(木) 04:00:06.05:fFrTWbSf

単純に

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 のメンバとして
見えるからおおよそ期待する挙動になると思う。
デフォルトの名無しさん [sage] 2019/03/07(木) 04:06:09.21:V0jGdMU/

なるほど、そういう意味だったのですね。
ちょっと試してみます。ありがとうございます。
デフォルトの名無しさん [sage] 2019/03/07(木) 08:20:27.58:Yz7Qf/Kl

2ファイル同時に編集なんてしたらあっという間に食い潰しそうね
デフォルトの名無しさん [] 2019/03/08(金) 01:15:31.98:jsJl1WSX
テンプレートで何とかなりませんかね。
はちみつ餃子 ◆8X2XSCHEME [sage] 2019/03/08(金) 02:12:42.20:7lrcs+kH

何が?
237 [] 2019/03/08(金) 06:55:44.25:orP5LHkV
が提示してくれた from_chars, to_chars をgccに導入するにはどうしたらいい?
WSLのubuntuを使ってるんだけど規定でfrom_chars, to_charsの定義されたヘッダーファイルが入ってないっぽい。
デフォルトの名無しさん [sage] 2019/03/08(金) 08:26:54.11:ZyNdKvhR

たしか8.0でまだ整数しか実装されてない
デフォルトの名無しさん [] 2019/03/09(土) 11:07:13.09:jx9iLAiD
C++テンプレートテクニック第三版っていつ出るんですかね?
デフォルトの名無しさん [sage] 2019/03/10(日) 00:54:12.40:3tC9wBDx
待っていても何も始まらない!
君が書くんだよ!
デフォルトの名無しさん [] 2019/03/10(日) 17:07:48.90:yzd/Af8M
テンプレート引数がクラスでpush_back()メンバを持っているというようなことを検査することはできますかね?
デフォルトの名無しさん [sage] 2019/03/10(日) 17:10:17.73:2Qm7LFrM
std::is_classとdetection idiomで可能かと
デフォルトの名無しさん [] 2019/03/10(日) 17:15:14.74:yzd/Af8M
でてくしょんいでおむってどの本見ればわかりますかね?
デフォルトの名無しさん [] 2019/03/10(日) 17:16:33.87:yzd/Af8M
decltype使えばいいのかな。
デフォルトの名無しさん [sage] 2019/03/10(日) 17:18:14.94:2Qm7LFrM
載ってる本あるのかなあ

どうやるのかだけなら、ここのサンプルコードを真似すればいいと思う
ttp://https://cpprefjp.github.io/reference/type_traits/void_t.html
デフォルトの名無しさん [] 2019/03/10(日) 17:21:49.62:yzd/Af8M
ありがとう。
ちょっと読んでみます。
デフォルトの名無しさん [] 2019/03/10(日) 22:01:07.26:yzd/Af8M
std::byteの使い方がよくわからない。
暗黙の何とかを避けるのに使うんだろか。
デフォルトの名無しさん [sage] 2019/03/10(日) 22:11:27.82:2Qm7LFrM
単純にバイトを表現する型というのが必要となった
char8_tと同じようなもん
デフォルトの名無しさん [] 2019/03/10(日) 22:30:00.78:yzd/Af8M
ソケットやファイルの入出力に使うって事かな?
デフォルトの名無しさん [sage] 2019/03/10(日) 22:49:36.48:8hqMg5Px
1バイトサイズの整数のつもりでcharを使ったらstreamで困ることがあったりしたしね。
デフォルトの名無しさん [] 2019/03/10(日) 23:15:04.53:yzd/Af8M
enum class byte : unsigned char { };
ってなってる。
デフォルトの名無しさん [sage] 2019/03/10(日) 23:21:10.96:6gF9+EwK
そのベースの型は実装依存
型を取りだして使えってことなんだろうか
デフォルトの名無しさん [sage] 2019/03/10(日) 23:21:22.34:ketqiw2j
なんでenum classなんだ?
typedefと何が違うの?
デフォルトの名無しさん [sage] 2019/03/10(日) 23:31:19.81:2Qm7LFrM
暗黙の型変換ができない
デフォルトの名無しさん [sage] 2019/03/10(日) 23:54:49.98:vvRzWHgY
こういうの行き過ぎた型安全に思えるけどね
デフォルトの名無しさん [sage] 2019/03/10(日) 23:57:35.21:6gF9+EwK
でも過去にそれで何かあったんでしょ
使うかどうかは任意だしある分には困らない
デフォルトの名無しさん [sage] 2019/03/10(日) 23:57:38.91:ketqiw2j
なるほど
デフォルトの名無しさん [sage] 2019/03/11(月) 00:01:39.15:4nU22VRt
is_enum_vがtrueになるとか違和感しかない
デフォルトの名無しさん [] 2019/03/11(月) 05:30:01.20:pTTv+VC9

なんで
uchar8_t
uchar16_t
uchar32_t
にしないんだろな
デフォルトの名無しさん [sage] 2019/03/11(月) 05:58:05.15:mFqdzmI2
既存のライブラリと衝突しまくるだろそれ
デフォルトの名無しさん [sage] 2019/03/11(月) 11:02:11.57:9rO3q8tQ

ひとりで全部作ってんのか?
誰か使い始めたらそれに巻き込まれるんだよ
デフォルトの名無しさん [sage] 2019/03/11(月) 13:49:05.84:kWR5MawD
WPFってどうなの
デフォルトの名無しさん [sage] 2019/03/11(月) 19:42:26.86:OenRxSRY
デフォルトの名無しさん [] 2019/03/11(月) 22:05:24.43:XA5PtgcF
getoptの標準化マダーチンチン(AA略
デフォルトの名無しさん [sage] 2019/03/12(火) 07:17:28.89:dEFL2K0T
void foo(std::function<void()> &&f){}

int main(){
auto lamda = [](){};
foo(lamda);
}
なぜコンパイルできるの?
デフォルトの名無しさん [] 2019/03/12(火) 07:23:08.39:FSVt1tPQ

オプションの渡し方がそもそも揺れてる
デフォルトの名無しさん [] 2019/03/12(火) 07:25:00.12:FSVt1tPQ

int main()
{
return main();
}
なぜコンパイルできるの?
デフォルトの名無しさん [] 2019/03/12(火) 11:46:00.90:6Uu2j9Xc
int main(std::function<void()> &&f){
return main([](){});
}
デフォルトの名無しさん [sage] 2019/03/12(火) 20:22:26.93:dEFL2K0T
すいません、低レベルのかたたちばかりでした。
聞くところ間違えました
デフォルトの名無しさん [sage] 2019/03/12(火) 20:30:56.16:Nd0ou12Q
なぜc++ main return省略でググらないのか
デフォルトの名無しさん [] 2019/03/12(火) 20:43:58.42:X3QnQcuN
getoptを標準化してしまうとハイフンで始まる変態ファイル名が鬼門になってしまうかな。
デフォルトの名無しさん [] 2019/03/12(火) 20:46:35.39:Zu3OGTTs
is_iterator、is_containerメタ関数はどうやったら作れるんでしょうね?
デフォルトの名無しさん [sage] 2019/03/12(火) 20:54:07.45:JuWddRAo
SFINAEでググれ、でいいんだろうか
デフォルトの名無しさん [] 2019/03/12(火) 20:55:53.60:Zu3OGTTs
スフィ姉は知っているんですが。
そのあとが。
デフォルトの名無しさん [sage] 2019/03/12(火) 21:00:20.04:cgm/opRe
iterator_traitsに通してメンバ型が得られるか確認する?
*とか++とかの操作について確認する?
containerはbeginとendでイテレータ取れるか確認する?
デフォルトの名無しさん [] 2019/03/12(火) 21:34:26.86:Zu3OGTTs
template <typename T>
using is_iterator = std::is_class<typename std::iterator_traits<T>::iterator_category>;
これは使えますかね?
デフォルトの名無しさん [sage] 2019/03/12(火) 21:58:48.29:l3wdXFC4
ぐぐればstack overflowがひっかかる
デフォルトの名無しさん [sage] 2019/03/12(火) 22:01:23.70:JuWddRAo
使えますかねって・・自分で試せるだろ
デフォルトの名無しさん [sage] 2019/03/12(火) 22:12:53.32:6dDI1fa3
マウントしててワロス
デフォルトの名無しさん [sage] 2019/03/12(火) 22:34:48.05:3laDxwEs
マウントは取りたいけど教えるのはめんどくさい
デフォルトの名無しさん [sage] 2019/03/12(火) 22:48:31.61:YKaKEG7g
結局はそれで何がしたいかによるんじゃね
標準のコンテナやそのイテレータで型分岐したいなら十分だけど、カスタム実装されたユーザー定義のイテレータがそのように実装されているかは分からんし
まあiterator_traitsの特殊化も追加で書くようにすれば使えるか
デフォルトの名無しさん [sage] 2019/03/12(火) 23:06:42.78:cgm/opRe
C++20からは一応イテレータはコンセプトがあるなあ
コンテナは知らん
デフォルトの名無しさん [sage] 2019/03/12(火) 23:12:51.59:YKaKEG7g

はダメな気がするな
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{};
デフォルトの名無しさん [sage] 2019/03/12(火) 23:14:38.07:JuWddRAo
,297
アホか、何がマウントだボケ
自分で試しもせずに2chに丸投げとか普通にダメだろ


iterator_traitsに与える型の要件(だけでいいかどうかはさておき)を満たすなら特殊化なんかいらんでしょ
リファレンス見る限り、iterator_traitsの特殊化はポインタのためだけにあると思う
デフォルトの名無しさん [] 2019/03/12(火) 23:27:20.69:Zu3OGTTs

どの本もそういう書き方になってるんだけど、その理由がわからない。
は呼び出し方によっていろいろ問題が起きるんだけど、その理由がわからなさすぎる。
その辺がスッキリわかる本はないですかね。
デフォルトの名無しさん [sage] 2019/03/12(火) 23:39:14.10:YKaKEG7g
本は知らん
SFINAEが使えるのは宣言部分
そこで置換失敗すると宣言そのものが無かったことになる
デフォルトの名無しさん [sage] 2019/03/13(水) 12:04:15.67:lxBl+sTZ

マウントが取りたいだけで教える知識がないだけやねんw
デフォルトの名無しさん [sage] 2019/03/13(水) 12:37:00.35:mh4jyrHE
そう
分からない質問には自分で試せ
これがC++使ってる奴の特徴
デフォルトの名無しさん [sage] 2019/03/13(水) 12:47:27.60:QLyGxm6u
,
そう思うなら自分が教えてやれば?
デフォルトの名無しさん [sage] 2019/03/13(水) 20:50:37.56:u/DrurAb
規約はあるけど「実装が規約」をやっちゃってる部分が多くて、
しかもコンパイラのバージョン依存がひどいってのがc++だからな。
規約は語れても実際にどう動作するか語れない輩も多いだろうね。
デフォルトの名無しさん [sage] 2019/03/13(水) 21:07:13.50:QLyGxm6u
そういう構図じゃないと思うよ
デフォルトの名無しさん [] 2019/03/13(水) 21:25:53.81:Z/ka/TFK
どなたか iostreamの存在価値について熱く語ってくれないか。
デフォルトの名無しさん [sage] 2019/03/13(水) 21:34:23.99:VRJ3bLEu
いやだ
はちみつ餃子 ◆8X2XSCHEME [sage] 2019/03/13(水) 21:38:23.77:xQTh8hgU

ttp://https://www.google.com/search?q=%22iostream%E3%81%AE%E4%BE%A1%E5%80%A4%22
デフォルトの名無しさん [] 2019/03/13(水) 21:55:23.80:780qHyAl
VS2019って4月2日に出るのかな?
デフォルトの名無しさん [sage] 2019/03/13(水) 22:19:08.88:DKlmxwmb
米国時間4/2にローンチイベント行ってるから日本だと3日かな
デフォルトの名無しさん [sage] 2019/03/13(水) 22:44:27.53:mh4jyrHE

だから分からないのにマウント取るのやめたら?
290=301 [sage] 2019/03/13(水) 23:05:00.60:QLyGxm6u

バカだろお前

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

> だから分からないのにマウント取るのやめたら?
お前のことだよ
デフォルトの名無しさん [] 2019/03/14(木) 18:41:51.50:qKfDR5xc

待ちどおしいね。
デフォルトの名無しさん [] 2019/03/14(木) 20:57:09.31:HZIDFMYl
このスレの住人は、新しいVisual Studioでどんなことに期待してるの?
デフォルトの名無しさん [sage] 2019/03/14(木) 20:58:50.91:30TndOaO

マウントされないこと
デフォルトの名無しさん [sage] 2019/03/14(木) 21:00:03.79:O0o087YX
仕様通りに動いてくれりゃそれでいいわ。
デフォルトの名無しさん [sage] 2019/03/14(木) 21:20:35.00:nuZulfE1
C++20の早期対応
デフォルトの名無しさん [sage] 2019/03/14(木) 21:25:28.09:xC4JJLNw
clang対応
デフォルトの名無しさん [sage] 2019/03/14(木) 21:29:12.31:vJRyyCPl
C#での使い勝手向上
デフォルトの名無しさん [sage] 2019/03/14(木) 21:36:15.68:r+Z4K3kn
フロントエンドをVSCodeにしてくれ
デフォルトの名無しさん [sage] 2019/03/14(木) 21:45:44.62:rlbQlqp5
メモリ喰わずに軽くなって…
デフォルトの名無しさん [] 2019/03/14(木) 22:54:08.60:qKfDR5xc
何個まで願い事聞いてくれるんだろ。
デフォルトの名無しさん [sage] 2019/03/14(木) 23:13:56.40:3EvgP48J

Expressを出してくれ
◆QZaw55cn4c [sage] 2019/03/14(木) 23:19:01.48:NTAm4EVS

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

オープンソース化
デフォルトの名無しさん [sage] 2019/03/15(金) 08:11:25.59:2KXTO6ja
本当によくかけとるわ。
この人たちで標準委員やったほうがいいんじゃないかと思う。
ttp://https://ttsuki.github.io/styleguide/cppguide.ja.html
デフォルトの名無しさん [sage] 2019/03/15(金) 08:17:17.58:qA/WFgyI
ゴミ
デフォルトの名無しさん [sage] 2019/03/15(金) 08:54:09.40:fLDhqMRG
けっこう癖が強いよね。例外やpimpl否定したり。
デフォルトの名無しさん [sage] 2019/03/15(金) 08:57:01.66:LNWMUSed
危険思想だなw
ヤバすぎてヘドが出るw
デフォルトの名無しさん [sage] 2019/03/15(金) 09:06:08.50:Uugk/tx2
まあでかいプロジェクトはこんなもんだろう。
例外は実際よくないと思うわ。
デフォルトの名無しさん [sage] 2019/03/15(金) 09:48:31.74:Af9j6Fb3
pimpl否定ってあったっけ?
うちのプロジェクトも原則例外禁止
むかしは一律禁止だったけど
デフォルトの名無しさん [sage] 2019/03/15(金) 11:11:39.02:t9j+keaC

古くさいって言われてなかった?
デフォルトの名無しさん [sage] 2019/03/15(金) 11:55:34.06:E1i6RSEf
googleのスタイルガイドは和訳が古くて英語版しか読まなくなって何年にもなるが追いついてるのか?
デフォルトの名無しさん [sage] 2019/03/15(金) 12:05:48.86:PdhXv0FK
例外無しとか小規模の組み込み以外で意味あるのかね?
デフォルトの名無しさん [sage] 2019/03/15(金) 12:37:29.90:hyh/CKnF
例外使った時点で疎結合もへったくれもなくなると思うわ。
能力的に幅のあるプロジェクトで使うには難しいよ。
デフォルトの名無しさん [sage] 2019/03/15(金) 12:56:39.19:ng8+eCdq

> 能力的に幅のあるプロジェクトで使うには難しいよ。
これには同意するけど

> 例外使った時点で疎結合もへったくれもなくなると思うわ。
意味不明
例外以外の方法使っても似たようなことをする羽目になるだけ
なら意図が明確な例外のほうがマシ
デフォルトの名無しさん [sage] 2019/03/15(金) 14:16:54.97:9vyMIRpZ
戻り値なら呼び出し元と呼び出し先の間の結合だけだが、例外はよりコールスタックの根本の方へ結合が及ぶことがある
フレームワークのように、例外を使ってあえて中間をすっ飛ばしてコールスタックの上と下を結合させるケースもあるけどね
デフォルトの名無しさん [sage] 2019/03/15(金) 14:19:06.67:9vyMIRpZ
念の為補足するけど、Javaの検査例外みたいに常に直上での例外処理を強制するスタイルは戻り値と事実上等価だからここでは論外ね
デフォルトの名無しさん [sage] 2019/03/15(金) 14:31:16.21:yhzlHwio
つまり標準ライブラリのほとんどを使うなと言うこと?
デフォルトの名無しさん [sage] 2019/03/15(金) 14:37:11.61:yhzlHwio
そもそも例外使った方が疎結合になるだろうに
はちみつ餃子 ◆8X2XSCHEME [sage] 2019/03/15(金) 16:00:22.80:q2a9nFaz
他の言語や過去の (例外をあまり想定していない) システムと接続することもあるし、
そういう全体のエコシステムを考えると例外がかえって面倒ということはあると思う。

C++ だけの (新規の) プロジェクトなら全く例外を使わないというのは極端なスタイルだと思うが。
デフォルトの名無しさん [sage] 2019/03/15(金) 16:32:10.73:SB/vZ5dO
例外があると、それが理由で上下の階層が深いシステムになりがちだと思うよ。
節度があれば正直なんでもいいが、言語的にクソ設計を許さないのならその方がありがたい。
デフォルトの名無しさん [sage] 2019/03/15(金) 16:54:37.47:oq4eakC3
c++じゃないところからc++のコード呼び出すなら例外外に出さないようにtry catchでラップするだけだし
逆で途中のコードが例外発生したために解放処理が飛ばされるってなら、raiiクラス化しろって話にならね?

通信経路でやり取りするなら相手が例外処理で実装されていようがされていなかろうがなんの関係もないし
デフォルトの名無しさん [sage] 2019/03/15(金) 17:57:31.19:BCAT3j7k

要は、メッセージングが至高ってことだな
デフォルトの名無しさん [] 2019/03/15(金) 18:59:44.81:0PFucV7H
つまりJavaが至高。
デフォルトの名無しさん [sage] 2019/03/15(金) 20:05:35.24:LNWMUSed
例外だしてどーすんの
ミッションクリティカルで直せるの?
意味ないじゃん

例外使いたきゃ専用言語使えばいい
デフォルトの名無しさん [sage] 2019/03/15(金) 20:09:02.33:qA/WFgyI
プログラミング言語の専門家に聞いて
デフォルトの名無しさん [sage] 2019/03/15(金) 20:37:29.42:ng8+eCdq

> 他の言語や過去の (例外をあまり想定していない) システムと接続することもあるし、
> そういう全体のエコシステムを考えると例外がかえって面倒ということはあると思う。
もうそういう極端な例でしか反論できないことはわかったよw
デフォルトの名無しさん [sage] 2019/03/15(金) 20:59:33.43:UMZlK7qa
江添勝てなかったか・・
デフォルトの名無しさん [sage] 2019/03/15(金) 21:09:50.31:2KXTO6ja

微妙に修正はされてる。
てかクソなc++本読むよりかよっぽど各機能の利点、問題点が簡潔に書けてると思うが。
デフォルトの名無しさん [sage] 2019/03/15(金) 21:13:26.14:BCAT3j7k
まだひっくり返る可能性はあると思うね
デフォルトの名無しさん [sage] 2019/03/15(金) 21:50:38.17:fLDhqMRG

pimplに限った話じゃないけど、前方宣言とそれによる定義の隠蔽が推奨されていない。
デフォルトの名無しさん [sage] 2019/03/15(金) 22:07:25.54:qA/WFgyI
Googleはな
デフォルトの名無しさん [sage] 2019/03/15(金) 22:38:20.91:4qwaELjT

大規模なところでも例外禁止あるから
mozillaもそうでしょ
AAAなゲームスタジオでも多い
性能引き出したかったらそういう厳しい制約がいるんだよ
はちみつ餃子 ◆8X2XSCHEME [sage] 2019/03/15(金) 22:40:04.57:q2a9nFaz

グーグルのガイドラインが極端なのは当たり前だ。
超巨大なエコシステムで成り立ってるわけだし。
例外を使わない派がしばしばグーグルのガイドラインを持ち出すんだけど、
そのガイドラインにすら、最初から設計してたら違ったかもしれないという
文言があるので、 C++ を使った設計理念一般としての強い根拠にならんのよな。

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


C++ はクソ設計でもどうにか形には出来るっていう方向性だと思う。
まともな設計ならそれが一番良いにきまってるけど、
それが期待できない場合が大半だという現実がある。
KAC [sage] 2019/03/15(金) 22:48:06.41:rqfh3/aR
例外禁止とかの環境って、
newの失敗とか毎回チェックするの?
デフォルトの名無しさん [sage] 2019/03/15(金) 22:54:50.21:2KXTO6ja
規約を守る守らんってことにしか目がいかんのな。
やっぱ馬鹿ばっかだわ。
デフォルトの名無しさん [sage] 2019/03/15(金) 22:54:57.62:12ZNVc6t

newの失敗のチェックって何するの?
null返ったかどうかのチェック?
デフォルトの名無しさん [sage] 2019/03/15(金) 23:03:42.33:L+hp7qbL
例外処理機構が無かったら、メモリ確保に失敗しても、
そこから過去のロールバックができない

自己流で、long jump するぐらいなら、例外処理の方がよい
デフォルトの名無しさん [sage] 2019/03/15(金) 23:09:45.82:12ZNVc6t

いや、失敗したら駄目だろ。失敗しないのが正しい。
プログラミング言語如きが考慮すべき問題ではない。
デフォルトの名無しさん [sage] 2019/03/15(金) 23:18:26.60:fLDhqMRG

そのロールバックってのはCとmallocじゃできないようなものなのかな。
デフォルトの名無しさん [sage] 2019/03/15(金) 23:25:12.09:qA/WFgyI
new失敗とかコンピュータが壊れてるからチェックしても意味ない
デフォルトの名無しさん [sage] 2019/03/15(金) 23:27:22.88:qA/WFgyI
当然特殊なケースは除くからな
一応言っておかないと組み込みガー君とか宇宙線でエラーガー君が飛んでくるからな
デフォルトの名無しさん [sage] 2019/03/15(金) 23:37:27.23:WyRx2/31

>私としては、一般的な C++ での設計の参考にするべきは標準ライブラリだと思う。
設計ではなく使い方の参考に、という意味では賛成だけど
テンプレートバリバリの設計はあまりにもコストがかかるというのを知っといて欲しい
ああいうのは湯水のごとく時間をかけられるからやれるんであって
デフォルトの名無しさん [sage] 2019/03/15(金) 23:38:17.19:iTKvW/zw
きみらはあれか、元記事とか全然読まずにコメントするクチか
リンク元には「例外は全く新規のプロジェクトならデメリットよりメリットが優先するので使って良い。
ただ既存のグーグルプロジェクトは元々例外を想定していないのでこれに例外のパターンを導入する
とリスクのほうが多いのでやめるべき。ただし Windows については例外がある(駄洒落ではない)」
と書いてあるんだがちゃんと読んだか。ちなみに駄洒落ではない、は俺が追加したのでなく元の文にある
はちみつ餃子 ◆8X2XSCHEME [sage] 2019/03/15(金) 23:45:56.39:q2a9nFaz

そんな極端な意味では言ってない。
手間が合理的な範囲内で「参考」には出来るよって程度の話。
デフォルトの名無しさん [sage] 2019/03/15(金) 23:48:42.07:5dVML2o5
エラーにはリカバリーすべきものとそうでないものがある
あとそのエラーが起こる頻度の違い

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

となると残りのリカバリーするものでかつたまにエラーがおこるようなのが例外にする価値があるエラー
あと例外発生時のunwindが重いからそれでも問題にならないもの
となるとあんまり使えるとこないんだよね
そういうわけで最近例外なしの言語がでてきてる流れなんだろう
KAC [sage] 2019/03/15(金) 23:51:56.30:rqfh3/aR

コンピュータが壊れない限りメモリ確保が失敗しない環境って凄いな。。。
デフォルトの名無しさん [sage] 2019/03/15(金) 23:54:45.92:qA/WFgyI
出、出〜www
一名いらっしゃいましたwww
デフォルトの名無しさん [sage] 2019/03/16(土) 00:07:16.61:HR8X4dmV
例外ってcatchしなきゃ投げたその場で落ちてくれるのがこの上なく便利だろう
問題残したまま実行続けて別の関係ないところで落ちるのが最悪
runtimeで落ちて困るような用途でも、
ソースコードあるやつなら静的解析で例外発生箇所網羅出来そうなものだが
網羅できればリソースリークする危険な場所わかるし、対処も出来るのにね

逆にソースコード無いライブラリやダイナミックリンクする奴は、例外含めて外部仕様としてかっちり決まっているべきものじゃね
デフォルトの名無しさん [sage] 2019/03/16(土) 00:11:00.29:oXtW8C30

> 例外ってcatchしなきゃ投げたその場で落ちてくれるのがこの上なく便利だろう

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

仕様ってのは例外外に出すか出さないか、
出すなら出し得る例外の種類のリスト
出さないならエラー毎にエラーコードやら返し方やら決めるって話
デフォルトの名無しさん [sage] 2019/03/16(土) 00:23:45.45:oXtW8C30
そうなんだよね
例外の仕組みわかってないやつは平気で動的ライブラリの界面に
例外使ったりするんだよね
あと標準ライブラリ丸出しにするやつもしかり
それ誰も互換性保証してねーから
デフォルトの名無しさん [] 2019/03/16(土) 00:24:47.11:UXq90ll9

核戦争を生き抜くには。
デフォルトの名無しさん [sage] 2019/03/16(土) 00:24:57.90:HR8X4dmV
まあ標準ライブラリの例外の使い方のおかしさも気になるが

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

いや、これ出る状況普通runtime_errorだよね
デフォルトの名無しさん [sage] 2019/03/16(土) 00:29:24.58:cz3ooqCT
>例外含めて外部仕様としてかっちり決まっているべきものじゃね

そこを言語の機構で保証できない、動的言語みたいななあなあ状態なのが残念なところだね。
それをきっちり保証しようとした検査例外はそれはそれで扱いづらいところがあるし。
デフォルトの名無しさん [sage] 2019/03/16(土) 00:29:25.98:U4afEAjj

リカバリーするかしないか、頻度が高いか低いか、どちらもプログラム(特にライブラリ)を書いてる時点では
言い切れないから困るんですよねぇ。
デフォルトの名無しさん [] 2019/03/16(土) 00:36:35.46:UXq90ll9
そこでプロパティ型なんですよ。
デフォルトの名無しさん [sage] 2019/03/16(土) 06:11:19.71:7Yfqh0Zg

無限にnewできる理想郷に住んでるんだろw
相手しなくていいよ
デフォルトの名無しさん [] 2019/03/16(土) 06:46:32.47:TLiwIm0H
復旧不可能な例外もあれば、些細な例外もあるよね。
戻り値チェックで十分でしょと思うようなところで例外を投げるJava/C#みたいな流儀だと、いちいちキャッチするのが面倒。
デフォルトの名無しさん [] 2019/03/16(土) 06:52:39.99:TLiwIm0H
Cでは戻り値で判定できたはずのエラー種別が例外クラスで細かく分類されてしまったことで、
エラー処理で書かなければならないコード量が増えて例外のキャッチ漏れまで起きる危険性が生み出された。
デフォルトの名無しさん [sage] 2019/03/16(土) 07:31:06.00:5/K53Ire
その程度の知識で語ってる奴は戻り値方式でも処理漏れするだろw
デフォルトの名無しさん [sage] 2019/03/16(土) 07:35:15.72:/kg6KhNe
例外の嫌なところは
処理できない案件を低水準側に丸投げするところなんだよな…

ユニックスのプロセスの死亡順序もそうだが、
計算機業界は常識が逆転してゐる…
デフォルトの名無しさん [sage] 2019/03/16(土) 07:38:02.24:/kg6KhNe
というわけでおそらくアプリの設計シチュの99%ぐらいは
 例外発生=プログラムの死亡
、とみなして良いはず
ここまで割り切るならはじめて例外はお手軽で便利と言える
デフォルトの名無しさん [] 2019/03/16(土) 12:28:02.50:UXq90ll9
例外をキャッチしたらプランBに移行するのが、真の戦闘のプロ。
デフォルトの名無しさん [sage] 2019/03/16(土) 12:49:25.73:V15J7n/y
例外なんてグローバル変数みたいなもの。
だから低レイヤで使うのは仕方ない
デフォルトの名無しさん [sage] 2019/03/16(土) 12:50:47.84:jRc2/nMs
std::cin >> a;

は入力を延々と待っている。
これ別スレッドから止めさせる方法はありますか?
デフォルトの名無しさん [sage] 2019/03/16(土) 13:10:50.41:V15J7n/y
stdin閉じるとどうなる?
デフォルトの名無しさん [sage] 2019/03/16(土) 15:40:22.15:/kg6KhNe
(組み込みはともかくアプリの場合は呼び出し元の方が高水準レイヤにあたるのではないかというツッコミが来ると思ったが
 来なかったので黙っていよう…
デフォルトの名無しさん [sage] 2019/03/16(土) 17:27:11.59:/kg6KhNe

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

いや、プログラムでは、呼び出し側の方が高レベル、呼び出された側が低レベル
なので、呼び出された側が例外を投げた場合、高レベル側の関数で処理できる
ので適切。
デフォルトの名無しさん [] 2019/03/16(土) 20:00:47.57:TLiwIm0H
多くの例外の基底クラスになる exception にエラーコード整数値を出力する関数があればもう少しC寄りのエラー処理ができたと思うのだが。
既存のexceptionメンバ関数 const char *what() だけでは扱いが困難。
デフォルトの名無しさん [] 2019/03/16(土) 20:14:28.85:1JRLHvWf
std:::to_string();
デフォルトの名無しさん [sage] 2019/03/16(土) 20:14:39.74:w9XKSp7E

必要ならそういうクラスを定義するだけだろ
デフォルトの名無しさん [sage] 2019/03/16(土) 20:15:00.26:1JRLHvWf
sage
デフォルトの名無しさん [sage] 2019/03/16(土) 20:39:18.42:cz3ooqCT
ユーザーにエラー原因を示すだけならconst char*でも大して問題ないし、
catchした側でエラーコードによって何かするというのはたいていアンチパターン。
デフォルトの名無しさん [sage] 2019/03/16(土) 22:15:57.75:HR8X4dmV
文字をwchar_tで処理しているプログラムだと例外文字列作るのが面倒
まあ詳細な情報出さずに固定文字列にしてしまえばいいんだけど
デフォルトの名無しさん [sage] 2019/03/17(日) 00:42:25.28:OzxlZzXh
templateの使い道がいまいちわからん
STLやboostみたいなものは非常に有益だが

同僚がドヤ顔でコンテナを作ったって自慢してたが、
stlのコンテナを使わずにそいつのコンテナを使う理由が無い
はちみつ餃子 ◆8X2XSCHEME [sage] 2019/03/17(日) 00:46:12.21:aA4z/LNt

困ってないなら使わなくてもいいと思うよ。
困る場面がある人のための機能。
デフォルトの名無しさん [sage] 2019/03/17(日) 00:48:31.10:UT79+Nc/
同じコードをコピペしなくて済むから、作業量も減るし、保守も楽になる。
デフォルトの名無しさん [sage] 2019/03/17(日) 00:56:16.88:NYZE0cFr

せやな
ただそれは作るものの需要の有無の問題だ
はちみつ餃子 ◆8X2XSCHEME [sage] 2019/03/17(日) 00:58:29.44:aA4z/LNt
重複があることを事前に発見するのは難しい場合もあるから、
同じことを何度も書いている気がするなと思ったら
どうにかしてまとめることを検討するという程度でもいいかもね。

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

こういうのは程度問題なので、なんでもほどほどにね。
デフォルトの名無しさん [sage] 2019/03/17(日) 01:15:02.15:7ciqStwp
テンプレート(のパラメータにおける型の自動推論)と
関数のオーバーロードの合わせ技によるコードのまとめ力は異常
デフォルトの名無しさん [sage] 2019/03/17(日) 01:37:37.76: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パターンもののユースケースに網羅的に対応できたことになるからスゲー強力

※ 個人の感想です
デフォルトの名無しさん [] 2019/03/17(日) 01:43:06.21:Jta37aFk

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

FILE* fpは十分汎用的でしかも最大限高速なので他への代替の必要性はほとんど考えられないし、
サンプルコードでむやみに凝っても仕方が無い

※ 個人の感想です
デフォルトの名無しさん [sage] 2019/03/17(日) 01:58:32.33:ADoP4x2u
テンプレートはヘッダに全部書かなきゃいかんのなんとかならんか?
デフォルトの名無しさん [sage] 2019/03/17(日) 02:06:35.73:NYZE0cFr
原理上どうにもならない
デフォルトの名無しさん [sage] 2019/03/17(日) 02:10:16.54:7ciqStwp
テンプレートの分割コンパイルは一度実装されたが1年がかりの複雑な仕事になったし
あまりに複雑すぎて普及に至っていないというようなことがプログラミング言語C++で読んだ記憶、

しかし、importキーワードがC++の予約語であるうちはまだ希望がある
デフォルトの名無しさん [] 2019/03/17(日) 02:10:32.44:Jta37aFk
FILE* fp は 標準のfgetc()の実行速度が遅くて残念。バッファリングしている甲斐がない。
デフォルトの名無しさん [sage] 2019/03/17(日) 02:26:35.34:UT79+Nc/
使いたい型決まっているなら別にできるだろ?
ヘッダで宣言だけ書いて、ソースで定義と明示的インスタンス化すればいいだけ
デフォルトの名無しさん [sage] 2019/03/17(日) 02:34:45.67:61bjcvzF
3大C++無限ループ話題

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

あと一つは?
デフォルトの名無しさん [sage] 2019/03/17(日) 03:18:11.89:4v9XGq5+
多重ループの抜け方
デフォルトの名無しさん [] 2019/03/17(日) 03:19:37.14:XP0TJBl2
STLにツリーがない理由を教えてください。
デフォルトの名無しさん [sage] 2019/03/17(日) 04:14:30.81:OzxlZzXh
あるクラスが非トリビアルなコピーコンストラクタをもっていることを検出したい
そのクラスのメンバの型が非トリビアルなコピーコンストラクタを持っていたとしても。
デフォルトの名無しさん [sage] 2019/03/17(日) 06:02:45.37:NYZE0cFr

メモリが云々
デフォルトの名無しさん [sage] 2019/03/17(日) 06:48:43.74:WBoQCy0z

テンプレートを抜き出してヘッダーファイルを生成するプリプリプロセッサを作ればいい
デフォルトの名無しさん [sage] 2019/03/17(日) 08:23:20.60:h3PfG3Ac

トリビアルコピー出来ないことを検出したいならis_trivially_copyableで充分だけどそれ以上のことがしたいの?
デフォルトの名無しさん [sage] 2019/03/17(日) 08:28:29.93:qh1L90Cw

糞抽象化の見本みたいなコードだなw。
そのうち使われなくなる種類のコードだ。
デフォルトの名無しさん [sage] 2019/03/17(日) 08:33:05.90:NYZE0cFr
名人様一名いらっしゃいました
デフォルトの名無しさん [sage] 2019/03/17(日) 11:20:51.42:2Lg7N/Z5

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

x3とかつけない方が良くね?
てかvariable template使うところだね
デフォルトの名無しさん [sage] 2019/03/17(日) 13:22:57.65:UT79+Nc/
variadicだた
デフォルトの名無しさん [] 2019/03/17(日) 13:42:47.24:XP0TJBl2
バリスティック・テンプルね。
デフォルトの名無しさん [sage] 2019/03/17(日) 15:09:36.00:WBoQCy0z

サンプルにまでマウントするとかw
デフォルトの名無しさん [] 2019/03/17(日) 15:29:33.79:XP0TJBl2
マウントの定義を教えてください。
デフォルトの名無しさん [] 2019/03/17(日) 16:01:22.88:Ymi5ijHL
明確な定義があるわけじゃないけど、主に「勘違いした高卒が高等な他人を見下してること、もしくはその様」を指す語としてつかわれてんじゃないの
デフォルトの名無しさん [sage] 2019/03/17(日) 21:10:58.21:NYZE0cFr

意識高い系
KAC [sage] 2019/03/17(日) 21:23:45.76:nO6ODsyT

猿などが優位だと主張するために
相手に馬乗りになること

こういう場では、
相手に反論した(つもり)なら満足し、
反論を受けると過剰反応を示す奴をさすことが多い。
デフォルトの名無しさん [sage] 2019/03/17(日) 21:42:19.60:2Lg7N/Z5

>相手に反論した(つもり)なら満足し、
>反論を受けると過剰反応を示す奴をさすことが多い。
その説明だと某クソコテしか思い当たらないんだが・・・w
◆QZaw55cn4c [sage] 2019/03/17(日) 21:57:43.35:8PHb1ymW

誰?
デフォルトの名無しさん [sage] 2019/03/17(日) 22:22:05.53:VD3ReUoA
オープンソース化されたWindowsの電卓を見たが、クッソ綺麗でモダンなコードだな
デフォルトの名無しさん [sage] 2019/03/17(日) 22:25:37.54:NYZE0cFr
多分7に入ってた電卓とは別物だな
デフォルトの名無しさん [sage] 2019/03/17(日) 23:22:31.89:0FN5yhQH

あの手のコードって意味ないよな
無意味に11や14で追加された機能をなんかを使いたがるやついるわー
そういったやつに限って仕事が遅い

ウンチクはいいから、さっさと終わらせろよ
デフォルトの名無しさん [sage] 2019/03/18(月) 00:13:57.67:HNvbYtsL
Windowsカーネルのオープンソース化待ってます
デフォルトの名無しさん [sage] 2019/03/18(月) 05:32:24.67:+E07qlDR
sort関数の比較関数を、クラスのメンバ関数として定義すると invalid use of non-static member function というエラーが出ます。
なぜこれは禁止されるのでしょうか。
また、どうやって解決したら良いですか。
デフォルトの名無しさん [sage] 2019/03/18(月) 05:33:36.55:HNvbYtsL
エラーメッセージ読みなよ
デフォルトの名無しさん [sage] 2019/03/18(月) 06:41:53.05:8TZ/BLJn
理屈を知ってる人には当然だけど、初めての人は混乱する部分じゃないかな。
sort で使う比較関数は色んな形で宣言できるけど、宣言する場所によって
エラーにならずに使える関数の形式が違うってやつ。

メンバ関数にした比較関数のプロトタイプ宣言はどんな感じ?
デフォルトの名無しさん [sage] 2019/03/18(月) 08:08:37.98:HNvbYtsL
非staticメンバをstaticのように使おうとしたときに出るエラーだからsortとか関係ない
Class::funcをsortに入れたんでしょ
Class().funcとするかfuncをstaticにするだけ
デフォルトの名無しさん [sage] 2019/03/18(月) 08:49:38.19:fJqFZa8b
今時はClass().funcでいけるんすか
デフォルトの名無しさん [sage] 2019/03/18(月) 09:58:55.92:7+YzgLjV
Class::funcってstaticじゃないの?
デフォルトの名無しさん [sage] 2019/03/18(月) 10:42:04.28:9EOa0iNV
->*みたいな書き方の意義がわかったら一人前どすな
デフォルトの名無しさん [sage] 2019/03/18(月) 11:13:12.39:27d4/ixp
ちなみにどんな意義があるの?
デフォルトの名無しさん [sage] 2019/03/18(月) 19:22:09.39:SgtRGl5R

bool mycomp(string a, string b);

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


ttps://mevius.5ch.net/test/read.cgi/tech/1434079972/39
なんと! private なメソッドを呼び出せるのです!
デフォルトの名無しさん [sage] 2019/03/18(月) 21:20:34.54:lCR32A1k
エクセルで使われているようなGUIにちょっとしたアニメーションをつけるには何使えばいい?
さまよえる蟻人間 ◆T6xkBnTXz7B0 [sage] 2019/03/18(月) 21:26:27.76:qJuL/kMQ

タイマー
デフォルトの名無しさん [sage] 2019/03/18(月) 21:43:42.87:lCR32A1k

例えば四角形の座標の終点の値と移動にかかる時間をするだけでヌルッと動いてくれる機能があるやつがいいです
デフォルトの名無しさん [sage] 2019/03/18(月) 21:45:05.39:ok5NeesM
普通にcのsort関数使えばいいのに。
キャストしたら負けとでも思ってんのかね。
デフォルトの名無しさん [sage] 2019/03/18(月) 21:59:25.97:MtU5H+Zb

cocos2d
デフォルトの名無しさん [sage] 2019/03/18(月) 22:47:37.12: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

なんで?
デフォルトの名無しさん [sage] 2019/03/18(月) 22:56:40.87:bBcTS09+

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

cのsort関数はアドレス連続性がないコンテナには使えないでしょ。
vector::sort()とCのsort()の速度はあまり変わらないので、わざわざCのsort()を使う理由がない。
デフォルトの名無しさん [sage] 2019/03/18(月) 23:28:12.28:c3AGzLzz
qsort「おっワイの出番か?」
デフォルトの名無しさん [sage] 2019/03/19(火) 00:00:01.33:V3eHYYxi
cのsortってラムダ渡せないし、ワザワザ面倒くさい記述してまで使う意味無いだろう。
デフォルトの名無しさん [sage] 2019/03/19(火) 00:37:48.08:wfF3ncvB
template<typename T>
T func(T a){
}
という関数の中身として、T が int なら a*2 を返し、T が double ならa/2 を返し、それ以外なら a を返す、という処理にしたい場合どう書いたら良いのでしょうか。

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

簡単化のため、必要さが全くない例になっていますがよろしくお願いします。
デフォルトの名無しさん [] 2019/03/19(火) 00:43:22.56:fW/dBWxG
STLが天才なのは分かったけど、遅くなりそうなのも分かってしまった。
デフォルトの名無しさん [] 2019/03/19(火) 00:49:23.69:fW/dBWxG

ttp://https://ideone.com/Oo65ND
これでいいのか知らんけど。
デフォルトの名無しさん [sage] 2019/03/19(火) 00:54:54.54:V3eHYYxi

簡単化しすぎて何を質問したいのかよくわからない
その例の程度の処理なら、intとdoubleの関数をオーバーロードして、template関数でデフォルトの処理も書けばいい
intとdoubleをどうしてもtemplate化したかったら特殊化で書けばいい

前後に長い共通処理がある場合の一部式だけ個別にしたいなら、関数オブジェクトで式を引数にとる補助template関数作って、上記手法で型毎にlambdaで式を変えて補助関数を呼び分ければいい
デフォルトの名無しさん [sage] 2019/03/19(火) 00:56:32.83:wfF3ncvB

特殊化する部分を関数として切り出して特殊化すれば良いということでしょうか。
デフォルトの名無しさん [sage] 2019/03/19(火) 06:48:59.95:smCJKSpo

まずは、エラーなくコンパイルが通って実行できるまで。
単純には、比較関数をクラスの外に出して「メンバ関数じゃない関数」にする。

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

比較関数は、2つの myclass 型のオブジェクトのメンバ s 同士を比較するから、
bool mycomp(const myclass& a, const myclass& b)
{
 return a.s < b.s; // 辞書式の昇順
}
468 [sage] 2019/03/19(火) 06:54:39.65:smCJKSpo
あるいは の段階はすでに通過してて、
「今度は比較関数をクラスのメンバ関数にしてみよう」と思ったのかな。

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); // 比較関数
};

(「改行多すぎ」につき、もう一回だけつづく)
468 [sage] 2019/03/19(火) 06:57:01.64:smCJKSpo
( の続き、長々とすまぬ)

関数の定義(クラス定義の外に書く場合)はこんな感じ。
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 のメンバ関数も候補に入れてくれても良さそうな気がする。
なんでダメなんだろ?
デフォルトの名無しさん [sage] 2019/03/19(火) 07:25:56.87:aaAbvqyx
たかがソート一つ実行するのにこれってやっぱc++は失敗しとるわ。。
デフォルトの名無しさん [sage] 2019/03/19(火) 07:30:30.93:/K8ycOQq
どの言語も似たようなもんだろ
デフォルトの名無しさん [sage] 2019/03/19(火) 07:31:18.45:K4E5ztRO

丁寧に教えてくださりありがとうございます。

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

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




> 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; // 辞書式の昇順
}
流に宣言、定義した場合に限りますか。
デフォルトの名無しさん [sage] 2019/03/19(火) 07:33:59.57:LjcR+vA2
何のために非staticにこだわるんだ?
メンバにアクセスしないならstaticつけとけよ
デフォルトの名無しさん [sage] 2019/03/19(火) 08:36:28.37:I3ez8Qch
比較関数をメンバ関数としてクラスに内在させるのが良くない
外部化するか、演算子オーバーロードする
どちらかと言うと比較関数を作らずに大小関係を定義する言語だ

実は、関数やクラスの間の包含関係がある
クラスを比較する関数はクラスの外部におかれるべきであって、メンバ関数にするのは筋が悪い
クラス内部に置くなら大小関係の定義にすべきだ
この手の階層関係は、規格書にもどんな教科書にも一切書かれてないけど、暗黙のうちに了解されている
デフォルトの名無しさん [sage] 2019/03/19(火) 09:31:11.81:wYd+ZeEZ
対称な演算子をインスタンスメンバにするのはセンス無いね
デフォルトの名無しさん [sage] 2019/03/19(火) 15:31:26.82:Pb8DX7io

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;
}
デフォルトの名無しさん [sage] 2019/03/19(火) 16:57:51.01:W9RsgnS5
namespaceを活用しろ
デフォルトの名無しさん [sage] 2019/03/19(火) 17:11:35.93:HTVBHQBE

これの方が関数として切り出して特殊化するより好きな見た目です
デフォルトの名無しさん [sage] 2019/03/19(火) 21:29:30.46:bWZzZfFH

それだと実行時に判断コストがかかるじゃん
デフォルトの名無しさん [sage] 2019/03/19(火) 21:29:55.51:QA3viZTS
if constexprってtypeidで情報取ってきて比較するみたいなオーバーヘッドが0になりますか?
デフォルトの名無しさん [sage] 2019/03/19(火) 21:33:24.72:Nfgw9yWF
おじさん久々にC++の仕事受けたんだけど
色々進化してて面食らってます

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

んだけどさ、

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

ローカル変数の右辺値参照て何に使うん?
実験してみた限り、勝手にムーブとかしてくれるわけでもなさそうだし
ローカル変数に&&付いてると何に使えてんな時便利なの?
デフォルトの名無しさん [sage] 2019/03/19(火) 21:34:25.38:/K8ycOQq
使わなくていい
デフォルトの名無しさん [sage] 2019/03/19(火) 21:40:02.75:kyorfls3

右辺値参照はほぼムーブコンストラクタのためにあると思っていいと思う
左辺値参照と同じように書けるというだけで、使うことはないかと
デフォルトの名無しさん [sage] 2019/03/19(火) 22:04:14.68:gYGT/BxR
変数宣言した右辺値参照そのものは左辺値という罠
極力そんな物作るべきじゃないね
デフォルトの名無しさん [] 2019/03/19(火) 22:05:37.07:8COf7JeC
俺今使い道思いついたんだけど披露してもいい?
◆QZaw55cn4c [sage] 2019/03/19(火) 22:26:06.36:45LJYysD

どうぞどうぞ…
デフォルトの名無しさん [sage] 2019/03/19(火) 22:37:18.08:xP6m0cDT

if constexprは実行時コストゼロのはずだよ
デフォルトの名無しさん [sage] 2019/03/19(火) 22:53:01.58:bWZzZfFH

ifがなんで実行時ゼロなんだよ
デフォルトの名無しさん [sage] 2019/03/19(火) 23:23:47.41:hIuEq8sX
赤っ恥
デフォルトの名無しさん [sage] 2019/03/19(火) 23:26:12.29:/K8ycOQq

if constexprにするとコンパイル時に評価されて特定の分岐のみが実体化される
デフォルトの名無しさん [] 2019/03/19(火) 23:38:47.81:zcFktSXp
これですか。すごいね、これ。C++17からだけど。

constexpr if 文
ttp://https://cpprefjp.github.io/lang/cpp17/if_constexpr.html
デフォルトの名無しさん [sage] 2019/03/20(水) 00:20:58.62:wnXzlprR

回答ありがとう
なるほど、文法上は書けるから仕様上厳密な定義はされてるけど、普通は特に使わないで良いのね
デフォルトの名無しさん [] 2019/03/20(水) 00:27:33.64:K21QzJf5
初心者がやたらとアスタリスク使ってポインタの参照値を得ようとするのに似た感じがある。
他言語に移植しにくいだろ、テンプレート化しにくくなるだろ、と小一時間。
デフォルトの名無しさん [sage] 2019/03/20(水) 00:56:45.75:LskeNtBJ
アスタリスク使ってポインタの中身取ったらあかんのか・・・
デフォルトの名無しさん [sage] 2019/03/20(水) 03:19:15.41:abqqrm1b
multimap よりも set の vector の方が便利なのですが、異端ですか?
デフォルトの名無しさん [sage] 2019/03/20(水) 04:26:37.96:LuG6mmni
別に
はちみつ餃子 ◆8X2XSCHEME [sage] 2019/03/20(水) 04:53:08.98:K9L8gFp5

既に回答がついているとおり、 rvalue 参照はほとんどムーブのための機能。
ローカル変数的に使う理由はあんまりない。

テンプレート関数の仮引数や auto 変数として rvalue 参照 (の記法) が現れたときは
特殊な推論規則 (ユニバーサル参照) が適用されるというのは気を付ける必要がある。
デフォルトの名無しさん [sage] 2019/03/20(水) 07:25:39.73:iA5XXTHz
ローカル変数もそうだけどintみたいなオブジェクト性が低いものに使っても意味ないわな。
rustの古いチュートリアルのmoveの例がなぜかintでクソだったけれど最近は文字列型になっとった。
デフォルトの名無しさん [sage] 2019/03/20(水) 08:44:38.76:LSg3zFHe
オブジェクト性
デフォルトの名無しさん [sage] 2019/03/20(水) 10:22:31.87:fk3FMvWg
考えうるメソッドが少ない=オブジェクト性が低い、とかじゃねえの
int型の変数.length() とかは流石に意味不明に見える
デフォルトの名無しさん [sage] 2019/03/20(水) 10:40:09.36:LuG6mmni
言いたいことは分かるが聞き慣れない言葉を使っているということでは
デフォルトの名無しさん [sage] 2019/03/20(水) 11:01:00.31:9pRMZ9XY
リテラルが右辺値ってのがよくわからんのだが

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

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

でもこれって通常の値の代入のときも名前のない領域にコピーしてからさらにコピーというセマンティクスなの?
デフォルトの名無しさん [sage] 2019/03/20(水) 11:29:19.49:sS5iHBwg
右辺値参照変数それ自体は左辺値だからね
デフォルトの名無しさん [sage] 2019/03/20(水) 15:37:27.50:oYbI5+uJ
右辺値を参照で束縛すると、その右辺値の寿命は束縛してる参照と同じところまで引き伸ばされる
この点は左辺値参照も右辺値参照も一緒
デフォルトの名無しさん [sage] 2019/03/20(水) 16:05:23.24:9pRMZ9XY
それ に関係ある?
デフォルトの名無しさん [sage] 2019/03/20(水) 16:16:24.82:oYbI5+uJ
どうして関係ないと思うの?
デフォルトの名無しさん [sage] 2019/03/20(水) 20:55:29.39:9pRMZ9XY
一見リテラルのアドレスが取れて書き換えられる、ように見えることに疑問を持ってる
言い方変えると
右辺値参照に代入するとき
リテラルが右辺値でなくて、そのコピーが右辺値なのでは?
そこに寿命がどう関係あるのかわからない
デフォルトの名無しさん [sage] 2019/03/20(水) 21:07:28.64:LskeNtBJ
アセンブラレベルで言うなら、即値なのかdataセクションにあるのかの違いじゃないの
デフォルトの名無しさん [sage] 2019/03/20(水) 21:31:53.81:iA5XXTHz
>オブジェクト性
コピーでも参照でも対してコストがかからんものというかそういうニュアンスなんだが
思った以上に伝わらんもんだな。
わかりやすいようにintと文字列を例に出してもこんなもんかもね。
デフォルトの名無しさん [sage] 2019/03/20(水) 22:56:30.82:B8C8ZXR4
アドレスが取れたら右辺値ではないみたいな論調だな
デフォルトの名無しさん [sage] 2019/03/20(水) 23:15:02.74:oYbI5+uJ

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

「コピー」だと思うから違和感があるんじゃない?
リテラルなるものの実体が空の上やPCの隙間に隠れてるわけじゃないし、プログラムはそんなものは取り扱えない
デフォルトの名無しさん [sage] 2019/03/21(木) 00:07:41.99:2SUbybof

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

まだ半分なっとくできないのは、
上にも書いたけどリテラルで普通に代入するときも、
一旦右辺値を作ってから左辺にコピーする、というのかc++のセマンティクス?

なんか無駄すぎて釈然としない
デフォルトの名無しさん [sage] 2019/03/21(木) 00:14:13.96:FPuzf0hs
牛からは牛乳が出るけど牛は牛乳じゃないだろ?
そういうこと
デフォルトの名無しさん [sage] 2019/03/21(木) 00:20:16.95:FPuzf0hs
リテラルってのは文法要素なの
演算子とかキーワードとかコメントとかそういうものの仲間なの

実行時にはそんなものは出てこない
プログラムが扱えるのは「値」だけで、左辺値とか右辺値というのはその分類
int型の0x2Aという値を生成しろという命令をコンパイラに作ってもらうためにプログラマが書くものが「42」というリテラル
さっきからずっとそこを混同してる
デフォルトの名無しさん [] 2019/03/21(木) 01:01:57.88:7qm1Whlz
'\0' と L'\0' で違うしな
デフォルトの名無しさん [sage] 2019/03/21(木) 02:01:40.67:/XDYuiDC
,514
数値リテラルは右辺値。
ttp://https://timsong-cpp.github.io/cppwp/n4659/expr.prim.literal#1

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

参照を初期化する際のルールは代入のセマンティクスとは関係ない。
int i; i = 42 の代入で一時オブジェクトは不要。
代入がユーザー定義された T::operator=(T const&) に解決されるなら、
引数の参照を初期化する際に一時オブジェクトが作られることはある。
デフォルトの名無しさん [] 2019/03/21(木) 02:39:44.49:XdhJMiFj
即値になる場合があるから右辺値なのかね。
デフォルトの名無しさん [sage] 2019/03/21(木) 08:57:30.01:YzD9JPpd
そりゃ、代入の左辺にリテラルを置ける言語なんてまずないから。
デフォルトの名無しさん [sage] 2019/03/21(木) 09:47:23.84:MFgTD1Yv
コピーのコストを抑えつつ、二重に参照されないように元のオブジェクトを指す変数を無効にしたいってのが
moveに期待される機能。
即値だったり呼び出しの引数にコンストラクタごと放り込まれた場合には
上記のような二重に参照されるようなシチュエーションにはならんのでmove受けする関数が定義されてれば
その関数を呼びましょうってのがc++のmoveの取り扱い。
しかしこんなにもシンタックスが複雑で機能性も新しくてオーバーロードでさらに複雑になってるってのは
やっぱよくないと思うわ。
テンプレートの都合でオーバーロードが必要なのもわかるが明らかにやりすぎ。
デフォルトの名無しさん [sage] 2019/03/21(木) 23:38:07.17:/AmzWt7k
会社にもいるわ、そんなどうでもいいことをウンチクばっか垂れて一向に仕事が終わらないやつw
言語を設計するなら、必要かもしれんが大抵は不要
デフォルトの名無しさん [sage] 2019/03/21(木) 23:48:46.46:4AnWSc+d
「だからC++スゲー俺スゲー」ってやつじゃないの?それ
がそうだとは思えんが
デフォルトの名無しさん [sage] 2019/03/21(木) 23:52:29.07:MDPJmZ4F
最近は彼らもRustにマウント奪われて必死なんだよ
はちみつ餃子 ◆8X2XSCHEME [sage] 2019/03/21(木) 23:53:05.57:uQDXDHVg
理屈がわかってないのに仕事が終わってるのもそれはそれで不気味じゃない?
デフォルトの名無しさん [sage] 2019/03/21(木) 23:56:55.88:MDPJmZ4F

moveなんか理解してなくてもだいたいのC++の現場では仕事に支障ないよ
デフォルトの名無しさん [sage] 2019/03/21(木) 23:58:36.31:tdnDQnUt

マジで?!
それヤバくない?!
デフォルトの名無しさん [sage] 2019/03/21(木) 23:59:59.31:MDPJmZ4F

君はC++の30年の歴史を否定するのかい?
デフォルトの名無しさん [sage] 2019/03/22(金) 00:10:18.90:cT8zbTae
templateも使うことは、OKだがtemplateを用いたクラスを作ることは禁止されている場合がおおい
そもそも、設計段階で型が決定しないなんてことは、汎用ライブラリを書く以外はないだろ
デフォルトの名無しさん [sage] 2019/03/22(金) 00:22:46.08:aMVb4R4+
いやいや
決まっていてもそれが複数だった場合使うだろ
あと普通にライブラリは作るものじゃ
デフォルトの名無しさん [sage] 2019/03/22(金) 00:54:33.33:wBHxe+dJ
ていうか、普通に仕事をしていたら「ああここは処理共通だからまとめて・・
・・あとここをこうしとけば拡張にも対応できるし・・まあ客が無茶振りして
きたときの予防にそれなりに汎用性もたせとくか」とかやっているうちに
いつのまにかライブラリができあがってる、これがプロの仕事だ
デフォルトの名無しさん [sage] 2019/03/22(金) 00:55:35.30:wNvbYX88
委託業務メインなの?
デフォルトの名無しさん [] 2019/03/22(金) 01:10:14.13:LxKdyD8r
定数って参照透過性があるよね。
C++はconstexprがあるのだから、関数型プログラミングを超える、定数型プログラミングという新パラダイムを提唱したいと思います。
はちみつ餃子 ◆8X2XSCHEME [sage] 2019/03/22(金) 01:14:02.50:6voZlles
コンパイル時レイトレーシングとかやってる人もいるけど狂気の産物って感じがして C++ ぽくて良い。
デフォルトの名無しさん [] 2019/03/22(金) 02:28:04.74:jw/5aFNH
しーぷら一筋30年〜、速いの、上手いの、やっすいの〜
デフォルトの名無しさん [sage] 2019/03/22(金) 02:37:28.24:M4ChOHMa

>コンパイル時レイトレーシング
一応訊くけど、ああいうのはレイ当てる3Dオブジェクトのデータは
全てC++のソースに書かないといけないことは分かってる?(モデリングデータをファイルから読んでコンパイル時にレイトレするのは当然不可能)
あの試み自体は面白いと思うけどね・・
実用性や(ソフトウェアの)ユーザーの利益にならないことをもてはやさないで欲しいもんだが
デフォルトの名無しさん [sage] 2019/03/22(金) 06:24:27.94:j45II+ff
プリレンダのゲームは大量にあるしレイトレーシングしとくのもその延長線上じゃない
デフォルトの名無しさん [sage] 2019/03/22(金) 08:03:01.00:VPBgCitj
コンパイル時ファイル入出力がサポートされればいいわけだ
それにレイトレーシングはまあ確かに冗談も含まれてるだろうけどそれだけ複雑で重い処理でも可能だという技術デモは価値があるだろう
画像にフィルタを適用するとかパターンが決まっているエフェクトを生成するだとか色々できて可能性はあると思うよ
デフォルトの名無しさん [sage] 2019/03/22(金) 08:17:25.29:sSVPAm0I
汎用的につかってもらうことを目的としているライブラリを除けば
コーディング時に型が決まっていないことなんてありえない

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

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

後で、intからdoubleになるかもしれないから、なんて言ってるバカいるけど
きっちり設計しろよ
デフォルトの名無しさん [sage] 2019/03/22(金) 08:28:45.64:wNvbYX88

デフォルトの名無しさん [sage] 2019/03/22(金) 09:08:34.94:OAKB0NCU

コンパイル時にやることじゃない
新たなc++の巨大トラップだよ
ますますc++嫌いになった
デフォルトの名無しさん [sage] 2019/03/22(金) 09:11:15.22:VPBgCitj

俺は好きになったよ
デフォルトの名無しさん [sage] 2019/03/22(金) 09:31:33.91:OAKB0NCU
いいね、趣味で気楽に使ってる人は
デフォルトの名無しさん [sage] 2019/03/22(金) 09:52:12.19:VPBgCitj
ええやろ
楽しいわ
デフォルトの名無しさん [sage] 2019/03/22(金) 10:20:45.52:RSNtol3b
メタプログラミングってコンパイル時に評価してゼロオーバーヘッドとかすごいとは思うけど
学習コストや可読性と釣り合ってるか?
デフォルトの名無しさん [sage] 2019/03/22(金) 10:32:59.03:OAKB0NCU
仕事で4月になったらまた新しいメンバーシップ増えるけど
なまじ趣味でc++使ってたやつが一番困る
新しい機能使いたいだけでトータルの生産性考えないんだよね
デフォルトの名無しさん [sage] 2019/03/22(金) 10:41:23.85:wNvbYX88
そんな一部の現場の実情を忖度してたら競争に負けてしまうのではないか?
デフォルトの名無しさん [sage] 2019/03/22(金) 10:45:43.23:VPBgCitj
毎回同じこといってる奴いるよな
このスレには10人くらいしか居ないってネタは挙がってるし
デフォルトの名無しさん [sage] 2019/03/22(金) 11:07:13.15:v3KGlGVP

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

やってることの性質にもよる
サーバーサイドなんかで潤沢なリソースを使って長時間動くものだとほとんど意味はないよ
その場合.NETやJavaのような実行時コード生成の方が遥かに柔軟性が高く、オーバーヘッドも実質的にはほとんどない
はちみつ餃子 ◆8X2XSCHEME [sage] 2019/03/22(金) 12:34:15.37:6voZlles

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

きっちり設計できている現場ばかりだったら本当によかったのにね。
デフォルトの名無しさん [sage] 2019/03/22(金) 14:12:54.65:M4ChOHMa

まぁその理屈はわからんでもないしメタプログラミングやってるとあの人のブログは勉強になるけどね
ただああいうのはブラックジョークの類であることを忘れるとみたいな勘違いした奴が出てくる


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

重ねて言うけど、面白い試みだけど実用的ではないんだよ、ああいうのをC++的だとかカッコいいとかもてはやすのはC++の衰退を招くだけ
趣味グラマは自分が趣味グラマであって時に実用性からかけ離れてるということを自覚すべき
デフォルトの名無しさん [sage] 2019/03/22(金) 14:23:16.46:M4ChOHMa
あ、でも

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

コンパイル時に確定しているデータがあるかもしれないし無いかもしれない
fstreamがコンパイル時に動くようになればいいだけ
そうなれば準備が面倒なプリプロセスも必要ない

研究に対して実用性がうんたらとかわけ分からないことを言うのはよくないなあ
様々なアイデアから自分の都合のいいところをつまんで実用化するのが末端の仕事だろうに
俺が使い道が思いつかないことに熱心になってると界隈が衰退するとかさすがに草生える
デフォルトの名無しさん [sage] 2019/03/22(金) 14:29:27.80:OAKB0NCU
静的なものはなんでもコンパイル時に解決するって思想が典型的なハンマー釘病なんだよ
コンパイル時だけが解じゃない

そのうち仕事で特に理由なくむやみに重いconstexprぶちこむやつがでてくるだろう
それでビルド時間5分10分長くなったりするわけだ
ほんとc++はクソ
デフォルトの名無しさん [sage] 2019/03/22(金) 14:32:15.97:VPBgCitj

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

constexpr関数みたいにコンパイル時にできる、実行時にしか出来ない、を「自動で振り分けて問題なく動く仕組み」
の範囲に全て収まるならそうだろうな

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

これだけ複雑な処理も出来るんですよっていうだけの話だからレイトレーシングである必要はない
それができるならこういうこともできるんじゃないか?ってなるのが普通
あとゲームのソースは公開されないから知るかとしか言いようがない
C++20でコンパイル時動的メモリが追加される予定だし、実行時でもコンパイル時でもタイミングが違うだけだからいつでも何でもできていいだろっていう流れは既にできている
標準化委員会がボレロを認知しているかは知らん
デフォルトの名無しさん [sage] 2019/03/22(金) 15:55:54.71:2qpWO6k3
コンパイラで高度なことが色々できるし、原理も実現も公開されてる、
興味を持って調べれば(ある程度なら)理解だってできるかもしれない。
というのはC++の素晴らしい部分だと思うのよ。

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


分からないのは、「俺はこれ知ってる、お前は知らないだろ」と
他人より優位に立つ材料としてしか知識を使ってないような
投稿が見受けられることなんだよね。
ことにネット掲示板なんて、見ず知らずの他人同士なんだから、
相手をバカにしたって仕方ない、何の益もないだろうに。
デフォルトの名無しさん [sage] 2019/03/22(金) 16:19:37.76:M4ChOHMa

>それができるならこういうこともできるんじゃないか?ってなるのが普通
最初の方の主張からずいぶんと縮小したなw

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

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

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

>俺が使い道が思いつかないことに熱心になってると界隈が衰退するとかさすがに草生える
ならお前は使い道を知ってるんだろ?って話
デフォルトの名無しさん [sage] 2019/03/22(金) 16:33:55.31:M4ChOHMa
正直、ファイル(C++ではない)に書かれてる内容に従ってコンパイル時条件分岐とか手軽に出来たら
結構実用性はあると思うよ
ただその一方で、ここでプロとアマチュアのC++に対する意見がひどく乖離してる(このスレ見てたら気づいてないとおかしいが)ことに
全く問題意識が無いのであれば、それは結局自分が偉そうにしたいだけってことだと思うけどね
デフォルトの名無しさん [sage] 2019/03/22(金) 16:39:09.47:M4ChOHMa
constexprの拡張とか、そんなに開発現場(アマチュアでもソフト開発者等)から求められてなさそうなことにばかり
最近のC++は注力しすぎじゃないの、ってだけの話なんだけどね
ここでそれを言うと毎回荒れるんだよなぁ
デフォルトの名無しさん [sage] 2019/03/22(金) 16:45:13.61:7XQoWDDf
C++11すら使えないもんな
デフォルトの名無しさん [sage] 2019/03/22(金) 16:46:23.14:VPBgCitj

別に注力しすぎてはいない更新内容は多岐にわたる
constexprは派手だから注目されやすいだけ

ttp://https://cpprefjp.github.io/lang/cpp11.html
ttp://https://cpprefjp.github.io/lang/cpp14.html
ttp://https://cpprefjp.github.io/lang/cpp17.html
ttp://https://cpprefjp.github.io/lang/cpp20.html
デフォルトの名無しさん [] 2019/03/22(金) 16:48:03.99:d9SNUM0T
愛知県人注目。遠州地区の技術者も注目。


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

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

ネットワーク関係が得意だと言って下さい。JP1の経験があれば、
なおよし。ECUの経験があれば、さらによし。キャティアのマクロが
書ける人、大歓迎。(これらは、必須ではありません。)
デフォルトの名無しさん [sage] 2019/03/22(金) 16:48:35.97:OAKB0NCU

それがお前の案?
手動じゃんそれ
くそださいとしか

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

まずはビルド時間の推移とか、内訳を監視するタスクを回すことを考えるだろうが
そういう非生産的な仕事が増えることがクソなんだよ
デフォルトの名無しさん [sage] 2019/03/22(金) 16:51:03.18:7XQoWDDf

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

マジで?!
それヤバくない?!
デフォルトの名無しさん [sage] 2019/03/22(金) 16:56:04.17:VPBgCitj

できあがった物の性能を少しでも上げようっていう話なんだがそれに価値を見いだせないならどうでもいいよ
つまんねえから口を開かないでくれ
デフォルトの名無しさん [sage] 2019/03/22(金) 17:00:41.61:M4ChOHMa
まぁconstexprのコンパイル時コストを気にするだけなら多分ifdefでdefine CONSTEXPRとかすればいいだろうけど
メタプログラミングはやっぱコンパイル時間長くなる
個人で開発してても無視出来ないわ・・


性能上げて比較結果を出してから言うべき
デフォルトの名無しさん [sage] 2019/03/22(金) 17:03:59.06:M4ChOHMa
ていうかの言ったことを実証するかのような流れだなww
デフォルトの名無しさん [sage] 2019/03/22(金) 17:06:35.17:nPC1T1eJ

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

求められているだろ?
デフォルトの名無しさん [] 2019/03/22(金) 18:34:40.09:LxKdyD8r
関数型同様、定数型プログラミングにもアンチがわいてきましたか。
アンチがわいたってことは、定数型プログラミングが世の中に受け入れられたってことでいいですね?
デフォルトの名無しさん [sage] 2019/03/22(金) 19:08:02.11:2qpWO6k3
その機能自体への好悪もあるか知れないけど、
「導入されたからには直ちに覚えて使わないのは罪悪」あるいは
「使わない奴は学習能力の劣る無能、使わないのでなく使えないんだろ」
みたいな、新機能の押し付けが嫌がられてるって部分もあるんでないかな。
デフォルトの名無しさん [sage] 2019/03/22(金) 19:19:05.75:wNvbYX88
実行時おじさん
デフォルトの名無しさん [sage] 2019/03/22(金) 19:21:05.55:OAKB0NCU

関数型持ち出すやつが、c++のconstexprの持ち上げたらいかんだろ
関数型はそんなキーワードなしに部分評価するだけで実現できんだから
デフォルトの名無しさん [sage] 2019/03/22(金) 19:23:25.37: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.

ttp://https://google.github.io/styleguide/cppguide.html#Template_metaprogramming
デフォルトの名無しさん [] 2019/03/22(金) 19:26:07.13:LxKdyD8r
【定数型プログラミングの掟】
> 「ブッ殺す」と心の中で思ったならッ!その時スデに行動は終わっているんだッ!
デフォルトの名無しさん [sage] 2019/03/22(金) 19:31:22.14:M4ChOHMa
でも終わったときめちゃくちゃ疲労してるんやで
デフォルトの名無しさん [sage] 2019/03/22(金) 20:21:58.70:nPC1T1eJ

それ逆効果じゃね
Google社員でも使いこなせない機能を使いこなす俺スゲェwww
◆QZaw55cn4c [sage] 2019/03/22(金) 21:54:10.43:nrO+MVHg

>コンパイル時レイトレーシング
……
デフォルトの名無しさん [sage] 2019/03/22(金) 21:57:31.87:FYyZQ6ej
コンパイル時C++コンパイルをやったら尊敬する
デフォルトの名無しさん [sage] 2019/03/22(金) 22:28:07.22:1RSJEChR
正規表現のコンパイルならありかもしれないw
デフォルトの名無しさん [sage] 2019/03/22(金) 22:42:15.38:78R951f8
自分の知らない概念を勉強するって意味ならlispのマクロでも覚えたほうがはるかに有意義なんだが
そうしないだよね。
なぜならそれじゃ老害にマウントできないから。
まあそういうクソみたいな思想のやつが年取って老害化するんだけど。
デフォルトの名無しさん [sage] 2019/03/22(金) 23:22:27.03:C43yQc+Q

コンパイル時に決定していることしかできませんよ
コンパイル時に3の階乗を計算して、ドヤってるやついるけど、それなら6ってタイプしとけよw
デフォルトの名無しさん [] 2019/03/22(金) 23:29:13.79:LxKdyD8r
でもそれがLALR(1)パーサーを生成するなら?
デフォルトの名無しさん [sage] 2019/03/22(金) 23:36:46.32:tosUzxZE
コンパイルに時間かかるから、その間暇つぶしに裏でレイトレーシングして遊んでんのかと思った
デフォルトの名無しさん [] 2019/03/23(土) 00:40:56.99:A6OyMWzd
デイトレーシングってストーカーのことだっけ。
デフォルトの名無しさん [sage] 2019/03/23(土) 06:55:12.12:jegHMgvE

「同じプロジェクトで働く他の仲間はアホかもしれない、
あなたの仕事を引き継ぐ奴はボンクラかもしれない、
だから難しい機能を使うのは自重しましょう」って感じか?
一見「あなただけは特別な存在です」と言ってるように見えて、
実は現場の全社員を見下してるような文面だなぁ。
「技巧に走るより素直な書き方をしろ」って趣旨は分かるんだけど。


参加者の順列で生じるパターンの状態を記録する配列の要素数、
しかも参加者数は変更の可能性あり(コンパイル時には確定する)、
という場合なら contexpr の階乗関数を仕込む意味はありそうね。
デフォルトの名無しさん [sage] 2019/03/23(土) 07:22:13.12:WDi4jE89
長年プログラムの保守やってるの見るとその通りだが
デフォルトの名無しさん [sage] 2019/03/23(土) 08:07:02.46:T5eFVdJU
constexpr指定するだけのことが技巧的なのか知らなかった
I/Oや動的メモリと関係なさそうなところに脳死で適当に付けておくだけでいいのに
デフォルトの名無しさん [] 2019/03/23(土) 08:35:25.57:RdkKrV9k
霞ヶ関文学は禁止ってこった。
デフォルトの名無しさん [sage] 2019/03/23(土) 12:20:32.92:0OEv8pnV
基本的に新機能は分かりやすく書きやすくするためのものなんだけどな
デフォルトの名無しさん [sage] 2019/03/23(土) 12:50:41.97:p3DdVUb8
数学への回帰と先祖返りじゃないの
分かり易くなるんじゃない、難しくなるんだよ
デフォルトの名無しさん [sage] 2019/03/23(土) 13:37:38.67:v/SrloXk
template<typename Item>
Item Fool::InsertItem(const Item& item)
{
 //なにがしかの処理
 item.c_str()...
}

こんなコード見かけると吐き気がするわ
c_str()を持つ型しか使えないじゃん
なんのためにtemplate使ってんだよw
デフォルトの名無しさん [sage] 2019/03/23(土) 13:47:58.81:uJTAZAlu
c_strを持つ型に限定したいから問題無いけど。
デフォルトの名無しさん [sage] 2019/03/23(土) 13:49:44.59:T5eFVdJU
何か変か?
c_strを持っているクラスのみを想定しているんじゃないの
本当はSFINAEで消すべきかも知れないけど
はちみつ餃子 ◆8X2XSCHEME [sage] 2019/03/23(土) 13:50:21.13:ByL/s3eU

だからコンセプトの導入が悲願とされてるんだよ。
デフォルトの名無しさん [sage] 2019/03/23(土) 14:34:53.50:JQCK5flX

程度のはsfinaeでいいんだけどね
デフォルトの名無しさん [sage] 2019/03/23(土) 14:56:23.90:EB4wgvrK
basic_stringの特殊化に限定するなら文字型を受け取るだけでいいと思うんだけど
デフォルトの名無しさん [sage] 2019/03/23(土) 15:01:12.26:fJspHuQc

constexprでコンパイル時に特定のメソッドがあるか調べられないの?
デフォルトの名無しさん [sage] 2019/03/23(土) 15:03:42.82:EB4wgvrK
それは型の情報だから、すでに言われてるようにメタプログラミングでsfinae使って調べるしかない
デフォルトの名無しさん [sage] 2019/03/23(土) 15:55:31.24:RdkKrV9k
吐き気がするだけで済んでいるのなら御の字。
デフォルトの名無しさん [sage] 2019/03/23(土) 16:15:35.83:T5eFVdJU
アレルギーが重症化すると辺境で難癖付けて騒ぎ出したりテンプレート指定すると何故か生産性が落ち出したりするからな
デフォルトの名無しさん [sage] 2019/03/23(土) 17:08:18.78:qcSb+DlG
pythonみたいにエラーメッセージ表示してくれるだけで大分マシになると思うんだけどな
デフォルトの名無しさん [sage] 2019/03/23(土) 18:52:42.53:4cH0E/is
そうなんだよね
1500行のエラーメッセージの代わりに「itemのメンバ関数c_str()が見つかりませんでした」ってコンパイラが言ってくれてたら
ここまでテンプレートは嫌われなかった
デフォルトの名無しさん [sage] 2019/03/23(土) 18:54:43.76:enzaJQTj
だからgoのコード生成系のアプローチのがマシってことなんだが馬鹿は脳内でしかビルドしないから通じない訳だ。
デフォルトの名無しさん [] 2019/03/23(土) 19:11:19.55:A6OyMWzd
これからは定数型プログラミングの時代。
デフォルトの名無しさん [sage] 2019/03/23(土) 19:15:22.30:EB4wgvrK

それはC++20でコンセプト入ったら実現されるはず(ライブラリ側で対応する必要あるけど
デフォルトの名無しさん [] 2019/03/23(土) 19:18:48.99:iMO+WCpL
過去の話をしてるのに未来の話で返されてもな
デフォルトの名無しさん [] 2019/03/23(土) 19:22:34.86:A6OyMWzd
エラーメッセージがわかりにくいなら、VC++を使うべき。
デフォルトの名無しさん [sage] 2019/03/23(土) 19:26:46.49:T5eFVdJU
過去のことなんかどうでもいい
未来だけ見て生きていこう
デフォルトの名無しさん [sage] 2019/03/23(土) 19:30:40.79:EB4wgvrK

コンセプトは最近出てきた概念じゃないぞ
C++11が0xとか呼ばれてた頃から言われてた話
デフォルトの名無しさん [sage] 2019/03/23(土) 21:03:26.04:16DhXZwe

vcはバグだらけで使い物にならない
デフォルトの名無しさん [sage] 2019/03/23(土) 21:40:53.85:eUSVaq66

嫌なら実体化しなければ良いんじゃ…
仮にFooのインスタンスを生成したとしても、Foo::InsertItem()を呼ばなければFoo::InsertItem()は実体化されないはず…
デフォルトの名無しさん [sage] 2019/03/23(土) 22:45:17.73:4cH0E/is
今思えばC++0xのコンセプト案はいろいろ酷かったな
あのまま入らなくてよかった
デフォルトの名無しさん [sage] 2019/03/23(土) 23:17:20.42:EB4wgvrK
コンセプトマップだとかコンセプトを満たすことを自己申告しなきゃいけないだとか
傍目に見て正直意味わからんかった
デフォルトの名無しさん [sage] 2019/03/23(土) 23:51:54.14:11jhwwP/
Axiomはとてもいいと思ったが、消えたのだな・・・
デフォルトの名無しさん [sage] 2019/03/23(土) 23:53:58.85:enzaJQTj

フーリエ変換の係数みたいなものは実行時には定数だけれど、事前に計算式で計算しておきたくはなる。
でもまあ普通に考えればビルド構成の問題だわな。
なぜコンパイラに無理やり突っ込むかと言えばまともにビルド構成を考える能力がないからっていうね。
デフォルトの名無しさん [sage] 2019/03/23(土) 23:54:27.98:4cH0E/is
axiomさんは契約アトリビュートとして生まれ変わったのだ
デフォルトの名無しさん [] 2019/03/24(日) 00:40:12.28:7x4/H6l4
C++の複雑さはオナニー的なところがある
デフォルトの名無しさん [sage] 2019/03/24(日) 01:38:06.52:b8r3VMdD
コンパイル時に決定してることしかできないなら、コード書く必要あるか?
1+2しか計算できないんだろ、2+3の結果が欲しかったら、コンパイルし直しw
デフォルトの名無しさん [sage] 2019/03/24(日) 02:05:19.27:xAoD2jBj
狭義のアルゴリズム(有限ステップで終わる)を記述する分にはそれで十分
無限ループを含む手続きを記述したかったら無限再帰すればええ
と考えればメモリが無限にあればコンパイルが終わるまでに任意の処理ができる
デフォルトの名無しさん [] 2019/03/24(日) 02:07:46.29:4oYv+rwZ
定数型プログラミングでコンパイラを創ろう。
はちみつ餃子 ◆8X2XSCHEME [sage] 2019/03/24(日) 02:16:59.70:9ZLLLplX
コンパイル時に畳み込んで定数にした方がよいかどうかはコンパイラの最適化で頑張って欲しい話で、
それで足りない、さらなるチューニングが必要なときの記法が統一的だったらうれしいねっていう程度の話じゃないかな。
普段からそんなにコンパイル時計算を意図したりはしないよ。
デフォルトの名無しさん [] 2019/03/24(日) 02:25:38.27:Wmd2CxZH
P言語でC++中間コードを生成するスクリプトを書けばいいじゃない。
swigみたいな。
カスタムコンパイルやカスタムビルドはそのためにある。
デフォルトの名無しさん [] 2019/03/24(日) 02:33:38.88:4oYv+rwZ
ヤック、レック相当をメタプログラミングで実現することができるのではないか。
スピリチュアルな方向性ではなく。
はちみつ餃子 ◆8X2XSCHEME [sage] 2019/03/24(日) 02:50:04.22:9ZLLLplX
PEG 相当のことを実現しているライブラリとしては Qi があるけど、
Yacc みたいに LALR をやってくれるのは知らないなぁ。
出来るのかな?
デフォルトの名無しさん [sage] 2019/03/24(日) 03:13:50.09:PmamUspu

個人的には、メタプログラミングで定数値のパラメータ作るのに構造体でメタプログラミングする必要が無くなったのはconstexprにかわしゃ
デフォルトの名無しさん [sage] 2019/03/24(日) 03:16:29.85:PmamUspu
ごめん間違って送信した、
constexprに感謝してるw
あとビット演算とか整数値の計算する関数もconstexprつけときゃテンプレートパラメータに渡せるし
高速化は二の次だと個人的には思ってる
デフォルトの名無しさん [] 2019/03/24(日) 03:23:59.40:4oYv+rwZ
STLあっての私たち。
デフォルトの名無しさん [sage] 2019/03/24(日) 03:30:27.34:b8r3VMdD
STLって遅くて使えなくない
デフォルトの名無しさん [] 2019/03/24(日) 03:32:16.98:4oYv+rwZ
確かに遅いね。
デフォルトの名無しさん [] 2019/03/24(日) 03:37:58.18:4oYv+rwZ
テンプレートメタプログラミングは永久機関。
デフォルトの名無しさん [sage] 2019/03/24(日) 05:16:54.07:xAoD2jBj
STLにCStringを入れて欲しい
デフォルトの名無しさん [] 2019/03/24(日) 05:41:26.93:NAaHZN6A
嫌です
デフォルトの名無しさん [sage] 2019/03/24(日) 05:51:09.56:0ur1Ot0v
男なら全部char[]
デフォルトの名無しさん [sage] 2019/03/24(日) 06:09:08.25:xAoD2jBj
sprintf_s()と_cuntof(array)がどこの環境でも標準で使えるならchar[]も悪くない選択肢ではある
デフォルトの名無しさん [sage] 2019/03/24(日) 08:26:16.35:3s1WkY0F
boost spiritはコンパイルが糞遅いし、何か間違えると何処が原因かさっぱりわからんし、
実用には程遠かったな。テンプレートでここまでできるという一発芸的な。
デフォルトの名無しさん [sage] 2019/03/24(日) 09:20:48.36:0R743LPx
テンプレートメタプログラミングって元々はアンチパターンとして提出した例だったんだけどね。
本当に愚者というのは度し難いというか。。
デフォルトの名無しさん [sage] 2019/03/24(日) 09:21:19.70:EkBj7yKG
CStringをこの世から完全に消し去って欲しい
せめてbasic_stringと互換性のあるインターフェースを持たせてからフェードアウトして欲しかった
デフォルトの名無しさん [] 2019/03/24(日) 09:23:21.86:Wmd2CxZH
CStringT::Format()系関数は、sprintf()系関数を2回呼ぶので冗長。
利用バッファサイズを事前に指定できないことが原因。
デフォルトの名無しさん [sage] 2019/03/24(日) 09:27:05.22:EkBj7yKG

だから天井人がお前ら下々に分かるレベルにしてやるよってことで様々な改良が加えられてるんだよなあ
それでもまだ分からないとなったらどこまでレベルを下げればいいんだってなって頭抱えちゃうよ
デフォルトの名無しさん [sage] 2019/03/24(日) 10:26:38.44:a59b/YMZ
CStringってなに?
さまよえる蟻人間 ◆T6xkBnTXz7B0 [sage] 2019/03/24(日) 10:31:25.24:SVMO04Wq
CStringは、Windows用のC++のクラスライブラリ、MFCの文字列クラス。
デフォルトの名無しさん [sage] 2019/03/24(日) 10:45:02.21:myNgr9GS

冗長って言われても一度パースしないと必要サイズはわからんからしょうがないだろ
まあ1KB程度のバッファー持って処理中に足りなくなったらパースし直すとかでもいいとは思うが
デフォルトの名無しさん [sage] 2019/03/24(日) 10:47:24.53:0ur1Ot0v
便利さを求めるならなんかフレームワーク使えよ
軽さを求めるならchar配列でゴリゴリ書けよ
デフォルトの名無しさん [sage] 2019/03/24(日) 10:52:30.12:EkBj7yKG
性能も利便性も標準より低いフレームワークさん・・・
デフォルトの名無しさん [] 2019/03/24(日) 11:06:49.87:Wmd2CxZH

素直にsnprintf()のように最大バッファサイズを指定するオーバーライド関数を追加すべきでしょ。
CStringT::Format()関数を呼び出す側は、あらかじめサイズを予想できる状況にあることが多い。
デフォルトの名無しさん [sage] 2019/03/24(日) 11:52:04.64:0R743LPx

天上人のつもりなのがそもそもの問題なんだがな。。
最近の標準委員は明らかにプログラム組んでなさそうな連中が決めてるような感じだし。
c++なんかは顕著だがそういうマウントの取り合いによる新機能拡充が一番現場を疲弊させてるっていうことを
なんでわからんかね。
デフォルトの名無しさん [sage] 2019/03/24(日) 11:52:05.81:EHuBBnjq
MFCが出来た頃のstd::stringはそりゃまあ酷いシロモノだったんじゃ
あまりCStringを責める気にはなれん
デフォルトの名無しさん [sage] 2019/03/24(日) 11:55:08.60:DVu1xjKe
いくらリリース時に型がすべて決まってるはずと言ったってDRYはそれなりに大事だろ
デフォルトの名無しさん [sage] 2019/03/24(日) 12:01:45.23:rLn5TxmP

標準化委員会の議論とまともに論理的な議論のできない5chを同一レベルで扱うなよ
デフォルトの名無しさん [] 2019/03/24(日) 12:05:08.13:4oYv+rwZ
しかし旧石器時代にSTLが作られたことを思うと、オーパーツと言ってよいのではないか。
数学的に洗練されたこの美しさ。
古代人は数学が得意だったのでは。
デフォルトの名無しさん [sage] 2019/03/24(日) 12:09:06.38:EkBj7yKG

まあそれはある
でもstlが普及してからも互換性が全くないまま終了したので負債になってしまったのは悲しい
デフォルトの名無しさん [sage] 2019/03/24(日) 12:09:46.38:Wmd2CxZH
それにしてもiostreamの醜さよ。
デフォルトの名無しさん [sage] 2019/03/24(日) 12:37:41.11:NSjukkr5

C言語に毒された老害かよw
欲しけりゃ自分で実装しろよ
デフォルトの名無しさん [] 2019/03/24(日) 12:46:47.36:DqM6OskA


はそんなの百も承知で書いてると思うが
さまよえる蟻人間 ◆T6xkBnTXz7B0 [sage] 2019/03/24(日) 12:47:06.43:rmV9lt2O
<strsafe.h>を知らない人が多いのか?
デフォルトの名無しさん [] 2019/03/24(日) 12:55:26.69:DqM6OskA

そうか?
全然そんなことないと思うぞ

MFCのはもっと酷かったからそれよりマシかなって程度
デフォルトの名無しさん [] 2019/03/24(日) 12:57:50.08:Wmd2CxZH

簡単だから当然、実装はする。
下手にバッファサイズを測る手間をかけるくらいならバッファサイズを渡せという話。
バッファサイズを渡せば速度が通常のCStringT::Format()より30〜40%ほど改善するんだから、公式でも採用してもらいたいという趣旨。
デフォルトの名無しさん [] 2019/03/24(日) 13:07:04.34:Wmd2CxZH
gccとvcでは vsnprintf()の挙動が違う。va_listの内部実装が異なるからだろう。
gccの場合、同じva_listを使ってvsnprintf()を複数回呼び出すと…
デフォルトの名無しさん [] 2019/03/24(日) 13:26:03.77:tvGVd8WB
続きはCMのあとで!!
デフォルトの名無しさん [sage] 2019/03/24(日) 13:42:15.21:uLk8b7ur

どうせ弄るなら、va_listとか旧世紀の遺物つかわなくても、templateの可変長引数を使って1から作り直した方が良い。
デフォルトの名無しさん [sage] 2019/03/24(日) 13:44:34.27:EHuBBnjq
va_listを他の関数に渡した後で、va_startで初期化せずに再使用するのは未定義動作
何が起きても文句は言えないしコンパイラごとに挙動が違うのは当然というものだ
デフォルトの名無しさん [sage] 2019/03/24(日) 13:55:44.10:oV9fIVj4
string_viewはどうだろうか?
デフォルトの名無しさん [] 2019/03/24(日) 13:56:05.38:Wmd2CxZH

それはつまり、gccではCStringT::FormatV()相当の実装が困難ということを意味している。
バッファサイズを自分で渡す仕様が最適解ということ。
デフォルトの名無しさん [sage] 2019/03/24(日) 13:59:03.55:myNgr9GS

そんな旧態依然のインターフェイス欲しけりゃ自分でやれやってことだろ
デフォルトの名無しさん [] 2019/03/24(日) 14:13:40.53:Wmd2CxZH
それにつけてもostringstreamの醜さよ。
デフォルトの名無しさん [sage] 2019/03/24(日) 14:40:52.61:EkBj7yKG
streamサイコー<<<<<<
デフォルトの名無しさん [sage] 2019/03/24(日) 14:51:51.49:a59b/YMZ
clang++使ってみたら、std::async使えない・・・
さすが、フリーだな
デフォルトの名無しさん [sage] 2019/03/24(日) 14:52:15.46:b6oq5ESd
clang++使ってみたら、std::async使えない・・・
さすが、フリーだな
デフォルトの名無しさん [] 2019/03/24(日) 16:30:35.16:4oYv+rwZ

何処がひどいですか?
デフォルトの名無しさん [sage] 2019/03/24(日) 16:50:49.33:GJPzxHHg
CStringのくそ設計にいまさら文句言ってもなぁ
そもそもメンバ関数、しかもdestination側と言う時点で使う側の利便性考えていない
デフォルトの名無しさん [sage] 2019/03/24(日) 16:55:28.18:xAoD2jBj
遅いしフラグがいっぱいあるし読みにくいし
ostream& T::operator<<(ostream&, const T&)やistream& T::operator>>(ostream&, T&)をTにつき一種類しか定義できないから
万全の汎用性を有しているかというとそうでもないし、

唯一の長所は型安全なところだが、意図通りの出力になるまでどうせトライ&エラーすることになるのだから
それ以下の工数でprintf()の書式ミスを発見できるわ;;
デフォルトの名無しさん [sage] 2019/03/24(日) 16:58:49.26:xAoD2jBj
CStringをdestination側に使うときの書き方はスゲーカンタン
 CString cstr;
 cstr = "Hello World!\n";
でおkコピー程度でCstring::Format()を使う必要はナス、

ソース側に使うときはむしろstd::stringよりカンタン
 printf("%s\n", cstr);
で通る
デフォルトの名無しさん [sage] 2019/03/24(日) 17:01:05.52:xAoD2jBj
まあ個人k的にはprintf("%s\n", (char*)cstr); ぐらいで手を打つが
デフォルトの名無しさん [sage] 2019/03/24(日) 17:10:19.89:b6oq5ESd
CStringなんて使うのはc言語だけだろ
デフォルトの名無しさん [sage] 2019/03/24(日) 17:19:45.54:PmamUspu

ここはマウント取りたいだけのバカが沢山居るけどさすがに標準化委員会は違うだろ
ただソフト開発者や標準・boost以外のライブラリ設計者はほぼ居ないんだろうなとは思うが
デフォルトの名無しさん [sage] 2019/03/24(日) 17:32:06.96:GJPzxHHg
標準化委員会はよくも悪くも開発者目線だなあとしか
提案者の用途さえ満たせれば良い的な仕様が多々見られる

最近だとto_charsとfrom_charsなんてまさにそんな感じ
◆QZaw55cn4c [sage] 2019/03/24(日) 17:44:39.67:6DYvLdXI

>フラグがいっぱいあるし

この i/o stream のフラグってきちんと定義されているのでしょうかね…
処理系に依存してテキトーな気がしてしかたがない
ttps://mevius.5ch.net/test/read.cgi/tech/1434079972/30 を書くときにさんざん調べたつもりなのですが、よくわからなかったことを記憶しています。
今みると、嫌々 stream.fail() でごまかしていたようです
デフォルトの名無しさん [sage] 2019/03/24(日) 21:04:38.58:0R743LPx

江添レベルの奴がやってる時点であんまここと変わらんだろ。
初心者に初めからautoで宣言させたコード実行させようとするような馬鹿だぞ。
初心者のためよりも自分のエゴ満たすためってのがあまりに優先されすぎてる。
デフォルトの名無しさん [sage] 2019/03/24(日) 21:11:22.21:EkBj7yKG

そんなわけないが
研究者だけでなく様々な企業のエンジニアも参加している
お前らの好きな組み込み業界や自動車業界も人を派遣してる
デフォルトの名無しさん [sage] 2019/03/24(日) 21:17:23.06:EHuBBnjq
つい最近まで「トライグラフは現場でバリバリ使いまくってるから無くしちゃダメー!」って必死に訴えてる人達がいっぱい居たのが標準化委員会だよ
デフォルトの名無しさん [sage] 2019/03/24(日) 21:37:39.78:GJPzxHHg
初心者にauto使わせるのは悪くないというかむしろそうすべきだろ。
現場が疲弊云々はそんな現場辞めてしまえとしか
標準化委員会はc++バリバリに使っている現場の意見が十分反映されているのだから

文句があるなら委員会に参加すれば良いんだよ
デフォルトの名無しさん [sage] 2019/03/24(日) 22:05:21.71:iBzlPNVB

IBMだけな・・・
デフォルトの名無しさん [sage] 2019/03/24(日) 22:08:27.13:zVUhrel1

C++を使わせないのが正しい。
KAC [sage] 2019/03/24(日) 22:12:29.07:baOwhHMi

そうじゃない
688の思想は、Cにも取り入れる方向だろう
デフォルトの名無しさん [sage] 2019/03/24(日) 23:03:50.83:0R743LPx
あれで現場の意向が本当に入ってると思ってる奴がいるのか?
c++の衰退とかデータで見ても信じない連中なのかね。。
まるでどこぞの統計データを今でも信じてる連中みたいだ。
デフォルトの名無しさん [] 2019/03/24(日) 23:18:22.54:Wmd2CxZH
メモリやCPUが安価で高性能になれば、コンパイル言語全般のシェアが下がるのは当然なのでは。
デフォルトの名無しさん [sage] 2019/03/24(日) 23:22:35.66:dT6Xb8jy

時代は静的型だよ
デフォルトの名無しさん [sage] 2019/03/24(日) 23:31:19.17:KmR/jJEd
現場にはcとc++が違うことを知らない奴も多いwww
デフォルトの名無しさん [sage] 2019/03/24(日) 23:38:44.81:GJPzxHHg
実際現場の意見入っている感じするじゃない?
どちらかと言うと実装側の都合でデグレードされたりすることが多い
コンセプトいい加減入れろよと
エラーメッセージわかりづらいし、SFINAE面倒くさいんだよ
デフォルトの名無しさん [sage] 2019/03/24(日) 23:40:40.71:PmamUspu

>初心者にauto使わせるのは悪くないというかむしろそうすべき
型や参照、ポインタ、修飾とかの違いでコンパイルエラーになるのを経験しないのは危険だと思うけどねぇ
推論された型を勘違いした上にたまたま通ってしまう可能性もあるわけだし

便利なのは否定しないけど静的型付け言語であるC++のパラダイムを変えるような機能ではない
デフォルトの名無しさん [sage] 2019/03/24(日) 23:46:22.50:dT6Xb8jy

そういうことを言っていいのは出来合いのtypedefを使わないで全ての型名を愚直に書いている奴だけ
デフォルトの名無しさん [sage] 2019/03/24(日) 23:53:18.03:PmamUspu

重箱の隅
から読み直してみ
デフォルトの名無しさん [] 2019/03/24(日) 23:56:09.01:4oYv+rwZ
キリバンゲット!!
デフォルトの名無しさん [sage] 2019/03/25(月) 00:05:20.37:lHhl7aCC

この書き込み自体がもうね
江添の考え方に反対するならそう言えば良いのに、エゴとか完全に個人攻撃しちゃっているじゃない
デフォルトの名無しさん [sage] 2019/03/25(月) 01:23:08.49:dMeCWU6I
結局ビャーネって何を作ったの?
言語の仕様なんかは磯さんが決めてんでしょ
◆QZaw55cn4c [sage] 2019/03/25(月) 01:44:06.00:/j2VHiDc
すべてはユダヤの陰謀だあぁぁ!!!
デフォルトの名無しさん [] 2019/03/25(月) 01:47:24.45:LV8gdQ4G
陰謀論を唱えるような人は、先入観が強すぎて不具合の原因を見つけ出せずに時間を浪費するタイプの人だから、プログラマをやめるべき。
デフォルトの名無しさん [sage] 2019/03/25(月) 07:31:49.87:+RmEIgLd
政治なんですよ政治
デフォルトの名無しさん [sage] 2019/03/25(月) 07:46:27.12:mW0SiMKO
MISRA-C 2004 の本は、トヨタなど大企業の50人が書いた本だけど、
ドワンゴ江添の本は、彼1人で書いたから、超人技!

Linux プログラミング・インタフェース、Michael Kerrisk、2012

この本とともに、神の書と言える!

KADOKAWA が言ってる。
当社はプログラミングの会社ではないけど、
なぜか、プログラマーが多いし、募集もしていますw
デフォルトの名無しさん [] 2019/03/25(月) 11:25:12.65:MuEFgcsw
裁判費用をクラウドファウンディングで捻出する予定はありますか
デフォルトの名無しさん [sage] 2019/03/25(月) 11:39:13.03:LV8gdQ4G
首都は「ヌルスルタン」、前大統領の名前に改称 : 国際 : 読売新聞オンライン
ttp://https://www.yomiuri.co.jp/world/20190325-OYT1T50119/
デフォルトの名無しさん [sage] 2019/03/25(月) 21:09:33.79:DI1df1TX
ファンクタって1回だけ使うならインスタンス生成する分関数より高コストで繰り返し使うなら生成済みのインスタンスを再利用できるから低コストという認識であってます?
デフォルトの名無しさん [sage] 2019/03/25(月) 21:21:15.56:CfE+HAKL
一切知りません
デフォルトの名無しさん [sage] 2019/03/25(月) 21:21:26.20:8+7iDICf
あってません
デフォルトの名無しさん [sage] 2019/03/25(月) 22:35:05.39:8zmAEr9n

あの教え方が本当に初心者のためになると思ってんの?
完全に書く側の都合による本にしかなってない。
ああいうメモリ意識の低い本で教えることはc++を使わせる上でマイナスにしかならん。
デフォルトの名無しさん [sage] 2019/03/26(火) 00:05:13.64:Pu4N06vt

なるだろ?
想定している利用者像が違うだけ
始めにauto使わないように慣らされたら、どうでも良い場面で型指定するバカに育って逆に面倒臭いだろ

まあ一番の害悪はnewやdelete、果てはmallocやfree使わせる奴だが

動的多次元配列でnewをループで入れ子にするのとか最悪
デフォルトの名無しさん [sage] 2019/03/26(火) 00:09:39.69:Xorohn3v
昨今のスクリプト言語は大抵autoじゃねえの
そうすりゃ初心者と型システムの都合なんてのはクソくらえ、だ
入門者にゃ型なんて意味無しじゃん
それに初心者にどうやってマイナスかどうか確かめたのか怪しい

ついでに型&autoとメモリ意識とは違うからな
デフォルトの名無しさん [sage] 2019/03/26(火) 00:12:14.24:Pu4N06vt
大体intとかあまり生で使わんよね
少なくともtypedefしておくもんじゃね
デフォルトの名無しさん [] 2019/03/26(火) 00:29:37.47:otrrnTwO
このスレ住民は、 auto によってコンパイル時には分からない意図せぬ動作で困った経験ってある?
デフォルトの名無しさん [sage] 2019/03/26(火) 01:09:42.91:pnr0HSCh
c++って便利なのは便利なんだが、やっぱ遅いよ
stream,asyncなんか、使い物にならん
デフォルトの名無しさん [sage] 2019/03/26(火) 01:11:09.93:SW23xWSB
c++が遅かったら何が速いんだ
デフォルトの名無しさん [sage] 2019/03/26(火) 01:12:08.10:qIOvz7c6
いや、コードを書いてるやつがいつまでも成長しない
だからコードが遅くなる
それがC++wwww
KAC [sage] 2019/03/26(火) 01:19:01.25:E0p6Aumv

いや、流石にintは生で使うだろ。
intで十分な意味持ってるんだが、
どんなtypedefするんだ?
デフォルトの名無しさん [sage] 2019/03/26(火) 01:22:01.94:pnr0HSCh

つD
デフォルトの名無しさん [sage] 2019/03/26(火) 01:34:39.27:SW23xWSB
そんな流行ってないもんでまともな仕事ができるかw
デフォルトの名無しさん [sage] 2019/03/26(火) 03:04:08.84:5DO30Xtv
Visual Studio使ってたらインテリセンスがautoをコンパイル前に展開して表示してくれるけど
デフォルトの名無しさん [sage] 2019/03/26(火) 03:05:29.57:5DO30Xtv
テンプレート以外で変数がコンパイル前に決まらないことってあるの?
テンプレートならauto使う必要なくね
デフォルトの名無しさん [] 2019/03/26(火) 03:35:14.19:D6PYEJQv
テンプレートだからこそ使いたい。
デフォルトの名無しさん [sage] 2019/03/26(火) 03:48:53.98:fe5vrK8S

経験豊富なプログラマが沢山参加しているのが事実なら、船頭多くして
船山に登る状態なのかも知れない。
デフォルトの名無しさん [sage] 2019/03/26(火) 04:01:17.90:fe5vrK8S

実感として、年々汚くて使いにくい仕様が増えている気がする。
デフォルトの名無しさん [sage] 2019/03/26(火) 07:21:28.81:JExaD8IX

たいていのスクリプト言語は動的型付け
autoと同じと考えてるならレベル低すぎ
デフォルトの名無しさん [sage] 2019/03/26(火) 09:23:59.45:Uaj934aJ

仕事で流行ってる流行ってないなんて関係ないだろw
デフォルトの名無しさん [sage] 2019/03/26(火) 09:42:45.74:SW23xWSB
流行ってない=情報がない、人がいない、資産がない=ゴミ
デフォルトの名無しさん [sage] 2019/03/26(火) 11:19:13.28:T41fm+6R
ビジネスの都合しか考えられないゴミ
JavaとかC#使ってれば
デフォルトの名無しさん [sage] 2019/03/26(火) 12:49:08.72:hIENxLfE
ビジネスの都合でc++って場合が多いだろ
ここに居るような奴等は
デフォルトの名無しさん [] 2019/03/26(火) 15:10:01.00:5W15sMAG

wとかsとか付いたのが無駄に増えて面倒になったな

int32_t とか uint32_t とか uint64_t とかは賛成
デフォルトの名無しさん [sage] 2019/03/26(火) 17:06:14.62:fe5vrK8S

そういう名称の問題だけに限った話ではなくて、結論から言えば、仕様を
多数決で決めてしまうと初心者向けの言語になる。スクリプト言語とかに
近いような。

構造的な問題とか、統一感的な問題とかもあるし、そもそも、C/C++の
良さまで失うような標準仕様だとかも、例えば、boost などの、
stl = standard template library なんかも、ここでは信者が多いかの
用に見えるけど、まるでC/C++とは思想の異なる全く別のスクリプト言語の
ような仕様になっている感じがする。
デフォルトの名無しさん [sage] 2019/03/26(火) 17:40:36.88:hIENxLfE

STL否定している時点で、そもそもC++の想定しているユーザーからは外れているんじゃね
iostreamならともかく
デフォルトの名無しさん [sage] 2019/03/26(火) 17:46:54.15:NEQZ2SJi

1998年くらいまでのC++はまあまあ良いと思っていたが、それ以後、別の
言語になってきてる気がする。特にここの人はSTL信者が多いが、
実は、98年くらいまでのC++とは似ても似つかないものだよ。
それを使ったコードには、往年の C の片鱗さえも残ってない。
だから、言語名から C という冠を下ろすべきだ。
デフォルトの名無しさん [sage] 2019/03/26(火) 17:51:58.82:hIENxLfE
信者も何も標準コンテナ使わずに何使うんだよ
自前で書くとかそれこそダメな方向だろう
eastlなんかでも使用感をなるべく標準に近づけているのに
デフォルトの名無しさん [sage] 2019/03/26(火) 18:00:25.71:XEttPGHl
C++98以前のC++が今より良いってどんなマゾだよ
デフォルトの名無しさん [sage] 2019/03/26(火) 18:04:33.55:hIENxLfE
template自体嫌いなんかな
それもうCで良いじゃない
はちみつ餃子 ◆8X2XSCHEME [sage] 2019/03/26(火) 18:10:49.26:qKdh3SVz
C++ の仕様に STL などというものは存在しない。
かつて STL と呼ばれていたものは完全に C++ の一部になっているし、
仕様の他の項目と区別する方法はない。
C++ 使いが C++ の機能を使うのは当たり前だ。

気に入らないと思うのは自由だし、良くない部分だって実際あるが、
常識的には標準が用意しているライブラリは言語の利用方法を体現するものであって、
言語の基本思想と極端に乖離してるわけないだろ。
デフォルトの名無しさん [sage] 2019/03/26(火) 18:36:42.18:5P0efKyY
標準ライブラリだからといって使う義務はないわけで
最小限のランタイムで動くnative言語というところがc++を使う理由になってるプロジェクトが多いだろう
その目的にそぐわないのが今の標準ライブラリのデザイン
メタプログミングの遊び場とかしている

ただし20年前と比べるのはどうかと思うが
はちみつ餃子 ◆8X2XSCHEME [sage] 2019/03/26(火) 18:44:59.17:qKdh3SVz
標準ライブラリをどうしても使わなきゃならんってことはないけど、
使わないための積極的な理由がなきゃ標準を選択するよ。
リソースが制限されているところで使わないっつーならそれはそれでいいよ。
それも出来るのが C++ だからな。
デフォルトの名無しさん [sage] 2019/03/26(火) 19:08:13.59:NEQZ2SJi
結論から言えば、STLはライブラリとしての「センス」が悪い。

POSIX の fopen()系や printf() 系などは使いやすいと思っていたが、
STLにはそれを感じないし、coutも変だったが STLもそれと同じ轍を踏んでる感じ。
デフォルトの名無しさん [sage] 2019/03/26(火) 19:17:04.87:+JfIlK2p

お前さんのレスからは、「僕の好みじゃないからヤダヤダ」という程度のことしか見えてこない。
デフォルトの名無しさん [sage] 2019/03/26(火) 19:19:36.63:NbUyZWCM
誰でも頭が良くなる、プログラムが書けるようになる方法が発見される 86052
ttp://https://you-can-program.hatenablog.jp
デフォルトの名無しさん [] 2019/03/26(火) 19:23:47.27:/YNua4WM
メイヤーズは最高に美しいライブラリと言っている
デフォルトの名無しさん [sage] 2019/03/26(火) 19:27:39.30:otrrnTwO
すっぱい葡萄
ttps://ja.wikipedia.org/wiki/%E3%81%99%E3%81%A3%E3%81%B1%E3%81%84%E8%91%A1%E8%90%84
 自分のものにしたくてたまらないにもかかわらず、努力しても到底かなわない対象である場合、
 人はその対象を「価値の無いもの」「自分にふさわしくないもの」と見なそうとし、
 それをあきらめの理由として納得し、心の平安を得ようとするものである。
 フロイトの心理学では、これを防衛機制および合理化の例とする。また、社会心理学においては、認知的不協和の例とされる。
 英語には、この寓話を元に生まれた熟語として "sour grapes" があるが、これは「負け惜しみ」を意味する。
デフォルトの名無しさん [sage] 2019/03/26(火) 19:27:52.44:NEQZ2SJi
やっぱりネットは駄目だ。
頭の悪いプログラマが支配してる。
デフォルトの名無しさん [sage] 2019/03/26(火) 19:29:16.09:fe5vrK8S

意味不明だな。誰でも入手できるライブラリで、なおかつ、
昔のC/C++より誰でも出来るスクリプト言語よりだというのに。
言ってることが逆さま。
はちみつ餃子 ◆8X2XSCHEME [sage] 2019/03/26(火) 19:30:19.23:qKdh3SVz
cout よりも printf が相対的に良いという人はたくさんいると思うが、
iostream が特に駄目ってだけで、
C++ 的に見れば printf がセンスいいとはとても言えんぞ……
デフォルトの名無しさん [sage] 2019/03/26(火) 19:31:00.18:eqSsbUbG
昔みたいにドヤ顔してboost使う必要がなくなったのはいいことだと思うよ。標準が充実していってさ。
最初からヌエ的な発展しかありえないのはそういうものだと思うし。
デフォルトの名無しさん [sage] 2019/03/26(火) 19:31:45.68:5p1uA41w
は多分とかに向けたつもりだと思うんだが
なぜか逆の立場のがダメージ受けてるという
デフォルトの名無しさん [sage] 2019/03/26(火) 19:34:05.19:5p1uA41w
あ、すまん逆ではなかったな
デフォルトの名無しさん [sage] 2019/03/26(火) 19:39:12.76:fe5vrK8S
ただ、多数決というのは、正しくも良くも無いけどな。
デフォルトの名無しさん [sage] 2019/03/26(火) 19:48:04.23:gp3lODpj
だったら君が最高の言語を作ればいい
設計は君の最高のセンスをふんだんに盛り込んで独裁的にやればいいよ
デフォルトの名無しさん [sage] 2019/03/26(火) 19:59:43.01:otrrnTwO
とりあえず全員ダメージ受けとけ。
デフォルトの名無しさん [sage] 2019/03/26(火) 20:35:50.63:OoUi3Qk7
stlのないC++なんてクリープ入れないコーヒーみたいなもん
デフォルトの名無しさん [sage] 2019/03/26(火) 21:11:51.51:ExDeReqX

C++ の仕様にSTLがないって本当かいな、と思って調べたら
確かに n3337.pdf (C++11のドラフト?) には STL という単語が出てないね。
STLのセンスが良いか悪いか、使うべきか使わざるべきか、
その辺について意見を出せるほど見識はないんで、事実の報告だけ。


『プログラミング言語C++』第4版に「STLなんちゃら」って章が
いくつか載ってるから、仕様の言葉だと思ってたわ。
デフォルトの名無しさん [sage] 2019/03/26(火) 21:17:41.21:zBAPpXX5
プログラミング言語C++に後にSTLとなるテンプレートライブラリ作ってストロストラウップに勧めに来た奴が居たので
ストロストラウップが試したら、彼が信条とする「良いライブラリ10箇条に全部あてはまってこりゃスゲーとなったという
エピソードがあったような
なかったような
デフォルトの名無しさん [sage] 2019/03/26(火) 21:25:01.06:5p1uA41w
STLは俗称だし、定義も曖昧
皆そう呼ぶのが便利だからSTLという呼び方してるだけ

HPの研究所で働いてたAlex Stepanovが発案して94年あたりに持ち込んだっぽい
ライブラリじゃなくて、いわゆる「汎用コンテナ(データ構造)ライブラリ」についてBjarneが重要と考えたチェックリストのほぼ全部にパスした
デフォルトの名無しさん [sage] 2019/03/26(火) 21:30:19.89:pGZA6Dfc
c++の仕様にSTLが無くてもrange-based forのようにSTLが備えてるbegin,endに依存した構文は出てる。
デフォルトの名無しさん [sage] 2019/03/26(火) 21:41:34.25:aW2tbkLS
STLつってもどうせvectorとmapくらいしか使っとらんだろ。
まあそれで十分なんだが。
デフォルトの名無しさん [sage] 2019/03/26(火) 21:52:00.50:2lj4xCZe
STLという言葉を発することがもうほとんどなくないか?
stdは使うけど、まあどっちも輪郭のはっきりしない言葉だ
デフォルトの名無しさん [] 2019/03/26(火) 21:53:11.01:D6PYEJQv
STLは洗練されている。
素晴らしいデザイン。
コンセプトが入ったらさらに洗練できると思う。
デフォルトの名無しさん [sage] 2019/03/26(火) 21:58:59.96:5P0efKyY

リソースが制限されてるというより、最大限のパフォーマンス出す場合な
つまりリソースがリッチかどうかは直接関係ない
AAAのpcゲームとかね

パフォーマンスそこそこでいいならc++なんか使う理由がない
遊び以外
はちみつ餃子 ◆8X2XSCHEME [sage] 2019/03/26(火) 22:03:45.01:qKdh3SVz

計算量はリソースの一種だで。
デフォルトの名無しさん [sage] 2019/03/26(火) 22:05:23.77:Pu4N06vt
最大限のパフォーマンスを出すために作ったeastlみたいなのも標準の使用感踏襲するくらいには標準の設計は良くできているよ
デフォルトの名無しさん [] 2019/03/26(火) 22:05:31.83:D6PYEJQv
STLはわしが育てた。
はちみつ餃子 ◆8X2XSCHEME [sage] 2019/03/26(火) 22:17:08.86:qKdh3SVz
そうか。
デフォルトの名無しさん [sage] 2019/03/26(火) 22:23:19.39:d5snerrZ
tupleはSTL?
デフォルトの名無しさん [sage] 2019/03/26(火) 22:33:50.26:5P0efKyY

移行が楽になるようにむやみにapi変えないのはソフトウェアの定石
それより変わったところ、拡張されてるところに注目しようか
デフォルトの名無しさん [] 2019/03/26(火) 22:49:38.25:D6PYEJQv
C++2zには俺の作ったライブラリが標準搭載されると思う。
デフォルトの名無しさん [sage] 2019/03/26(火) 23:13:14.99:T41fm+6R
天下のマイクロソフトが考えたATLでもいいんだぞ
デフォルトの名無しさん [sage] 2019/03/26(火) 23:32:43.00:zBAPpXX5
ATL(adult T-cell leukemia-lymphoma)は語呂が悪い
デフォルトの名無しさん [sage] 2019/03/26(火) 23:38:15.00:zBAPpXX5
std::tuppleはPythonフリークが無理矢理ねじ込んだのではないか
C++11で追加された可変長テンプレートなくして有り得なかったコンテナやし
std::pairと被っとる
デフォルトの名無しさん [sage] 2019/03/26(火) 23:43:43.21:T41fm+6R
tupleなんかどの言語にもあるだろ
現代の言語の基本的概念の一つで当然サポートされるべき
デフォルトの名無しさん [sage] 2019/03/26(火) 23:49:19.01:WJaRDiZ5
ライブラリでサポートだけどな
これがダメなところ
デフォルトの名無しさん [sage] 2019/03/27(水) 00:07:37.22:QPwampGA
何で?
デフォルトの名無しさん [sage] 2019/03/27(水) 00:38:40.54:Wsy7XdfH

じゃあ、ストロストラウップの物を見る目が無い。
彼自身のセンスが悪いんだ。
デフォルトの名無しさん [sage] 2019/03/27(水) 00:42:46.01:bx8pTnoV
なんちゃらラウップは言いにくいからいつも
ビョーーンさん、と呼んでいる
デフォルトの名無しさん [sage] 2019/03/27(水) 00:47:30.04:Mw4em8Pz
tupleは型関数でも重宝するよね
デフォルトの名無しさん [sage] 2019/03/27(水) 00:56:42.26:ZXIZSYy+
タプルはなにが嫌といって get<0> とかいうのがものすごく嫌
要素が4個ぐらいになったら1年後ぐらいにコード書き直そうとして
・・えっとこの値取りだすの get<1> だっけ? get<2> だっけ?とか絶対なるから使わない
デフォルトの名無しさん [sage] 2019/03/27(水) 00:58:48.50:DfX99uD1
そんな貴方にenum定数
デフォルトの名無しさん [sage] 2019/03/27(水) 01:03:41.91:Mw4em8Pz
いい加減enumにメンバ関数定義させろと。
enum classの時にどうにかすべきだった気もするが。
後は静的なリフレクションも
enumと文字列の相互変換とか殆ど定型コードになるのにいちいち書くのが面倒すぎる。
マクロで書くのも微妙だし
はちみつ餃子 ◆8X2XSCHEME [sage] 2019/03/27(水) 02:16:29.42:1nw30Wbv

センスがあるか無いか知らんけど、
すっぽすっぽ先生が是とした以上は C++ 的ではあるはずだろ。
それが駄目なら C++ が駄目だし、駄目なので君は使わなくていいよ。
デフォルトの名無しさん [sage] 2019/03/27(水) 02:25:21.92:Mw4em8Pz
標準コンテナ使わないらしい人の
抜群のセンスを見てみたいので、コードの一部でも見せて欲しいものだな
デフォルトの名無しさん [sage] 2019/03/27(水) 02:59:41.39:V3NaDuAs
Eigenが絶妙に不便なんだけど行列演算を標準でサポートする予定ってあるの?
デフォルトの名無しさん [sage] 2019/03/27(水) 03:31:56.74:Wsy7XdfH

アイデア盗まれるだけ損。
デフォルトの名無しさん [sage] 2019/03/27(水) 06:12:39.11:0QkCU47u
センスが悪いというだけで具体的にどこがどう悪いか、どんなだったらセンスが良いのか言わないと、説得力ゼロだな。
デフォルトの名無しさん [] 2019/03/27(水) 06:31:30.44:J3LATpLk

+1
デフォルトの名無しさん [] 2019/03/27(水) 06:40:01.31:J3LATpLk

禿
デフォルトの名無しさん [sage] 2019/03/27(水) 06:52:27.00:Ojl0EpZo

定型文ならtemplateで書けないの?
デフォルトの名無しさん [sage] 2019/03/27(水) 07:12:11.84:Mw4em8Pz

やりたいことは単にenumの値の識別子とその文字列を対応付けるだけなんだが、templateで書けるの?

enum class Color {
Red,
Green,
Blue
};
inline auto to_string(Color c)
{
switch (c){
case Color::Red:return "Red";
...
}
}
こんな感じのことがしたい
デフォルトの名無しさん [sage] 2019/03/27(水) 07:24:00.67:DfX99uD1
マクロ Stringizing Operator (#) を使うしかないのでは。
デフォルトの名無しさん [sage] 2019/03/27(水) 07:44:38.63:QPwampGA

×センスが悪い
○自分の趣味合わない
だから説明する必要なし嫌い嫌い言っておけばおk
ちょうど114514回目のstd:get嫌い民も現れたところだ
デフォルトの名無しさん [sage] 2019/03/27(水) 07:59:25.35:KDFmmUkx
ストラウストラップも例外入れるかどうかあたりまでは
かなり真剣に仕様を考えてた印象だけれどそれ以降はタガが外れた感じだ。
最近はもうどうしようもなくなってる。
デフォルトの名無しさん [sage] 2019/03/27(水) 08:00:04.09:Ojl0EpZo

その処理ならmapかunordered_map使うのが良くないだろうか?
デフォルトの名無しさん [sage] 2019/03/27(水) 08:06:10.74:QPwampGA
なお誰もストラウストラップに意見を出せるほどプログラミング言語の勉強をしていないもよう
デフォルトの名無しさん [sage] 2019/03/27(水) 08:07:01.17:Kgbo0Zp4

逆変換はunordered_mapだな

文字列化の方はswitch使うのが一番コンパイラがいい感じのコードにしてくれる
デフォルトの名無しさん [sage] 2019/03/27(水) 08:25:16.34:HgdvOlrd
関数の引数として vector<int> を参照渡ししたいのですが、これのデフォルト引数を空の vector<int> にする方法ってありますか
デフォルトの名無しさん [sage] 2019/03/27(水) 08:33:50.59:pdL3Pyxp
std::vector<int> &v = std::vector<int>() じゃないのん
デフォルトの名無しさん [sage] 2019/03/27(水) 08:43:24.12:HgdvOlrd

参照渡しでもそのやり方できますか?
デフォルトの名無しさん [sage] 2019/03/27(水) 08:45:04.79:pdL3Pyxp
やればわかる
デフォルトの名無しさん [sage] 2019/03/27(水) 09:24:45.56:7IO5xMdH
const?
デフォルトの名無しさん [sage] 2019/03/27(水) 09:33:08.23:p4oEJ8zd

センスうんぬんを言ったのはおれじゃないけど、
標準ライブラリ使わないという主張に対して、ソースがエレガントかどうかを問うのは目的がわかってない

端的にいうと標準ライブラリのオーバーヘッドが許容できないんだよ
多少記述が汚くなろうがパフォーマンス引き出すのが優先

cとc++のベンチだと結局cの方がいいスコアになってること多いだろ
(全てがそうでないのは知ってる)
そこをcと同等まで引き上げるわけだ
デフォルトの名無しさん [sage] 2019/03/27(水) 09:36:50.33:QPwampGA
だったらC使ってれば
それ以外の選択肢無いんだから
デフォルトの名無しさん [sage] 2019/03/27(水) 09:40:51.50:p4oEJ8zd

そこはアセンブラ使えばというところだろ
デフォルトの名無しさん [sage] 2019/03/27(水) 09:40:55.11:pdL3Pyxp

VC2017だとconstじゃなくてもいけた
てか参照のデフォルト引数ってconst限定だったのか
仕様変わったのかVCだけおかしいのか知らんけど
デフォルトの名無しさん [sage] 2019/03/27(水) 09:45:55.40:p4oEJ8zd
いうまでもなく、ボトルネックでないところは労力はかけない
メンテが楽な手法を使う
それに完全にゼロコストなものは普通に使うさ
デフォルトの名無しさん [sage] 2019/03/27(水) 09:52:34.13:U9bjaUkC
標準コンテナでcより遅くなるってどんなパターン?
単方向listで十分なのにlistだと双方向とかそんなやつ?
あんまりlist使わんからよくわからんが
vectorは使い方を余程間違えない限り大抵代替品より速いような

メモリ確保回りはallocator使えばいいし
data使えばただのメモリブロックだよね
デフォルトの名無しさん [sage] 2019/03/27(水) 10:01:31.18:QPwampGA
99%iostreamのこといってるからな
デフォルトの名無しさん [sage] 2019/03/27(水) 10:04:51.88:tQ4XPcUj

要素の追加時に容量の拡張が必要かどうかのチェックが入ったりするから、オーバーヘッドはゼロではないよ
デフォルトの名無しさん [sage] 2019/03/27(水) 10:08:24.05:U9bjaUkC

それpush_back or emplace_back使っているのが悪いのでは
cの同等コード書いてもチェックは必要だろ
チェック要らんことが分かっているならresizeしておけ
デフォルトの名無しさん [sage] 2019/03/27(水) 10:12:49.51:QPwampGA
Cで作っても同じでワロタ
デフォルトの名無しさん [sage] 2019/03/27(水) 10:22:17.37:tQ4XPcUj

便利なものがあれば人間は使ってしまうもんだ
その積み重ねがパフォーマンスの差に繋がる
俺は一般には便利なものを使って時間を節約することでボトルネック解消にかける時間を確保でき、
結果的にパフォーマンスはより高くなると思うけど、そこはスケジュールの制約次第だな
デフォルトの名無しさん [sage] 2019/03/27(水) 10:29:47.46:9ko5ghKo
Cマスター「C++は配列に追加するときにサイズチェックするから遅い(キリッ」

wwwwwwwwwwwwwwwwwwwwww
こんな雑魚がでかい顔してるからいつまでもセキュリティホールがなくならないんすなあ
デフォルトの名無しさん [sage] 2019/03/27(水) 10:34:12.90:9ko5ghKo
Cマスター「要素追加時にサイズチェックするという便利さの積み重ねがパフォーマンスを落とす(キリッキリッ」
やべえ笑い死にしそう
笑い事じゃないけど
デフォルトの名無しさん [sage] 2019/03/27(水) 12:49:47.89:DY72tOrL
プロファイラで調べて本当に問題あるならどうにかするけど
ただわざわざc的に書いても大抵誤差レベルでしか変わらんよね
どちらかと言うとバッファの確保の仕方を工夫した方が効果が大きい
デフォルトの名無しさん [sage] 2019/03/27(水) 13:05:12.78:fzYgEwLp

トレードオフもわからん雑魚
デフォルトの名無しさん [sage] 2019/03/27(水) 13:06:52.67:C+1U7WOU

・以下、要素数が N とする。

・C/C++ の原定義の固定長配列は、要素の代入に1クロックしかかからない。もちろん、
 O(1)で、物凄く速い。なお、固定長なので「代入」であり「追加」ではない。

・Listはリストだから1個の要素の追加はO(1)で、要素数に依存せず安定した速度が出るが、
 内部で、newされるはずなので、最低でも170クロックほどかかってしまう。

・Vectorは動的配列だから、最悪のケースでは要素の追加にO(N)の時間がかかり固定長配列より遅くなる
 と思う(よく知らない)。
デフォルトの名無しさん [sage] 2019/03/27(水) 13:34:58.24:tQ4XPcUj

複数の要素を追加するとき、わざわざ事前にまとめてリサイズするか?ということだよ
1要素ずつ処理するのは生ポならかえって面倒になることが多いし、見た目にいかにも非効率そうなコードに見えるから、大抵の人は自然にそうするだろう
一方vectorだとどうだろうね
心理的な問題なの
デフォルトの名無しさん [sage] 2019/03/27(水) 13:45:54.22:tQ4XPcUj
同じようなことはvectorに限らず一般的に言ええて、
例えばC++はRTTIの便利さ故にCと比較してプログラマが無駄なメモリの確保や破棄を行いやすい傾向がある
逆にCだと無駄に大きなバッファ作りがちだったり、バッファの使いまわしによりスレッドセーフでないコードを書きがちであったりする
デフォルトの名無しさん [sage] 2019/03/27(水) 13:46:41.13:tQ4XPcUj
すまんRTTIじゃなくてRAIIな
デフォルトの名無しさん [sage] 2019/03/27(水) 14:07:44.29:xtV64SvS
クロックなんてわからんじゃろ
デフォルトの名無しさん [sage] 2019/03/27(水) 14:29:28.16:t7f2HshG
VC++2017なんだけど
デストラクタで投げた例外をキャッチできずabortするのはVC++の仕様?
RAIIとラムダを駆使した自作finally内で
例外投げたらキャッチできずabortしてハマったわ
デストラクタ内で例外投げるのが汚いのは知ってたが
そうか、自作finallyもデストラクタ利用してるからダメなのかな
デフォルトの名無しさん [sage] 2019/03/27(水) 14:35:28.06:fzYgEwLp
デストラクタはデフォルトでnoexceptやで
デフォルトの名無しさん [] 2019/03/27(水) 14:54:30.22:t7f2HshG
サンクス
デストラクタをnoexcept(false)指定したらcatch出来たわ

てことは自作finallyは念のためnoexcept(false)指定にしたほうが良いのか
それか自作finally内で例外投げるのは完全禁止にするか
悩むわ
デフォルトの名無しさん [] 2019/03/27(水) 14:56:55.41:t7f2HshG
まぁでもよく考えたら
例外が発生して自作finallyが実行されてる時に
さらに自作finally内で例外飛ばしたら二重例外になるから危険か
なるほどなるのど
デフォルトの名無しさん [sage] 2019/03/27(水) 17:38:06.36:8XRRZQAn

意味がわからん
そもそもCでも固定長配列の代入は実データのコピーを伴いO(n)だ
アドレスや参照のやり取りならO(1)
デフォルトの名無しさん [sage] 2019/03/27(水) 17:50:46.31:fzYgEwLp
全体じゃなくて一要素やろ?
デフォルトの名無しさん [sage] 2019/03/27(水) 17:55:38.42:8XRRZQAn
あーそう言うことか
固定長的に使いたいなら始めにresizeするだけじゃない

便利だからチーム内で使ってしまう人がいることを問題にするより、使わずにいちいち独自コードで処理されて余計遅くなったり、バグ仕込まれたりする方が余程ヤバイだろ
デフォルトの名無しさん [sage] 2019/03/27(水) 18:00:35.88:xtV64SvS
先生、配列の長さにリミットを設ける方法を教えてください
デフォルトの名無しさん [sage] 2019/03/27(水) 18:00:36.53:fzYgEwLp
まぁそれでも範囲チェックは入るし、常にヒープ使われるし
それすら問題になるようなクリティカルな場所なら生配列なりarray使えばいいと思うけど
適材適所じゃないかねぇ
デフォルトの名無しさん [sage] 2019/03/27(水) 18:03:25.00:97C5Fzq7
operator[]なら範囲チェック入らんよ
デフォルトの名無しさん [sage] 2019/03/27(水) 18:14:58.29:QPwampGA
末尾に追加の話だろ
デフォルトの名無しさん [sage] 2019/03/27(水) 18:15:04.13:fzYgEwLp
うお、マジだ誤解してた
デフォルトの名無しさん [sage] 2019/03/27(水) 18:20:39.73:fzYgEwLp

まぁ要素数わかってて末尾に入れてくのはナンセンスやね
速度を気にしない場所ならどうでもいいけど
デフォルトの名無しさん [] 2019/03/27(水) 18:39:59.51:ZT8Ntgus
よくあの時代にこのような洗練されたライブラリを設計できたものだと思います。
もしかすると宇宙人にもらったのかも。
デフォルトの名無しさん [sage] 2019/03/27(水) 20:06:12.42:KDFmmUkx
配列の長さチェックのオーバーヘッドとかなんかものすごくデジャブ感のある議論だな。
肯定、否定どちらにしてもマウンティングかましたくなる題材なんかね。
デフォルトの名無しさん [sage] 2019/03/27(水) 21:09:05.61:p4oEJ8zd
標準コンテナで問題になるのはやっぱりヒープだよ
境界チェックとか仮に無断だとしても一定時間で終わる処理
ヒープ使われると最悪システムコールで負荷変動大きすぎる

ちなみにアロケータは要素数で管理できないから面倒
あとvectorで最初にreserveしても最大長越えないチェックが必要で面倒

でこれらを解決するコンテナがboostにあるのでそれを使う
デフォルトの名無しさん [sage] 2019/03/27(水) 21:18:02.40:p4oEJ8zd
あと標準ライブラリのリンクリストはそもそもの設計が非効率
(クリーンな設計ではあるが)
素朴なcの実装と比べてかなり差がでる
これも代替がboostにある
デフォルトの名無しさん [sage] 2019/03/27(水) 21:25:03.72:4bSYNNTL

末尾追加の話なら、Cでも同じだけコストかかるだろ。

arrayならstackに積まれる。
◆QZaw55cn4c [sage] 2019/03/27(水) 21:31:48.60:WdEToVPN

なんか変じゃないですか?
list や vector のときは要素の「追加」なのに、生配列だけ要素の「代入」と設定するのですか?
list や vector で要素の「追加」を考察するのなら、生配列の場合も要素の「追加」を検討してください
デフォルトの名無しさん [sage] 2019/03/27(水) 21:38:22.09:p4oEJ8zd

arrayは固定長
欲しいのは最大長を事前に確定しつつ、その範囲で可変長で使えるvector
という話ね
デフォルトの名無しさん [sage] 2019/03/27(水) 21:45:52.93:9ko5ghKo
ここのCマスター様は、現在の配列長と挿入インデックスのチェックしてreallocしてなんていう
パフォーマンスの悪い便利さに甘えた処理などしない
堂々とv[N]に無条件代入を行って超高速O(1)追加を実現するのだ
さまよえる蟻人間 ◆T6xkBnTXz7B0 [sage] 2019/03/27(水) 21:50:08.37:X5Tg+wiF
事前のresizeかreserveでええんとちゃう?
デフォルトの名無しさん [sage] 2019/03/27(水) 21:51:09.94:t38PuBqi
事前に分かるならスタック固定長でいいじゃん
デフォルトの名無しさん [sage] 2019/03/27(水) 22:02:47.67:gbxz82US
reserve あれば困る事なんてないやろ
デフォルトの名無しさん [sage] 2019/03/27(水) 23:54:55.06:QPwampGA
一般的には無いよ
局所的な話を持ち出してああだこうだ言ってるのが今
そして何をするつもりかは誰も知らん
デフォルトの名無しさん [sage] 2019/03/28(木) 00:42:33.33:yLTGLAEP

要素数がN、データの大きさは4バイト、と仮定した場合の話。
デフォルトの名無しさん [sage] 2019/03/28(木) 00:47:43.37:yLTGLAEP

4バイト整数のN要素の配列を仮定しているが、Cの単純な固定長配列だと
4バイト整数はコピーするのが当然。
ところが、Listだと、「追加」するしかない。動的配列である
Vectorも、基本的には「追加」が基本。そうでなければ「動的」と言わない。
デフォルトの名無しさん [sage] 2019/03/28(木) 00:53:54.09:AOcR4eqo
vector.data()、basic_string.c_str()はCと同じの配列の連続アドレスを保証する数少ないインターフェースでしょ。
デフォルトの名無しさん [sage] 2019/03/28(木) 01:07:32.08:Csoqrb4z
正直stringがゼロ終端を保証したのはちょっとどうかなと思ってる
いや便利なんだけどさ・・
デフォルトの名無しさん [sage] 2019/03/28(木) 01:15:59.09:eE4sGejC

特に不都合無いのだからいいだろう
デフォルトの名無しさん [sage] 2019/03/28(木) 01:39:16.25:AOcR4eqo
アドレスと一緒にバッファサイズを渡せないAPIが世の中に無数にある。ヌル終端は優しさ。
デフォルトの名無しさん [sage] 2019/03/28(木) 03:12:24.24:0b3fKrWQ
そもそも printf が
デフォルトの名無しさん [sage] 2019/03/28(木) 05:04:36.64:fRHhg+J8

なぜかC言語は固定配列でC++だと動的が基本らしい
前提違うのに速度ガーとか言われてもなぁw
◆QZaw55cn4c [sage] 2019/03/28(木) 05:12:10.50:3LZYwZb1

ヌル文字をデータとして扱えない、という決定的なウィークポイントが発生しますね…
昔、ツールがヌル文字を扱えない、という点が後から発覚してとても困った経験があります
デフォルトの名無しさん [sage] 2019/03/28(木) 07:13:39.49:mfvsZ6Gk

ようゴCマスター様
マスター様は知らなくてビックリするけど、C++ではvectorやlistは要素数が実行時に決まるときに使うんだ
そして驚くべきことに、Cにも要素数が実行時に決まるときに使うための愚かしい機能がなぜか備わってるんだ
reallocっていうらしいんだけどさ
使うときは確保済みのバッファの長さをいちいち調べて、足りなかったら再確保して必要に応じて要素を全部コピーするらしいっすよ
もちろんそんな馬鹿げたオーバーヘッドを払う奴はC++かぶれのド素人だけだけどな
真のCプログラマは一度確保した配列の自由なインデックスにコピーすることでvectorの無意味なオーバーヘッドを回避し超高速O(1)を実現するのだ
デフォルトの名無しさん [sage] 2019/03/28(木) 08:00:11.54:PaLXcDGr
なんかツッコもうと思ったら既にに書いてあった
デフォルトの名無しさん [sage] 2019/03/28(木) 10:11:22.12:yLTGLAEP

C++の配列は固定長が基本。
STLやboostは、C++とは異なる。
デフォルトの名無しさん [sage] 2019/03/28(木) 11:32:51.21:yLTGLAEP

>そして驚くべきことに、Cにも要素数が実行時に決まるときに使うための愚かしい機能がなぜか備わってるんだ
>reallocっていうらしいんだけどさ

Cでは、realloc は推奨されて無い。
Cで、要素数が実行時に決まるような集合を扱いたい場合は、自前で
ポインタでリンクする、リンクリストを使う。
毎回それをやると間違いやすいので、賢い人は、自前でリストライブラリを作って
それを用いて操作する。
デフォルトの名無しさん [sage] 2019/03/28(木) 11:39:08.71:dMtNAb9A
Linuxのソースなんだけど
close(0) close(1) close(2)って書いてあるの見つけたのだが
これってなんの効果が期待できるの?
ファイルディスクリプタ?だと思っていてオープン等をした値番号だと思ってたけど、0 1 2に該当するのがなんなのかと
デフォルトの名無しさん [sage] 2019/03/28(木) 12:01:08.00:5UOqavsG
stdin, stdout, stderr
デフォルトの名無しさん [] 2019/03/28(木) 12:18:22.29:des+yyG9
iteratorでstartとendの中に納まってることが保証されてるのに
各要素にアクセスするときにまた範囲チェックとかあると無駄やん
そりゃ書こうと思えばいくらでも危険なコードは書けるけど
安全なときはそういうの省いて高速化出来るのがCの良いところなのに
(レジスタの値が知らない間に壊れても正常に動くようにとか言ってるなら知らん)
デフォルトの名無しさん [sage] 2019/03/28(木) 12:31:30.80:yd30y0n6

固定とか決めつけてるのを別にしても何を言いたいのかさっぱりわからん
デフォルトの名無しさん [sage] 2019/03/28(木) 12:34:41.89:OvbnMtjj

で、そのオレオレ車輪の再発明クソライブラリは
std::vectorやstd::listより何が優れてるの?
範囲チェックしないから高速wなの?
デフォルトの名無しさん [sage] 2019/03/28(木) 12:45:22.23:yiBU3VRL
差異があるとすれば、deep copyだね
決めつけ良くない
デフォルトの名無しさん [sage] 2019/03/28(木) 12:48:36.64:ADAikd1k

ランタイムでサイズが決まる動的配列にリンクリスト使うのはさすがにダメすぎる
デフォルトの名無しさん [sage] 2019/03/28(木) 12:56:24.56:TvMamSuP

デーモンになりたいんだろうな
デフォルトの名無しさん [sage] 2019/03/28(木) 13:00:41.99:yLTGLAEP

そもそも、C で出来ないことは、コンピュータのアーキテクチャ上、ほぼ
絶対に出来ない事。
だから、Vectorが、効率面でCを上回ることは絶対に有り得ない。
デフォルトの名無しさん [sage] 2019/03/28(木) 13:05:17.92:AOcR4eqo
,871
ソートはどうなの? (・∀・)ニヤニヤ
デフォルトの名無しさん [sage] 2019/03/28(木) 13:06:22.45:AOcR4eqo
春休みでスレの勢いが上がり、スレの品質が落ちた。
デフォルトの名無しさん [] 2019/03/28(木) 13:22:32.10:des+yyG9
義務教育でプログラミングとか教えたら
もっと変なの増えそう
python界隈に来ないで欲しい
デフォルトの名無しさん [sage] 2019/03/28(木) 13:29:56.71:t1sztID7

こういう金融とかの兵隊養成用だから競合はしないと思う
ttps://pbs.twimg.com/media/DwtF98FUwAIU166.jpg
デフォルトの名無しさん [sage] 2019/03/28(木) 13:49:18.36:KoUoPeo+
そのへんの化石言語はいい加減消滅させるべき
デフォルトの名無しさん [sage] 2019/03/28(木) 13:51:20.07:0CdADxX3
化石じゃないまだドメイン次第で現役Fortranだってこの間新しい仕様出たし!ってつっかかられるぞ
08をちゃんと実装したコンパイラ出してから言ってくれよって気持ちだが
デフォルトの名無しさん [sage] 2019/03/28(木) 14:01:46.15:Csoqrb4z

お前が言うな
デフォルトの名無しさん [] 2019/03/28(木) 14:03:11.91:CwLqpfbs
_____(コボル)

答え COBOL

_____(フォートラン)

答え FORTRAN

これのどこが問題集やねん!
デフォルトの名無しさん [sage] 2019/03/28(木) 14:08:39.40:t1sztID7
来年度からこれが流通するぞ
デフォルトの名無しさん [sage] 2019/03/28(木) 15:14:03.54:KoUoPeo+
ほんと役人どもがやることはいつもずれてる
デフォルトの名無しさん [sage] 2019/03/28(木) 16:17:03.97:yLTGLAEP

その言葉を見る限り、あなたは日本人じゃない気がする。
この文脈で、あなたが言いたかったのは、
「来年度からこれが流通するぞ」ではなく
「来年度からこれが常態化するぞ」
という事だったと思うから。
デフォルトの名無しさん [sage] 2019/03/28(木) 17:38:04.05:ADAikd1k

それ言い出すなら逆もまたしかりだろ
extern "C"すればCで出来てC++に出来ないことはないぞ。
デフォルトの名無しさん [sage] 2019/03/28(木) 17:39:39.59:ADAikd1k
だいたいC++にはasmがあるしな
アセンブラで出来ることは出来るんじゃね
デフォルトの名無しさん [] 2019/03/28(木) 18:18:56.58:JEyrctWP

おまえらが役人からずれてるんだろ。
日本は公務員のための国やぞ。
デフォルトの名無しさん [sage] 2019/03/28(木) 18:20:50.90:KoUoPeo+
それは一理ある
日本は官僚統治国家だから
デフォルトの名無しさん [sage] 2019/03/28(木) 18:30:14.54:t1sztID7
公僕が・・・舐めてると潰すぞ
デフォルトの名無しさん [] 2019/03/28(木) 18:32:28.62:des+yyG9
888
デフォルトの名無しさん [sage] 2019/03/28(木) 18:42:36.05:pafVG92t
でも、ターゲットにRubyとC++を選択したのは正解だと思ってるよ。
デフォルトの名無しさん [sage] 2019/03/28(木) 18:43:27.34:KoUoPeo+
Rubyはない
デフォルトの名無しさん [sage] 2019/03/28(木) 18:45:09.06:yLTGLAEP
日本政府は日本人と将来の日本の年金などのための政治を行えばいいのだから、
日本人が作ったものを使うように推進するのは悪いことではない。
余りにも使いにくいもので無い限りは。
だからWordをやめて一太郎を使うようにしたり、Rubyを使うようにしたり
するとすれば、それは英断だよ。
デフォルトの名無しさん [] 2019/03/28(木) 18:45:11.14:JEyrctWP
RubyはWindowsでまともに動かないから、Linux採用するのかな。
デフォルトの名無しさん [sage] 2019/03/28(木) 18:48:52.21:pafVG92t

自分の環境では、Windowsで普通に動いてると思ってるけど。
デフォルトの名無しさん [] 2019/03/28(木) 18:49:56.61:JEyrctWP
関数型教えればいいのに。
デフォルトの名無しさん [sage] 2019/03/28(木) 18:58:40.35:KoUoPeo+
教えるなら実用性と手軽さからしてC++、Javascript、python
デフォルトの名無しさん [sage] 2019/03/28(木) 18:59:00.99:yiBU3VRL

えっ配列初期化子がC++でも使えるように?
デフォルトの名無しさん [] 2019/03/28(木) 19:00:37.17:des+yyG9

国産のを応援するのは判るが
それが利権になってただのクズが集まって来たり
金貰うと進歩が止まったりするのが日本の悪いところ
デフォルトの名無しさん [sage] 2019/03/28(木) 19:04:55.98:KoUoPeo+
国産であっても良いものでなければ応援するべきではない
Rubyは滅ぶべき言語トップ10に入る
デフォルトの名無しさん [sage] 2019/03/28(木) 19:07:54.30:OttlZ3Q/

書き方同じじゃなくても同様の事が出来るだろ
cで出来ないこと無いって話にたいしてなのだから
デフォルトの名無しさん [sage] 2019/03/28(木) 19:20:56.01:pafVG92t
PythonとRubyだったら、Rubyもそんなに悪くは無いと思う。
Pythonは可読性が悪いように感じる。空白インデントだけでブロックや
関数の終わりを決めてしまうので、内部関数が終わってるかどうか分からず、
人の書いたソースが読みにくくて困ったことがある。
デフォルトの名無しさん [sage] 2019/03/28(木) 19:39:26.72:lj2W5NqA
C++er的には
動的型の時点でノーサンキューだろ
そういうのが嫌でC++使ってるんじゃないのか
デフォルトの名無しさん [sage] 2019/03/28(木) 19:40:51.32:lj2W5NqA
特にRubyは教祖様が
絶対に型は書きたくない
って駄々こねてるから

これはもう日本のガラパゴス化が一層激しくなるな
デフォルトの名無しさん [sage] 2019/03/28(木) 19:43:44.68:jnmpmBFr
pyは読みより書きの方が問題
間違えてインデントけずっても気づかないことが多い
デフォルトの名無しさん [sage] 2019/03/28(木) 19:51:12.67:WN0VVTEM

個人的には型のある言語の方が好きだ。
型があった方が、変な問題にはまる率が下がるので開発が速く進む。
大規模開発には絶対、型が必要。
初心者にも大人気言語だった元祖のBASICも、Aが浮動小数点型、A$が文字列型で、
確か、A% が整数型。配列は DIM A(100) や、DIM B%(10,10) などで、
宣言は省略できる場合が多いが、ちゃんと型はあった。
Rubyなどは、A にあらゆる型が入れられるので、関数呼び出しなどが
かなり怖い。間違っていても問題の切り分けが出来ないので「はまったら」大変。
だから、とても慎重にコードを目で見ないといけなくなる。
デフォルトの名無しさん [sage] 2019/03/28(木) 19:52:41.47:wxB03uV3

Pythonで、良く分からなかったのが、インデントの空白の個数。
2個でも4個でも好きな量を選べるのだろうか?
デフォルトの名無しさん [sage] 2019/03/28(木) 19:55:00.97:KoUoPeo+
言語仕様上は揃ってさえいればいい
デフォルトの名無しさん [sage] 2019/03/28(木) 19:59:44.37:WN0VVTEM

やはりそうだったんだ。だから余計に解読できなかったんだな。
エディタでカラムを数えたり、上まで戻ったりして、やっと認識していた。
でも不安が残った。ブロックが終わってるのかどうか物凄く分かりにくい。
デフォルトの名無しさん [sage] 2019/03/28(木) 20:02:46.54:eE4sGejC
今のPythonはカオスだからな
見易い文法目指していたはずが
内包表記やらラムダやら見づらくする文法が増えて推奨までされている

フレーム作るか否かもわかりづらいことこの上ない
◆QZaw55cn4c [sage] 2019/03/28(木) 20:22:58.04:3LZYwZb1

「実装A, B, C があり、機能 f について、A.f, B.f C.f のそれぞれに、こんなメリデメがあります!」
なら理解できますが、 は、
「A.g, B.f, C.f のそれぞれにこんなメリデメがあります!」
でしょう?それって変じゃないですか?
A.g とかじゃなくて、A.f で比べて欲しいのですが?
デフォルトの名無しさん [sage] 2019/03/28(木) 20:33:45.97:BoT1RII7

最近の言語全般に言えることだな。
無駄機能入れすぎなんだよ。
クソみたいなシンタックス入れるくらいならライブラリを充実させるほうが正しい。
デフォルトの名無しさん [sage] 2019/03/28(木) 20:46:24.22:jnmpmBFr
メリデメっていうやつw
すまんがめっちゃ底辺臭する
デフォルトの名無しさん [] 2019/03/28(木) 20:56:41.12:JEyrctWP
ハイクラスの人はなんて言うんだよ。
デフォルトの名無しさん [sage] 2019/03/28(木) 21:07:04.95:siqlJJfC

お前さんの言い換えた方の日本語もかなり不自然だよ。他人の言葉尻をとらえてどうこう言えるほど、お前さんも日本語が得意な訳ではないだろう。
そもそも、普通の人はそんなことで日本人かどうか気にしたりしない。
デフォルトの名無しさん [sage] 2019/03/28(木) 21:20:29.56:1SvA7cSr

文字列の途中に格納することは新仕様でもできるでしょ?
◆QZaw55cn4c [sage] 2019/03/28(木) 21:28:18.93:3LZYwZb1

「不正確な略語を口にするのは doubleplus-unwise である」
という事実をジョージ・オーウェルに学びました、彼は略語と esperant は毛嫌いしていたようです
ttp://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
デフォルトの名無しさん [sage] 2019/03/28(木) 22:54:40.69:e7Ukr6X3
double型の変数a、bがあるとして、
a/bが整数かどうか判定するには
デフォルトの名無しさん [sage] 2019/03/28(木) 22:55:53.73:Qz7GRSnS
厳密には無理
デフォルトの名無しさん [sage] 2019/03/28(木) 23:04:52.64:e7Ukr6X3
なぜはベストを尽くさないのか
デフォルトの名無しさん [sage] 2019/03/28(木) 23:06:15.20:2+cLemOj
標準のコンテナなんて使う理由ある?
遅くて使い物にならん

ストリームなんて実用に耐えれないくらい遅いだろ
デフォルトの名無しさん [sage] 2019/03/28(木) 23:08:40.51:t1sztID7
もう飽きたからいいよ
デフォルトの名無しさん [sage] 2019/03/28(木) 23:14:08.39:e7Ukr6X3
ではa/bに最も近い整数はどうやったら出せますのん?
デフォルトの名無しさん [sage] 2019/03/28(木) 23:17:25.36:AOcR4eqo
(int)((a + 0.5) / b)
デフォルトの名無しさん [sage] 2019/03/28(木) 23:17:26.82:EVp1RRUC
a/bを丸めりゃいいと思うが?
デフォルトの名無しさん [sage] 2019/03/28(木) 23:21:48.84:KoUoPeo+
std::round(a/b)
デフォルトの名無しさん [sage] 2019/03/28(木) 23:22:20.86:e7Ukr6X3
両方の案を採ってC++14ではstd::floor(a / b + 0.5)にケテーイ?
C99なら丸め関数あるけど…
デフォルトの名無しさん [sage] 2019/03/28(木) 23:23:14.15:KoUoPeo+
CにあってなぜC++にないと思った
デフォルトの名無しさん [sage] 2019/03/28(木) 23:24:22.62:e7Ukr6X3
C99はもはやC++とは別物やし…
デフォルトの名無しさん [sage] 2019/03/28(木) 23:33:50.74:eE4sGejC
丸めって絶対の正解がないからな
922 [sage] 2019/03/28(木) 23:36:38.79:AOcR4eqo
お恥ずかしい。素で間違えた。括弧の位置が違う。
デフォルトの名無しさん [] 2019/03/28(木) 23:49:56.39:JEyrctWP

それは自分に問いかける言葉だったんじゃ。
デフォルトの名無しさん [sage] 2019/03/29(金) 00:05:03.99:daDbIW6D

についてはまだ誰も判定精度のベストを尽くしていない件について:
多分
 std::abs((a/b) - ((a/b)の小数以下を丸めた値)) <= std::numeric_limits<double>::min()
あたりがベスト?
デフォルトの名無しさん [] 2019/03/29(金) 00:08:06.95:KSfDlte3

いや、元ネタの話。
デフォルトの名無しさん [] 2019/03/29(金) 00:09:22.47:KSfDlte3
上田次郎の言葉。
デフォルトの名無しさん [sage] 2019/03/29(金) 00:20:10.55:0t+U2b3s
一太郎は自滅したからなぁ
どうしているのかと思えば名簿の話であんなことしていたのかと・・・
上手くやればいくらでも出来たのに勿体無い
デフォルトの名無しさん [sage] 2019/03/29(金) 00:38:09.37:Sh9jl/tc

いやこの場合はイプシロンじゃなくバイナリ一致で比較すべき
デフォルトの名無しさん [sage] 2019/03/29(金) 00:53:41.69:e60P0oPD
まだ428万なのに一勝で400くらいしか上がらなくなったんだけど中堅名乗ってええか?
デフォルトの名無しさん [sage] 2019/03/29(金) 00:53:59.93:e60P0oPD
誤爆
はちみつ餃子 ◆8X2XSCHEME [sage] 2019/03/29(金) 00:59:27.21:PFvplbFR

おっ。
LISP で優勝って話?
デフォルトの名無しさん [sage] 2019/03/29(金) 01:45:14.97:DyQclHpC
lisp は大昔 emacs のカスタマイズするのにしょっちゅう書いてたけど
なんでこんなクソみたいな古代言語を有り難がるやつがいるのかいつも謎だった
普通に C 風の文法のスクリプトでも搭載してくれたほうがよっぽどありがたい
はちみつ餃子 ◆8X2XSCHEME [sage] 2019/03/29(金) 02:03:38.50:PFvplbFR

Emacs Lisp は今でも生き残っている LISP 系の言語の中ではクソな方なので、それで判断されてもな……。
AutoLISP よりはマシだが。
デフォルトの名無しさん [sage] 2019/03/29(金) 02:15:27.46:e60P0oPD
どうしてC言語風のスクリプト言語が無いんだ
どいつもこいつも分かりにくいうえにデバッガも無いもん作りやがって
デフォルトの名無しさん [] 2019/03/29(金) 05:41:16.20:VktwsX1+

a = 1e15
b = 1e-15
デフォルトの名無しさん [] 2019/03/29(金) 05:42:05.38:VktwsX1+
941
あったけど流行らなかった
pythonの方が役にたつ
デフォルトの名無しさん [] 2019/03/29(金) 06:59:38.46:Eeymx9+7

int型にしてdouble型に戻したのと比較するとか、floor関数使ったのと比較する。
デフォルトの名無しさん [sage] 2019/03/29(金) 07:49:31.47:WBACpCX+

Cインタプリタってのがいくつもある
デフォルトの名無しさん [sage] 2019/03/29(金) 08:07:13.38:Ta+0qHqT

min()以下の非正規化数でも残差があればそれは整数じゃないんだから単純に0との比較でいい。
デフォルトの名無しさん [sage] 2019/03/29(金) 08:12:49.10:vRMp+NmG
固定小数型が標準でほしい
デフォルトの名無しさん [sage] 2019/03/29(金) 08:23:09.46:WBACpCX+
小数なんかいらん
ビッグインテジャークラスを標準でほしい
デフォルトの名無しさん [sage] 2019/03/29(金) 08:32:27.31:q1OkKHKh
設定はpythonでいいよ
デフォルトの名無しさん [sage] 2019/03/29(金) 09:40:31.26:e60P0oPD

あるけど誰も採用してない
何故かみんなオリジナルの言語を作り始める
相当慣れないとautotoolsとか解読困難だし
なんならこれもperlにすればよかったのに
おかげで出回ってるものもコピペを繰り返した秘伝のタレ状態だわ
デフォルトの名無しさん [sage] 2019/03/29(金) 10:25:09.68:c3N751dA
オリジナル言語といいつつ、
昔からあるautotoolsを持ち出すとか
デフォルトの名無しさん [sage] 2019/03/29(金) 11:34:19.48:r9qVljUb

ジミーカーターだよ
デフォルトの名無しさん [] 2019/03/29(金) 12:15:03.74:QqxpOyVg
python+ctypes最強やで
デフォルトの名無しさん [sage] 2019/03/29(金) 13:00:40.33:HmBCV24x
【速報】金券500円分タダでもらえる    
ttps://pbs.twimg.com/media/D2y37QFVAAAmz1l.jpg     
 
@タイムバンクをインストール
iOS: ttp://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: ttp://https://play.google.com/store/apps/details?id=jp.timebank   
A会員登録  
Bマイページへ移動する。
C招待コード→招待コードを入力する [RirzTu]     

コードを入力した方に600円もらえます 
今なら更に500円ギフト券を貰った残高からただで買えます。  
貰ったギフティプレモはAmazonギフト券(チャージタイプ)に交換できます(電子マネー払いにて)  
   
数分で出来るので是非ご利用下さい      
デフォルトの名無しさん [sage] 2019/03/29(金) 13:00:55.65:zXK6y1Ir
プロセス間通信でよくね問題
デフォルトの名無しさん [] 2019/03/29(金) 18:35:30.88:NYOzkE7a

本当じゃん     
◆QZaw55cn4c [sage] 2019/03/29(金) 18:38:47.41:tqWwggkn

では common lisp 準拠の xyzzy を推奨いたしましょう
デフォルトの名無しさん [] 2019/03/29(金) 18:58:22.81:KSfDlte3
パワハラ学んだほうが役に立つのにな。
はちみつ餃子 ◆8X2XSCHEME [sage] 2019/03/29(金) 19:03:34.54:PFvplbFR

正直言って、 xyzzy とか lem の方が筋がいいわ。
この時代にダイナミックスコープとか正気の沙汰ではない。
(近頃の Emacs Lisp はレキシカルスコープにも出来るけど。)
デフォルトの名無しさん [sage] 2019/03/29(金) 19:13:35.93:SLNwR97S
emacsではdynamicもそれはそれで便利なんだが
エディタだから各関数がコンテキストによって挙動変えるけど、それを引数として渡す訳じゃないからね
dynamicのスタック的な状態変更は便利
デフォルトの名無しさん [sage] 2019/03/29(金) 21:18:40.18:ddIXjKBD
lispってまとめられがちだけれど言語としてのくくりで言えばalgol系くらいの意味合いしかない。
schemeとcommon lispだったらc#とjavaのがよっぽど近い。
デフォルトの名無しさん [sage] 2019/03/29(金) 23:20:11.58:/wIL6yoo
template<class B,class D>
class B : public D{
 //...
};

ってなにがしたいんだろ
はちみつ餃子 ◆8X2XSCHEME [sage] 2019/03/30(土) 00:58:44.45:raLgb94a

ほんまそれ。
そんでもって現代で LISP って言ったら Common Lisp か Clojure あたりを想定して欲しいって思う。
(俺は Scheme 派だが)
デフォルトの名無しさん [] 2019/03/30(土) 13:00:53.68:syvaDn83
Java 8は関数型言語らしい。
デフォルトの名無しさん [sage] 2019/03/30(土) 13:16:14.77:JgN5T55+
まあFORTHとPostScriptの違いくらいかな
デフォルトの名無しさん [] 2019/03/30(土) 17:34:43.10:syvaDn83
ほぼ同じってことか。
L [sage] 2019/03/30(土) 17:36:09.42:thjEqqk2
[C++でブラウザアプリ]
田園風景とゆらゆら揺れるアサガオのテスト:
WebAssemblyが使えるブラウザならすぐ見れるよ:
ttp://http://nowsmartsoft.atwebpages.com/demo2/index.html

ひここもりなので、ここでしか見てもらえないんだ。
デフォルトの名無しさん [sage] 2019/03/30(土) 17:58:09.48:wKuhZLCD

相談じゃないんだろ。スレ違いだから巣に帰れ。
デフォルトの名無しさん [sage] 2019/03/30(土) 18:15:25.48:VC6Jp+wI
相談スレじゃねえだろ
ひけらかしスレだから合ってるだろ
デフォルトの名無しさん [] 2019/03/30(土) 18:17:34.73:syvaDn83
でも、この前、住所さらされたからな。
はちみつ餃子 ◆8X2XSCHEME [sage] 2019/03/30(土) 20:56:32.41:raLgb94a

ところで以前のウェブサイト (NWSA だとか文字コードだとか平衡木の文書があったやつ) は完全に消えたの?
ブログは残ってるみたいだけど、最終更新はだいぶん前だし。
デフォルトの名無しさん [sage] 2019/03/31(日) 01:36:25.21:kdwrDA9x
uint64同士の掛け算でオーバーフローしていないことを確認するには
(long double) a * b <= UINT64_MAX
であってますか?
デフォルトの名無しさん [sage] 2019/03/31(日) 02:01:02.28:XYg5fWSm
> (long double) a * b <= UINT64_MAX

変形してこれでいいのでは?
a <= UINT64_MAX / b; // b!=0
デフォルトの名無しさん [sage] 2019/03/31(日) 08:45:18.44:kdwrDA9x

その手がありましたか
ありがとうございます
デフォルトの名無しさん [sage] 2019/03/31(日) 11:34:02.92:qtVJ0qYe
CPUのオーバーフローフラグを見る標準の手段が未だにないのが不満です
デフォルトの名無しさん [sage] 2019/03/31(日) 11:42:31.55:TSA6EeAl
mul_highみたいなの位標準化してくれればいいのにね
大抵のアーキテクチャでは命令として存在するのだし
デフォルトの名無しさん [sage] 2019/03/31(日) 12:23:30.31:JrOSOdLx
オーバーフローの前にキャリーフラグだろ…
L [sage] 2019/03/31(日) 14:05:02.11:vDO0/VaM

ああ、あれはやめた。
維持費がかかっていたので。
はちみつ餃子 ◆8X2XSCHEME [sage] 2019/03/31(日) 14:16:24.03:8f3NbPLB

コンテンツは面白いので、データが残ってたら Github かどっかに置いてくんない?
デフォルトの名無しさん [sage] 2019/03/31(日) 15:51:07.66:MPbGMBOz
住所晒すやつのサイトなんて見ねえ
即NG
デフォルトの名無しさん [sage] 2019/03/31(日) 16:15:32.43:4SqFrjwY
自分のIPアドレスじゃねえだろ
デフォルトの名無しさん [sage] 2019/03/31(日) 17:20:07.40:vDO0/VaM

気持ちに添えなくてすまないが、残念ながら、今は公開する予定はない。


そんなに気にする人がいるとは思ってなかったんだけど、今後は晒さない。
デフォルトの名無しさん [sage] 2019/03/31(日) 17:22:28.81:vDO0/VaM
ttp://http://nowsmartsoft.atwebpages.com/demo_land/index.html

3D 地形を canvas 2D のワイヤーフレームで表示してみた。
ChromeよりFireFoxの方が速いらしい。
デフォルトの名無しさん [] 2019/03/31(日) 19:00:54.99

覇権争いのおこぼれかな。
一応貰っておいた     
デフォルトの名無しさん [sage] 2019/04/01(月) 00:06:38.24:sCEGrn1T
コンストラクタにアウトプット変数をつけるのって邪道ですか?
デフォルトの名無しさん [sage] 2019/04/01(月) 00:44:54.36:sCEGrn1T
↑出力用引数です。。。
デフォルトの名無しさん [sage] 2019/04/01(月) 00:54:01.89:1RmlgYYh
お好きにどうぞ
デフォルトの名無しさん [sage] 2019/04/01(月) 04:25:02.60:uqkfEU2b
set<int> を0からnまでの連番でお手軽に初期化する方法ってありますか?

for文でinsertしまくるのが普通ですか?
さまよえる蟻人間 ◆T6xkBnTXz7B0 [sage] 2019/04/01(月) 06:36:52.73:OIWsA4Np
C++11なら
std::set<int> = {1, 2, 3};
と書ける。
デフォルトの名無しさん [sage] 2019/04/01(月) 08:27:39.15:RynKy10x
std::iota
デフォルトの名無しさん [sage] 2019/04/01(月) 10:36:34.64:0fT1DSaw
array<int,3>={1,1,1};

初期化子より要素が3ケなのはわかるのに
なんで一々3って記述しなきゃいけないの?
デフォルトの名無しさん [sage] 2019/04/01(月) 10:54:40.61:4B82+HWP
配列初期化子が如何に便利か良く判る
デフォルトの名無しさん [sage] 2019/04/01(月) 12:16:32.59:xC6wZxP+
make_array関数でも作成すれば?
デフォルトの名無しさん [sage] 2019/04/01(月) 12:30:23.48:2+x4EAiR

別につけてもいいけどメソッドとかで返した方が使いやすくね?
はちみつ餃子 ◆8X2XSCHEME [sage] 2019/04/01(月) 13:25:48.82:+c9Nhd8T

メソッドって言うなよ
デフォルトの名無しさん [sage] 2019/04/01(月) 13:31:15.62:1RmlgYYh
警察だ
デフォルトの名無しさん [sage] 2019/04/01(月) 13:36:56.63: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);
}
【男の娘】 [] 2019/04/01(月) 13:42:00.26:QUlyRw/u
デフォルトの名無しさん [] 2019/04/01(月) 13:53:43.17:2cPHsZN4


万葉集巻五 梅花の歌三十二首、并せて序
「初春令月、氣淑風和、梅披鏡前之粉、蘭薫珮後之香」
初春の令月にして氣淑(よ)く風和ぎ梅は鏡前の粉を披き、蘭は珮後(はいご)の香を薫す
デフォルトの名無しさん [sage] 2019/04/01(月) 13:54:41.31:iIi946R+

私は解を見つけだが、それを示すにはあまりにも
余白が少なすぎる
1001 [] Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
おみくじ集計(特殊)
【男の娘】
1002 [] Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
ttps://premium.5ch.net/

▼ 浪人ログインはこちら ▼
ttps://login.5ch.net/login.php

勢い5万以上のスレをメールでお知らせするサービス、実施中!!
憧れボディをGETしたい!その夢、ボニックで!

2ch勢いランキング アーカイブ プログラム板ランキング

凡例:

レス番

100 (赤) → 2つ以上レスが付いている
100 (紫) → 1つ以上レスが付いている

名前

名無しさん (青) → sage のレス
名無しさん (緑) → age のレス

ID

ID:xxxxxxx (赤) → 発言が3つ以上のID
ID:xxxxxxx (青) → 発言が2つ以上のID

このページは2ch勢いランキングが作成したアーカイブです。削除についてはこちら