次スレを立てる時は本文の1行目に以下を追加して下さい。
!extend:on:vvvvv:1000:512
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。
前スレ
C++相談室 part137 (正しくはpart138)
http://mevius.5ch.net/test/read.cgi/tech/1535353320/
C++相談室 part139
https://mevius.5ch.net/test/read.cgi/tech/1538755188/
C++相談室 part140
https://mevius.5ch.net/test/read.cgi/tech/1547326582/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.103【環境依存OK】
https://mevius.5ch.net/test/read.cgi/tech/1530384293/
■長いソースを貼るときはここへ。■
http://codepad.org/
https://ideone.com/
[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
----- テンプレ ここまで -----
-
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
探検
C++相談室 part141
レス数が1000を超えています。これ以上書き込みはできません。
2019/02/22(金) 03:07:43.52ID:MgOIx7iK
2デフォルトの名無しさん
2019/02/22(金) 05:33:28.83ID:7jsMxmv+ Cの場合は
#define BIT(n) (1<<n)
if(data & BIT(3)){ data &=~BIT(3); }
みたいなやり方をするんだが、C++の場合は#defineは使わない方がいいらしいけどどういう書き方が
一般的なのだろう。
#define BIT(n) (1<<n)
if(data & BIT(3)){ data &=~BIT(3); }
みたいなやり方をするんだが、C++の場合は#defineは使わない方がいいらしいけどどういう書き方が
一般的なのだろう。
3デフォルトの名無しさん
2019/02/22(金) 05:43:25.43ID:kNNcPZDM inlineにしてる。
2019/02/22(金) 05:45:32.03ID:9HNz13T8
そういう場合にマクロ使うなと言われるのは、単にインライン関数にした方がややこしいバグを産みにくいってだけ
別にどっちでもいい
別にどっちでもいい
5デフォルトの名無しさん
2019/02/22(金) 05:51:49.61ID:kNNcPZDM そろそろonline関数も必要だよな。
2019/02/22(金) 06:59:58.96ID:uV/D6RzS
マクロ関数 BIT() の部分、マスク生成をinline関数にするか、
引数を2つ取って、整数値の指定ビットを落とした値を返すinline関数にするか、
if ~ の部分まで含めて、変数の指定ビットを落とすinline関数にするか…。
と思ってちょいと考えたら、この場合は if 不要と気づいた。
最初から 0 か、ビット操作の結果か、いずれにせよ data の bit3 は 0 になるね。
本筋とは関係ない部分だけど。
引数を2つ取って、整数値の指定ビットを落とした値を返すinline関数にするか、
if ~ の部分まで含めて、変数の指定ビットを落とすinline関数にするか…。
と思ってちょいと考えたら、この場合は if 不要と気づいた。
最初から 0 か、ビット操作の結果か、いずれにせよ data の bit3 は 0 になるね。
本筋とは関係ない部分だけど。
7デフォルトの名無しさん
2019/02/22(金) 08:00:05.86ID:7jsMxmv+ >>3
inline関数ですか?
constexperでも関数は作れると思いますが、inlineの方がベターなのでしょうか?
constexper int BIT(int bitno){ return 1<<bitno;}
usingを使ってこんな書き方ができますが、マクロの変換はできないのでしょうか?
using Func = int(*)(int);
あとtemplateはあまり使ったことがないですが、なんかマクロ変換に使えそうな気がします。
inline関数ですか?
constexperでも関数は作れると思いますが、inlineの方がベターなのでしょうか?
constexper int BIT(int bitno){ return 1<<bitno;}
usingを使ってこんな書き方ができますが、マクロの変換はできないのでしょうか?
using Func = int(*)(int);
あとtemplateはあまり使ったことがないですが、なんかマクロ変換に使えそうな気がします。
2019/02/22(金) 08:17:36.02ID:9HNz13T8
constexprは暗黙的にinlineつくからconstexprでもいい
using Funcの部分は根本的に勘違いしてると思う
それの場合intを受け取りintを返す関数のポインタの"型"に
Funcという別名つけてるだけやで
using Funcの部分は根本的に勘違いしてると思う
それの場合intを受け取りintを返す関数のポインタの"型"に
Funcという別名つけてるだけやで
2019/02/22(金) 08:29:39.37ID:9HNz13T8
あと前スレ>>999
PCゲームやスマホゲーでも、STL使おうが使わまいが標準のヒープを直接は使わないことはよくあるよ
コンシューマへの移植性やパフォーマンスのためにカスタムのメモリマネージャ作ってるメーカーなんてザラにある
PCだから/メモリ有り余ってるからお仕着せのライブラリを適当に使うだけでいい、と思ってるなら何も分かってない
PCゲームやスマホゲーでも、STL使おうが使わまいが標準のヒープを直接は使わないことはよくあるよ
コンシューマへの移植性やパフォーマンスのためにカスタムのメモリマネージャ作ってるメーカーなんてザラにある
PCだから/メモリ有り余ってるからお仕着せのライブラリを適当に使うだけでいい、と思ってるなら何も分かってない
2019/02/22(金) 08:34:10.02ID:nGlWTBX9
現実の開発では、とりあえず動くようにしてから余った時間で最適化したほうが速くなるんだけどね
2019/02/22(金) 08:39:17.41ID:nqPCiyAK
まぁオブジェクトコードから臭いを嗅ぎ取った事は
無いな、感じられる人は耳鼻科行った方が良いかと
無いな、感じられる人は耳鼻科行った方が良いかと
2019/02/22(金) 09:28:57.73ID:15zpzt8/
2019/02/22(金) 09:55:02.52ID:n7WbXSSq
14デフォルトの名無しさん
2019/02/22(金) 17:51:49.69ID:PtH+29Wq 「C」からって限定条件なら tcl/tk + canvas はありだと思うが
別に tcl の勉強しなくても使えるし
別に tcl の勉強しなくても使えるし
2019/02/22(金) 19:08:44.27ID:zu/11utG
Cから tcl/tk はどうやって使うの?
16デフォルトの名無しさん
2019/02/22(金) 19:16:25.53ID:kNNcPZDM ワイドスタジオ使っちゃえば?
2019/02/23(土) 10:20:57.99ID:zem2FMDi
void ff()
{
std::packaged_task<int()> pt([](){std::this_thread::sleep_for(std::chrono::seconds(5));return 0;});
auto fut(pt.get_future());
std::thread th(std::move(pt));
th.detach();
//int v(fut.get());
}
上記のように、taskの完了を待機せず、packaged_taskの寿命が尽きても実行時にエラーも出ないのですが
このようなプログラムはありですか
{
std::packaged_task<int()> pt([](){std::this_thread::sleep_for(std::chrono::seconds(5));return 0;});
auto fut(pt.get_future());
std::thread th(std::move(pt));
th.detach();
//int v(fut.get());
}
上記のように、taskの完了を待機せず、packaged_taskの寿命が尽きても実行時にエラーも出ないのですが
このようなプログラムはありですか
18デフォルトの名無しさん
2019/02/23(土) 11:42:14.30ID:+DV3f+Dk そいつにリソース占領させてみればいい
2019/02/23(土) 12:14:03.42ID:zem2FMDi
解決しました
20デフォルトの名無しさん
2019/02/23(土) 18:45:10.43ID:3YtKndGk 紅蓮弐式のほうが強い。
ハイ論破。
ハイ論破。
21デフォルトの名無しさん
2019/02/24(日) 14:23:19.37ID:YwY0sV++ C++ を使っても綺麗にならない
C++ を使ってる意味が無い
C++ を使ってる意味が無い
22デフォルトの名無しさん
2019/02/24(日) 19:25:23.97ID:iK4D+UQi C++に綺麗さを求めるの初めて見た。
2019/02/24(日) 20:13:55.34ID:+qyzr+Wj
最低でもインデントくらい揃えてほしいけどな
2019/02/24(日) 21:31:26.79ID:BOQZpNHf
揃えさせられるPythonの読みにくさを見るとある程度柔軟な方がいい
2019/02/24(日) 23:59:09.46ID:haqs87u6
>>24
お、おう
お、おう
26デフォルトの名無しさん
2019/02/25(月) 00:01:28.93ID:Jz0DexUX つまりJavaか。
2019/02/25(月) 01:25:43.15ID:Jktx5+0Z
なんでやねん
2019/02/25(月) 01:34:14.73ID:1EOktSCH
ランタイム速度最速を謳ってバカに新機能の実験台になってもらう。
それがc++
それがc++
2019/02/25(月) 06:06:13.74ID:pgIYnQ9M
2019/02/25(月) 06:43:23.26ID:AQp51hox
Most elementary use of C++
2019/02/25(月) 07:14:51.09ID:RhTHp1T7
>>29
多分そういう意味じゃない
多分そういう意味じゃない
32デフォルトの名無しさん
2019/02/25(月) 07:40:11.99ID:4l/+z2Zp 古いサイトとか見てるとグローバルな関数に::ってつけるこだわりがよくわからん
::CreateProcessとかさ
::CreateProcessとかさ
>>32
自分の定義した関数にはつけず、win32api には付けて区別しています…
自分の定義した関数にはつけず、win32api には付けて区別しています…
2019/02/25(月) 09:12:10.78ID:RhTHp1T7
公式「バランス調整はVIP部屋を参考にする」
桜井「○○の使用率ガー」
↓
アホ「調整はVIPの使用率できめるらしい」←????
桜井「○○の使用率ガー」
↓
アホ「調整はVIPの使用率できめるらしい」←????
2019/02/25(月) 09:12:42.56ID:RhTHp1T7
誤爆
2019/02/25(月) 10:45:46.00ID:rMTHv0xs
2019/02/25(月) 12:17:07.75ID:y5m/9TYH
>>31
だから綺麗さなんて曖昧な表現だけだと突っ込まれるって話
だから綺麗さなんて曖昧な表現だけだと突っ込まれるって話
38デフォルトの名無しさん
2019/02/25(月) 18:50:34.75ID:Jz0DexUX では評価関数を。
2019/02/25(月) 23:50:43.17ID:sPAFtFpG
double の 999999998 と 999999999 の積が正しい答えである 999999997000000002 じゃなくて 999999997000000000 になります
なんででしょうか
double の範囲に余裕でおさまってますよね?
なんででしょうか
double の範囲に余裕でおさまってますよね?
2019/02/26(火) 00:18:43.14ID:belfWXD5
仮数部の最大値9007199254740992を超えているから
2019/02/26(火) 00:20:50.15ID:H+xdnOpD
>>39
つ 有効桁数
つ 有効桁数
2019/02/26(火) 00:22:22.81ID:kx+LOcr9
43デフォルトの名無しさん
2019/02/26(火) 14:43:31.98ID:8+7ktUtN 桁落ち
2019/02/26(火) 15:56:22.96ID:5MxkS3P7
浮動小数点は元々、誤差があるから、大雑把な数値でよい
正確な数値を求める場合は、整数型か、decimal を使う
正確な数値を求める場合は、整数型か、decimal を使う
2019/02/26(火) 16:22:19.66ID:aKbIPEAT
>>32
同じ関数で、MFC 版と Win32 版があることがあり、混乱が生じて、
切り分けの難しい不具合を生じる可能性を避けるため、そうしている。
C++だと、実引数を省略することもできる場合があり、その場合、Win32版を
使っているつもりが、MFC版が勝手に呼び出されて、動作が自分の思ったものと
少し違ってしまう可能性があるかもしれない。この時、コンパイラは何の
警告も出してくれないかもしれない。それを避けたいため、絶対に
Win32版を呼び出したい場合には、:: を付けることがある。
同じ関数で、MFC 版と Win32 版があることがあり、混乱が生じて、
切り分けの難しい不具合を生じる可能性を避けるため、そうしている。
C++だと、実引数を省略することもできる場合があり、その場合、Win32版を
使っているつもりが、MFC版が勝手に呼び出されて、動作が自分の思ったものと
少し違ってしまう可能性があるかもしれない。この時、コンパイラは何の
警告も出してくれないかもしれない。それを避けたいため、絶対に
Win32版を呼び出したい場合には、:: を付けることがある。
46デフォルトの名無しさん
2019/02/26(火) 19:26:51.90ID:7oeDt7bv DoxygenがモダンC++に対応していないんだけど、何か代わりの物はありますか?
2019/02/26(火) 22:24:56.64ID:t7v3BAso
キーボードのPageUpとPageDownの使い方が判りません、他のボタンも。
48デフォルトの名無しさん
2019/02/26(火) 23:24:35.69ID:S/5yarce C++のthreadってOSの無いマイコン環境でも動作するんだろうか?
threadが使えるってことは、ハードウエア的に最低でもタイマー割り込みを使う必要が
あるんじゃなかろうか? そうするとそういうタイマーなどのハードリソースはすべて自前で
用意するというのが前提のマイコンではどうするんだろとふと疑問に思った。
threadが使えるってことは、ハードウエア的に最低でもタイマー割り込みを使う必要が
あるんじゃなかろうか? そうするとそういうタイマーなどのハードリソースはすべて自前で
用意するというのが前提のマイコンではどうするんだろとふと疑問に思った。
49はちみつ餃子 ◆8X2XSCHEME
2019/02/27(水) 01:13:25.57ID:FtVEDFBt50デフォルトの名無しさん
2019/02/27(水) 01:32:45.56ID:apYcTfdI effective Modern C++ / Scott Meyersには
C++11の偉業として
C++の平行対応作業の大部分がコンパイラ開発側が負担する形で実現されたおかげで、標準
規格としてC++の歴史上はじめてどのプラットフォームでも動作が変わらないマルチスレッドプログラム
の開発が可能となりました。
と書かれている。
「どのプラットフォームでも」と書かれているがOSのないマイコンだってプラットフォームだからそれを含まない
と可笑しいとおもうが、、
C++11の偉業として
C++の平行対応作業の大部分がコンパイラ開発側が負担する形で実現されたおかげで、標準
規格としてC++の歴史上はじめてどのプラットフォームでも動作が変わらないマルチスレッドプログラム
の開発が可能となりました。
と書かれている。
「どのプラットフォームでも」と書かれているがOSのないマイコンだってプラットフォームだからそれを含まない
と可笑しいとおもうが、、
2019/02/27(水) 01:37:31.77ID:3Jl+ieqT
>>50
そこは、対応しているプラットフォームでは、という前提がつくのは自明だと思うぞ、
そこは、対応しているプラットフォームでは、という前提がつくのは自明だと思うぞ、
2019/02/27(水) 01:59:24.57ID:VmfRF6bC
>>46
例えば何に対応してないの?
例えば何に対応してないの?
2019/02/27(水) 09:01:57.37ID:MitD/HmJ
そもそも、マイコンにスレッドなんてあるのか?
main 関数しか無いのでは?
main 関数しか無いのでは?
2019/02/27(水) 09:20:12.60ID:fYEBa3GD
マイコンには関数も変数も無いだろ
機械語セットのどこにも関数とか変数とかの命令は無いじゃん
変数が存在してるように見えるのはコンパイラのおかげ
機械語セットのどこにも関数とか変数とかの命令は無いじゃん
変数が存在してるように見えるのはコンパイラのおかげ
55はちみつ餃子 ◆8X2XSCHEME
2019/02/27(水) 12:06:10.51ID:FtVEDFBt C/C++ というのはそういうランタイムサポートが期待できない環境、いわゆる「ベアメタル」でも使い物になる
システムプログラミング言語であるというのがキモの言語だろ。
フルセットで使える環境なら std::thread という共通インターフェイスを使ってねというだけのことで、
リソースが限られたアーキテクチャでもフルセットが使えるべきというほどのもんではない。
システムプログラミング言語であるというのがキモの言語だろ。
フルセットで使える環境なら std::thread という共通インターフェイスを使ってねというだけのことで、
リソースが限られたアーキテクチャでもフルセットが使えるべきというほどのもんではない。
2019/02/27(水) 12:51:06.39ID:Gf38Q9uK
57デフォルトの名無しさん
2019/02/27(水) 14:09:36.66ID:+TCpifLa >>53
mainが無いのもあった気がする
mainが無いのもあった気がする
58デフォルトの名無しさん
2019/02/27(水) 15:17:57.76ID:6BQDuKk1 >>53
PCよりテヘロジニアス化(専用機をCPUに統合)が進んでるので、GPGPUみたいな感じってネットで読んだことあるな。
PCよりテヘロジニアス化(専用機をCPUに統合)が進んでるので、GPGPUみたいな感じってネットで読んだことあるな。
2019/02/27(水) 15:37:08.27ID:HrTieKXO
>>56
どんなマイコンを想像してるのか知らんけど組込みOSならメモリー数KB程度から動作する
https://www.eforce.co.jp/products/microc3c
>>57
mainなんて単なるC言語とかのお約束だからスタートアップルーチンに手を入れられるなら変えることはいくらでもできるよ
どんなマイコンを想像してるのか知らんけど組込みOSならメモリー数KB程度から動作する
https://www.eforce.co.jp/products/microc3c
>>57
mainなんて単なるC言語とかのお約束だからスタートアップルーチンに手を入れられるなら変えることはいくらでもできるよ
2019/02/27(水) 15:48:15.61ID:jy5tl2qf
サービスなんてエントリーポイント2つあるし
2019/02/27(水) 18:55:35.12ID:BQO9B3mv
template<class T>
int print(T v)
{
printf("%d",v);// intの場合
printf("%lf",v);// doubleの場合
}
printfを使うことは必須なんですが、どうすれば実現できます?
int print(T v)
{
printf("%d",v);// intの場合
printf("%lf",v);// doubleの場合
}
printfを使うことは必須なんですが、どうすれば実現できます?
2019/02/27(水) 19:11:05.97ID:qHrg9QHU
特殊化しよう
2019/02/27(水) 19:14:17.63ID:lylxu9As
typeidで分岐すれば
64デフォルトの名無しさん
2019/02/27(水) 19:17:04.78ID:ZZbXSlBN >>52
戻り値の型をautoと書くとオーバーロードを認識しなくなるとかです。
戻り値の型をautoと書くとオーバーロードを認識しなくなるとかです。
2019/02/27(水) 19:23:09.27ID:lylxu9As
auto戻り値なんてメリットあるか?
2019/02/27(水) 19:31:54.53ID:EHh9wz5w
コンパイル時の条件で型が変わるときはautoで済ますと楽
2019/02/27(水) 19:43:36.93ID:1o0vhyUy
>>61
単純にオーバーロードすれば?
単純にオーバーロードすれば?
68デフォルトの名無しさん
2019/02/27(水) 19:53:26.31ID:ZZbXSlBN >>65
decltype使うときとかです。
decltype使うときとかです。
69デフォルトの名無しさん
2019/02/27(水) 19:56:24.14ID:ZZbXSlBN std::enable_if<>を使うと超長くなるんだけど、doxygenは戻り値の型の欄を改行してくれないので、関数名や説明の欄が横一文字とかになってしまいそうです。
何とかしてほしいです。
何とかしてほしいです。
70デフォルトの名無しさん
2019/02/27(水) 20:23:21.57ID:Lz5cBdad2019/02/27(水) 20:31:28.87ID:ajs1Ye6I
>>61
%lfて…わかってやってる、ワケないよな
%lfて…わかってやってる、ワケないよな
2019/02/27(水) 20:40:31.82ID:G+GrvvOb
>>61
printf("%s", std::string(v).c_str());
printf("%s", std::string(v).c_str());
2019/02/27(水) 20:45:05.91ID:G+GrvvOb
2019/02/28(木) 07:48:59.08ID:nAsBylgf
75デフォルトの名無しさん
2019/02/28(木) 12:32:13.81ID:yyOtWed3 >>73
%06d とか %7.3f とかできなくなるやん
%06d とか %7.3f とかできなくなるやん
7672
2019/02/28(木) 13:07:02.05ID:g9ECmttI7774
2019/02/28(木) 15:32:45.18ID:nAsBylgf 自分で書いといてアレだけど、
C++に含まれるCの標準関数ってどうなってるんだろ?
Cの規格に追従して自動的に更新されてくのか、
ある時点で分裂したら再統合されるまで離れる一方なのか。
後者だとしたら、C99以降でprintf()の%lfが正当になったとしても
C++に関してはどのバージョンでも未定義、って危険があるな。
C++に含まれるCの標準関数ってどうなってるんだろ?
Cの規格に追従して自動的に更新されてくのか、
ある時点で分裂したら再統合されるまで離れる一方なのか。
後者だとしたら、C99以降でprintf()の%lfが正当になったとしても
C++に関してはどのバージョンでも未定義、って危険があるな。
78はちみつ餃子 ◆8X2XSCHEME
2019/02/28(木) 16:24:48.52ID:KlP/6TOW >>77
今のところつかず離れずを維持してる。
C++ 中の C 関数は「この C 規格を参照」という感じで明記しているので、
ある程度になると状況を見て参照先を変更するってだけ。
まあ関数についてはそれでいいとして、
その他のところも記法は統一して欲しいよなぁ。
C の _Noreturn と C++ の [[noreturn]] はどっちかに統一するのじゃ駄目だったんかなぁ? とか。
今のところつかず離れずを維持してる。
C++ 中の C 関数は「この C 規格を参照」という感じで明記しているので、
ある程度になると状況を見て参照先を変更するってだけ。
まあ関数についてはそれでいいとして、
その他のところも記法は統一して欲しいよなぁ。
C の _Noreturn と C++ の [[noreturn]] はどっちかに統一するのじゃ駄目だったんかなぁ? とか。
2019/02/28(木) 17:54:53.03ID:zeNaE6xz
vector<object*> v
がありまして、んでobjectクラスはメンバ変数int numを持ってるとします
このときですねv.at(1)->num, v.at(2)->num,....v.at(n)->numでvをsortしたいなーってのがあるんですけど上手い方法無いもんでしょうか
全然思いつかなくて
がありまして、んでobjectクラスはメンバ変数int numを持ってるとします
このときですねv.at(1)->num, v.at(2)->num,....v.at(n)->numでvをsortしたいなーってのがあるんですけど上手い方法無いもんでしょうか
全然思いつかなくて
2019/02/28(木) 18:01:05.88ID:3CdGs56r
>>78
そう言うのは好みだからどっちかが大人になって折れるかよほど力の差があるとかでないと統合は無理
そう言うのは好みだからどっちかが大人になって折れるかよほど力の差があるとかでないと統合は無理
2019/02/28(木) 18:07:46.80ID:zeNaE6xz
>>79ですが解決しました。失礼しました。
https://stackoverflow.com/questions/16366978/stdsort-on-a-vector-of-class-pointers
こちらですね
https://stackoverflow.com/questions/16366978/stdsort-on-a-vector-of-class-pointers
こちらですね
82デフォルトの名無しさん
2019/02/28(木) 18:41:06.34ID:IByT54N8 英語だ!!!
>>61
確か double に対応する書式指定は "%f" であって "%lf" ではない、という記憶がありますが
確か double に対応する書式指定は "%f" であって "%lf" ではない、という記憶がありますが
2019/02/28(木) 20:22:30.93ID:SJVUajxC
K&Rのfloatは引数にするとdoubleに昇格するというルールが残っているのでしょう
2019/02/28(木) 23:35:18.37ID:IM+bn+eP
本質ではなく、どうでもいいところにしか突っ込めないんだなw
2019/02/28(木) 23:37:27.00ID:ufQTgCzR
プロトタイプ宣言されたfloat引数にはfloatで渡すけど
可変引数にはfloatは渡せないままなんだな何故か
可変引数にはfloatは渡せないままなんだな何故か
2019/02/28(木) 23:45:49.79ID:SJVUajxC
>>86
va_list にそんな制限あったっけ?
va_list にそんな制限あったっけ?
2019/02/28(木) 23:51:53.97ID:LhFhdmbG
可変長引数関連はスタック周りを弄るコードを「マクロで」wrapしたものだから
C言語と互換性を持たせるためには仕様の詳細まで引き継ぐしか致し方なかったんじゃないの知らんけど
C++専用のva_listを名前を変えて作ったら解決したかもしれんが
知らんけど
ただしそうしたとしたら、extern "C"したのにC言語から呼ばれへん
何で!?となってプチ大混乱が生じそう
知らんけどな…
C言語と互換性を持たせるためには仕様の詳細まで引き継ぐしか致し方なかったんじゃないの知らんけど
C++専用のva_listを名前を変えて作ったら解決したかもしれんが
知らんけど
ただしそうしたとしたら、extern "C"したのにC言語から呼ばれへん
何で!?となってプチ大混乱が生じそう
知らんけどな…
2019/02/28(木) 23:53:46.30ID:LhFhdmbG
printf()ではdoubleを出力できるのに、
scanf()ではfloatしか受け取れない(doubleをスキャンする機能が無い)というのは
C言語の七不思議のうちの一つ
scanf()ではfloatしか受け取れない(doubleをスキャンする機能が無い)というのは
C言語の七不思議のうちの一つ
2019/02/28(木) 23:56:03.03ID:SJVUajxC
MSDNの関連記事 読んでない
https://msdn.microsoft.com/ja-jp/magazine/dn913181.aspx
https://msdn.microsoft.com/ja-jp/magazine/dn913181.aspx
2019/03/01(金) 00:15:41.73ID:fP7U0W+N
しかしさすがにscanf()でdoubleをスキャンできるようにする近代化は一筋縄ではいかなさげ
92デフォルトの名無しさん
2019/03/01(金) 13:14:40.93ID:ozM8zBQ9 >>89
えっ
えっ
2019/03/01(金) 19:20:57.20ID:HVxvwZsK
>>84
不定長引数関数ならば、という縛りがつきます
不定長引数関数ならば、という縛りがつきます
2019/03/01(金) 19:21:39.88ID:HVxvwZsK
>>91
普通に書式"%lf" でできるのではないですか?
普通に書式"%lf" でできるのではないですか?
2019/03/01(金) 19:33:29.87ID:WfqePbUu
>>89
それ何処の世界のC言語の話?
それ何処の世界のC言語の話?
2019/03/01(金) 20:08:46.93ID:WfqePbUu
>>87
規格に書いてあるよ
規格に書いてあるよ
97デフォルトの名無しさん
2019/03/02(土) 10:59:08.67ID:+L4gK20K 出鱈目ばっかり書き込むスレですか?
2019/03/02(土) 11:55:35.34ID:0O78HlO0
2019/03/02(土) 12:04:22.76ID:0O78HlO0
ところで質問なのですが代入やコピー構築時に所有権を移動するクラスFooを造りたいのですが、
Foo::Foo(Foo& rhs) : m_p(rhs.m_p) { rhs.m_p = NULL; } // 引数が非constのコピコン
Foo& Foo::operator=(Foo& rhs) { m_p = rhs.m_p; rhs.m_p = NULL; return *this; } // 引数が非constの代入演算子
を定義して、VS2010とかで警告レベルを4に引き上げると
C4239TypeからType&への変換です
という警告が出るのです
これはFooのムーブコンストラクタを定義したら直るので初めてムーブコンストラクタを定義したいのですが、そこで質問
Q1. ムーブコンストラクタにおいてはコピーされる側の変更はマジで不要?
つまり、所有権移動が絡む今回のFooの場合でも次の書き方でおk?
Foo::Foo(const Foo&& rhs) : m_p(rhs.m_p) { }
Q2. ムーブコンストラクタにおいてコピーされる側を変更しても(実行効率以外は)無害?
つまり、所有権移動が絡む今回のFooの場合でコピコンにならって次の書き方をしても安全?
Foo::Foo(Foo&& rhs) : m_p(rhs.m_p) { rhs.m_p = NULL; }
Foo::Foo(Foo& rhs) : m_p(rhs.m_p) { rhs.m_p = NULL; } // 引数が非constのコピコン
Foo& Foo::operator=(Foo& rhs) { m_p = rhs.m_p; rhs.m_p = NULL; return *this; } // 引数が非constの代入演算子
を定義して、VS2010とかで警告レベルを4に引き上げると
C4239TypeからType&への変換です
という警告が出るのです
これはFooのムーブコンストラクタを定義したら直るので初めてムーブコンストラクタを定義したいのですが、そこで質問
Q1. ムーブコンストラクタにおいてはコピーされる側の変更はマジで不要?
つまり、所有権移動が絡む今回のFooの場合でも次の書き方でおk?
Foo::Foo(const Foo&& rhs) : m_p(rhs.m_p) { }
Q2. ムーブコンストラクタにおいてコピーされる側を変更しても(実行効率以外は)無害?
つまり、所有権移動が絡む今回のFooの場合でコピコンにならって次の書き方をしても安全?
Foo::Foo(Foo&& rhs) : m_p(rhs.m_p) { rhs.m_p = NULL; }
100デフォルトの名無しさん
2019/03/02(土) 12:09:49.85ID:0O78HlO0101デフォルトの名無しさん
2019/03/02(土) 12:23:27.09ID:LLfR4tsY rhsにNULL入れてるってことはrhsのデストラクタで解放されたら困るってことでしょ
一時オブジェクトだろうが何だろうが破棄されるときにデストラクタは走るから、
その例だとNULL入れる必要はある
というかその例は綺麗にムーブを使うべき例
一時オブジェクトだろうが何だろうが破棄されるときにデストラクタは走るから、
その例だとNULL入れる必要はある
というかその例は綺麗にムーブを使うべき例
102デフォルトの名無しさん
2019/03/02(土) 12:37:35.01ID:0O78HlO0 >>101
>rhsにNULL入れてるってことはrhsのデストラクタで解放されたら困るってことでしょ
なるほど確かに…
ていうか鋭い
>というかその例は綺麗にムーブを使うべき例
ホンマや(゚Д゚;)ムーブコンストラだけで動いたわdクス、
>rhsにNULL入れてるってことはrhsのデストラクタで解放されたら困るってことでしょ
なるほど確かに…
ていうか鋭い
>というかその例は綺麗にムーブを使うべき例
ホンマや(゚Д゚;)ムーブコンストラだけで動いたわdクス、
103デフォルトの名無しさん
2019/03/02(土) 12:51:51.79ID:0O78HlO0104デフォルトの名無しさん
2019/03/02(土) 14:47:21.97ID:66qf4QbX えw
実験するのめんどくさいから質問してたわw
ダメだったんだ、ごめんなさい。
実験するのめんどくさいから質問してたわw
ダメだったんだ、ごめんなさい。
105デフォルトの名無しさん
2019/03/02(土) 15:15:55.45ID:oy0Ht86m コンパイルエラーがとれなくて困ってます
■ ヘッダー側
template<class T>
class Test
{
public:
Test(void (*func)(T)) {}
Test(void (*func)(const T&)) {}
};
typedef Test<int *> TestPtr; // テンプレート引数がポインタ型
■ 呼び出し側
static void func1(int *x) {}
static void func2(const int *x) {}
void main()
{
TestPtr test1(func1); // OK
TestPtr test2(func2); // コンパイルエラー
}
VC2008だと以下のエラーになります。
1 番目の引数を 'void (__cdecl *)(const int *)' から 'void (__cdecl *)(T)' に変換できません。
func2みたいにconst付けるとなんでダメなんでしょうか?
■ ヘッダー側
template<class T>
class Test
{
public:
Test(void (*func)(T)) {}
Test(void (*func)(const T&)) {}
};
typedef Test<int *> TestPtr; // テンプレート引数がポインタ型
■ 呼び出し側
static void func1(int *x) {}
static void func2(const int *x) {}
void main()
{
TestPtr test1(func1); // OK
TestPtr test2(func2); // コンパイルエラー
}
VC2008だと以下のエラーになります。
1 番目の引数を 'void (__cdecl *)(const int *)' から 'void (__cdecl *)(T)' に変換できません。
func2みたいにconst付けるとなんでダメなんでしょうか?
106デフォルトの名無しさん
2019/03/02(土) 15:52:41.75ID:0ZOGECoI107デフォルトの名無しさん
2019/03/02(土) 15:54:45.54ID:uEwpVDqh VC++でmsado15.dllをインポートしようとしても参照されずエラーになるのですが原因は何でしょうか?
108デフォルトの名無しさん
2019/03/02(土) 16:25:34.65ID:gxSP/QDn >>107
それだけでわかるか。エラー内容くらい書け
それだけでわかるか。エラー内容くらい書け
109デフォルトの名無しさん
2019/03/02(土) 16:41:21.42ID:uEwpVDqh >>108
C:\Program Files\Common Files\system\ado\msado15.dll に対応するエディターはありません。
このファイルの種類(.dll)のアプリケーションがインストールされていることを確認してください。
重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態
エラー (アクティブ) E1696 ソース ファイルを開けません "C:/Users/owner/Documents/Visual Studio 2017/Projects/20190227/20190227/Debug/msado15.tlh" 20190227 C:\Users\owner\Documents\Visual Studio 2017\Projects\20190227\20190227\Source.cpp 6
ソースは以下の通り
#include <stdio.h>
#include <tchar.h>
#if (WINVER >= 0x0601) // Windows 7 以降
#import "msado60.tlb" no_namespace rename("EOF", "adoEOF")
#else
#import "C:\Program Files\Common Files\system\ado\msado15.dll" no_namespace rename("EOF", "adoEOF")
#endif
C:\Program Files\Common Files\system\ado\msado15.dll に対応するエディターはありません。
このファイルの種類(.dll)のアプリケーションがインストールされていることを確認してください。
重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態
エラー (アクティブ) E1696 ソース ファイルを開けません "C:/Users/owner/Documents/Visual Studio 2017/Projects/20190227/20190227/Debug/msado15.tlh" 20190227 C:\Users\owner\Documents\Visual Studio 2017\Projects\20190227\20190227\Source.cpp 6
ソースは以下の通り
#include <stdio.h>
#include <tchar.h>
#if (WINVER >= 0x0601) // Windows 7 以降
#import "msado60.tlb" no_namespace rename("EOF", "adoEOF")
#else
#import "C:\Program Files\Common Files\system\ado\msado15.dll" no_namespace rename("EOF", "adoEOF")
#endif
110デフォルトの名無しさん
2019/03/02(土) 17:30:18.82ID:oy0Ht86m111デフォルトの名無しさん
2019/03/02(土) 18:12:08.54ID:uEwpVDqh >>109
必要かどうかわからなかったのですが
regsvr32.exeでmsado15.dllを登録
その後いろいろいじってビルドしてみるとコンパイルできました。
ただし出力ができませんでしたがコンパイルはできたのでとりあえず良しとします。
msado15.dllのようなDLLはC(VC)++で扱うのは難しいですね。
インテリセンスが働きませんから…
必要かどうかわからなかったのですが
regsvr32.exeでmsado15.dllを登録
その後いろいろいじってビルドしてみるとコンパイルできました。
ただし出力ができませんでしたがコンパイルはできたのでとりあえず良しとします。
msado15.dllのようなDLLはC(VC)++で扱うのは難しいですね。
インテリセンスが働きませんから…
112デフォルトの名無しさん
2019/03/02(土) 18:48:27.86ID:Gk4CLPf8 「c++ import dll」で検索!
113デフォルトの名無しさん
2019/03/02(土) 20:32:59.25ID:YCnAoXOq マクロは名前空間無いからな
114デフォルトの名無しさん
2019/03/02(土) 22:58:26.16ID:9ABljqhX はじめまして。
C++でスケジューラのようなものを作りたいのですが、
相談に乗っていただけますでしょうか?
C++/MFCのMDIを使用して、ウィンドウ内に複数のウィンドウを配置したいと思っています。
一つのウィンドウにはリスト形式でタスクの一覧を、別のウィンドウでは
ガントチャート形式でタスクの時間ごとにグラフを描画し、その他のウィンドウは各情報を表示出来ればと思っています。
そこで、上記のようなものを作るにあたって、
タスク一覧のウィンドウとガントチャートのウィンドウへドラッグ&ドロップで行き来したいのですが、
そもそもそのような事は可能でしょうか?
また、チャートの描画をするにあたって、グラフは2Dで描画しようと思っているのですが、
2Dのグラフィックライブラリ等を利用した方が簡単に実装出来るでしょうか?
もし良いライブラリ等があればご教示いたければ幸いです。
私自身、開発言語はC++かC#しかまともに使用した経験がないのですが、
実行環境のスペックがあまり高いものを準備出来ないので、
Core2Duo/メモリ2G程度、良くても型落ちのi3程度で、
実行速度も考慮したくC++を選択した次第です。
もし最適な言語や、開発手法があれば教えていただけると嬉しいです。
無知な部分が多いと思いますが、皆さんの意見をお聞かせ頂ければと思いますので、よろしくお願いいたします。
C++でスケジューラのようなものを作りたいのですが、
相談に乗っていただけますでしょうか?
C++/MFCのMDIを使用して、ウィンドウ内に複数のウィンドウを配置したいと思っています。
一つのウィンドウにはリスト形式でタスクの一覧を、別のウィンドウでは
ガントチャート形式でタスクの時間ごとにグラフを描画し、その他のウィンドウは各情報を表示出来ればと思っています。
そこで、上記のようなものを作るにあたって、
タスク一覧のウィンドウとガントチャートのウィンドウへドラッグ&ドロップで行き来したいのですが、
そもそもそのような事は可能でしょうか?
また、チャートの描画をするにあたって、グラフは2Dで描画しようと思っているのですが、
2Dのグラフィックライブラリ等を利用した方が簡単に実装出来るでしょうか?
もし良いライブラリ等があればご教示いたければ幸いです。
私自身、開発言語はC++かC#しかまともに使用した経験がないのですが、
実行環境のスペックがあまり高いものを準備出来ないので、
Core2Duo/メモリ2G程度、良くても型落ちのi3程度で、
実行速度も考慮したくC++を選択した次第です。
もし最適な言語や、開発手法があれば教えていただけると嬉しいです。
無知な部分が多いと思いますが、皆さんの意見をお聞かせ頂ければと思いますので、よろしくお願いいたします。
115さまよえる蟻人間 ◆T6xkBnTXz7B0
2019/03/02(土) 23:07:26.95ID:HH5zv832 それなら、OLE D&Dを実装することになる。具体的には、IDataObject, IDataSource, IDropTargetインターフェースの実装。
116デフォルトの名無しさん
2019/03/02(土) 23:32:17.29ID:4PbQivqk c++でテンプレ使って実装を別ファイルで隠す場合、
// h //////////////////////////////////////////////////
template<typename T> class cls
{
public:
template<typename U> U func();
private:
T var = 0;
};
// cpp1 //////////////////////////////////////////////////
template<> template<> char cls<char>::func<char> { return var; }
template<> template<> int cls<char>::func<int> { return var; }
template<> template<> char cls<int>::func<char> { return var; }
template<> template<> int cls<int>::func<int> { return var; }
// cpp2 //////////////////////////////////////////////////
template<typename T> template<> char cls<T>::func<char>(){ return var; }
template<typename T> template<> int cls<T>::func<int>(){ return var; }
template<> class cls<char>;
template<> class cls<int>;
//////////////////////////////////////////////////
cpp1みたいに全部型指定していく場合はビルド出来るんだけど、
cpp2みたいに別けて型指定していくと出来ない。
cpp2みたいな事を実現可能な方法って無いですかね?
そもそも書き方が間違ってる?
// h //////////////////////////////////////////////////
template<typename T> class cls
{
public:
template<typename U> U func();
private:
T var = 0;
};
// cpp1 //////////////////////////////////////////////////
template<> template<> char cls<char>::func<char> { return var; }
template<> template<> int cls<char>::func<int> { return var; }
template<> template<> char cls<int>::func<char> { return var; }
template<> template<> int cls<int>::func<int> { return var; }
// cpp2 //////////////////////////////////////////////////
template<typename T> template<> char cls<T>::func<char>(){ return var; }
template<typename T> template<> int cls<T>::func<int>(){ return var; }
template<> class cls<char>;
template<> class cls<int>;
//////////////////////////////////////////////////
cpp1みたいに全部型指定していく場合はビルド出来るんだけど、
cpp2みたいに別けて型指定していくと出来ない。
cpp2みたいな事を実現可能な方法って無いですかね?
そもそも書き方が間違ってる?
117さまよえる蟻人間 ◆T6xkBnTXz7B0
2019/03/02(土) 23:37:15.79ID:HH5zv832 ヘッダーで特殊化の方法を指定しないといかんとちゃう? 知らんけど。
118デフォルトの名無しさん
2019/03/02(土) 23:45:00.12ID:0O78HlO0 cls::func()の定義を
U cls::func()
ではなしに、
void cls::func(U& x)
とかにすればおkなキモス、
なおそうするとテンプレートの特殊化以前に関数のオーバーロードで解決できてしまうヨカン、
void cls::func(char& x) { x = (char)var; }
void cls::func(int& x) { x = (int)var; }
void cls::func(double& x) { x = (double)var; }
void cls::func(std::string& x) { x = std::string(var, '0'); }
...
いくらでも作れる……!
U cls::func()
ではなしに、
void cls::func(U& x)
とかにすればおkなキモス、
なおそうするとテンプレートの特殊化以前に関数のオーバーロードで解決できてしまうヨカン、
void cls::func(char& x) { x = (char)var; }
void cls::func(int& x) { x = (int)var; }
void cls::func(double& x) { x = (double)var; }
void cls::func(std::string& x) { x = std::string(var, '0'); }
...
いくらでも作れる……!
119さまよえる蟻人間 ◆T6xkBnTXz7B0
2019/03/02(土) 23:54:10.30ID:HH5zv832 IDataSourceじゃなくてIDropSourceだ。ごめんを。
120デフォルトの名無しさん
2019/03/02(土) 23:59:54.93ID:4PbQivqk121さまよえる蟻人間 ◆T6xkBnTXz7B0
2019/03/03(日) 00:04:53.16ID:KlFuUPR7 特殊化を知らない?
122デフォルトの名無しさん
2019/03/03(日) 00:12:10.08ID:ET38y2ec cpp2の翻訳単位内で完全に実体化させないとどうやっても外からはよべないので
少なくともcpp2の中ではそのように書かないといけないと思う
少なくともcpp2の中ではそのように書かないといけないと思う
123デフォルトの名無しさん
2019/03/03(日) 00:24:16.88ID:kd4WdA4I 確実にcppに実体作りたきゃ明示的インスタンス化は個別にしなきゃ駄目だろ
124デフォルトの名無しさん
2019/03/03(日) 00:24:32.19ID:1zX/ygG4 >>121
この場合の特殊化は、どのような記述になるのでしょうか?
>>122
なるほど、やっぱり無理なんですかね?
これ、元となっているのは、
// h /////////////////////////////////////////////////
template<typename T> class cls
{
public:
int func();
private:
T var;
};
// cpp ////////////////////////////////////////////////////
template<typename T> int cls<T>::func(){ return var; }
template class cls<char>;
/////////////////////////////////////////////////////////////
みたいな感じで func() に戻り値の型指定を追加したいな、
って事でやりはじめたんですよね。
綺麗に書くのが無理そうならば、必要な物を全部書いていきます、、、
この場合の特殊化は、どのような記述になるのでしょうか?
>>122
なるほど、やっぱり無理なんですかね?
これ、元となっているのは、
// h /////////////////////////////////////////////////
template<typename T> class cls
{
public:
int func();
private:
T var;
};
// cpp ////////////////////////////////////////////////////
template<typename T> int cls<T>::func(){ return var; }
template class cls<char>;
/////////////////////////////////////////////////////////////
みたいな感じで func() に戻り値の型指定を追加したいな、
って事でやりはじめたんですよね。
綺麗に書くのが無理そうならば、必要な物を全部書いていきます、、、
125デフォルトの名無しさん
2019/03/03(日) 00:30:05.53ID:AQaNwhGs 要求仕様がいまいちよくわかっていないが(マテ
(1) 任意の型Tの値cls::varから任意の型Uの値を得たい(一種のconverterクラスを作りたい)
(2) 変換関数cls::func()の実装は隠蔽したい
ということならこんなんでど(ry
ttps://ideone.com/1Fh8sg
(1) 任意の型Tの値cls::varから任意の型Uの値を得たい(一種のconverterクラスを作りたい)
(2) 変換関数cls::func()の実装は隠蔽したい
ということならこんなんでど(ry
ttps://ideone.com/1Fh8sg
126デフォルトの名無しさん
2019/03/03(日) 00:38:22.33ID:1zX/ygG4127デフォルトの名無しさん
2019/03/03(日) 00:49:52.61ID:AQaNwhGs >func() の戻り値をテンプレ使用でなんとかする方法が無いのかな、と
func()の戻り値をテンプレにしつつ実装は「完全に」隠蔽したい(ヘッダファイルに書くわけにいかない)となると
やっぱコアとなる変換関数は、必要なTとUの全組み合わせについて「完全に」「非テンプレートで」書かないといけない希ガス
(なぜなら、テンプレートのままcppに書いたら他のcppから呼べない(現行コンパイラはテンプレートの分割コンパイルに対応していない
(2)の隠蔽の要求を多少緩和して、template<class U> void conv(int src, U& dst) { ... } を
ヘッダファイルに書いても良いということならUを返すcls::func()をconv()を1個書いたらできるようにはなる
※ 個人の感想です
※ コードには個人差があります
func()の戻り値をテンプレにしつつ実装は「完全に」隠蔽したい(ヘッダファイルに書くわけにいかない)となると
やっぱコアとなる変換関数は、必要なTとUの全組み合わせについて「完全に」「非テンプレートで」書かないといけない希ガス
(なぜなら、テンプレートのままcppに書いたら他のcppから呼べない(現行コンパイラはテンプレートの分割コンパイルに対応していない
(2)の隠蔽の要求を多少緩和して、template<class U> void conv(int src, U& dst) { ... } を
ヘッダファイルに書いても良いということならUを返すcls::func()をconv()を1個書いたらできるようにはなる
※ 個人の感想です
※ コードには個人差があります
128デフォルトの名無しさん
2019/03/03(日) 00:57:11.45ID:1zX/ygG4129デフォルトの名無しさん
2019/03/03(日) 01:15:53.21ID:AQaNwhGs スマン>>127は言い過ぎたかもしれん…
全組み合わせをcppに書く作業をそのcppの中でテンプレートを定義して省力化することは可能かもしれん
ただし、そのcppの中で定義したのと同じシグネチャ(名前+引数)でユーザーコードが別のテンプレート関数を定義でもしたら、
ODRに違反することになる(この場合実際に変な挙動になる危険性が大きい)ので全体を無名namespaceで囲う必要がありそう
無名namespaceの中から選択的に関数をエクスポートできるのかは正直知らん
あんまりテンプレート絡みで無茶はやりたくナサス
全組み合わせをcppに書く作業をそのcppの中でテンプレートを定義して省力化することは可能かもしれん
ただし、そのcppの中で定義したのと同じシグネチャ(名前+引数)でユーザーコードが別のテンプレート関数を定義でもしたら、
ODRに違反することになる(この場合実際に変な挙動になる危険性が大きい)ので全体を無名namespaceで囲う必要がありそう
無名namespaceの中から選択的に関数をエクスポートできるのかは正直知らん
あんまりテンプレート絡みで無茶はやりたくナサス
130デフォルトの名無しさん
2019/03/03(日) 01:30:06.83ID:kd4WdA4I 定義は共通でして
template int cls<char>::func<int>();
みたいなのを使う分だけ書けば良い
ただ、今回の場合クラス内テンプレート関数の特殊化しようとすると怒られるからさらに工夫が必要
template int cls<char>::func<int>();
みたいなのを使う分だけ書けば良い
ただ、今回の場合クラス内テンプレート関数の特殊化しようとすると怒られるからさらに工夫が必要
131デフォルトの名無しさん
2019/03/03(日) 01:33:24.30ID:ET38y2ec ああ、確かに
使わない関数テンプレートをcppで定義してそれの明示的インスタンス化を通してやれば省力化できそう
この場合その使わない関数テンプレートを内部リンケージにしても、その中で実体化要求されたテンプレートのリンケージには影響はないはず
使わない関数テンプレートをcppで定義してそれの明示的インスタンス化を通してやれば省力化できそう
この場合その使わない関数テンプレートを内部リンケージにしても、その中で実体化要求されたテンプレートのリンケージには影響はないはず
132デフォルトの名無しさん
2019/03/03(日) 02:24:28.96ID:5EsDLzeQ Visual Studioで通ってもgccで通らなかったりするからテンプレートの実体化は厄介。
133デフォルトの名無しさん
2019/03/03(日) 02:47:42.46ID:dVINV85+ もはやコンパイラありきの言語
134デフォルトの名無しさん
2019/03/03(日) 02:53:02.86ID:kd4WdA4I VC++がC++擬きの別言語なだけだろ
今ごろになってやっと2 phase lookup対応させた
structとclassが違うとリンクでこけるのも糞
今ごろになってやっと2 phase lookup対応させた
structとclassが違うとリンクでこけるのも糞
135デフォルトの名無しさん
2019/03/03(日) 03:13:19.05ID:ET38y2ec VS2017以降のMSVCは許してあげてほしい・・・
136デフォルトの名無しさん
2019/03/03(日) 05:50:17.03ID:EorZPwcP えっ、何か革新的なことをしているの?
C++は今までつかったことがなかったんだが、最近マイコンの開発に使ってから
かなり気に入っている。これならPCでも使えるかもと今考えているところ。
C++は今までつかったことがなかったんだが、最近マイコンの開発に使ってから
かなり気に入っている。これならPCでも使えるかもと今考えているところ。
137デフォルトの名無しさん
2019/03/03(日) 06:33:00.88ID:ChZC+e8W 組み込み用途だとC++よりCの方が融通効くと思うんだが
最近の組み込みはひょっとして随分恵まれてるのか
最近の組み込みはひょっとして随分恵まれてるのか
138デフォルトの名無しさん
2019/03/03(日) 07:57:12.43ID:EUJr/Yte ふと思ったんですが、Java でデコレーターを記述するのに
BufferedReader br = new BufferedReader(new InpustStreamReader(System.in));
などと、new したオブジェクトのポインタを取っておかず、new したまま放置してしまう書き方がありますが、
スコープ内で new したオブジェクトは、スコープを外れるときに C++翻訳系が自分で delete する、と決め打ちしてしまうと、互換性で問題がでるでしょうか?
BufferedReader br = new BufferedReader(new InpustStreamReader(System.in));
などと、new したオブジェクトのポインタを取っておかず、new したまま放置してしまう書き方がありますが、
スコープ内で new したオブジェクトは、スコープを外れるときに C++翻訳系が自分で delete する、と決め打ちしてしまうと、互換性で問題がでるでしょうか?
140デフォルトの名無しさん
2019/03/03(日) 10:18:54.68ID:0vjeZZiI そのポインタを別の場所にコピーしてたらどうなる?
頭悪すぎだろ
頭悪すぎだろ
>>140
では、あからさまに new したポインタを捨ててしまっている記述に限り自動で delete する、というのはどうですか?
目的は…classpath を共用したいのです、classpath はあらたに c++ で書くとして
では、あからさまに new したポインタを捨ててしまっている記述に限り自動で delete する、というのはどうですか?
目的は…classpath を共用したいのです、classpath はあらたに c++ で書くとして
142デフォルトの名無しさん
2019/03/03(日) 10:26:03.14ID:0vjeZZiI143デフォルトの名無しさん
2019/03/03(日) 10:31:40.12ID:8Bef4COm よくわかんねえけど楽してJavaを移植したいってこと?
Boehm GCでも使ってみたらどうだ
Boehm GCでも使ってみたらどうだ
145デフォルトの名無しさん
2019/03/03(日) 10:35:19.96ID:oO/57lY2 make_uniqueがやりたいってことかね
>>142
内容を誤解していました、すみません
あらためて回答します
プログラマが new したポインタ値を変数に取っておく記述をした場合は、delete の責任はプログラマにあるものとし、処理系では何もしないものとします
内容を誤解していました、すみません
あらためて回答します
プログラマが new したポインタ値を変数に取っておく記述をした場合は、delete の責任はプログラマにあるものとし、処理系では何もしないものとします
148デフォルトの名無しさん
2019/03/03(日) 10:53:36.82ID:rOejoJLo149デフォルトの名無しさん
2019/03/03(日) 10:59:02.77ID:kd4WdA4I javaでnewしているからってc++でnewするなって
classpath共用が何を意味しているのかは分からんが
classpath共用が何を意味しているのかは分からんが
150デフォルトの名無しさん
2019/03/03(日) 11:02:05.72ID:AQaNwhGs ・繰り返し構文とgotoの全廃
151デフォルトの名無しさん
2019/03/03(日) 11:24:20.63ID:0vjeZZiI152デフォルトの名無しさん
2019/03/03(日) 11:44:43.82ID:lodoh91K >>151
んんー、それは c++ 的な扱い(delete はプログラマの責任)でいいかと、私の思考に何が抜けているのかな?もう少し考えて見ます
んんー、それは c++ 的な扱い(delete はプログラマの責任)でいいかと、私の思考に何が抜けているのかな?もう少し考えて見ます
154デフォルトの名無しさん
2019/03/03(日) 12:18:50.69ID:kd4WdA4I >>139
規格ではdeleteしないものをdeleteしたら互換性に問題が出る。
自動でdeleteしたかったらスマートポインタ使うべき
独自c++擬き想定しているならc++17使うのも当然okのはず
生のnew使わせるなんて今時のc++ではとんでもない悪手
規格ではdeleteしないものをdeleteしたら互換性に問題が出る。
自動でdeleteしたかったらスマートポインタ使うべき
独自c++擬き想定しているならc++17使うのも当然okのはず
生のnew使わせるなんて今時のc++ではとんでもない悪手
155デフォルトの名無しさん
2019/03/03(日) 13:13:27.54ID:5kJ1RFDr VS2017は十分な出来なんだがテンプレートの展開中に内部エラーで転けることがあってそこだけは不満
156デフォルトの名無しさん
2019/03/03(日) 15:47:18.29ID:5EsDLzeQ shared_ptr でJavaやC#のガーベージ・コレクションとほぼ同じ役目が期待できるから別にいいのでは。
C++は、shared_ptrが正式採用されたC++11で別の言語になった印象すらあるわ。
C++は、shared_ptrが正式採用されたC++11で別の言語になった印象すらあるわ。
157デフォルトの名無しさん
2019/03/03(日) 15:57:24.31ID:8Bef4COm 循環参照が検出できないからJavaプログラムの参照をそのまま置き換えればオッケーというわけでもない
もちろんナマポよりは遥かにマシだけど
もちろんナマポよりは遥かにマシだけど
158デフォルトの名無しさん
2019/03/03(日) 15:59:19.15ID:rOejoJLo >>155
面倒だとは思うけど、時間あるなら再現するコードと共にバグ報告送ってやってくれ
面倒だとは思うけど、時間あるなら再現するコードと共にバグ報告送ってやってくれ
159デフォルトの名無しさん
2019/03/03(日) 16:11:53.27ID:E4UxtVYi unique_ptr<hoge> up0(new hoge());
や
shared_ptr<hoge> sp0(new hoge());
と書いたときと
unique_ptr<hoge> up1 = new hoge();
や
shared_ptr<hoge> sp1 = new hoge();
と書いた時で
違いは生じますか?
生じるとしたらどんな違いですか?
や
shared_ptr<hoge> sp0(new hoge());
と書いたときと
unique_ptr<hoge> up1 = new hoge();
や
shared_ptr<hoge> sp1 = new hoge();
と書いた時で
違いは生じますか?
生じるとしたらどんな違いですか?
160デフォルトの名無しさん
2019/03/03(日) 16:19:53.78ID:D2G4oQ9F 副業解禁で激変する若者世代とマネージャー世代のキャリア観
https://www.businessinsider.jp/post-107782
フリーランスの職種20個の仕事内容と平均年収をわかりやすく解説
https://www.proof0309.com/entry/shokushu
時給1万円のバイトも。会社員向きのプチ副業を、“バイト芸人”が教える
https://headlines.yahoo.co.jp/article?a=20190226-00127948-bizspa-bus_all
副業が「会社にバレる人」と「バレない人」の大差
https://headlines.yahoo.co.jp/article?a=20190303-00268007-toyo-bus_all
正社員の10%以上が副業 中には過重労働で体調崩す人も
https://headlines.yahoo.co.jp/hl?a=20190227-00010000-wordleaf-bus_all
「副業で年2000万円稼ぐ男」に学ぶキャリア戦略
https://headlines.yahoo.co.jp/article?a=20190221-00266856-toyo-bus_all
加速する「副業社会」正社員の4割が「副業したい」 気になる収入はどれくらい?
https://headlines.yahoo.co.jp/hl?a=20190218-00010001-danro-life
おすすめ副業22選を現役フリーランスが解説【在宅も可能】
https://www.proof0309.com/entry/zaitaku-hukugyou
会社を辞めてフリーランスで働きたいあなたが知っておくべき10のこと
https://www.businessinsider.jp/post-165731
フリーランスと会社員、働き方の根本的な差 広がる「雇用されない働き方」の課題とは何か
https://toyokeizai.net/articles/-/263055
フリーランス人口は増える!今後は仕事もプロジェクト単位になる!?
https://freelance.mts-career.com/population/
https://www.businessinsider.jp/post-107782
フリーランスの職種20個の仕事内容と平均年収をわかりやすく解説
https://www.proof0309.com/entry/shokushu
時給1万円のバイトも。会社員向きのプチ副業を、“バイト芸人”が教える
https://headlines.yahoo.co.jp/article?a=20190226-00127948-bizspa-bus_all
副業が「会社にバレる人」と「バレない人」の大差
https://headlines.yahoo.co.jp/article?a=20190303-00268007-toyo-bus_all
正社員の10%以上が副業 中には過重労働で体調崩す人も
https://headlines.yahoo.co.jp/hl?a=20190227-00010000-wordleaf-bus_all
「副業で年2000万円稼ぐ男」に学ぶキャリア戦略
https://headlines.yahoo.co.jp/article?a=20190221-00266856-toyo-bus_all
加速する「副業社会」正社員の4割が「副業したい」 気になる収入はどれくらい?
https://headlines.yahoo.co.jp/hl?a=20190218-00010001-danro-life
おすすめ副業22選を現役フリーランスが解説【在宅も可能】
https://www.proof0309.com/entry/zaitaku-hukugyou
会社を辞めてフリーランスで働きたいあなたが知っておくべき10のこと
https://www.businessinsider.jp/post-165731
フリーランスと会社員、働き方の根本的な差 広がる「雇用されない働き方」の課題とは何か
https://toyokeizai.net/articles/-/263055
フリーランス人口は増える!今後は仕事もプロジェクト単位になる!?
https://freelance.mts-career.com/population/
161デフォルトの名無しさん
2019/03/03(日) 17:35:34.30ID:8Bef4COm162デフォルトの名無しさん
2019/03/03(日) 17:53:40.63ID:E4UxtVYi make_shared使った方が良い?
163デフォルトの名無しさん
2019/03/03(日) 19:22:53.95ID:8Bef4COm うん
164デフォルトの名無しさん
2019/03/04(月) 04:26:14.48ID:FZO2lxM7 new 呼び出しが少なければ少ないほど精神衛生に良い。
165デフォルトの名無しさん
2019/03/04(月) 06:09:53.20ID:eTdHd+Gg 複数の関数の戻り値を足し合わせる処理で、それぞれの関数の戻り値をチェックしたい場合のすっきりする方法は何かありますか?
std::string result;
result += func1(a);
result += func2(b);
result += func3(c);
の各func1,2,3の戻り値をresultに足す前に空でないかを確認したいのです (1つでも空があった場合はresultも空にしたい)
単純に一時変数を用意して一つずつ判定するしかありませんか?
std::string result;
result += func1(a);
result += func2(b);
result += func3(c);
の各func1,2,3の戻り値をresultに足す前に空でないかを確認したいのです (1つでも空があった場合はresultも空にしたい)
単純に一時変数を用意して一つずつ判定するしかありませんか?
166デフォルトの名無しさん
2019/03/04(月) 06:27:48.33ID:iluilBaY typename Iterator::container_type::value_type
こんな風に::で三個つなげるのは合法ですかね??
こんな風に::で三個つなげるのは合法ですかね??
167デフォルトの名無しさん
2019/03/04(月) 06:31:54.66ID:nFXsjzZK エイリアス使えば
168デフォルトの名無しさん
2019/03/04(月) 06:33:10.80ID:7Cz1/mIW funcN() を追加する直前の result.size() を記憶しておいて、
足した後に長さが増えてなかったら、今呼んだ funcN() の結果は空だった、
と判定することはできるか。
string から整数になるだけで、一時変数を使うのは変わらない上に、
処理内容が分かりやすくなるわけでもないけど。
足した後に長さが増えてなかったら、今呼んだ funcN() の結果は空だった、
と判定することはできるか。
string から整数になるだけで、一時変数を使うのは変わらない上に、
処理内容が分かりやすくなるわけでもないけど。
169デフォルトの名無しさん
2019/03/04(月) 07:56:06.21ID:EZgqhZII >>165
例外
例外
170デフォルトの名無しさん
2019/03/04(月) 08:09:41.73ID:t1tsHTRA >>166
合法
合法
171デフォルトの名無しさん
2019/03/04(月) 15:31:21.38ID:V3vkr0fP unique_ptr<int> u(new int[2]{4, 5}); // OK (A) -> int * が作られる u.get()[n] でアクセス可能 *u だめ
unique_ptr<int> u = make_unique<int>(6); // OK -> int * が作られる *u でアクセス可能 u[0] だめ
unique_ptr<int[]> u = make_unique<int[]>(2); // OK (B) -> int [] が作られる u[n] でアクセス可能 *u だめ *u.get() 可能
unique_ptr<int *> u = make_unique<int>(2); // コンパイルエラー (C)
unique_ptr<int *> u = make_unique<int *>(2); // コンパイルエラー (D)
unique_ptr<int *> u(new int *); // ok -> int ** が作られる *u = &hoge あれば **u でアクセス可能
(C)(D)がエラーになる理由と
(B)を(A)の様に同時に初期化したいとき
どう書けば良いか知りたいです
unique_ptr<int> u = make_unique<int>(6); // OK -> int * が作られる *u でアクセス可能 u[0] だめ
unique_ptr<int[]> u = make_unique<int[]>(2); // OK (B) -> int [] が作られる u[n] でアクセス可能 *u だめ *u.get() 可能
unique_ptr<int *> u = make_unique<int>(2); // コンパイルエラー (C)
unique_ptr<int *> u = make_unique<int *>(2); // コンパイルエラー (D)
unique_ptr<int *> u(new int *); // ok -> int ** が作られる *u = &hoge あれば **u でアクセス可能
(C)(D)がエラーになる理由と
(B)を(A)の様に同時に初期化したいとき
どう書けば良いか知りたいです
172デフォルトの名無しさん
2019/03/04(月) 17:39:35.24ID:rgTuscQv C 型が違う
D int*が2から作れない
D int*が2から作れない
173デフォルトの名無しさん
2019/03/04(月) 19:03:47.51ID:iluilBaY >>170
どうもありがとう。
どうもありがとう。
174165
2019/03/04(月) 22:26:16.82ID:eTdHd+Gg175デフォルトの名無しさん
2019/03/04(月) 23:05:47.73ID:IrD+1pkV void f()
{
static std::mutex mtx;
std::lock_guard<std::mutex> lock(mtx);
//何がしかの処理
}
これっていいの?
{
static std::mutex mtx;
std::lock_guard<std::mutex> lock(mtx);
//何がしかの処理
}
これっていいの?
176デフォルトの名無しさん
2019/03/04(月) 23:25:00.41ID:tJNb7RRD C++11以降はセーフ、じゃなかったかな。
177デフォルトの名無しさん
2019/03/05(火) 00:17:46.56ID:w8adCz4V セーフなわけがあるか!!1111!11!!!!1!
178デフォルトの名無しさん
2019/03/05(火) 00:55:28.26ID:Lvsoqpfj C++11だろうがなかろうが関係なくセーフだよ。
179KAC
2019/03/05(火) 01:01:35.52ID:zhV7s4kG 人によってセーフの定義が違ってたりしない?
180デフォルトの名無しさん
2019/03/05(火) 01:03:06.00ID:w8adCz4V C++11以降はセーフになったらしい(キリ
ttps://cpprefjp.github.io/lang/cpp11/static_initialization_thread_safely.html
ttps://cpprefjp.github.io/lang/cpp11/static_initialization_thread_safely.html
181デフォルトの名無しさん
2019/03/05(火) 01:04:55.09ID:w8adCz4V Double Checked Lockingはジャヴァのメモリモデルがうまく対応できてなくて騒ぎになったことがある技法
182デフォルトの名無しさん
2019/03/05(火) 01:11:12.97ID:w8adCz4V もし関数内static変数の初期化をDouble Checked Lockingを使わずにスレッドセーフにしようとしたら、
関数に入る度に毎回馬鹿正直にクリティカルセクションに入るために1000クロックぐらい捨てることになってしまうま
スピンロックか何かの黒魔術で若干緩和する実装も有り得るかもしれんが基本は
ジャヴァではなくてC++の処理系がdouble checked lockingする分には
処理系がサポートするネイティブなアーキテクチャのみ考えれば良いから
問題が生じることは無いはずでとりあえずはめでたいと思うが、
関数に入る度に毎回馬鹿正直にクリティカルセクションに入るために1000クロックぐらい捨てることになってしまうま
スピンロックか何かの黒魔術で若干緩和する実装も有り得るかもしれんが基本は
ジャヴァではなくてC++の処理系がdouble checked lockingする分には
処理系がサポートするネイティブなアーキテクチャのみ考えれば良いから
問題が生じることは無いはずでとりあえずはめでたいと思うが、
183デフォルトの名無しさん
2019/03/05(火) 01:34:00.08ID:Lvsoqpfj グローバルなスタティック変数のように実行前に初期化する仕様にいまさら変えられない事情でもあったか。
184デフォルトの名無しさん
2019/03/05(火) 01:38:41.08ID:w8adCz4V リンカにシンボルを渡す手段がイマイチ決め手に欠くキモス
185デフォルトの名無しさん
2019/03/05(火) 01:40:59.82ID:w8adCz4V あと複数の翻訳単位間ではグローバル変数の初期化順序は保証されない(保証しようが無い)から
そういう混乱を避けるために関数内staticは関数に入ったとき初期化されてホスイ
個人的には使わないから知らんが
そういう混乱を避けるために関数内staticは関数に入ったとき初期化されてホスイ
個人的には使わないから知らんが
186デフォルトの名無しさん
2019/03/05(火) 02:16:13.00ID:VDry4yCP >>171
unique_ptr<int[]> u(new int[2]{6, 7});
unique_ptr<int[]> u(new int[2]{6, 7});
187デフォルトの名無しさん
2019/03/05(火) 02:54:35.71ID:YOwkwz81 std::dynarray ってどこ行ったん?
http://ezoeryou.github.io/boost-benkyokai-sapporo
http://ezoeryou.github.io/boost-benkyokai-sapporo
188デフォルトの名無しさん
2019/03/05(火) 03:25:14.57ID:VDry4yCP なんだろう
この違和感
この違和感
189デフォルトの名無しさん
2019/03/05(火) 04:45:14.68ID:mm49B1QN ライブラリを作るときは、hpp にはクラスの定義を、cpp には実装を書く、と理解しています。
クラスのメンバでない関数はどう扱うべきでしょうか。
hpp にプロトタイプ宣言を、cpp に中身を書く、というので合っていますか。
クラスのメンバでない関数はどう扱うべきでしょうか。
hpp にプロトタイプ宣言を、cpp に中身を書く、というので合っていますか。
190デフォルトの名無しさん
2019/03/05(火) 04:47:10.42ID:VDry4yCP inlineは?
191デフォルトの名無しさん
2019/03/05(火) 04:50:23.83ID:xaYVlIsQ なぜヘッダはクラス限定だとおもったんだ?
それ以前にクラス以外では使用したことがないのか?
それ以前にクラス以外では使用したことがないのか?
192デフォルトの名無しさん
2019/03/05(火) 05:01:47.80ID:OG2z9OX5 宣言(Declaration)と定義(Definition)は用語なんで覚えといた方がいいよ
193デフォルトの名無しさん
2019/03/05(火) 05:18:53.19ID:3HlR5qin ヘッダに書くのはクラスだから関数だからとかじゃなくて、複数の翻訳単位(≒cpp)で共通で使うかどうかで決まる
1つのcppの中でしか使わず外に見せないクラスや関数はcppの中でいいよ
1つのcppの中でしか使わず外に見せないクラスや関数はcppの中でいいよ
194デフォルトの名無しさん
2019/03/05(火) 05:48:49.52ID:mm49B1QN195デフォルトの名無しさん
2019/03/05(火) 05:55:22.28ID:3HlR5qin ライブラリなんだろ?
自分はcpp1つでも、他の人のcppで使わせるためのクラスや関数があるはずだ
それをヘッダに書け
自分はcpp1つでも、他の人のcppで使わせるためのクラスや関数があるはずだ
それをヘッダに書け
196デフォルトの名無しさん
2019/03/05(火) 05:59:24.21ID:mm49B1QN >>195
その際、「プロトタイプ宣言はヘッダで、中身は cpp ファイルに」というルールかマナーか慣習はありますか
その際、「プロトタイプ宣言はヘッダで、中身は cpp ファイルに」というルールかマナーか慣習はありますか
197デフォルトの名無しさん
2019/03/05(火) 06:13:55.29ID:Lvsoqpfj >>196
特にないから適当に他人のマネしとけばいいと思う。
特にないから適当に他人のマネしとけばいいと思う。
198デフォルトの名無しさん
2019/03/05(火) 11:45:31.15ID:HwCl8Q1J199はちみつ餃子 ◆8X2XSCHEME
2019/03/05(火) 12:27:38.14ID:mHzXPPXa 内部リンケージにするには static を付けるよりも
無名の namespace に入れる方が良いやり方
みたいな雰囲気があるんだけど、
インデントが深くなるのがなんか嫌なんだよね。
インデントは文法に影響しないわけだから、
付けないという選択肢もとれるけど、
それはそれでなんだかなぁって感じだし、
結局は static を付けちゃうんよ。
無名 (unnamed) namespace って使う?
無名の namespace に入れる方が良いやり方
みたいな雰囲気があるんだけど、
インデントが深くなるのがなんか嫌なんだよね。
インデントは文法に影響しないわけだから、
付けないという選択肢もとれるけど、
それはそれでなんだかなぁって感じだし、
結局は static を付けちゃうんよ。
無名 (unnamed) namespace って使う?
200デフォルトの名無しさん
2019/03/05(火) 12:35:48.55ID:zIeyIuEy 関数よりファンクタの方が速いという情報を見たのですが、メンバ関数を入れ子クラスでメンバファンクタ化すると高速化が期待できますか?
201デフォルトの名無しさん
2019/03/05(火) 12:41:35.39ID:xaYVlIsQ コンパイラ次第だろ
実験
実験
202デフォルトの名無しさん
2019/03/05(火) 12:50:59.28ID:zIeyIuEy VC2017で試したのですがテスト用の関数が単純すぎるのかグローバルのインライン関数、クラスのメンバ関数、クラスのメンバファンクタで差異が見られませんでした・・・
203デフォルトの名無しさん
2019/03/05(火) 12:51:22.93ID:fI+Bf2nm どこに書いてもいいだろ
他人の書いたコードなんてどうせ誰も読まないし
読ませたいならドキュメントしっかりさせたほうがいい
他人の書いたコードなんてどうせ誰も読まないし
読ませたいならドキュメントしっかりさせたほうがいい
204デフォルトの名無しさん
2019/03/05(火) 15:12:40.70ID:pv9Sbimr205デフォルトの名無しさん
2019/03/05(火) 19:05:23.76ID:A2wr9SaM ストアドよりインデックスのほうが速いよってスレなかったっけ。
206デフォルトの名無しさん
2019/03/05(火) 20:02:38.14ID:zIeyIuEy207デフォルトの名無しさん
2019/03/05(火) 21:56:22.01ID:+aoESyYJ >>199
使う理由としてはメンバ関数を内部リンケージにしたらリンク速くなるかもという期待だけだな
実際速くなるか調べたことないけど
明示的にstaticとある方が読みやすいし、無名はデバッガで見たときクソ見辛くなるし
c++はこういうダメ仕様多過ぎてうんざりだわ
使う理由としてはメンバ関数を内部リンケージにしたらリンク速くなるかもという期待だけだな
実際速くなるか調べたことないけど
明示的にstaticとある方が読みやすいし、無名はデバッガで見たときクソ見辛くなるし
c++はこういうダメ仕様多過ぎてうんざりだわ
208デフォルトの名無しさん
2019/03/05(火) 22:06:02.21ID:fIhIM0AX 腐ったビルド戦略のせいで無駄なオブジェクトコードの重複を生じるのはゼロオーバーヘッド原則に反しないのか?は疑問だな
極一部のマニアしか使わない機能付けてオナニーしてる暇があったら、いいかげん時代錯誤なビルド処理の抜本的な見直しをやってほしい
極一部のマニアしか使わない機能付けてオナニーしてる暇があったら、いいかげん時代錯誤なビルド処理の抜本的な見直しをやってほしい
209デフォルトの名無しさん
2019/03/05(火) 22:21:06.27ID:R3KidTI1 メンバ関数の数はクラスのオブジェクト生成コストにどれくらい影響しますか?
210デフォルトの名無しさん
2019/03/05(火) 22:30:58.04ID:+aoESyYJ >>209
まず自分で計測しろ
まず自分で計測しろ
211デフォルトの名無しさん
2019/03/05(火) 23:07:56.79ID:rlRU3gS5212デフォルトの名無しさん
2019/03/05(火) 23:19:26.52ID:R3KidTI1 ありがとうございます
というのもメンバ変数がなく多数の関数をまとめただけのクラスがあるのですが、次のどれがいいのか悩んでいまして
(1) 全部static関数にする
(2) クラスをnamespaceにして全部グローバル関数にする
(3) 呼び出す場所で逐次インスタンスを作成する
(4) 呼び出し側クラスでこのクラスのポインタをメンバとして持ち、コンストラクタでインスタンスを受け取るまたは生成する
この場合のベストプラクティスはありますか?
というのもメンバ変数がなく多数の関数をまとめただけのクラスがあるのですが、次のどれがいいのか悩んでいまして
(1) 全部static関数にする
(2) クラスをnamespaceにして全部グローバル関数にする
(3) 呼び出す場所で逐次インスタンスを作成する
(4) 呼び出し側クラスでこのクラスのポインタをメンバとして持ち、コンストラクタでインスタンスを受け取るまたは生成する
この場合のベストプラクティスはありますか?
213デフォルトの名無しさん
2019/03/06(水) 00:13:14.35ID:twKwvQwO (1)か(2)を好みに応じて
214デフォルトの名無しさん
2019/03/06(水) 00:17:08.38ID:URVwFrjm 特に何もないなら2
templateと組み合わせるなら1とか3は多用するけど4は無いな
templateと組み合わせるなら1とか3は多用するけど4は無いな
215212
2019/03/06(水) 00:21:02.86ID:pU9AS85W ありがとうございます
(2)でやってみることにします
(2)でやってみることにします
216デフォルトの名無しさん
2019/03/06(水) 00:32:13.90ID:Uli2bEJM 1 は、どうして君はすべての関数を、static 関数にできると思ったの?
static関数と、関数のライブラリ・モジュール化は関係ない
3, 4 は、どうして君は、関数を使うのにインスタンスが必要なの?
インスタンスの関数は、他の言語ではメソッドと言って、
そのインスタンスのメンバ変数を使うものに対して、特別な名称を付けている。
つまり、各インスタンスで値が異なるもの
メソッドは、一般的な関数とは異なる。
メソッドや一般的な関数と、関数のモジュール化は関係ない
例えば、Ruby では、
Math.log2( 8 ) #=> 3.0
このようにインスタンスを作らなくても、呼べる関数をモジュール関数と言って、
各インスタンスから呼ぶ関数を、メソッドと言って区別している
static関数と、関数のライブラリ・モジュール化は関係ない
3, 4 は、どうして君は、関数を使うのにインスタンスが必要なの?
インスタンスの関数は、他の言語ではメソッドと言って、
そのインスタンスのメンバ変数を使うものに対して、特別な名称を付けている。
つまり、各インスタンスで値が異なるもの
メソッドは、一般的な関数とは異なる。
メソッドや一般的な関数と、関数のモジュール化は関係ない
例えば、Ruby では、
Math.log2( 8 ) #=> 3.0
このようにインスタンスを作らなくても、呼べる関数をモジュール関数と言って、
各インスタンスから呼ぶ関数を、メソッドと言って区別している
217212
2019/03/06(水) 00:42:25.73ID:pU9AS85W そう言われるとそうですね
オブジェクト指向ではmain関数以外全部クラス/構造体で作成するものだという先入観がありました
オブジェクト指向ではmain関数以外全部クラス/構造体で作成するものだという先入観がありました
218デフォルトの名無しさん
2019/03/06(水) 01:06:06.33ID:Riy5qgFP >>214
無理矢理4にしたいケースを考えると、同じインターフェースを持つ関数群A,Bを場合によって切り替えて使いたい場合に敢えてインスタンスのポインタとすることもあるかな。今回の質問者の場合には当てはまらないだろうけど。
無理矢理4にしたいケースを考えると、同じインターフェースを持つ関数群A,Bを場合によって切り替えて使いたい場合に敢えてインスタンスのポインタとすることもあるかな。今回の質問者の場合には当てはまらないだろうけど。
219デフォルトの名無しさん
2019/03/06(水) 01:10:14.42ID:MDLmYlCa >>193
>1つのcppの中でしか使わず外に見せないクラスや関数はcppの中でいいよ
名前無しでも何でも良いが、その場合はクラスはnamespaceの中に入れないと危険が危なすぐる…
同じ名前空間に属する同じシグネチャのFoo::func()が異なる関数として複数のcppで定義された場合、
どっちが呼ばれるか定まらない処理系が実在する(VC++2010とか
多分ODR違反で未定義動作なんだと思う
>1つのcppの中でしか使わず外に見せないクラスや関数はcppの中でいいよ
名前無しでも何でも良いが、その場合はクラスはnamespaceの中に入れないと危険が危なすぐる…
同じ名前空間に属する同じシグネチャのFoo::func()が異なる関数として複数のcppで定義された場合、
どっちが呼ばれるか定まらない処理系が実在する(VC++2010とか
多分ODR違反で未定義動作なんだと思う
220デフォルトの名無しさん
2019/03/06(水) 01:13:13.20ID:paKD8ls/ 曖昧さは、利点にも欠点にもなりうる。
namespaceのグローバル関数ではなくクラスのスタティック関数にすることで曖昧さがなくなりコンパイルエラーを避けられる場合がある。
namespaceのグローバル関数ではなくクラスのスタティック関数にすることで曖昧さがなくなりコンパイルエラーを避けられる場合がある。
221デフォルトの名無しさん
2019/03/06(水) 01:14:08.29ID:MDLmYlCa >>219訂正
CPPでクラスを定義する場合は無名namespaceに入れないと危険が危なすぐる、
無名namespaceは異なる翻訳単位間では別名として扱われるから安全
一方、名前付きnamespaceでは異なるCPPで偶然
同じ名前空間に属する同じシグネチャのFoo::func()が作られてしまう危険性を排除できない
CPPでクラスを定義する場合は無名namespaceに入れないと危険が危なすぐる、
無名namespaceは異なる翻訳単位間では別名として扱われるから安全
一方、名前付きnamespaceでは異なるCPPで偶然
同じ名前空間に属する同じシグネチャのFoo::func()が作られてしまう危険性を排除できない
222デフォルトの名無しさん
2019/03/06(水) 01:21:31.24ID:MDLmYlCa224216
2019/03/06(水) 02:00:53.56ID:Uli2bEJM Ruby では、関数名のバッティングを避けるため、2重に囲む。
module 内にclass か、class内にclassを作る
module Net
class HTTP end
class FTP end
end
# インスタンス
Net::HTTP.new
Net::FTP.new
module 内にclass か、class内にclassを作る
module Net
class HTTP end
class FTP end
end
# インスタンス
Net::HTTP.new
Net::FTP.new
225デフォルトの名無しさん
2019/03/06(水) 02:06:24.72ID:Riy5qgFP >>224
rubyボットはお呼びでないからもう巣に帰ってくれ
rubyボットはお呼びでないからもう巣に帰ってくれ
226216
2019/03/06(水) 02:12:57.91ID:Uli2bEJM static みたいな複雑な概念を、初心者が理解するのは難しい
スコープを限定する意味と、生成・破壊のタイミングの違いと、
2つの異なる概念を使うから、難しい
C++ は、すべてのリソースの生成・破壊のタイミングを追っかけるだけでも、大変
ドワンゴ江添の本「C++11/14 コア言語」にも書いてあるけど、
呼ばれる関数を探索する方法に、Andrew Koenig が提案した、実引数依存の名前探索 (ADL)もある
実引数依存の名前探索とは、C++において関数呼出時に与えられた引数の型に依存して、
呼び出す関数を探索 (lookup)する仕組みのことである。
英語ではKoenig lookup、argument dependent lookup (ADL)、argument dependent name lookupなどと呼ばれる
スコープを限定する意味と、生成・破壊のタイミングの違いと、
2つの異なる概念を使うから、難しい
C++ は、すべてのリソースの生成・破壊のタイミングを追っかけるだけでも、大変
ドワンゴ江添の本「C++11/14 コア言語」にも書いてあるけど、
呼ばれる関数を探索する方法に、Andrew Koenig が提案した、実引数依存の名前探索 (ADL)もある
実引数依存の名前探索とは、C++において関数呼出時に与えられた引数の型に依存して、
呼び出す関数を探索 (lookup)する仕組みのことである。
英語ではKoenig lookup、argument dependent lookup (ADL)、argument dependent name lookupなどと呼ばれる
227デフォルトの名無しさん
2019/03/06(水) 02:46:55.34ID:Riy5qgFP228デフォルトの名無しさん
2019/03/06(水) 04:34:02.55ID:3uIPjLtJ >>227
#激同
#激同
229デフォルトの名無しさん
2019/03/06(水) 06:59:23.47ID:3Q0pfzsC 質問(ネタ振り)に対して見当違いな返答は混乱の元ってのはその通りとして。
読者の立場では、話題が広がってくのは嫌いじゃない。
投稿者の意見として消化しきれてなくても、
参考資料として「誰それの書いたナントカって本では…」と
紹介してくれるのも有難いし。
その上で「あの著者/本は間違いが多い、例えば…」とか、
「記述が古い、新しい規格でもっと便利な機能が追加された」みたいな
追加情報(具体的なもの)が出てくればなお嬉しい。
読者の立場では、話題が広がってくのは嫌いじゃない。
投稿者の意見として消化しきれてなくても、
参考資料として「誰それの書いたナントカって本では…」と
紹介してくれるのも有難いし。
その上で「あの著者/本は間違いが多い、例えば…」とか、
「記述が古い、新しい規格でもっと便利な機能が追加された」みたいな
追加情報(具体的なもの)が出てくればなお嬉しい。
230デフォルトの名無しさん
2019/03/06(水) 09:56:40.41ID:mg6kC0Yg >>205
SQLの話ですか(苦笑)
SQLの話ですか(苦笑)
231デフォルトの名無しさん
2019/03/06(水) 18:18:48.94ID:paKD8ls/ 名前なし名前空間を名前あり名前空間の中に作ることができる。便利ちゃあ便利。
namespace hoge {
namespace {
int foobar = 1;
};
};
namespace hoge {
namespace {
int foobar = 1;
};
};
232デフォルトの名無しさん
2019/03/06(水) 21:53:00.33ID:paKD8ls/ 64bit環境で文字列ストリームクラスstd::ostringstreamのインスタンスのスタックサイズが、
gccで376バイト, VS2017で232バイトもあるんだがもっと小さくできるんじゃないの?
ちなみに、std::string はgccとVS2017どちらも32バイト。
どうよ?
gccで376バイト, VS2017で232バイトもあるんだがもっと小さくできるんじゃないの?
ちなみに、std::string はgccとVS2017どちらも32バイト。
どうよ?
233はちみつ餃子 ◆8X2XSCHEME
2019/03/06(水) 22:13:52.26ID:7/fqDaVy234デフォルトの名無しさん
2019/03/06(水) 22:36:11.10ID:cpQrrMgl 継承してるしデータとして保持しておくものでもないしな
235デフォルトの名無しさん
2019/03/06(水) 23:24:49.53ID:TjQtzcPT >>232
質問と関係ないけどスタックサイズって何かわかってないだろ
質問と関係ないけどスタックサイズって何かわかってないだろ
236デフォルトの名無しさん
2019/03/07(木) 01:12:44.42ID:FDOfvyow このあとスタックがおいしくいただきました
237デフォルトの名無しさん
2019/03/07(木) 01:36:59.97ID:7rstSYcJ ostream, ofstream, ostringstreamのスタックサイズはgccとVS2017でそれぞれ以下のようになる。
gcc: ostream=112, ofstream=264, ostringstream=232
VS2017: ostream=272, ofstream=512 ostringstream=376
どうよ?
gcc: ostream=112, ofstream=264, ostringstream=232
VS2017: ostream=272, ofstream=512 ostringstream=376
どうよ?
238237
2019/03/07(木) 01:39:26.14ID:7rstSYcJ 間違えた。gccとVS2017は逆です。
何が言いたいというと、組み込みで気軽に使えるC++を目指すならiostream周りを何とかしないとね、という話。
何が言いたいというと、組み込みで気軽に使えるC++を目指すならiostream周りを何とかしないとね、という話。
239デフォルトの名無しさん
2019/03/07(木) 01:41:48.62ID:1uoKMGSD 組み込みで気軽に使えるC++を目指してないしどこまで削れるかはベンダーの努力次第
240237
2019/03/07(木) 01:45:06.81ID:7rstSYcJ Cがコンパイル言語であるにもかかわらずprintf()系の構文解析でJITコンパイルする野暮ったさを解決すべく導入されたはずのiostreamがまったく活かされていないね。
241デフォルトの名無しさん
2019/03/07(木) 01:45:09.29ID:E2AqWV/D その程度のスタック消費でヒーヒー言うような組み込み案件でiostream使わんだろ
242237
2019/03/07(木) 01:49:48.32ID:7rstSYcJ >>241
スタック消費でヒーハー言う組み込み案件に進出するのもC++のひとつの課題なのでは有馬温泉
スタック消費でヒーハー言う組み込み案件に進出するのもC++のひとつの課題なのでは有馬温泉
243デフォルトの名無しさん
2019/03/07(木) 01:52:03.09ID:1uoKMGSD 組み込み界隈がC++を活用する目標があるのであってC++の目標ではない
244デフォルトの名無しさん
2019/03/07(木) 01:56:44.60ID:E2AqWV/D from_chars
to_chars使えって話だろ
それかfmt
to_chars使えって話だろ
それかfmt
245デフォルトの名無しさん
2019/03/07(木) 03:10:47.55ID:V0jGdMU/ class C : public std::function<int(int)>{};
というクラスを定義して、
int f(int i){ return i + 1; }
void main()
{
C c = f;
int i = c(1);
}
みたいな使い方って出来ないのでしょうか?
functional のヘッダを読んでみましたがさっぱりでした
というクラスを定義して、
int f(int i){ return i + 1; }
void main()
{
C c = f;
int i = c(1);
}
みたいな使い方って出来ないのでしょうか?
functional のヘッダを読んでみましたがさっぱりでした
246はちみつ餃子 ◆8X2XSCHEME
2019/03/07(木) 03:21:15.84ID:fFrTWbSf >>245
やりたいのはこういうこと?
class C : public std::function<int(int)>{
using std::function<int(int)>::function;
};
やりたいのはこういうこと?
class C : public std::function<int(int)>{
using std::function<int(int)>::function;
};
247はちみつ餃子 ◆8X2XSCHEME
2019/03/07(木) 03:25:38.52ID:fFrTWbSf めっちゃ雑にやったけど、
実際にはスライシングに気を付けてな。
実際にはスライシングに気を付けてな。
248デフォルトの名無しさん
2019/03/07(木) 03:42:38.23ID:V0jGdMU/ >>246
すいません、
知識不足でそのusingが何を意味しているのか分かりませんが、
std::function<int(int)> と、
class C : public std::function<int(int)>{} を、
外側から同じように使いたいという感じです。
現在は、
class C { std::function<int(int)> F; };
みたいになっており、
C c;
c.F = f;
int i = c.F(1);
と、こんな風に使われています。
std::function<int(int)> を継承させてしまい、.Fを消したい感じです。
すいません、
知識不足でそのusingが何を意味しているのか分かりませんが、
std::function<int(int)> と、
class C : public std::function<int(int)>{} を、
外側から同じように使いたいという感じです。
現在は、
class C { std::function<int(int)> F; };
みたいになっており、
C c;
c.F = f;
int i = c.F(1);
と、こんな風に使われています。
std::function<int(int)> を継承させてしまい、.Fを消したい感じです。
249はちみつ餃子 ◆8X2XSCHEME
2019/03/07(木) 04:00:06.05ID:fFrTWbSf >>248
単純に
class C : public std::function<int(int)>{}
とした場合、当然だけどクラス C にデフォルトで定義されるコンストラクタは
C::C(void); と C::C(const C&); だから、型が int (*)(int) であるような値を受け取る余地はない。
using std::function<int(int)>::function;
を入れると基底クラス std::function<int(int)> のコンストラクタである
std::function<int(int)>::function; をあたかも C のコンストラクタみたいにできる。
そんだけ。
public 継承してれば std::function<int(int)> の他のメンバはそのまま C のメンバとして
見えるからおおよそ期待する挙動になると思う。
単純に
class C : public std::function<int(int)>{}
とした場合、当然だけどクラス C にデフォルトで定義されるコンストラクタは
C::C(void); と C::C(const C&); だから、型が int (*)(int) であるような値を受け取る余地はない。
using std::function<int(int)>::function;
を入れると基底クラス std::function<int(int)> のコンストラクタである
std::function<int(int)>::function; をあたかも C のコンストラクタみたいにできる。
そんだけ。
public 継承してれば std::function<int(int)> の他のメンバはそのまま C のメンバとして
見えるからおおよそ期待する挙動になると思う。
250デフォルトの名無しさん
2019/03/07(木) 04:06:09.21ID:V0jGdMU/251デフォルトの名無しさん
2019/03/07(木) 08:20:27.58ID:Yz7Qf/Kl >>237
2ファイル同時に編集なんてしたらあっという間に食い潰しそうね
2ファイル同時に編集なんてしたらあっという間に食い潰しそうね
252デフォルトの名無しさん
2019/03/08(金) 01:15:31.98ID:jsJl1WSX テンプレートで何とかなりませんかね。
254237
2019/03/08(金) 06:55:44.25ID:orP5LHkV >>244 が提示してくれた from_chars, to_chars をgccに導入するにはどうしたらいい?
WSLのubuntuを使ってるんだけど規定でfrom_chars, to_charsの定義されたヘッダーファイルが入ってないっぽい。
WSLのubuntuを使ってるんだけど規定でfrom_chars, to_charsの定義されたヘッダーファイルが入ってないっぽい。
255デフォルトの名無しさん
2019/03/08(金) 08:26:54.11ID:ZyNdKvhR >>254
たしか8.0でまだ整数しか実装されてない
たしか8.0でまだ整数しか実装されてない
256デフォルトの名無しさん
2019/03/09(土) 11:07:13.09ID:jx9iLAiD C++テンプレートテクニック第三版っていつ出るんですかね?
257デフォルトの名無しさん
2019/03/10(日) 00:54:12.40ID:3tC9wBDx 待っていても何も始まらない!
君が書くんだよ!
君が書くんだよ!
258デフォルトの名無しさん
2019/03/10(日) 17:07:48.90ID:yzd/Af8M テンプレート引数がクラスでpush_back()メンバを持っているというようなことを検査することはできますかね?
259デフォルトの名無しさん
2019/03/10(日) 17:10:17.73ID:2Qm7LFrM std::is_classとdetection idiomで可能かと
260デフォルトの名無しさん
2019/03/10(日) 17:15:14.74ID:yzd/Af8M でてくしょんいでおむってどの本見ればわかりますかね?
261デフォルトの名無しさん
2019/03/10(日) 17:16:33.87ID:yzd/Af8M decltype使えばいいのかな。
262デフォルトの名無しさん
2019/03/10(日) 17:18:14.94ID:2Qm7LFrM 載ってる本あるのかなあ
どうやるのかだけなら、ここのサンプルコードを真似すればいいと思う
https://cpprefjp.github.io/reference/type_traits/void_t.html
どうやるのかだけなら、ここのサンプルコードを真似すればいいと思う
https://cpprefjp.github.io/reference/type_traits/void_t.html
263デフォルトの名無しさん
2019/03/10(日) 17:21:49.62ID:yzd/Af8M ありがとう。
ちょっと読んでみます。
ちょっと読んでみます。
264デフォルトの名無しさん
2019/03/10(日) 22:01:07.26ID:yzd/Af8M std::byteの使い方がよくわからない。
暗黙の何とかを避けるのに使うんだろか。
暗黙の何とかを避けるのに使うんだろか。
265デフォルトの名無しさん
2019/03/10(日) 22:11:27.82ID:2Qm7LFrM 単純にバイトを表現する型というのが必要となった
char8_tと同じようなもん
char8_tと同じようなもん
266デフォルトの名無しさん
2019/03/10(日) 22:30:00.78ID:yzd/Af8M ソケットやファイルの入出力に使うって事かな?
267デフォルトの名無しさん
2019/03/10(日) 22:49:36.48ID:8hqMg5Px 1バイトサイズの整数のつもりでcharを使ったらstreamで困ることがあったりしたしね。
268デフォルトの名無しさん
2019/03/10(日) 23:15:04.53ID:yzd/Af8M enum class byte : unsigned char { };
ってなってる。
ってなってる。
269デフォルトの名無しさん
2019/03/10(日) 23:21:10.96ID:6gF9+EwK そのベースの型は実装依存
型を取りだして使えってことなんだろうか
型を取りだして使えってことなんだろうか
270デフォルトの名無しさん
2019/03/10(日) 23:21:22.34ID:ketqiw2j なんでenum classなんだ?
typedefと何が違うの?
typedefと何が違うの?
271デフォルトの名無しさん
2019/03/10(日) 23:31:19.81ID:2Qm7LFrM 暗黙の型変換ができない
272デフォルトの名無しさん
2019/03/10(日) 23:54:49.98ID:vvRzWHgY こういうの行き過ぎた型安全に思えるけどね
273デフォルトの名無しさん
2019/03/10(日) 23:57:35.21ID:6gF9+EwK でも過去にそれで何かあったんでしょ
使うかどうかは任意だしある分には困らない
使うかどうかは任意だしある分には困らない
274デフォルトの名無しさん
2019/03/10(日) 23:57:38.91ID:ketqiw2j なるほど
275デフォルトの名無しさん
2019/03/11(月) 00:01:39.15ID:4nU22VRt is_enum_vがtrueになるとか違和感しかない
276デフォルトの名無しさん
2019/03/11(月) 05:30:01.20ID:pTTv+VC9277デフォルトの名無しさん
2019/03/11(月) 05:58:05.15ID:mFqdzmI2 既存のライブラリと衝突しまくるだろそれ
278デフォルトの名無しさん
2019/03/11(月) 11:02:11.57ID:9rO3q8tQ279デフォルトの名無しさん
2019/03/11(月) 13:49:05.84ID:kWR5MawD WPFってどうなの
280デフォルトの名無しさん
2019/03/11(月) 19:42:26.86ID:OenRxSRY 塵
281デフォルトの名無しさん
2019/03/11(月) 22:05:24.43ID:XA5PtgcF getoptの標準化マダーチンチン(AA略
282デフォルトの名無しさん
2019/03/12(火) 07:17:28.89ID:dEFL2K0T void foo(std::function<void()> &&f){}
int main(){
auto lamda = [](){};
foo(lamda);
}
なぜコンパイルできるの?
int main(){
auto lamda = [](){};
foo(lamda);
}
なぜコンパイルできるの?
283デフォルトの名無しさん
2019/03/12(火) 07:23:08.39ID:FSVt1tPQ >>281
オプションの渡し方がそもそも揺れてる
オプションの渡し方がそもそも揺れてる
284デフォルトの名無しさん
2019/03/12(火) 07:25:00.12ID:FSVt1tPQ285デフォルトの名無しさん
2019/03/12(火) 11:46:00.90ID:6Uu2j9Xc int main(std::function<void()> &&f){
return main([](){});
}
return main([](){});
}
286デフォルトの名無しさん
2019/03/12(火) 20:22:26.93ID:dEFL2K0T すいません、低レベルのかたたちばかりでした。
聞くところ間違えました
聞くところ間違えました
287デフォルトの名無しさん
2019/03/12(火) 20:30:56.16ID:Nd0ou12Q なぜc++ main return省略でググらないのか
288デフォルトの名無しさん
2019/03/12(火) 20:43:58.42ID:X3QnQcuN getoptを標準化してしまうとハイフンで始まる変態ファイル名が鬼門になってしまうかな。
289デフォルトの名無しさん
2019/03/12(火) 20:46:35.39ID:Zu3OGTTs is_iterator、is_containerメタ関数はどうやったら作れるんでしょうね?
290デフォルトの名無しさん
2019/03/12(火) 20:54:07.45ID:JuWddRAo SFINAEでググれ、でいいんだろうか
291デフォルトの名無しさん
2019/03/12(火) 20:55:53.60ID:Zu3OGTTs スフィ姉は知っているんですが。
そのあとが。
そのあとが。
292デフォルトの名無しさん
2019/03/12(火) 21:00:20.04ID:cgm/opRe iterator_traitsに通してメンバ型が得られるか確認する?
*とか++とかの操作について確認する?
containerはbeginとendでイテレータ取れるか確認する?
*とか++とかの操作について確認する?
containerはbeginとendでイテレータ取れるか確認する?
293デフォルトの名無しさん
2019/03/12(火) 21:34:26.86ID:Zu3OGTTs template <typename T>
using is_iterator = std::is_class<typename std::iterator_traits<T>::iterator_category>;
これは使えますかね?
using is_iterator = std::is_class<typename std::iterator_traits<T>::iterator_category>;
これは使えますかね?
294デフォルトの名無しさん
2019/03/12(火) 21:58:48.29ID:l3wdXFC4 ぐぐればstack overflowがひっかかる
295デフォルトの名無しさん
2019/03/12(火) 22:01:23.70ID:JuWddRAo 使えますかねって・・自分で試せるだろ
296デフォルトの名無しさん
2019/03/12(火) 22:12:53.32ID:6dDI1fa3 マウントしててワロス
297デフォルトの名無しさん
2019/03/12(火) 22:34:48.05ID:3laDxwEs マウントは取りたいけど教えるのはめんどくさい
298デフォルトの名無しさん
2019/03/12(火) 22:48:31.61ID:YKaKEG7g 結局はそれで何がしたいかによるんじゃね
標準のコンテナやそのイテレータで型分岐したいなら十分だけど、カスタム実装されたユーザー定義のイテレータがそのように実装されているかは分からんし
まあiterator_traitsの特殊化も追加で書くようにすれば使えるか
標準のコンテナやそのイテレータで型分岐したいなら十分だけど、カスタム実装されたユーザー定義のイテレータがそのように実装されているかは分からんし
まあiterator_traitsの特殊化も追加で書くようにすれば使えるか
299デフォルトの名無しさん
2019/03/12(火) 23:06:42.78ID:cgm/opRe C++20からは一応イテレータはコンセプトがあるなあ
コンテナは知らん
コンテナは知らん
300デフォルトの名無しさん
2019/03/12(火) 23:12:51.59ID:YKaKEG7g >>293
はダメな気がするな
template<typename T,typename=void>
struct is_iterator:std::false_type{};
template<typename T>
struct is_iterator<T,std::enable_if_v<std::is_class_v<typename std::iterator_traits<T>::iterator_category>>>:std::true_type{};
はダメな気がするな
template<typename T,typename=void>
struct is_iterator:std::false_type{};
template<typename T>
struct is_iterator<T,std::enable_if_v<std::is_class_v<typename std::iterator_traits<T>::iterator_category>>>:std::true_type{};
301デフォルトの名無しさん
2019/03/12(火) 23:14:38.07ID:JuWddRAo302デフォルトの名無しさん
2019/03/12(火) 23:27:20.69ID:Zu3OGTTs303デフォルトの名無しさん
2019/03/12(火) 23:39:14.10ID:YKaKEG7g 本は知らん
SFINAEが使えるのは宣言部分
そこで置換失敗すると宣言そのものが無かったことになる
SFINAEが使えるのは宣言部分
そこで置換失敗すると宣言そのものが無かったことになる
304デフォルトの名無しさん
2019/03/13(水) 12:04:15.67ID:lxBl+sTZ >>297
マウントが取りたいだけで教える知識がないだけやねんw
マウントが取りたいだけで教える知識がないだけやねんw
305デフォルトの名無しさん
2019/03/13(水) 12:37:00.35ID:mh4jyrHE そう
分からない質問には自分で試せ
これがC++使ってる奴の特徴
分からない質問には自分で試せ
これがC++使ってる奴の特徴
306デフォルトの名無しさん
2019/03/13(水) 12:47:27.60ID:QLyGxm6u307デフォルトの名無しさん
2019/03/13(水) 20:50:37.56ID:u/DrurAb 規約はあるけど「実装が規約」をやっちゃってる部分が多くて、
しかもコンパイラのバージョン依存がひどいってのがc++だからな。
規約は語れても実際にどう動作するか語れない輩も多いだろうね。
しかもコンパイラのバージョン依存がひどいってのがc++だからな。
規約は語れても実際にどう動作するか語れない輩も多いだろうね。
308デフォルトの名無しさん
2019/03/13(水) 21:07:13.50ID:QLyGxm6u そういう構図じゃないと思うよ
309デフォルトの名無しさん
2019/03/13(水) 21:25:53.81ID:Z/ka/TFK どなたか iostreamの存在価値について熱く語ってくれないか。
310デフォルトの名無しさん
2019/03/13(水) 21:34:23.99ID:VRJ3bLEu いやだ
311はちみつ餃子 ◆8X2XSCHEME
2019/03/13(水) 21:38:23.77ID:xQTh8hgU312デフォルトの名無しさん
2019/03/13(水) 21:55:23.80ID:780qHyAl VS2019って4月2日に出るのかな?
313デフォルトの名無しさん
2019/03/13(水) 22:19:08.88ID:DKlmxwmb 米国時間4/2にローンチイベント行ってるから日本だと3日かな
314デフォルトの名無しさん
2019/03/13(水) 22:44:27.53ID:mh4jyrHE >>306
だから分からないのにマウント取るのやめたら?
だから分からないのにマウント取るのやめたら?
315290=301
2019/03/13(水) 23:05:00.60ID:QLyGxm6u316デフォルトの名無しさん
2019/03/14(木) 18:41:51.50ID:qKfDR5xc >>313
待ちどおしいね。
待ちどおしいね。
317デフォルトの名無しさん
2019/03/14(木) 20:57:09.31ID:HZIDFMYl このスレの住人は、新しいVisual Studioでどんなことに期待してるの?
318デフォルトの名無しさん
2019/03/14(木) 20:58:50.91ID:30TndOaO >>317
マウントされないこと
マウントされないこと
319デフォルトの名無しさん
2019/03/14(木) 21:00:03.79ID:O0o087YX 仕様通りに動いてくれりゃそれでいいわ。
320デフォルトの名無しさん
2019/03/14(木) 21:20:35.00ID:nuZulfE1 C++20の早期対応
321デフォルトの名無しさん
2019/03/14(木) 21:25:28.09ID:xC4JJLNw clang対応
322デフォルトの名無しさん
2019/03/14(木) 21:29:12.31ID:vJRyyCPl C#での使い勝手向上
323デフォルトの名無しさん
2019/03/14(木) 21:36:15.68ID:r+Z4K3kn フロントエンドをVSCodeにしてくれ
324デフォルトの名無しさん
2019/03/14(木) 21:45:44.62ID:rlbQlqp5 メモリ喰わずに軽くなって…
325デフォルトの名無しさん
2019/03/14(木) 22:54:08.60ID:qKfDR5xc 何個まで願い事聞いてくれるんだろ。
326デフォルトの名無しさん
2019/03/14(木) 23:13:56.40ID:3EvgP48J >>317
Expressを出してくれ
Expressを出してくれ
>>317
MFC…
MFC…
328デフォルトの名無しさん
2019/03/15(金) 06:01:20.22ID:qA/WFgyI Windows formsのC++へ移植してmfcを完全に抹消してくれ
329デフォルトの名無しさん
2019/03/15(金) 06:06:32.23ID:nvk7uoI+ >>317
オープンソース化
オープンソース化
330デフォルトの名無しさん
2019/03/15(金) 08:11:25.59ID:2KXTO6ja331デフォルトの名無しさん
2019/03/15(金) 08:17:17.58ID:qA/WFgyI ゴミ
332デフォルトの名無しさん
2019/03/15(金) 08:54:09.40ID:fLDhqMRG けっこう癖が強いよね。例外やpimpl否定したり。
333デフォルトの名無しさん
2019/03/15(金) 08:57:01.66ID:LNWMUSed 危険思想だなw
ヤバすぎてヘドが出るw
ヤバすぎてヘドが出るw
334デフォルトの名無しさん
2019/03/15(金) 09:06:08.50ID:Uugk/tx2 まあでかいプロジェクトはこんなもんだろう。
例外は実際よくないと思うわ。
例外は実際よくないと思うわ。
335デフォルトの名無しさん
2019/03/15(金) 09:48:31.74ID:Af9j6Fb3 pimpl否定ってあったっけ?
うちのプロジェクトも原則例外禁止
むかしは一律禁止だったけど
うちのプロジェクトも原則例外禁止
むかしは一律禁止だったけど
336デフォルトの名無しさん
2019/03/15(金) 11:11:39.02ID:t9j+keaC >>330
古くさいって言われてなかった?
古くさいって言われてなかった?
337デフォルトの名無しさん
2019/03/15(金) 11:55:34.06ID:E1i6RSEf googleのスタイルガイドは和訳が古くて英語版しか読まなくなって何年にもなるが追いついてるのか?
338デフォルトの名無しさん
2019/03/15(金) 12:05:48.86ID:PdhXv0FK 例外無しとか小規模の組み込み以外で意味あるのかね?
339デフォルトの名無しさん
2019/03/15(金) 12:37:29.90ID:hyh/CKnF 例外使った時点で疎結合もへったくれもなくなると思うわ。
能力的に幅のあるプロジェクトで使うには難しいよ。
能力的に幅のあるプロジェクトで使うには難しいよ。
340デフォルトの名無しさん
2019/03/15(金) 12:56:39.19ID:ng8+eCdq >>339
> 能力的に幅のあるプロジェクトで使うには難しいよ。
これには同意するけど
> 例外使った時点で疎結合もへったくれもなくなると思うわ。
意味不明
例外以外の方法使っても似たようなことをする羽目になるだけ
なら意図が明確な例外のほうがマシ
> 能力的に幅のあるプロジェクトで使うには難しいよ。
これには同意するけど
> 例外使った時点で疎結合もへったくれもなくなると思うわ。
意味不明
例外以外の方法使っても似たようなことをする羽目になるだけ
なら意図が明確な例外のほうがマシ
341デフォルトの名無しさん
2019/03/15(金) 14:16:54.97ID:9vyMIRpZ 戻り値なら呼び出し元と呼び出し先の間の結合だけだが、例外はよりコールスタックの根本の方へ結合が及ぶことがある
フレームワークのように、例外を使ってあえて中間をすっ飛ばしてコールスタックの上と下を結合させるケースもあるけどね
フレームワークのように、例外を使ってあえて中間をすっ飛ばしてコールスタックの上と下を結合させるケースもあるけどね
342デフォルトの名無しさん
2019/03/15(金) 14:19:06.67ID:9vyMIRpZ 念の為補足するけど、Javaの検査例外みたいに常に直上での例外処理を強制するスタイルは戻り値と事実上等価だからここでは論外ね
343デフォルトの名無しさん
2019/03/15(金) 14:31:16.21ID:yhzlHwio つまり標準ライブラリのほとんどを使うなと言うこと?
344デフォルトの名無しさん
2019/03/15(金) 14:37:11.61ID:yhzlHwio そもそも例外使った方が疎結合になるだろうに
345はちみつ餃子 ◆8X2XSCHEME
2019/03/15(金) 16:00:22.80ID:q2a9nFaz 他の言語や過去の (例外をあまり想定していない) システムと接続することもあるし、
そういう全体のエコシステムを考えると例外がかえって面倒ということはあると思う。
C++ だけの (新規の) プロジェクトなら全く例外を使わないというのは極端なスタイルだと思うが。
そういう全体のエコシステムを考えると例外がかえって面倒ということはあると思う。
C++ だけの (新規の) プロジェクトなら全く例外を使わないというのは極端なスタイルだと思うが。
346デフォルトの名無しさん
2019/03/15(金) 16:32:10.73ID:SB/vZ5dO 例外があると、それが理由で上下の階層が深いシステムになりがちだと思うよ。
節度があれば正直なんでもいいが、言語的にクソ設計を許さないのならその方がありがたい。
節度があれば正直なんでもいいが、言語的にクソ設計を許さないのならその方がありがたい。
347デフォルトの名無しさん
2019/03/15(金) 16:54:37.47ID:oq4eakC3 c++じゃないところからc++のコード呼び出すなら例外外に出さないようにtry catchでラップするだけだし
逆で途中のコードが例外発生したために解放処理が飛ばされるってなら、raiiクラス化しろって話にならね?
通信経路でやり取りするなら相手が例外処理で実装されていようがされていなかろうがなんの関係もないし
逆で途中のコードが例外発生したために解放処理が飛ばされるってなら、raiiクラス化しろって話にならね?
通信経路でやり取りするなら相手が例外処理で実装されていようがされていなかろうがなんの関係もないし
348デフォルトの名無しさん
2019/03/15(金) 17:57:31.19ID:BCAT3j7k >>347
要は、メッセージングが至高ってことだな
要は、メッセージングが至高ってことだな
349デフォルトの名無しさん
2019/03/15(金) 18:59:44.81ID:0PFucV7H つまりJavaが至高。
350デフォルトの名無しさん
2019/03/15(金) 20:05:35.24ID:LNWMUSed 例外だしてどーすんの
ミッションクリティカルで直せるの?
意味ないじゃん
例外使いたきゃ専用言語使えばいい
ミッションクリティカルで直せるの?
意味ないじゃん
例外使いたきゃ専用言語使えばいい
351デフォルトの名無しさん
2019/03/15(金) 20:09:02.33ID:qA/WFgyI プログラミング言語の専門家に聞いて
352デフォルトの名無しさん
2019/03/15(金) 20:37:29.42ID:ng8+eCdq >>345
> 他の言語や過去の (例外をあまり想定していない) システムと接続することもあるし、
> そういう全体のエコシステムを考えると例外がかえって面倒ということはあると思う。
もうそういう極端な例でしか反論できないことはわかったよw
> 他の言語や過去の (例外をあまり想定していない) システムと接続することもあるし、
> そういう全体のエコシステムを考えると例外がかえって面倒ということはあると思う。
もうそういう極端な例でしか反論できないことはわかったよw
353デフォルトの名無しさん
2019/03/15(金) 20:59:33.43ID:UMZlK7qa 江添勝てなかったか・・
354デフォルトの名無しさん
2019/03/15(金) 21:09:50.31ID:2KXTO6ja355デフォルトの名無しさん
2019/03/15(金) 21:13:26.14ID:BCAT3j7k まだひっくり返る可能性はあると思うね
356デフォルトの名無しさん
2019/03/15(金) 21:50:38.17ID:fLDhqMRG >>335
pimplに限った話じゃないけど、前方宣言とそれによる定義の隠蔽が推奨されていない。
pimplに限った話じゃないけど、前方宣言とそれによる定義の隠蔽が推奨されていない。
357デフォルトの名無しさん
2019/03/15(金) 22:07:25.54ID:qA/WFgyI Googleはな
358デフォルトの名無しさん
2019/03/15(金) 22:38:20.91ID:4qwaELjT359はちみつ餃子 ◆8X2XSCHEME
2019/03/15(金) 22:40:04.57ID:q2a9nFaz >>352
グーグルのガイドラインが極端なのは当たり前だ。
超巨大なエコシステムで成り立ってるわけだし。
例外を使わない派がしばしばグーグルのガイドラインを持ち出すんだけど、
そのガイドラインにすら、最初から設計してたら違ったかもしれないという
文言があるので、 C++ を使った設計理念一般としての強い根拠にならんのよな。
私としては、一般的な C++ での設計の参考にするべきは標準ライブラリだと思う。
標準ライブラリはその言語の思想をよりはっきりと体現するものだし、
それに沿って作ったものは連携しやすくもある。
(昔からあるライブラリの一部は変な個所もあるが。)
>>346
C++ はクソ設計でもどうにか形には出来るっていう方向性だと思う。
まともな設計ならそれが一番良いにきまってるけど、
それが期待できない場合が大半だという現実がある。
グーグルのガイドラインが極端なのは当たり前だ。
超巨大なエコシステムで成り立ってるわけだし。
例外を使わない派がしばしばグーグルのガイドラインを持ち出すんだけど、
そのガイドラインにすら、最初から設計してたら違ったかもしれないという
文言があるので、 C++ を使った設計理念一般としての強い根拠にならんのよな。
私としては、一般的な C++ での設計の参考にするべきは標準ライブラリだと思う。
標準ライブラリはその言語の思想をよりはっきりと体現するものだし、
それに沿って作ったものは連携しやすくもある。
(昔からあるライブラリの一部は変な個所もあるが。)
>>346
C++ はクソ設計でもどうにか形には出来るっていう方向性だと思う。
まともな設計ならそれが一番良いにきまってるけど、
それが期待できない場合が大半だという現実がある。
360KAC
2019/03/15(金) 22:48:06.41ID:rqfh3/aR 例外禁止とかの環境って、
newの失敗とか毎回チェックするの?
newの失敗とか毎回チェックするの?
361デフォルトの名無しさん
2019/03/15(金) 22:54:50.21ID:2KXTO6ja 規約を守る守らんってことにしか目がいかんのな。
やっぱ馬鹿ばっかだわ。
やっぱ馬鹿ばっかだわ。
362デフォルトの名無しさん
2019/03/15(金) 22:54:57.62ID:12ZNVc6t363デフォルトの名無しさん
2019/03/15(金) 23:03:42.33ID:L+hp7qbL 例外処理機構が無かったら、メモリ確保に失敗しても、
そこから過去のロールバックができない
自己流で、long jump するぐらいなら、例外処理の方がよい
そこから過去のロールバックができない
自己流で、long jump するぐらいなら、例外処理の方がよい
364デフォルトの名無しさん
2019/03/15(金) 23:09:45.82ID:12ZNVc6t365デフォルトの名無しさん
2019/03/15(金) 23:18:26.60ID:fLDhqMRG >>363
そのロールバックってのはCとmallocじゃできないようなものなのかな。
そのロールバックってのはCとmallocじゃできないようなものなのかな。
366デフォルトの名無しさん
2019/03/15(金) 23:25:12.09ID:qA/WFgyI new失敗とかコンピュータが壊れてるからチェックしても意味ない
367デフォルトの名無しさん
2019/03/15(金) 23:27:22.88ID:qA/WFgyI 当然特殊なケースは除くからな
一応言っておかないと組み込みガー君とか宇宙線でエラーガー君が飛んでくるからな
一応言っておかないと組み込みガー君とか宇宙線でエラーガー君が飛んでくるからな
368デフォルトの名無しさん
2019/03/15(金) 23:37:27.23ID:WyRx2/31 >>359
>私としては、一般的な C++ での設計の参考にするべきは標準ライブラリだと思う。
設計ではなく使い方の参考に、という意味では賛成だけど
テンプレートバリバリの設計はあまりにもコストがかかるというのを知っといて欲しい
ああいうのは湯水のごとく時間をかけられるからやれるんであって
>私としては、一般的な C++ での設計の参考にするべきは標準ライブラリだと思う。
設計ではなく使い方の参考に、という意味では賛成だけど
テンプレートバリバリの設計はあまりにもコストがかかるというのを知っといて欲しい
ああいうのは湯水のごとく時間をかけられるからやれるんであって
369デフォルトの名無しさん
2019/03/15(金) 23:38:17.19ID:iTKvW/zw きみらはあれか、元記事とか全然読まずにコメントするクチか
リンク元には「例外は全く新規のプロジェクトならデメリットよりメリットが優先するので使って良い。
ただ既存のグーグルプロジェクトは元々例外を想定していないのでこれに例外のパターンを導入する
とリスクのほうが多いのでやめるべき。ただし Windows については例外がある(駄洒落ではない)」
と書いてあるんだがちゃんと読んだか。ちなみに駄洒落ではない、は俺が追加したのでなく元の文にある
リンク元には「例外は全く新規のプロジェクトならデメリットよりメリットが優先するので使って良い。
ただ既存のグーグルプロジェクトは元々例外を想定していないのでこれに例外のパターンを導入する
とリスクのほうが多いのでやめるべき。ただし Windows については例外がある(駄洒落ではない)」
と書いてあるんだがちゃんと読んだか。ちなみに駄洒落ではない、は俺が追加したのでなく元の文にある
370はちみつ餃子 ◆8X2XSCHEME
2019/03/15(金) 23:45:56.39ID:q2a9nFaz371デフォルトの名無しさん
2019/03/15(金) 23:48:42.07ID:5dVML2o5 エラーにはリカバリーすべきものとそうでないものがある
あとそのエラーが起こる頻度の違い
リカバリーしないものはその時点で即死するのが正しい
リカバリーするものでかつエラーが普通に起こるものはエラーコードで処理するのが正しい
となると残りのリカバリーするものでかつたまにエラーがおこるようなのが例外にする価値があるエラー
あと例外発生時のunwindが重いからそれでも問題にならないもの
となるとあんまり使えるとこないんだよね
そういうわけで最近例外なしの言語がでてきてる流れなんだろう
あとそのエラーが起こる頻度の違い
リカバリーしないものはその時点で即死するのが正しい
リカバリーするものでかつエラーが普通に起こるものはエラーコードで処理するのが正しい
となると残りのリカバリーするものでかつたまにエラーがおこるようなのが例外にする価値があるエラー
あと例外発生時のunwindが重いからそれでも問題にならないもの
となるとあんまり使えるとこないんだよね
そういうわけで最近例外なしの言語がでてきてる流れなんだろう
373デフォルトの名無しさん
2019/03/15(金) 23:54:45.92ID:qA/WFgyI 出、出〜www
一名いらっしゃいましたwww
一名いらっしゃいましたwww
374デフォルトの名無しさん
2019/03/16(土) 00:07:16.61ID:HR8X4dmV 例外ってcatchしなきゃ投げたその場で落ちてくれるのがこの上なく便利だろう
問題残したまま実行続けて別の関係ないところで落ちるのが最悪
runtimeで落ちて困るような用途でも、
ソースコードあるやつなら静的解析で例外発生箇所網羅出来そうなものだが
網羅できればリソースリークする危険な場所わかるし、対処も出来るのにね
逆にソースコード無いライブラリやダイナミックリンクする奴は、例外含めて外部仕様としてかっちり決まっているべきものじゃね
問題残したまま実行続けて別の関係ないところで落ちるのが最悪
runtimeで落ちて困るような用途でも、
ソースコードあるやつなら静的解析で例外発生箇所網羅出来そうなものだが
網羅できればリソースリークする危険な場所わかるし、対処も出来るのにね
逆にソースコード無いライブラリやダイナミックリンクする奴は、例外含めて外部仕様としてかっちり決まっているべきものじゃね
375デフォルトの名無しさん
2019/03/16(土) 00:11:00.29ID:oXtW8C30376デフォルトの名無しさん
2019/03/16(土) 00:15:00.35ID:U94TV9G4 >逆にソースコード無いライブラリやダイナミックリンクする奴は、例外含めて外部仕様としてかっちり決まっているべきものじゃね
んなもんコンテナで隔離する以外使い道ねーわ。
んなもんコンテナで隔離する以外使い道ねーわ。
377デフォルトの名無しさん
2019/03/16(土) 00:18:04.69ID:HR8X4dmV378デフォルトの名無しさん
2019/03/16(土) 00:23:45.45ID:oXtW8C30 そうなんだよね
例外の仕組みわかってないやつは平気で動的ライブラリの界面に
例外使ったりするんだよね
あと標準ライブラリ丸出しにするやつもしかり
それ誰も互換性保証してねーから
例外の仕組みわかってないやつは平気で動的ライブラリの界面に
例外使ったりするんだよね
あと標準ライブラリ丸出しにするやつもしかり
それ誰も互換性保証してねーから
379デフォルトの名無しさん
2019/03/16(土) 00:24:47.11ID:UXq90ll9 >>376
核戦争を生き抜くには。
核戦争を生き抜くには。
380デフォルトの名無しさん
2019/03/16(土) 00:24:57.90ID:HR8X4dmV まあ標準ライブラリの例外の使い方のおかしさも気になるが
std::stoiで例外投げるバージョンしか無い上に何故かlogic_error扱いのinvalid_argumentやout_of_range投げる
いや、これ出る状況普通runtime_errorだよね
std::stoiで例外投げるバージョンしか無い上に何故かlogic_error扱いのinvalid_argumentやout_of_range投げる
いや、これ出る状況普通runtime_errorだよね
381デフォルトの名無しさん
2019/03/16(土) 00:29:24.58ID:cz3ooqCT >例外含めて外部仕様としてかっちり決まっているべきものじゃね
そこを言語の機構で保証できない、動的言語みたいななあなあ状態なのが残念なところだね。
それをきっちり保証しようとした検査例外はそれはそれで扱いづらいところがあるし。
そこを言語の機構で保証できない、動的言語みたいななあなあ状態なのが残念なところだね。
それをきっちり保証しようとした検査例外はそれはそれで扱いづらいところがあるし。
382デフォルトの名無しさん
2019/03/16(土) 00:29:25.98ID:U4afEAjj383デフォルトの名無しさん
2019/03/16(土) 00:36:35.46ID:UXq90ll9 そこでプロパティ型なんですよ。
384デフォルトの名無しさん
2019/03/16(土) 06:11:19.71ID:7Yfqh0Zg385デフォルトの名無しさん
2019/03/16(土) 06:46:32.47ID:TLiwIm0H 復旧不可能な例外もあれば、些細な例外もあるよね。
戻り値チェックで十分でしょと思うようなところで例外を投げるJava/C#みたいな流儀だと、いちいちキャッチするのが面倒。
戻り値チェックで十分でしょと思うようなところで例外を投げるJava/C#みたいな流儀だと、いちいちキャッチするのが面倒。
386デフォルトの名無しさん
2019/03/16(土) 06:52:39.99ID:TLiwIm0H Cでは戻り値で判定できたはずのエラー種別が例外クラスで細かく分類されてしまったことで、
エラー処理で書かなければならないコード量が増えて例外のキャッチ漏れまで起きる危険性が生み出された。
エラー処理で書かなければならないコード量が増えて例外のキャッチ漏れまで起きる危険性が生み出された。
387デフォルトの名無しさん
2019/03/16(土) 07:31:06.00ID:5/K53Ire その程度の知識で語ってる奴は戻り値方式でも処理漏れするだろw
388デフォルトの名無しさん
2019/03/16(土) 07:35:15.72ID:/kg6KhNe 例外の嫌なところは
処理できない案件を低水準側に丸投げするところなんだよな…
ユニックスのプロセスの死亡順序もそうだが、
計算機業界は常識が逆転してゐる…
処理できない案件を低水準側に丸投げするところなんだよな…
ユニックスのプロセスの死亡順序もそうだが、
計算機業界は常識が逆転してゐる…
389デフォルトの名無しさん
2019/03/16(土) 07:38:02.24ID:/kg6KhNe というわけでおそらくアプリの設計シチュの99%ぐらいは
例外発生=プログラムの死亡
、とみなして良いはず
ここまで割り切るならはじめて例外はお手軽で便利と言える
例外発生=プログラムの死亡
、とみなして良いはず
ここまで割り切るならはじめて例外はお手軽で便利と言える
390デフォルトの名無しさん
2019/03/16(土) 12:28:02.50ID:UXq90ll9 例外をキャッチしたらプランBに移行するのが、真の戦闘のプロ。
391デフォルトの名無しさん
2019/03/16(土) 12:49:25.73ID:V15J7n/y 例外なんてグローバル変数みたいなもの。
だから低レイヤで使うのは仕方ない
だから低レイヤで使うのは仕方ない
392デフォルトの名無しさん
2019/03/16(土) 12:50:47.84ID:jRc2/nMs std::cin >> a;
は入力を延々と待っている。
これ別スレッドから止めさせる方法はありますか?
は入力を延々と待っている。
これ別スレッドから止めさせる方法はありますか?
393デフォルトの名無しさん
2019/03/16(土) 13:10:50.41ID:V15J7n/y stdin閉じるとどうなる?
394デフォルトの名無しさん
2019/03/16(土) 15:40:22.15ID:/kg6KhNe (組み込みはともかくアプリの場合は呼び出し元の方が高水準レイヤにあたるのではないかというツッコミが来ると思ったが
来なかったので黙っていよう…
来なかったので黙っていよう…
395デフォルトの名無しさん
2019/03/16(土) 17:27:11.59ID:/kg6KhNe396デフォルトの名無しさん
2019/03/16(土) 19:15:22.19ID:zOgp3uDK397デフォルトの名無しさん
2019/03/16(土) 20:00:47.57ID:TLiwIm0H 多くの例外の基底クラスになる exception にエラーコード整数値を出力する関数があればもう少しC寄りのエラー処理ができたと思うのだが。
既存のexceptionメンバ関数 const char *what() だけでは扱いが困難。
既存のexceptionメンバ関数 const char *what() だけでは扱いが困難。
398デフォルトの名無しさん
2019/03/16(土) 20:14:28.85ID:1JRLHvWf std:::to_string();
399デフォルトの名無しさん
2019/03/16(土) 20:14:39.74ID:w9XKSp7E >>397
必要ならそういうクラスを定義するだけだろ
必要ならそういうクラスを定義するだけだろ
400デフォルトの名無しさん
2019/03/16(土) 20:15:00.26ID:1JRLHvWf sage
401デフォルトの名無しさん
2019/03/16(土) 20:39:18.42ID:cz3ooqCT ユーザーにエラー原因を示すだけならconst char*でも大して問題ないし、
catchした側でエラーコードによって何かするというのはたいていアンチパターン。
catchした側でエラーコードによって何かするというのはたいていアンチパターン。
402デフォルトの名無しさん
2019/03/16(土) 22:15:57.75ID:HR8X4dmV 文字をwchar_tで処理しているプログラムだと例外文字列作るのが面倒
まあ詳細な情報出さずに固定文字列にしてしまえばいいんだけど
まあ詳細な情報出さずに固定文字列にしてしまえばいいんだけど
403デフォルトの名無しさん
2019/03/17(日) 00:42:25.28ID:OzxlZzXh templateの使い道がいまいちわからん
STLやboostみたいなものは非常に有益だが
同僚がドヤ顔でコンテナを作ったって自慢してたが、
stlのコンテナを使わずにそいつのコンテナを使う理由が無い
STLやboostみたいなものは非常に有益だが
同僚がドヤ顔でコンテナを作ったって自慢してたが、
stlのコンテナを使わずにそいつのコンテナを使う理由が無い
404はちみつ餃子 ◆8X2XSCHEME
2019/03/17(日) 00:46:12.21ID:aA4z/LNt405デフォルトの名無しさん
2019/03/17(日) 00:48:31.10ID:UT79+Nc/ 同じコードをコピペしなくて済むから、作業量も減るし、保守も楽になる。
406デフォルトの名無しさん
2019/03/17(日) 00:56:16.88ID:NYZE0cFr407はちみつ餃子 ◆8X2XSCHEME
2019/03/17(日) 00:58:29.44ID:aA4z/LNt 重複があることを事前に発見するのは難しい場合もあるから、
同じことを何度も書いている気がするなと思ったら
どうにかしてまとめることを検討するという程度でもいいかもね。
同じことをしないようにする、いわゆる DRY 原則というものはあるけど、
一方で、それを意識するあまりしなくてよい抽象化層を設けるのも馬鹿らしいということで、
必要になってからやるという YAGNI という考え方もある。
こういうのは程度問題なので、なんでもほどほどにね。
同じことを何度も書いている気がするなと思ったら
どうにかしてまとめることを検討するという程度でもいいかもね。
同じことをしないようにする、いわゆる DRY 原則というものはあるけど、
一方で、それを意識するあまりしなくてよい抽象化層を設けるのも馬鹿らしいということで、
必要になってからやるという YAGNI という考え方もある。
こういうのは程度問題なので、なんでもほどほどにね。
408デフォルトの名無しさん
2019/03/17(日) 01:15:02.15ID:7ciqStwp テンプレート(のパラメータにおける型の自動推論)と
関数のオーバーロードの合わせ技によるコードのまとめ力は異常
関数のオーバーロードの合わせ技によるコードのまとめ力は異常
409デフォルトの名無しさん
2019/03/17(日) 01:37:37.76ID:7ciqStwp 例えばストレージからintを読み込む関数、doubleを読み込む関数、unsigned charを読み込む関数を
同じ関数名と同じ引数の並び(例えばbool read(FILE* fp, <目的とする型>& x とか)ででオーバーロードしておけば、
template<class T1, class T2, class T3>
bool read_x3(FILE* fp, T1& x1, T2& x2, T3& x3) {
if (!read(fp, x1)) { return false; }
if (!read(fp, x2)) { return false; }
if (!read(fp, x3)) { return false; }
return true;
}
でもって、オーバーロードを実装した任意の型3個の組み合わせについて読込関数が実体化される
(実装されていない型に行き当たったらエラーになるからワカル
これはn個の関数と1個のテンプレートを書いただけで、n^3パターンもののユースケースに網羅的に対応できたことになるからスゲー強力
※ 個人の感想です
同じ関数名と同じ引数の並び(例えばbool read(FILE* fp, <目的とする型>& x とか)ででオーバーロードしておけば、
template<class T1, class T2, class T3>
bool read_x3(FILE* fp, T1& x1, T2& x2, T3& x3) {
if (!read(fp, x1)) { return false; }
if (!read(fp, x2)) { return false; }
if (!read(fp, x3)) { return false; }
return true;
}
でもって、オーバーロードを実装した任意の型3個の組み合わせについて読込関数が実体化される
(実装されていない型に行き当たったらエラーになるからワカル
これはn個の関数と1個のテンプレートを書いただけで、n^3パターンもののユースケースに網羅的に対応できたことになるからスゲー強力
※ 個人の感想です
410デフォルトの名無しさん
2019/03/17(日) 01:43:06.21ID:Jta37aFk411デフォルトの名無しさん
2019/03/17(日) 01:44:01.66ID:7ciqStwp なおこのテクをつきつめれば、テンプレートの特殊化というのは普通の意味では要らなくなるキモス、
むしろ特定の型の組み合わせについて自動展開を禁止したいときに使う
(例えば可変長データのread関数を、データの先頭にデータの個数を書く約束で作ったとして、
個数を読み込む関数を整数のread(fp, x)に限定したい場合、個数の型をdoubleにした特殊化テンプレートを書いてわざとエラーにするとか、
むしろ特定の型の組み合わせについて自動展開を禁止したいときに使う
(例えば可変長データのread関数を、データの先頭にデータの個数を書く約束で作ったとして、
個数を読み込む関数を整数のread(fp, x)に限定したい場合、個数の型をdoubleにした特殊化テンプレートを書いてわざとエラーにするとか、
412デフォルトの名無しさん
2019/03/17(日) 01:47:31.21ID:7ciqStwp413デフォルトの名無しさん
2019/03/17(日) 01:58:32.33ID:ADoP4x2u テンプレートはヘッダに全部書かなきゃいかんのなんとかならんか?
414デフォルトの名無しさん
2019/03/17(日) 02:06:35.73ID:NYZE0cFr 原理上どうにもならない
415デフォルトの名無しさん
2019/03/17(日) 02:10:16.54ID:7ciqStwp テンプレートの分割コンパイルは一度実装されたが1年がかりの複雑な仕事になったし
あまりに複雑すぎて普及に至っていないというようなことがプログラミング言語C++で読んだ記憶、
しかし、importキーワードがC++の予約語であるうちはまだ希望がある
あまりに複雑すぎて普及に至っていないというようなことがプログラミング言語C++で読んだ記憶、
しかし、importキーワードがC++の予約語であるうちはまだ希望がある
416デフォルトの名無しさん
2019/03/17(日) 02:10:32.44ID:Jta37aFk FILE* fp は 標準のfgetc()の実行速度が遅くて残念。バッファリングしている甲斐がない。
417デフォルトの名無しさん
2019/03/17(日) 02:26:35.34ID:UT79+Nc/ 使いたい型決まっているなら別にできるだろ?
ヘッダで宣言だけ書いて、ソースで定義と明示的インスタンス化すればいいだけ
ヘッダで宣言だけ書いて、ソースで定義と明示的インスタンス化すればいいだけ
418デフォルトの名無しさん
2019/03/17(日) 02:34:45.67ID:61bjcvzF 3大C++無限ループ話題
テンプレート実装の分割記述
getsetの実装
あと一つは?
テンプレート実装の分割記述
getsetの実装
あと一つは?
419デフォルトの名無しさん
2019/03/17(日) 03:18:11.89ID:4v9XGq5+ 多重ループの抜け方
420デフォルトの名無しさん
2019/03/17(日) 03:19:37.14ID:XP0TJBl2 STLにツリーがない理由を教えてください。
421デフォルトの名無しさん
2019/03/17(日) 04:14:30.81ID:OzxlZzXh あるクラスが非トリビアルなコピーコンストラクタをもっていることを検出したい
そのクラスのメンバの型が非トリビアルなコピーコンストラクタを持っていたとしても。
そのクラスのメンバの型が非トリビアルなコピーコンストラクタを持っていたとしても。
422デフォルトの名無しさん
2019/03/17(日) 06:02:45.37ID:NYZE0cFr >>418
メモリが云々
メモリが云々
423デフォルトの名無しさん
2019/03/17(日) 06:48:43.74ID:WBoQCy0z >>413
テンプレートを抜き出してヘッダーファイルを生成するプリプリプロセッサを作ればいい
テンプレートを抜き出してヘッダーファイルを生成するプリプリプロセッサを作ればいい
424デフォルトの名無しさん
2019/03/17(日) 08:23:20.60ID:h3PfG3Ac >>421
トリビアルコピー出来ないことを検出したいならis_trivially_copyableで充分だけどそれ以上のことがしたいの?
トリビアルコピー出来ないことを検出したいならis_trivially_copyableで充分だけどそれ以上のことがしたいの?
425デフォルトの名無しさん
2019/03/17(日) 08:28:29.93ID:qh1L90Cw426デフォルトの名無しさん
2019/03/17(日) 08:33:05.90ID:NYZE0cFr 名人様一名いらっしゃいました
427デフォルトの名無しさん
2019/03/17(日) 11:20:51.42ID:2Lg7N/Z5 >>411
> 個数の型をdoubleにした特殊化テンプレートを書いてわざとエラーにするとか、
そういうときはdelete指定が使えるんじゃね?
というかis_floating_pointとかで弾いた方がいいとも思うけど
> 個数の型をdoubleにした特殊化テンプレートを書いてわざとエラーにするとか、
そういうときはdelete指定が使えるんじゃね?
というかis_floating_pointとかで弾いた方がいいとも思うけど
428デフォルトの名無しさん
2019/03/17(日) 12:03:09.87ID:UT79+Nc/429デフォルトの名無しさん
2019/03/17(日) 13:22:57.65ID:UT79+Nc/ variadicだた
430デフォルトの名無しさん
2019/03/17(日) 13:42:47.24ID:XP0TJBl2 バリスティック・テンプルね。
431デフォルトの名無しさん
2019/03/17(日) 15:09:36.00ID:WBoQCy0z >>425
サンプルにまでマウントするとかw
サンプルにまでマウントするとかw
432デフォルトの名無しさん
2019/03/17(日) 15:29:33.79ID:XP0TJBl2 マウントの定義を教えてください。
433デフォルトの名無しさん
2019/03/17(日) 16:01:22.88ID:Ymi5ijHL 明確な定義があるわけじゃないけど、主に「勘違いした高卒が高等な他人を見下してること、もしくはその様」を指す語としてつかわれてんじゃないの
434デフォルトの名無しさん
2019/03/17(日) 21:10:58.21ID:NYZE0cFr >>432
意識高い系
意識高い系
435KAC
2019/03/17(日) 21:23:45.76ID:nO6ODsyT436デフォルトの名無しさん
2019/03/17(日) 21:42:19.60ID:2Lg7N/Z5 >>436
誰?
誰?
438デフォルトの名無しさん
2019/03/17(日) 22:22:05.53ID:VD3ReUoA オープンソース化されたWindowsの電卓を見たが、クッソ綺麗でモダンなコードだな
439デフォルトの名無しさん
2019/03/17(日) 22:25:37.54ID:NYZE0cFr 多分7に入ってた電卓とは別物だな
440デフォルトの名無しさん
2019/03/17(日) 23:22:31.89ID:0FN5yhQH441デフォルトの名無しさん
2019/03/18(月) 00:13:57.67ID:HNvbYtsL Windowsカーネルのオープンソース化待ってます
442デフォルトの名無しさん
2019/03/18(月) 05:32:24.67ID:+E07qlDR sort関数の比較関数を、クラスのメンバ関数として定義すると invalid use of non-static member function というエラーが出ます。
なぜこれは禁止されるのでしょうか。
また、どうやって解決したら良いですか。
なぜこれは禁止されるのでしょうか。
また、どうやって解決したら良いですか。
443デフォルトの名無しさん
2019/03/18(月) 05:33:36.55ID:HNvbYtsL エラーメッセージ読みなよ
444デフォルトの名無しさん
2019/03/18(月) 06:41:53.05ID:8TZ/BLJn 理屈を知ってる人には当然だけど、初めての人は混乱する部分じゃないかな。
sort で使う比較関数は色んな形で宣言できるけど、宣言する場所によって
エラーにならずに使える関数の形式が違うってやつ。
>>442 メンバ関数にした比較関数のプロトタイプ宣言はどんな感じ?
sort で使う比較関数は色んな形で宣言できるけど、宣言する場所によって
エラーにならずに使える関数の形式が違うってやつ。
>>442 メンバ関数にした比較関数のプロトタイプ宣言はどんな感じ?
445デフォルトの名無しさん
2019/03/18(月) 08:08:37.98ID:HNvbYtsL 非staticメンバをstaticのように使おうとしたときに出るエラーだからsortとか関係ない
Class::funcをsortに入れたんでしょ
Class().funcとするかfuncをstaticにするだけ
Class::funcをsortに入れたんでしょ
Class().funcとするかfuncをstaticにするだけ
446デフォルトの名無しさん
2019/03/18(月) 08:49:38.19ID:fJqFZa8b 今時はClass().funcでいけるんすか
447デフォルトの名無しさん
2019/03/18(月) 09:58:55.92ID:7+YzgLjV Class::funcってstaticじゃないの?
448デフォルトの名無しさん
2019/03/18(月) 10:42:04.28ID:9EOa0iNV ->*みたいな書き方の意義がわかったら一人前どすな
449デフォルトの名無しさん
2019/03/18(月) 11:13:12.39ID:27d4/ixp ちなみにどんな意義があるの?
450デフォルトの名無しさん
2019/03/18(月) 19:22:09.39ID:SgtRGl5R451デフォルトの名無しさん
2019/03/18(月) 20:05:14.79ID:c3AGzLzz 結局その場でラムダ式書くのが一番わかり易いんだよね
453デフォルトの名無しさん
2019/03/18(月) 21:20:34.54ID:lCR32A1k エクセルで使われているようなGUIにちょっとしたアニメーションをつけるには何使えばいい?
455デフォルトの名無しさん
2019/03/18(月) 21:43:42.87ID:lCR32A1k >>454
例えば四角形の座標の終点の値と移動にかかる時間をするだけでヌルッと動いてくれる機能があるやつがいいです
例えば四角形の座標の終点の値と移動にかかる時間をするだけでヌルッと動いてくれる機能があるやつがいいです
456デフォルトの名無しさん
2019/03/18(月) 21:45:05.39ID:ok5NeesM 普通にcのsort関数使えばいいのに。
キャストしたら負けとでも思ってんのかね。
キャストしたら負けとでも思ってんのかね。
457デフォルトの名無しさん
2019/03/18(月) 21:59:25.97ID:MtU5H+Zb >>455
cocos2d
cocos2d
458デフォルトの名無しさん
2019/03/18(月) 22:47:37.12ID:DisgVN8i std::initializer_list<int> l()
{
return std::initializer_list<int>{1,2,3};
}
std::vector<int> v()
{
return std::vector<int>{1,2,3};
}
int main()
{
for(auto i : l()){
std::cout << i << endl;
}
for(auto i : v()){
std::cout << i << endl;
}
}
0
0
0
1
2
3
なんで?
{
return std::initializer_list<int>{1,2,3};
}
std::vector<int> v()
{
return std::vector<int>{1,2,3};
}
int main()
{
for(auto i : l()){
std::cout << i << endl;
}
for(auto i : v()){
std::cout << i << endl;
}
}
0
0
0
1
2
3
なんで?
459デフォルトの名無しさん
2019/03/18(月) 22:56:40.87ID:bBcTS09+460デフォルトの名無しさん
2019/03/18(月) 23:23:21.73ID:qPN/SC1k461デフォルトの名無しさん
2019/03/18(月) 23:28:12.28ID:c3AGzLzz qsort「おっワイの出番か?」
462デフォルトの名無しさん
2019/03/19(火) 00:00:01.33ID:V3eHYYxi cのsortってラムダ渡せないし、ワザワザ面倒くさい記述してまで使う意味無いだろう。
463デフォルトの名無しさん
2019/03/19(火) 00:37:48.08ID:wfF3ncvB template<typename T>
T func(T a){
}
という関数の中身として、T が int なら a*2 を返し、T が double ならa/2 を返し、それ以外なら a を返す、という処理にしたい場合どう書いたら良いのでしょうか。
関数ごと特殊化する方法があるのは勉強したのですが、一行分の処理を特殊化するために関数ごと特殊化するべきなのでしょうか。
簡単化のため、必要さが全くない例になっていますがよろしくお願いします。
T func(T a){
}
という関数の中身として、T が int なら a*2 を返し、T が double ならa/2 を返し、それ以外なら a を返す、という処理にしたい場合どう書いたら良いのでしょうか。
関数ごと特殊化する方法があるのは勉強したのですが、一行分の処理を特殊化するために関数ごと特殊化するべきなのでしょうか。
簡単化のため、必要さが全くない例になっていますがよろしくお願いします。
464デフォルトの名無しさん
2019/03/19(火) 00:43:22.56ID:fW/dBWxG STLが天才なのは分かったけど、遅くなりそうなのも分かってしまった。
465デフォルトの名無しさん
2019/03/19(火) 00:49:23.69ID:fW/dBWxG466デフォルトの名無しさん
2019/03/19(火) 00:54:54.54ID:V3eHYYxi >>463
簡単化しすぎて何を質問したいのかよくわからない
その例の程度の処理なら、intとdoubleの関数をオーバーロードして、template関数でデフォルトの処理も書けばいい
intとdoubleをどうしてもtemplate化したかったら特殊化で書けばいい
前後に長い共通処理がある場合の一部式だけ個別にしたいなら、関数オブジェクトで式を引数にとる補助template関数作って、上記手法で型毎にlambdaで式を変えて補助関数を呼び分ければいい
簡単化しすぎて何を質問したいのかよくわからない
その例の程度の処理なら、intとdoubleの関数をオーバーロードして、template関数でデフォルトの処理も書けばいい
intとdoubleをどうしてもtemplate化したかったら特殊化で書けばいい
前後に長い共通処理がある場合の一部式だけ個別にしたいなら、関数オブジェクトで式を引数にとる補助template関数作って、上記手法で型毎にlambdaで式を変えて補助関数を呼び分ければいい
467デフォルトの名無しさん
2019/03/19(火) 00:56:32.83ID:wfF3ncvB >>466
特殊化する部分を関数として切り出して特殊化すれば良いということでしょうか。
特殊化する部分を関数として切り出して特殊化すれば良いということでしょうか。
468デフォルトの名無しさん
2019/03/19(火) 06:48:59.95ID:smCJKSpo >>450
まずは、エラーなくコンパイルが通って実行できるまで。
単純には、比較関数をクラスの外に出して「メンバ関数じゃない関数」にする。
たぶんソートしたいクラス中には比較する文字列以外のメンバもあるだろうから、
class myclass {
public:
string s; // 比較対象の文字列
int other; // それ以外のメンバ例
... // 他にもメンバ色々
};
こんな感じだと思う。
比較関数は、2つの myclass 型のオブジェクトのメンバ s 同士を比較するから、
bool mycomp(const myclass& a, const myclass& b)
{
return a.s < b.s; // 辞書式の昇順
}
まずは、エラーなくコンパイルが通って実行できるまで。
単純には、比較関数をクラスの外に出して「メンバ関数じゃない関数」にする。
たぶんソートしたいクラス中には比較する文字列以外のメンバもあるだろうから、
class myclass {
public:
string s; // 比較対象の文字列
int other; // それ以外のメンバ例
... // 他にもメンバ色々
};
こんな感じだと思う。
比較関数は、2つの myclass 型のオブジェクトのメンバ s 同士を比較するから、
bool mycomp(const myclass& a, const myclass& b)
{
return a.s < b.s; // 辞書式の昇順
}
469468
2019/03/19(火) 06:54:39.65ID:smCJKSpo あるいは >>468 の段階はすでに通過してて、
「今度は比較関数をクラスのメンバ関数にしてみよう」と思ったのかな。
bool mycomp(string a, string b);
このプロトタイプでクラスの「staticでないメンバ関数」にすると、
その関数はクラスのオブジェクトを介して obj.mycomp((string)a, (string)b)
という形で呼び出さなきゃならないのよ。
ところが std::sort() が比較関数を呼び出す場合は
どのオブジェクトとも関係ない mycomp((string)a, (string)b) を呼ぼうとする。
「クラスのメンバだけど、クラスの個々のオブジェクトからは独立した関数」に
するために、関数の宣言に static を指定する。
class myclass {
public:
string s; // 比較対象の文字列
int other; // それ以外のメンバ例
... // 他にもメンバ色々
static bool mycomp(const myclass& a, const myclass& b); // 比較関数
};
(「改行多すぎ」につき、もう一回だけつづく)
「今度は比較関数をクラスのメンバ関数にしてみよう」と思ったのかな。
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); // 比較関数
};
(「改行多すぎ」につき、もう一回だけつづく)
470468
2019/03/19(火) 06:57:01.64ID:smCJKSpo (>>469 の続き、長々とすまぬ)
関数の定義(クラス定義の外に書く場合)はこんな感じ。
bool myclass::mycomp(const myclass& a, const myclass& b)
{
return a.s < b.s; // 辞書式の昇順
}
myclass のメンバ関数だと明示するために myclass:: をつけることと、
定義の方には static をつけない、てところが注意点。
std::sort() で使う時は、
std::sort(std::begin(objs), std::end(objs), myclass::mycomp);
「比較関数には myclass のメンバ関数の mycomp() を使ってくれ」と明示。
…する必要が(俺の環境では)あるんだけど、myclass 同士を比較することから、
自動的に myclass のメンバ関数も候補に入れてくれても良さそうな気がする。
なんでダメなんだろ?
関数の定義(クラス定義の外に書く場合)はこんな感じ。
bool myclass::mycomp(const myclass& a, const myclass& b)
{
return a.s < b.s; // 辞書式の昇順
}
myclass のメンバ関数だと明示するために myclass:: をつけることと、
定義の方には static をつけない、てところが注意点。
std::sort() で使う時は、
std::sort(std::begin(objs), std::end(objs), myclass::mycomp);
「比較関数には myclass のメンバ関数の mycomp() を使ってくれ」と明示。
…する必要が(俺の環境では)あるんだけど、myclass 同士を比較することから、
自動的に myclass のメンバ関数も候補に入れてくれても良さそうな気がする。
なんでダメなんだろ?
471デフォルトの名無しさん
2019/03/19(火) 07:25:56.87ID:aaAbvqyx たかがソート一つ実行するのにこれってやっぱc++は失敗しとるわ。。
472デフォルトの名無しさん
2019/03/19(火) 07:30:30.93ID:/K8ycOQq どの言語も似たようなもんだろ
473デフォルトの名無しさん
2019/03/19(火) 07:31:18.45ID:K4E5ztRO >>468-470
丁寧に教えてくださりありがとうございます。
今のところは、>>468に書かれているようにクラスの外に出す、という方針で対応しておりました。
クラスの中で static をつけて宣言をする、というのが元々やりたかったことに一番近いように思います。重ね重ねありがとうございます。
>>470
> std::sort() で使う時は、
> std::sort(std::begin(objs), std::end(objs), myclass::mycomp);
> 「比較関数には myclass のメンバ関数の mycomp() を使ってくれ」と明示。
これは、mycomp() をクラス内で非static に宣言したときにも使えますか。
それとも、クラスの外で
bool myclass::mycomp(const myclass& a, const myclass& b)
{
return a.s < b.s; // 辞書式の昇順
}
流に宣言、定義した場合に限りますか。
丁寧に教えてくださりありがとうございます。
今のところは、>>468に書かれているようにクラスの外に出す、という方針で対応しておりました。
クラスの中で static をつけて宣言をする、というのが元々やりたかったことに一番近いように思います。重ね重ねありがとうございます。
>>470
> std::sort() で使う時は、
> std::sort(std::begin(objs), std::end(objs), myclass::mycomp);
> 「比較関数には myclass のメンバ関数の mycomp() を使ってくれ」と明示。
これは、mycomp() をクラス内で非static に宣言したときにも使えますか。
それとも、クラスの外で
bool myclass::mycomp(const myclass& a, const myclass& b)
{
return a.s < b.s; // 辞書式の昇順
}
流に宣言、定義した場合に限りますか。
474デフォルトの名無しさん
2019/03/19(火) 07:33:59.57ID:LjcR+vA2 何のために非staticにこだわるんだ?
メンバにアクセスしないならstaticつけとけよ
メンバにアクセスしないならstaticつけとけよ
475デフォルトの名無しさん
2019/03/19(火) 08:36:28.37ID:I3ez8Qch 比較関数をメンバ関数としてクラスに内在させるのが良くない
外部化するか、演算子オーバーロードする
どちらかと言うと比較関数を作らずに大小関係を定義する言語だ
実は、関数やクラスの間の包含関係がある
クラスを比較する関数はクラスの外部におかれるべきであって、メンバ関数にするのは筋が悪い
クラス内部に置くなら大小関係の定義にすべきだ
この手の階層関係は、規格書にもどんな教科書にも一切書かれてないけど、暗黙のうちに了解されている
外部化するか、演算子オーバーロードする
どちらかと言うと比較関数を作らずに大小関係を定義する言語だ
実は、関数やクラスの間の包含関係がある
クラスを比較する関数はクラスの外部におかれるべきであって、メンバ関数にするのは筋が悪い
クラス内部に置くなら大小関係の定義にすべきだ
この手の階層関係は、規格書にもどんな教科書にも一切書かれてないけど、暗黙のうちに了解されている
476デフォルトの名無しさん
2019/03/19(火) 09:31:11.81ID:wYd+ZeEZ 対称な演算子をインスタンスメンバにするのはセンス無いね
477デフォルトの名無しさん
2019/03/19(火) 15:31:26.82ID:Pb8DX7io >>463
template <typename T>
T func(T a) {
if constexpr (std::is_same_v<T, int>) return a * 2;
else if constexpr (std::is_same_v<T, double>) return a / 2;
else return a;
}
template <typename T>
T func(T a) {
if constexpr (std::is_same_v<T, int>) return a * 2;
else if constexpr (std::is_same_v<T, double>) return a / 2;
else return a;
}
478デフォルトの名無しさん
2019/03/19(火) 16:57:51.01ID:W9RsgnS5 namespaceを活用しろ
479デフォルトの名無しさん
2019/03/19(火) 17:11:35.93ID:HTVBHQBE >>477
これの方が関数として切り出して特殊化するより好きな見た目です
これの方が関数として切り出して特殊化するより好きな見た目です
480デフォルトの名無しさん
2019/03/19(火) 21:29:30.46ID:bWZzZfFH >>477
それだと実行時に判断コストがかかるじゃん
それだと実行時に判断コストがかかるじゃん
481デフォルトの名無しさん
2019/03/19(火) 21:29:55.51ID:QA3viZTS if constexprってtypeidで情報取ってきて比較するみたいなオーバーヘッドが0になりますか?
482デフォルトの名無しさん
2019/03/19(火) 21:33:24.72ID:Nfgw9yWF おじさん久々にC++の仕事受けたんだけど
色々進化してて面食らってます
今、右辺値参照っての勉強中なんだけど
ムーブコンストラクタとかはへーへーほーほー言いながら何となく分かり始めた
んだけどさ、
int &&x = 2; // ok <-これだけ使い途が分からん
ローカル変数の右辺値参照て何に使うん?
実験してみた限り、勝手にムーブとかしてくれるわけでもなさそうだし
ローカル変数に&&付いてると何に使えてんな時便利なの?
色々進化してて面食らってます
今、右辺値参照っての勉強中なんだけど
ムーブコンストラクタとかはへーへーほーほー言いながら何となく分かり始めた
んだけどさ、
int &&x = 2; // ok <-これだけ使い途が分からん
ローカル変数の右辺値参照て何に使うん?
実験してみた限り、勝手にムーブとかしてくれるわけでもなさそうだし
ローカル変数に&&付いてると何に使えてんな時便利なの?
483デフォルトの名無しさん
2019/03/19(火) 21:34:25.38ID:/K8ycOQq 使わなくていい
484デフォルトの名無しさん
2019/03/19(火) 21:40:02.75ID:kyorfls3485デフォルトの名無しさん
2019/03/19(火) 22:04:14.68ID:gYGT/BxR 変数宣言した右辺値参照そのものは左辺値という罠
極力そんな物作るべきじゃないね
極力そんな物作るべきじゃないね
486デフォルトの名無しさん
2019/03/19(火) 22:05:37.07ID:8COf7JeC 俺今使い道思いついたんだけど披露してもいい?
>>486
どうぞどうぞ…
どうぞどうぞ…
488デフォルトの名無しさん
2019/03/19(火) 22:37:18.08ID:xP6m0cDT >>480-481
if constexprは実行時コストゼロのはずだよ
if constexprは実行時コストゼロのはずだよ
489デフォルトの名無しさん
2019/03/19(火) 22:53:01.58ID:bWZzZfFH >>488
ifがなんで実行時ゼロなんだよ
ifがなんで実行時ゼロなんだよ
490デフォルトの名無しさん
2019/03/19(火) 23:23:47.41ID:hIuEq8sX 赤っ恥
491デフォルトの名無しさん
2019/03/19(火) 23:26:12.29ID:/K8ycOQq >>489
if constexprにするとコンパイル時に評価されて特定の分岐のみが実体化される
if constexprにするとコンパイル時に評価されて特定の分岐のみが実体化される
492デフォルトの名無しさん
2019/03/19(火) 23:38:47.81ID:zcFktSXp493デフォルトの名無しさん
2019/03/20(水) 00:20:58.62ID:wnXzlprR494デフォルトの名無しさん
2019/03/20(水) 00:27:33.64ID:K21QzJf5 初心者がやたらとアスタリスク使ってポインタの参照値を得ようとするのに似た感じがある。
他言語に移植しにくいだろ、テンプレート化しにくくなるだろ、と小一時間。
他言語に移植しにくいだろ、テンプレート化しにくくなるだろ、と小一時間。
495デフォルトの名無しさん
2019/03/20(水) 00:56:45.75ID:LskeNtBJ アスタリスク使ってポインタの中身取ったらあかんのか・・・
496デフォルトの名無しさん
2019/03/20(水) 03:19:15.41ID:abqqrm1b multimap よりも set の vector の方が便利なのですが、異端ですか?
497デフォルトの名無しさん
2019/03/20(水) 04:26:37.96ID:LuG6mmni 別に
498はちみつ餃子 ◆8X2XSCHEME
2019/03/20(水) 04:53:08.98ID:K9L8gFp5 >>482
既に回答がついているとおり、 rvalue 参照はほとんどムーブのための機能。
ローカル変数的に使う理由はあんまりない。
テンプレート関数の仮引数や auto 変数として rvalue 参照 (の記法) が現れたときは
特殊な推論規則 (ユニバーサル参照) が適用されるというのは気を付ける必要がある。
既に回答がついているとおり、 rvalue 参照はほとんどムーブのための機能。
ローカル変数的に使う理由はあんまりない。
テンプレート関数の仮引数や auto 変数として rvalue 参照 (の記法) が現れたときは
特殊な推論規則 (ユニバーサル参照) が適用されるというのは気を付ける必要がある。
499デフォルトの名無しさん
2019/03/20(水) 07:25:39.73ID:iA5XXTHz ローカル変数もそうだけどintみたいなオブジェクト性が低いものに使っても意味ないわな。
rustの古いチュートリアルのmoveの例がなぜかintでクソだったけれど最近は文字列型になっとった。
rustの古いチュートリアルのmoveの例がなぜかintでクソだったけれど最近は文字列型になっとった。
500デフォルトの名無しさん
2019/03/20(水) 08:44:38.76ID:LSg3zFHe オブジェクト性
501デフォルトの名無しさん
2019/03/20(水) 10:22:31.87ID:fk3FMvWg 考えうるメソッドが少ない=オブジェクト性が低い、とかじゃねえの
int型の変数.length() とかは流石に意味不明に見える
int型の変数.length() とかは流石に意味不明に見える
502デフォルトの名無しさん
2019/03/20(水) 10:40:09.36ID:LuG6mmni 言いたいことは分かるが聞き慣れない言葉を使っているということでは
503デフォルトの名無しさん
2019/03/20(水) 11:01:00.31ID:9pRMZ9XY リテラルが右辺値ってのがよくわからんのだが
上の例のように右辺値参照でうけるとリテラルなのにそのアドレスがとれてしまう
かつ書き換え可能
なので右辺値参照にリテラルいれるときは、一旦名前のない領域にコピーされていると理解している
でもこれって通常の値の代入のときも名前のない領域にコピーしてからさらにコピーというセマンティクスなの?
上の例のように右辺値参照でうけるとリテラルなのにそのアドレスがとれてしまう
かつ書き換え可能
なので右辺値参照にリテラルいれるときは、一旦名前のない領域にコピーされていると理解している
でもこれって通常の値の代入のときも名前のない領域にコピーしてからさらにコピーというセマンティクスなの?
504デフォルトの名無しさん
2019/03/20(水) 11:29:19.49ID:sS5iHBwg 右辺値参照変数それ自体は左辺値だからね
505デフォルトの名無しさん
2019/03/20(水) 15:37:27.50ID:oYbI5+uJ 右辺値を参照で束縛すると、その右辺値の寿命は束縛してる参照と同じところまで引き伸ばされる
この点は左辺値参照も右辺値参照も一緒
この点は左辺値参照も右辺値参照も一緒
506デフォルトの名無しさん
2019/03/20(水) 16:05:23.24ID:9pRMZ9XY それ >>503 に関係ある?
507デフォルトの名無しさん
2019/03/20(水) 16:16:24.82ID:oYbI5+uJ どうして関係ないと思うの?
508デフォルトの名無しさん
2019/03/20(水) 20:55:29.39ID:9pRMZ9XY 一見リテラルのアドレスが取れて書き換えられる、ように見えることに疑問を持ってる
言い方変えると
右辺値参照に代入するとき
リテラルが右辺値でなくて、そのコピーが右辺値なのでは?
そこに寿命がどう関係あるのかわからない
言い方変えると
右辺値参照に代入するとき
リテラルが右辺値でなくて、そのコピーが右辺値なのでは?
そこに寿命がどう関係あるのかわからない
509デフォルトの名無しさん
2019/03/20(水) 21:07:28.64ID:LskeNtBJ アセンブラレベルで言うなら、即値なのかdataセクションにあるのかの違いじゃないの
510デフォルトの名無しさん
2019/03/20(水) 21:31:53.81ID:iA5XXTHz >オブジェクト性
コピーでも参照でも対してコストがかからんものというかそういうニュアンスなんだが
思った以上に伝わらんもんだな。
わかりやすいようにintと文字列を例に出してもこんなもんかもね。
コピーでも参照でも対してコストがかからんものというかそういうニュアンスなんだが
思った以上に伝わらんもんだな。
わかりやすいようにintと文字列を例に出してもこんなもんかもね。
511デフォルトの名無しさん
2019/03/20(水) 22:56:30.82ID:B8C8ZXR4 アドレスが取れたら右辺値ではないみたいな論調だな
512デフォルトの名無しさん
2019/03/20(水) 23:15:02.74ID:oYbI5+uJ >>508
C++のリテラルというのは右辺値を生成する式なんだよ
「42」は値42を持つint型の右辺値を生成することを指示するリテラル
「"hello"」は中身が'h','e','l','l','o','\0'なchar[6]への参照を生成することを指示するリテラル
プログラムが実行時に扱うのは「リテラル」じゃなくてリテラルが生成した右辺値だ
その生成された右辺値は当然メモリ上にあっていいし書き換えられてもいい
(その必要がないならコンパイラがそうじゃないように最適化してももちろんいい)
「コピー」だと思うから違和感があるんじゃない?
リテラルなるものの実体が空の上やPCの隙間に隠れてるわけじゃないし、プログラムはそんなものは取り扱えない
C++のリテラルというのは右辺値を生成する式なんだよ
「42」は値42を持つint型の右辺値を生成することを指示するリテラル
「"hello"」は中身が'h','e','l','l','o','\0'なchar[6]への参照を生成することを指示するリテラル
プログラムが実行時に扱うのは「リテラル」じゃなくてリテラルが生成した右辺値だ
その生成された右辺値は当然メモリ上にあっていいし書き換えられてもいい
(その必要がないならコンパイラがそうじゃないように最適化してももちろんいい)
「コピー」だと思うから違和感があるんじゃない?
リテラルなるものの実体が空の上やPCの隙間に隠れてるわけじゃないし、プログラムはそんなものは取り扱えない
513デフォルトの名無しさん
2019/03/21(木) 00:07:41.99ID:2SUbybof514デフォルトの名無しさん
2019/03/21(木) 00:13:13.37ID:2SUbybof515デフォルトの名無しさん
2019/03/21(木) 00:14:13.96ID:FPuzf0hs 牛からは牛乳が出るけど牛は牛乳じゃないだろ?
そういうこと
そういうこと
516デフォルトの名無しさん
2019/03/21(木) 00:20:16.95ID:FPuzf0hs リテラルってのは文法要素なの
演算子とかキーワードとかコメントとかそういうものの仲間なの
実行時にはそんなものは出てこない
プログラムが扱えるのは「値」だけで、左辺値とか右辺値というのはその分類
int型の0x2Aという値を生成しろという命令をコンパイラに作ってもらうためにプログラマが書くものが「42」というリテラル
さっきからずっとそこを混同してる
演算子とかキーワードとかコメントとかそういうものの仲間なの
実行時にはそんなものは出てこない
プログラムが扱えるのは「値」だけで、左辺値とか右辺値というのはその分類
int型の0x2Aという値を生成しろという命令をコンパイラに作ってもらうためにプログラマが書くものが「42」というリテラル
さっきからずっとそこを混同してる
517デフォルトの名無しさん
2019/03/21(木) 01:01:57.88ID:7qm1Whlz '\0' と L'\0' で違うしな
518デフォルトの名無しさん
2019/03/21(木) 02:01:40.67ID:/XDYuiDC >>503,514
数値リテラルは右辺値。
https://timsong-cpp.github.io/cppwp/n4659/expr.prim.literal#1
右辺値で参照を初期化する際は一時オブジェクト(=名前のない領域)が生成され、
それが参照されるというルールになってる。
https://timsong-cpp.github.io/cppwp/n4659/dcl.init.ref#5.2
参照を初期化する際のルールは代入のセマンティクスとは関係ない。
int i; i = 42 の代入で一時オブジェクトは不要。
代入がユーザー定義された T::operator=(T const&) に解決されるなら、
引数の参照を初期化する際に一時オブジェクトが作られることはある。
数値リテラルは右辺値。
https://timsong-cpp.github.io/cppwp/n4659/expr.prim.literal#1
右辺値で参照を初期化する際は一時オブジェクト(=名前のない領域)が生成され、
それが参照されるというルールになってる。
https://timsong-cpp.github.io/cppwp/n4659/dcl.init.ref#5.2
参照を初期化する際のルールは代入のセマンティクスとは関係ない。
int i; i = 42 の代入で一時オブジェクトは不要。
代入がユーザー定義された T::operator=(T const&) に解決されるなら、
引数の参照を初期化する際に一時オブジェクトが作られることはある。
519デフォルトの名無しさん
2019/03/21(木) 02:39:44.49ID:XdhJMiFj 即値になる場合があるから右辺値なのかね。
520デフォルトの名無しさん
2019/03/21(木) 08:57:30.01ID:YzD9JPpd そりゃ、代入の左辺にリテラルを置ける言語なんてまずないから。
521デフォルトの名無しさん
2019/03/21(木) 09:47:23.84ID:MFgTD1Yv コピーのコストを抑えつつ、二重に参照されないように元のオブジェクトを指す変数を無効にしたいってのが
moveに期待される機能。
即値だったり呼び出しの引数にコンストラクタごと放り込まれた場合には
上記のような二重に参照されるようなシチュエーションにはならんのでmove受けする関数が定義されてれば
その関数を呼びましょうってのがc++のmoveの取り扱い。
しかしこんなにもシンタックスが複雑で機能性も新しくてオーバーロードでさらに複雑になってるってのは
やっぱよくないと思うわ。
テンプレートの都合でオーバーロードが必要なのもわかるが明らかにやりすぎ。
moveに期待される機能。
即値だったり呼び出しの引数にコンストラクタごと放り込まれた場合には
上記のような二重に参照されるようなシチュエーションにはならんのでmove受けする関数が定義されてれば
その関数を呼びましょうってのがc++のmoveの取り扱い。
しかしこんなにもシンタックスが複雑で機能性も新しくてオーバーロードでさらに複雑になってるってのは
やっぱよくないと思うわ。
テンプレートの都合でオーバーロードが必要なのもわかるが明らかにやりすぎ。
522デフォルトの名無しさん
2019/03/21(木) 23:38:07.17ID:/AmzWt7k 会社にもいるわ、そんなどうでもいいことをウンチクばっか垂れて一向に仕事が終わらないやつw
言語を設計するなら、必要かもしれんが大抵は不要
言語を設計するなら、必要かもしれんが大抵は不要
523デフォルトの名無しさん
2019/03/21(木) 23:48:46.46ID:4AnWSc+d 「だからC++スゲー俺スゲー」ってやつじゃないの?それ
>>521がそうだとは思えんが
>>521がそうだとは思えんが
524デフォルトの名無しさん
2019/03/21(木) 23:52:29.07ID:MDPJmZ4F 最近は彼らもRustにマウント奪われて必死なんだよ
525はちみつ餃子 ◆8X2XSCHEME
2019/03/21(木) 23:53:05.57ID:uQDXDHVg 理屈がわかってないのに仕事が終わってるのもそれはそれで不気味じゃない?
526デフォルトの名無しさん
2019/03/21(木) 23:56:55.88ID:MDPJmZ4F >>525
moveなんか理解してなくてもだいたいのC++の現場では仕事に支障ないよ
moveなんか理解してなくてもだいたいのC++の現場では仕事に支障ないよ
527デフォルトの名無しさん
2019/03/21(木) 23:58:36.31ID:tdnDQnUt528デフォルトの名無しさん
2019/03/21(木) 23:59:59.31ID:MDPJmZ4F >>527
君はC++の30年の歴史を否定するのかい?
君はC++の30年の歴史を否定するのかい?
529デフォルトの名無しさん
2019/03/22(金) 00:10:18.90ID:cT8zbTae templateも使うことは、OKだがtemplateを用いたクラスを作ることは禁止されている場合がおおい
そもそも、設計段階で型が決定しないなんてことは、汎用ライブラリを書く以外はないだろ
そもそも、設計段階で型が決定しないなんてことは、汎用ライブラリを書く以外はないだろ
530デフォルトの名無しさん
2019/03/22(金) 00:22:46.08ID:aMVb4R4+ いやいや
決まっていてもそれが複数だった場合使うだろ
あと普通にライブラリは作るものじゃ
決まっていてもそれが複数だった場合使うだろ
あと普通にライブラリは作るものじゃ
531デフォルトの名無しさん
2019/03/22(金) 00:54:33.33ID:wBHxe+dJ ていうか、普通に仕事をしていたら「ああここは処理共通だからまとめて・・
・・あとここをこうしとけば拡張にも対応できるし・・まあ客が無茶振りして
きたときの予防にそれなりに汎用性もたせとくか」とかやっているうちに
いつのまにかライブラリができあがってる、これがプロの仕事だ
・・あとここをこうしとけば拡張にも対応できるし・・まあ客が無茶振りして
きたときの予防にそれなりに汎用性もたせとくか」とかやっているうちに
いつのまにかライブラリができあがってる、これがプロの仕事だ
532デフォルトの名無しさん
2019/03/22(金) 00:55:35.30ID:wNvbYX88 委託業務メインなの?
533デフォルトの名無しさん
2019/03/22(金) 01:10:14.13ID:LxKdyD8r 定数って参照透過性があるよね。
C++はconstexprがあるのだから、関数型プログラミングを超える、定数型プログラミングという新パラダイムを提唱したいと思います。
C++はconstexprがあるのだから、関数型プログラミングを超える、定数型プログラミングという新パラダイムを提唱したいと思います。
534はちみつ餃子 ◆8X2XSCHEME
2019/03/22(金) 01:14:02.50ID:6voZlles コンパイル時レイトレーシングとかやってる人もいるけど狂気の産物って感じがして C++ ぽくて良い。
535デフォルトの名無しさん
2019/03/22(金) 02:28:04.74ID:jw/5aFNH しーぷら一筋30年〜、速いの、上手いの、やっすいの〜
536デフォルトの名無しさん
2019/03/22(金) 02:37:28.24ID:M4ChOHMa >>534
>コンパイル時レイトレーシング
一応訊くけど、ああいうのはレイ当てる3Dオブジェクトのデータは
全てC++のソースに書かないといけないことは分かってる?(モデリングデータをファイルから読んでコンパイル時にレイトレするのは当然不可能)
あの試み自体は面白いと思うけどね・・
実用性や(ソフトウェアの)ユーザーの利益にならないことをもてはやさないで欲しいもんだが
>コンパイル時レイトレーシング
一応訊くけど、ああいうのはレイ当てる3Dオブジェクトのデータは
全てC++のソースに書かないといけないことは分かってる?(モデリングデータをファイルから読んでコンパイル時にレイトレするのは当然不可能)
あの試み自体は面白いと思うけどね・・
実用性や(ソフトウェアの)ユーザーの利益にならないことをもてはやさないで欲しいもんだが
537デフォルトの名無しさん
2019/03/22(金) 06:24:27.94ID:j45II+ff プリレンダのゲームは大量にあるしレイトレーシングしとくのもその延長線上じゃない
538デフォルトの名無しさん
2019/03/22(金) 08:03:01.00ID:VPBgCitj コンパイル時ファイル入出力がサポートされればいいわけだ
それにレイトレーシングはまあ確かに冗談も含まれてるだろうけどそれだけ複雑で重い処理でも可能だという技術デモは価値があるだろう
画像にフィルタを適用するとかパターンが決まっているエフェクトを生成するだとか色々できて可能性はあると思うよ
それにレイトレーシングはまあ確かに冗談も含まれてるだろうけどそれだけ複雑で重い処理でも可能だという技術デモは価値があるだろう
画像にフィルタを適用するとかパターンが決まっているエフェクトを生成するだとか色々できて可能性はあると思うよ
539デフォルトの名無しさん
2019/03/22(金) 08:17:25.29ID:sSVPAm0I 汎用的につかってもらうことを目的としているライブラリを除けば
コーディング時に型が決まっていないことなんてありえない
もしあるならそれは設計してないってことじゃん
templateなんて汎用的につかってもらうことを目的としているライブラリを書く場合にしか使わないだろ
後で、intからdoubleになるかもしれないから、なんて言ってるバカいるけど
きっちり設計しろよ
コーディング時に型が決まっていないことなんてありえない
もしあるならそれは設計してないってことじゃん
templateなんて汎用的につかってもらうことを目的としているライブラリを書く場合にしか使わないだろ
後で、intからdoubleになるかもしれないから、なんて言ってるバカいるけど
きっちり設計しろよ
540デフォルトの名無しさん
2019/03/22(金) 08:28:45.64ID:wNvbYX88541デフォルトの名無しさん
2019/03/22(金) 09:08:34.94ID:OAKB0NCU542デフォルトの名無しさん
2019/03/22(金) 09:11:15.22ID:VPBgCitj >>541
俺は好きになったよ
俺は好きになったよ
543デフォルトの名無しさん
2019/03/22(金) 09:31:33.91ID:OAKB0NCU いいね、趣味で気楽に使ってる人は
544デフォルトの名無しさん
2019/03/22(金) 09:52:12.19ID:VPBgCitj ええやろ
楽しいわ
楽しいわ
545デフォルトの名無しさん
2019/03/22(金) 10:20:45.52ID:RSNtol3b メタプログラミングってコンパイル時に評価してゼロオーバーヘッドとかすごいとは思うけど
学習コストや可読性と釣り合ってるか?
学習コストや可読性と釣り合ってるか?
546デフォルトの名無しさん
2019/03/22(金) 10:32:59.03ID:OAKB0NCU 仕事で4月になったらまた新しいメンバーシップ増えるけど
なまじ趣味でc++使ってたやつが一番困る
新しい機能使いたいだけでトータルの生産性考えないんだよね
なまじ趣味でc++使ってたやつが一番困る
新しい機能使いたいだけでトータルの生産性考えないんだよね
547デフォルトの名無しさん
2019/03/22(金) 10:41:23.85ID:wNvbYX88 そんな一部の現場の実情を忖度してたら競争に負けてしまうのではないか?
548デフォルトの名無しさん
2019/03/22(金) 10:45:43.23ID:VPBgCitj 毎回同じこといってる奴いるよな
このスレには10人くらいしか居ないってネタは挙がってるし
このスレには10人くらいしか居ないってネタは挙がってるし
549デフォルトの名無しさん
2019/03/22(金) 11:07:13.15ID:v3KGlGVP550デフォルトの名無しさん
2019/03/22(金) 11:11:55.43ID:nPC1T1eJ >>545
やってることの性質にもよる
サーバーサイドなんかで潤沢なリソースを使って長時間動くものだとほとんど意味はないよ
その場合.NETやJavaのような実行時コード生成の方が遥かに柔軟性が高く、オーバーヘッドも実質的にはほとんどない
やってることの性質にもよる
サーバーサイドなんかで潤沢なリソースを使って長時間動くものだとほとんど意味はないよ
その場合.NETやJavaのような実行時コード生成の方が遥かに柔軟性が高く、オーバーヘッドも実質的にはほとんどない
551はちみつ餃子 ◆8X2XSCHEME
2019/03/22(金) 12:34:15.37ID:6voZlles >>536
それ自体はただの余興だけど、
コンパイラのバグを顕在化させる成果を出したりもしてるよ。
処理系の開発チームにとってもまずは問題を発見できなきゃ直せないからさ、
色んな形で使ってみる人だってそれはそれで必要なんだよ。
処理系の質が良くなるのは間接的にユーザの利益にだってなる。
それ自体はただの余興だけど、
コンパイラのバグを顕在化させる成果を出したりもしてるよ。
処理系の開発チームにとってもまずは問題を発見できなきゃ直せないからさ、
色んな形で使ってみる人だってそれはそれで必要なんだよ。
処理系の質が良くなるのは間接的にユーザの利益にだってなる。
553デフォルトの名無しさん
2019/03/22(金) 14:12:54.65ID:M4ChOHMa >>551
まぁその理屈はわからんでもないしメタプログラミングやってるとあの人のブログは勉強になるけどね
ただああいうのはブラックジョークの類であることを忘れると>>537みたいな勘違いした奴が出てくる
>>538
>画像にフィルタを適用するとかパターンが決まっているエフェクトを生成するだとか
それ、画像もコンパイル時に確定してるデータじゃないとあかんのやで?
(しかもconstexprなcharの配列みたいな、C++のコードに直さないといけない)
重ねて言うけど、面白い試みだけど実用的ではないんだよ、ああいうのをC++的だとかカッコいいとかもてはやすのはC++の衰退を招くだけ
趣味グラマは自分が趣味グラマであって時に実用性からかけ離れてるということを自覚すべき
まぁその理屈はわからんでもないしメタプログラミングやってるとあの人のブログは勉強になるけどね
ただああいうのはブラックジョークの類であることを忘れると>>537みたいな勘違いした奴が出てくる
>>538
>画像にフィルタを適用するとかパターンが決まっているエフェクトを生成するだとか
それ、画像もコンパイル時に確定してるデータじゃないとあかんのやで?
(しかもconstexprなcharの配列みたいな、C++のコードに直さないといけない)
重ねて言うけど、面白い試みだけど実用的ではないんだよ、ああいうのをC++的だとかカッコいいとかもてはやすのはC++の衰退を招くだけ
趣味グラマは自分が趣味グラマであって時に実用性からかけ離れてるということを自覚すべき
554デフォルトの名無しさん
2019/03/22(金) 14:23:16.46ID:M4ChOHMa あ、でも
>>538
>コンパイル時ファイル入出力
これはやり過ぎな気もするけど個人的にはあっても良いとは思うw
ただ、画像のフィルタリングをコンパイル時にやるのとツール作って実行時にやるのとで
前者が便利な場面ってあるのかね?(しかも前者は非常に開発コストかかる
>>538
>コンパイル時ファイル入出力
これはやり過ぎな気もするけど個人的にはあっても良いとは思うw
ただ、画像のフィルタリングをコンパイル時にやるのとツール作って実行時にやるのとで
前者が便利な場面ってあるのかね?(しかも前者は非常に開発コストかかる
555デフォルトの名無しさん
2019/03/22(金) 14:28:03.34ID:VPBgCitj >>553
コンパイル時に確定しているデータがあるかもしれないし無いかもしれない
fstreamがコンパイル時に動くようになればいいだけ
そうなれば準備が面倒なプリプロセスも必要ない
研究に対して実用性がうんたらとかわけ分からないことを言うのはよくないなあ
様々なアイデアから自分の都合のいいところをつまんで実用化するのが末端の仕事だろうに
俺が使い道が思いつかないことに熱心になってると界隈が衰退するとかさすがに草生える
コンパイル時に確定しているデータがあるかもしれないし無いかもしれない
fstreamがコンパイル時に動くようになればいいだけ
そうなれば準備が面倒なプリプロセスも必要ない
研究に対して実用性がうんたらとかわけ分からないことを言うのはよくないなあ
様々なアイデアから自分の都合のいいところをつまんで実用化するのが末端の仕事だろうに
俺が使い道が思いつかないことに熱心になってると界隈が衰退するとかさすがに草生える
556デフォルトの名無しさん
2019/03/22(金) 14:29:27.80ID:OAKB0NCU 静的なものはなんでもコンパイル時に解決するって思想が典型的なハンマー釘病なんだよ
コンパイル時だけが解じゃない
そのうち仕事で特に理由なくむやみに重いconstexprぶちこむやつがでてくるだろう
それでビルド時間5分10分長くなったりするわけだ
ほんとc++はクソ
コンパイル時だけが解じゃない
そのうち仕事で特に理由なくむやみに重いconstexprぶちこむやつがでてくるだろう
それでビルド時間5分10分長くなったりするわけだ
ほんとc++はクソ
557デフォルトの名無しさん
2019/03/22(金) 14:32:15.97ID:VPBgCitj558デフォルトの名無しさん
2019/03/22(金) 14:49:00.32ID:X0mnKdTP >>555
constexpr関数みたいにコンパイル時にできる、実行時にしか出来ない、を「自動で振り分けて問題なく動く仕組み」
の範囲に全て収まるならそうだろうな
後半煽ってきたのでキツめに言わせて頂くが、コンパイル時レイトレはソース公開されてたろ?
あれを実用したゲーム開発の例を一つでも挙げてみろ
有意義な研究ならとっくに実用されてんだよボケ
あるいはボレロ氏の試みに同調して何もかも(ファイル入出力すら)コンパイル時に出来る言語にしよう、なんて動きが委員会に起きてるのか?
お前多分まともにメタプログラミング出来てるレベルじゃないのに調子乗ってるだろ
constexpr関数みたいにコンパイル時にできる、実行時にしか出来ない、を「自動で振り分けて問題なく動く仕組み」
の範囲に全て収まるならそうだろうな
後半煽ってきたのでキツめに言わせて頂くが、コンパイル時レイトレはソース公開されてたろ?
あれを実用したゲーム開発の例を一つでも挙げてみろ
有意義な研究ならとっくに実用されてんだよボケ
あるいはボレロ氏の試みに同調して何もかも(ファイル入出力すら)コンパイル時に出来る言語にしよう、なんて動きが委員会に起きてるのか?
お前多分まともにメタプログラミング出来てるレベルじゃないのに調子乗ってるだろ
559デフォルトの名無しさん
2019/03/22(金) 15:11:09.28ID:VPBgCitj >>558
これだけ複雑な処理も出来るんですよっていうだけの話だからレイトレーシングである必要はない
それができるならこういうこともできるんじゃないか?ってなるのが普通
あとゲームのソースは公開されないから知るかとしか言いようがない
C++20でコンパイル時動的メモリが追加される予定だし、実行時でもコンパイル時でもタイミングが違うだけだからいつでも何でもできていいだろっていう流れは既にできている
標準化委員会がボレロを認知しているかは知らん
これだけ複雑な処理も出来るんですよっていうだけの話だからレイトレーシングである必要はない
それができるならこういうこともできるんじゃないか?ってなるのが普通
あとゲームのソースは公開されないから知るかとしか言いようがない
C++20でコンパイル時動的メモリが追加される予定だし、実行時でもコンパイル時でもタイミングが違うだけだからいつでも何でもできていいだろっていう流れは既にできている
標準化委員会がボレロを認知しているかは知らん
560デフォルトの名無しさん
2019/03/22(金) 15:55:54.71ID:2qpWO6k3 コンパイラで高度なことが色々できるし、原理も実現も公開されてる、
興味を持って調べれば(ある程度なら)理解だってできるかもしれない。
というのはC++の素晴らしい部分だと思うのよ。
で、調べて知ったことを使って試したい、他の人に紹介したいってのは
これまた自然な気持ちだろう。自分もそういう面があるし。
実際に複数人で協力して作る実用プロジェクトで機能を使うかどうかは、
「コンパイル時間」だの「高度化・汎用化で読みにくくなる」だの、
トレードオフの問題になるけど。
分からないのは、「俺はこれ知ってる、お前は知らないだろ」と
他人より優位に立つ材料としてしか知識を使ってないような
投稿が見受けられることなんだよね。
ことにネット掲示板なんて、見ず知らずの他人同士なんだから、
相手をバカにしたって仕方ない、何の益もないだろうに。
興味を持って調べれば(ある程度なら)理解だってできるかもしれない。
というのはC++の素晴らしい部分だと思うのよ。
で、調べて知ったことを使って試したい、他の人に紹介したいってのは
これまた自然な気持ちだろう。自分もそういう面があるし。
実際に複数人で協力して作る実用プロジェクトで機能を使うかどうかは、
「コンパイル時間」だの「高度化・汎用化で読みにくくなる」だの、
トレードオフの問題になるけど。
分からないのは、「俺はこれ知ってる、お前は知らないだろ」と
他人より優位に立つ材料としてしか知識を使ってないような
投稿が見受けられることなんだよね。
ことにネット掲示板なんて、見ず知らずの他人同士なんだから、
相手をバカにしたって仕方ない、何の益もないだろうに。
561デフォルトの名無しさん
2019/03/22(金) 16:19:37.76ID:M4ChOHMa >>559
>それができるならこういうこともできるんじゃないか?ってなるのが普通
最初の方の主張からずいぶんと縮小したなw
>あとゲームのソースは公開されないから知るかとしか言いようがない
ググれ
ソースの公開なんかされてなくとも技術の動向くらいあちこちで紹介されてる
>C++20 いつでも何でもできていいだろっていう流れは既にできている
今調べたら確かにそうみたいだな、俺の認識不足だったし出来ることが増えること自体は悪くないと思う(前にもそう言ったが
ただ、
>コンパイル時にやるのとツール作って実行時にやるのとで前者が便利な場面ってあるのかね?
この疑問に答えて欲しいもんだけどね
>俺が使い道が思いつかないことに熱心になってると界隈が衰退するとかさすがに草生える
ならお前は使い道を知ってるんだろ?って話
>それができるならこういうこともできるんじゃないか?ってなるのが普通
最初の方の主張からずいぶんと縮小したなw
>あとゲームのソースは公開されないから知るかとしか言いようがない
ググれ
ソースの公開なんかされてなくとも技術の動向くらいあちこちで紹介されてる
>C++20 いつでも何でもできていいだろっていう流れは既にできている
今調べたら確かにそうみたいだな、俺の認識不足だったし出来ることが増えること自体は悪くないと思う(前にもそう言ったが
ただ、
>コンパイル時にやるのとツール作って実行時にやるのとで前者が便利な場面ってあるのかね?
この疑問に答えて欲しいもんだけどね
>俺が使い道が思いつかないことに熱心になってると界隈が衰退するとかさすがに草生える
ならお前は使い道を知ってるんだろ?って話
562デフォルトの名無しさん
2019/03/22(金) 16:33:55.31ID:M4ChOHMa 正直、ファイル(C++ではない)に書かれてる内容に従ってコンパイル時条件分岐とか手軽に出来たら
結構実用性はあると思うよ
ただその一方で、ここでプロとアマチュアのC++に対する意見がひどく乖離してる(このスレ見てたら気づいてないとおかしいが)ことに
全く問題意識が無いのであれば、それは結局自分が偉そうにしたいだけってことだと思うけどね
結構実用性はあると思うよ
ただその一方で、ここでプロとアマチュアのC++に対する意見がひどく乖離してる(このスレ見てたら気づいてないとおかしいが)ことに
全く問題意識が無いのであれば、それは結局自分が偉そうにしたいだけってことだと思うけどね
563デフォルトの名無しさん
2019/03/22(金) 16:39:09.47ID:M4ChOHMa constexprの拡張とか、そんなに開発現場(アマチュアでもソフト開発者等)から求められてなさそうなことにばかり
最近のC++は注力しすぎじゃないの、ってだけの話なんだけどね
ここでそれを言うと毎回荒れるんだよなぁ
最近のC++は注力しすぎじゃないの、ってだけの話なんだけどね
ここでそれを言うと毎回荒れるんだよなぁ
564デフォルトの名無しさん
2019/03/22(金) 16:45:13.61ID:7XQoWDDf C++11すら使えないもんな
565デフォルトの名無しさん
2019/03/22(金) 16:46:23.14ID:VPBgCitj >>563
別に注力しすぎてはいない更新内容は多岐にわたる
constexprは派手だから注目されやすいだけ
https://cpprefjp.github.io/lang/cpp11.html
https://cpprefjp.github.io/lang/cpp14.html
https://cpprefjp.github.io/lang/cpp17.html
https://cpprefjp.github.io/lang/cpp20.html
別に注力しすぎてはいない更新内容は多岐にわたる
constexprは派手だから注目されやすいだけ
https://cpprefjp.github.io/lang/cpp11.html
https://cpprefjp.github.io/lang/cpp14.html
https://cpprefjp.github.io/lang/cpp17.html
https://cpprefjp.github.io/lang/cpp20.html
566デフォルトの名無しさん
2019/03/22(金) 16:48:03.99ID:d9SNUM0T 愛知県人注目。遠州地区の技術者も注目。
[急募]
豊川ハローワーク管内の求人で、SEの席に空きがあります。
四月スタートの仕事なので、急いで応募して下さい。報酬は、
月に20万円から60万円。
英語力は必須ではありませんが、『実はTOEICのスコア以上に
英語ができる』と面接では答えて下さい。(英語は入社してから
頑張って下さい。)
ネットワーク関係が得意だと言って下さい。JP1の経験があれば、
なおよし。ECUの経験があれば、さらによし。キャティアのマクロが
書ける人、大歓迎。(これらは、必須ではありません。)
[急募]
豊川ハローワーク管内の求人で、SEの席に空きがあります。
四月スタートの仕事なので、急いで応募して下さい。報酬は、
月に20万円から60万円。
英語力は必須ではありませんが、『実はTOEICのスコア以上に
英語ができる』と面接では答えて下さい。(英語は入社してから
頑張って下さい。)
ネットワーク関係が得意だと言って下さい。JP1の経験があれば、
なおよし。ECUの経験があれば、さらによし。キャティアのマクロが
書ける人、大歓迎。(これらは、必須ではありません。)
567デフォルトの名無しさん
2019/03/22(金) 16:48:35.97ID:OAKB0NCU >>557
それがお前の案?
手動じゃんそれ
くそださいとしか
仕事では数十人規模でやってるわけで、そんな人力チェックしたくないわけよ
プルリクぐらいはやってるが全て見きれるわけじゃない
まずはビルド時間の推移とか、内訳を監視するタスクを回すことを考えるだろうが
そういう非生産的な仕事が増えることがクソなんだよ
それがお前の案?
手動じゃんそれ
くそださいとしか
仕事では数十人規模でやってるわけで、そんな人力チェックしたくないわけよ
プルリクぐらいはやってるが全て見きれるわけじゃない
まずはビルド時間の推移とか、内訳を監視するタスクを回すことを考えるだろうが
そういう非生産的な仕事が増えることがクソなんだよ
568デフォルトの名無しさん
2019/03/22(金) 16:51:03.18ID:7XQoWDDf569デフォルトの名無しさん
2019/03/22(金) 16:51:56.89ID:y6Rn9cx8 C++の新機能なんて大半の開発現場にはいらんだろ
前いたところは初心者向けの教科書を読めばだいたいわかる基本的な構文しか使ってなかった
constexprもなければテンプレートもラムダ式もなかった
コード書けん奴がコードレビューするからそんなもん使った日にはわかりやすく書けとか怒られた
前いたところは初心者向けの教科書を読めばだいたいわかる基本的な構文しか使ってなかった
constexprもなければテンプレートもラムダ式もなかった
コード書けん奴がコードレビューするからそんなもん使った日にはわかりやすく書けとか怒られた
570デフォルトの名無しさん
2019/03/22(金) 16:54:51.52ID:wNvbYX88571デフォルトの名無しさん
2019/03/22(金) 16:56:04.17ID:VPBgCitj572デフォルトの名無しさん
2019/03/22(金) 17:00:41.61ID:M4ChOHMa まぁconstexprのコンパイル時コストを気にするだけなら多分ifdefでdefine CONSTEXPRとかすればいいだろうけど
メタプログラミングはやっぱコンパイル時間長くなる
個人で開発してても無視出来ないわ・・
>>571
性能上げて比較結果を出してから言うべき
メタプログラミングはやっぱコンパイル時間長くなる
個人で開発してても無視出来ないわ・・
>>571
性能上げて比較結果を出してから言うべき
573デフォルトの名無しさん
2019/03/22(金) 17:03:59.06ID:M4ChOHMa ていうか>>560の言ったことを実証するかのような流れだなww
574デフォルトの名無しさん
2019/03/22(金) 17:06:35.17ID:nPC1T1eJ >>571
一般に、無駄な拘りに時間かけるのを避けてその分ボトルネック潰しに時間をかけたほうがソフトウェアのパフォーマンスは良くなるよ
一般に、無駄な拘りに時間かけるのを避けてその分ボトルネック潰しに時間をかけたほうがソフトウェアのパフォーマンスは良くなるよ
575デフォルトの名無しさん
2019/03/22(金) 17:54:21.92ID:pFUycIOf >>563
求められているだろ?
求められているだろ?
576デフォルトの名無しさん
2019/03/22(金) 18:34:40.09ID:LxKdyD8r 関数型同様、定数型プログラミングにもアンチがわいてきましたか。
アンチがわいたってことは、定数型プログラミングが世の中に受け入れられたってことでいいですね?
アンチがわいたってことは、定数型プログラミングが世の中に受け入れられたってことでいいですね?
577デフォルトの名無しさん
2019/03/22(金) 19:08:02.11ID:2qpWO6k3 その機能自体への好悪もあるか知れないけど、
「導入されたからには直ちに覚えて使わないのは罪悪」あるいは
「使わない奴は学習能力の劣る無能、使わないのでなく使えないんだろ」
みたいな、新機能の押し付けが嫌がられてるって部分もあるんでないかな。
「導入されたからには直ちに覚えて使わないのは罪悪」あるいは
「使わない奴は学習能力の劣る無能、使わないのでなく使えないんだろ」
みたいな、新機能の押し付けが嫌がられてるって部分もあるんでないかな。
578デフォルトの名無しさん
2019/03/22(金) 19:19:05.75ID:wNvbYX88 実行時おじさん
579デフォルトの名無しさん
2019/03/22(金) 19:21:05.55ID:OAKB0NCU580デフォルトの名無しさん
2019/03/22(金) 19:23:25.37ID:YgnW0VV3 Googleの結論
Think twice before using template metaprogramming or other complicated template techniques;
think about whether the average member of your team will be able to understand your code well enough
to maintain it after you switch to another project, or whether a non-C++ programmer or someone casually browsing the code base will be able to understand the error messages or trace the flow of a function they want to call.
https://google.github.io/styleguide/cppguide.html#Template_metaprogramming
Think twice before using template metaprogramming or other complicated template techniques;
think about whether the average member of your team will be able to understand your code well enough
to maintain it after you switch to another project, or whether a non-C++ programmer or someone casually browsing the code base will be able to understand the error messages or trace the flow of a function they want to call.
https://google.github.io/styleguide/cppguide.html#Template_metaprogramming
581デフォルトの名無しさん
2019/03/22(金) 19:26:07.13ID:LxKdyD8r 【定数型プログラミングの掟】
> 「ブッ殺す」と心の中で思ったならッ!その時スデに行動は終わっているんだッ!
> 「ブッ殺す」と心の中で思ったならッ!その時スデに行動は終わっているんだッ!
582デフォルトの名無しさん
2019/03/22(金) 19:31:22.14ID:M4ChOHMa でも終わったときめちゃくちゃ疲労してるんやで
583デフォルトの名無しさん
2019/03/22(金) 20:21:58.70ID:nPC1T1eJ585デフォルトの名無しさん
2019/03/22(金) 21:57:31.87ID:FYyZQ6ej コンパイル時C++コンパイルをやったら尊敬する
586デフォルトの名無しさん
2019/03/22(金) 22:28:07.22ID:1RSJEChR 正規表現のコンパイルならありかもしれないw
587デフォルトの名無しさん
2019/03/22(金) 22:42:15.38ID:78R951f8 自分の知らない概念を勉強するって意味ならlispのマクロでも覚えたほうがはるかに有意義なんだが
そうしないだよね。
なぜならそれじゃ老害にマウントできないから。
まあそういうクソみたいな思想のやつが年取って老害化するんだけど。
そうしないだよね。
なぜならそれじゃ老害にマウントできないから。
まあそういうクソみたいな思想のやつが年取って老害化するんだけど。
588デフォルトの名無しさん
2019/03/22(金) 23:22:27.03ID:C43yQc+Q589デフォルトの名無しさん
2019/03/22(金) 23:29:13.79ID:LxKdyD8r でもそれがLALR(1)パーサーを生成するなら?
590デフォルトの名無しさん
2019/03/22(金) 23:36:46.32ID:tosUzxZE コンパイルに時間かかるから、その間暇つぶしに裏でレイトレーシングして遊んでんのかと思った
591デフォルトの名無しさん
2019/03/23(土) 00:40:56.99ID:A6OyMWzd デイトレーシングってストーカーのことだっけ。
592デフォルトの名無しさん
2019/03/23(土) 06:55:12.12ID:jegHMgvE593デフォルトの名無しさん
2019/03/23(土) 07:22:13.12ID:WDi4jE89 長年プログラムの保守やってるの見るとその通りだが
594デフォルトの名無しさん
2019/03/23(土) 08:07:02.46ID:T5eFVdJU constexpr指定するだけのことが技巧的なのか知らなかった
I/Oや動的メモリと関係なさそうなところに脳死で適当に付けておくだけでいいのに
I/Oや動的メモリと関係なさそうなところに脳死で適当に付けておくだけでいいのに
595デフォルトの名無しさん
2019/03/23(土) 08:35:25.57ID:RdkKrV9k 霞ヶ関文学は禁止ってこった。
596デフォルトの名無しさん
2019/03/23(土) 12:20:32.92ID:0OEv8pnV 基本的に新機能は分かりやすく書きやすくするためのものなんだけどな
597デフォルトの名無しさん
2019/03/23(土) 12:50:41.97ID:p3DdVUb8 数学への回帰と先祖返りじゃないの
分かり易くなるんじゃない、難しくなるんだよ
分かり易くなるんじゃない、難しくなるんだよ
598デフォルトの名無しさん
2019/03/23(土) 13:37:38.67ID:v/SrloXk template<typename Item>
Item Fool::InsertItem(const Item& item)
{
//なにがしかの処理
item.c_str()...
}
こんなコード見かけると吐き気がするわ
c_str()を持つ型しか使えないじゃん
なんのためにtemplate使ってんだよw
Item Fool::InsertItem(const Item& item)
{
//なにがしかの処理
item.c_str()...
}
こんなコード見かけると吐き気がするわ
c_str()を持つ型しか使えないじゃん
なんのためにtemplate使ってんだよw
599デフォルトの名無しさん
2019/03/23(土) 13:47:58.81ID:uJTAZAlu c_strを持つ型に限定したいから問題無いけど。
600デフォルトの名無しさん
2019/03/23(土) 13:49:44.59ID:T5eFVdJU 何か変か?
c_strを持っているクラスのみを想定しているんじゃないの
本当はSFINAEで消すべきかも知れないけど
c_strを持っているクラスのみを想定しているんじゃないの
本当はSFINAEで消すべきかも知れないけど
602デフォルトの名無しさん
2019/03/23(土) 14:34:53.50ID:JQCK5flX >>598
程度のはsfinaeでいいんだけどね
程度のはsfinaeでいいんだけどね
603デフォルトの名無しさん
2019/03/23(土) 14:56:23.90ID:EB4wgvrK basic_stringの特殊化に限定するなら文字型を受け取るだけでいいと思うんだけど
604デフォルトの名無しさん
2019/03/23(土) 15:01:12.26ID:fJspHuQc >>598
constexprでコンパイル時に特定のメソッドがあるか調べられないの?
constexprでコンパイル時に特定のメソッドがあるか調べられないの?
605デフォルトの名無しさん
2019/03/23(土) 15:03:42.82ID:EB4wgvrK それは型の情報だから、すでに言われてるようにメタプログラミングでsfinae使って調べるしかない
606デフォルトの名無しさん
2019/03/23(土) 15:55:31.24ID:RdkKrV9k 吐き気がするだけで済んでいるのなら御の字。
607デフォルトの名無しさん
2019/03/23(土) 16:15:35.83ID:T5eFVdJU アレルギーが重症化すると辺境で難癖付けて騒ぎ出したりテンプレート指定すると何故か生産性が落ち出したりするからな
608デフォルトの名無しさん
2019/03/23(土) 17:08:18.78ID:qcSb+DlG pythonみたいにエラーメッセージ表示してくれるだけで大分マシになると思うんだけどな
609デフォルトの名無しさん
2019/03/23(土) 18:52:42.53ID:4cH0E/is そうなんだよね
1500行のエラーメッセージの代わりに「itemのメンバ関数c_str()が見つかりませんでした」ってコンパイラが言ってくれてたら
ここまでテンプレートは嫌われなかった
1500行のエラーメッセージの代わりに「itemのメンバ関数c_str()が見つかりませんでした」ってコンパイラが言ってくれてたら
ここまでテンプレートは嫌われなかった
610デフォルトの名無しさん
2019/03/23(土) 18:54:43.76ID:enzaJQTj だからgoのコード生成系のアプローチのがマシってことなんだが馬鹿は脳内でしかビルドしないから通じない訳だ。
611デフォルトの名無しさん
2019/03/23(土) 19:11:19.55ID:A6OyMWzd これからは定数型プログラミングの時代。
612デフォルトの名無しさん
2019/03/23(土) 19:15:22.30ID:EB4wgvrK >>609
それはC++20でコンセプト入ったら実現されるはず(ライブラリ側で対応する必要あるけど
それはC++20でコンセプト入ったら実現されるはず(ライブラリ側で対応する必要あるけど
613デフォルトの名無しさん
2019/03/23(土) 19:18:48.99ID:iMO+WCpL 過去の話をしてるのに未来の話で返されてもな
614デフォルトの名無しさん
2019/03/23(土) 19:22:34.86ID:A6OyMWzd エラーメッセージがわかりにくいなら、VC++を使うべき。
615デフォルトの名無しさん
2019/03/23(土) 19:26:46.49ID:T5eFVdJU 過去のことなんかどうでもいい
未来だけ見て生きていこう
未来だけ見て生きていこう
616デフォルトの名無しさん
2019/03/23(土) 19:30:40.79ID:EB4wgvrK617デフォルトの名無しさん
2019/03/23(土) 21:03:26.04ID:16DhXZwe >>614
vcはバグだらけで使い物にならない
vcはバグだらけで使い物にならない
618デフォルトの名無しさん
2019/03/23(土) 21:40:53.85ID:eUSVaq66619デフォルトの名無しさん
2019/03/23(土) 22:45:17.73ID:4cH0E/is 今思えばC++0xのコンセプト案はいろいろ酷かったな
あのまま入らなくてよかった
あのまま入らなくてよかった
620デフォルトの名無しさん
2019/03/23(土) 23:17:20.42ID:EB4wgvrK コンセプトマップだとかコンセプトを満たすことを自己申告しなきゃいけないだとか
傍目に見て正直意味わからんかった
傍目に見て正直意味わからんかった
621デフォルトの名無しさん
2019/03/23(土) 23:51:54.14ID:11jhwwP/ Axiomはとてもいいと思ったが、消えたのだな・・・
622デフォルトの名無しさん
2019/03/23(土) 23:53:58.85ID:enzaJQTj >>588
フーリエ変換の係数みたいなものは実行時には定数だけれど、事前に計算式で計算しておきたくはなる。
でもまあ普通に考えればビルド構成の問題だわな。
なぜコンパイラに無理やり突っ込むかと言えばまともにビルド構成を考える能力がないからっていうね。
フーリエ変換の係数みたいなものは実行時には定数だけれど、事前に計算式で計算しておきたくはなる。
でもまあ普通に考えればビルド構成の問題だわな。
なぜコンパイラに無理やり突っ込むかと言えばまともにビルド構成を考える能力がないからっていうね。
623デフォルトの名無しさん
2019/03/23(土) 23:54:27.98ID:4cH0E/is axiomさんは契約アトリビュートとして生まれ変わったのだ
624デフォルトの名無しさん
2019/03/24(日) 00:40:12.28ID:7x4/H6l4 C++の複雑さはオナニー的なところがある
625デフォルトの名無しさん
2019/03/24(日) 01:38:06.52ID:b8r3VMdD コンパイル時に決定してることしかできないなら、コード書く必要あるか?
1+2しか計算できないんだろ、2+3の結果が欲しかったら、コンパイルし直しw
1+2しか計算できないんだろ、2+3の結果が欲しかったら、コンパイルし直しw
626デフォルトの名無しさん
2019/03/24(日) 02:05:19.27ID:xAoD2jBj 狭義のアルゴリズム(有限ステップで終わる)を記述する分にはそれで十分
無限ループを含む手続きを記述したかったら無限再帰すればええ
と考えればメモリが無限にあればコンパイルが終わるまでに任意の処理ができる
無限ループを含む手続きを記述したかったら無限再帰すればええ
と考えればメモリが無限にあればコンパイルが終わるまでに任意の処理ができる
627デフォルトの名無しさん
2019/03/24(日) 02:07:46.29ID:4oYv+rwZ 定数型プログラミングでコンパイラを創ろう。
628はちみつ餃子 ◆8X2XSCHEME
2019/03/24(日) 02:16:59.70ID:9ZLLLplX コンパイル時に畳み込んで定数にした方がよいかどうかはコンパイラの最適化で頑張って欲しい話で、
それで足りない、さらなるチューニングが必要なときの記法が統一的だったらうれしいねっていう程度の話じゃないかな。
普段からそんなにコンパイル時計算を意図したりはしないよ。
それで足りない、さらなるチューニングが必要なときの記法が統一的だったらうれしいねっていう程度の話じゃないかな。
普段からそんなにコンパイル時計算を意図したりはしないよ。
629デフォルトの名無しさん
2019/03/24(日) 02:25:38.27ID:Wmd2CxZH P言語でC++中間コードを生成するスクリプトを書けばいいじゃない。
swigみたいな。
カスタムコンパイルやカスタムビルドはそのためにある。
swigみたいな。
カスタムコンパイルやカスタムビルドはそのためにある。
630デフォルトの名無しさん
2019/03/24(日) 02:33:38.88ID:4oYv+rwZ ヤック、レック相当をメタプログラミングで実現することができるのではないか。
スピリチュアルな方向性ではなく。
スピリチュアルな方向性ではなく。
631はちみつ餃子 ◆8X2XSCHEME
2019/03/24(日) 02:50:04.22ID:9ZLLLplX PEG 相当のことを実現しているライブラリとしては Qi があるけど、
Yacc みたいに LALR をやってくれるのは知らないなぁ。
出来るのかな?
Yacc みたいに LALR をやってくれるのは知らないなぁ。
出来るのかな?
632デフォルトの名無しさん
2019/03/24(日) 03:13:50.09ID:PmamUspu >>628
個人的には、メタプログラミングで定数値のパラメータ作るのに構造体でメタプログラミングする必要が無くなったのはconstexprにかわしゃ
個人的には、メタプログラミングで定数値のパラメータ作るのに構造体でメタプログラミングする必要が無くなったのはconstexprにかわしゃ
633デフォルトの名無しさん
2019/03/24(日) 03:16:29.85ID:PmamUspu ごめん間違って送信した、
constexprに感謝してるw
あとビット演算とか整数値の計算する関数もconstexprつけときゃテンプレートパラメータに渡せるし
高速化は二の次だと個人的には思ってる
constexprに感謝してるw
あとビット演算とか整数値の計算する関数もconstexprつけときゃテンプレートパラメータに渡せるし
高速化は二の次だと個人的には思ってる
634デフォルトの名無しさん
2019/03/24(日) 03:23:59.40ID:4oYv+rwZ STLあっての私たち。
635デフォルトの名無しさん
2019/03/24(日) 03:30:27.34ID:b8r3VMdD STLって遅くて使えなくない
636デフォルトの名無しさん
2019/03/24(日) 03:32:16.98ID:4oYv+rwZ 確かに遅いね。
637デフォルトの名無しさん
2019/03/24(日) 03:37:58.18ID:4oYv+rwZ テンプレートメタプログラミングは永久機関。
638デフォルトの名無しさん
2019/03/24(日) 05:16:54.07ID:xAoD2jBj STLにCStringを入れて欲しい
639デフォルトの名無しさん
2019/03/24(日) 05:41:26.93ID:NAaHZN6A 嫌です
640デフォルトの名無しさん
2019/03/24(日) 05:51:09.56ID:0ur1Ot0v 男なら全部char[]
641デフォルトの名無しさん
2019/03/24(日) 06:09:08.25ID:xAoD2jBj sprintf_s()と_cuntof(array)がどこの環境でも標準で使えるならchar[]も悪くない選択肢ではある
642デフォルトの名無しさん
2019/03/24(日) 08:26:16.35ID:3s1WkY0F boost spiritはコンパイルが糞遅いし、何か間違えると何処が原因かさっぱりわからんし、
実用には程遠かったな。テンプレートでここまでできるという一発芸的な。
実用には程遠かったな。テンプレートでここまでできるという一発芸的な。
643デフォルトの名無しさん
2019/03/24(日) 09:20:48.36ID:0R743LPx テンプレートメタプログラミングって元々はアンチパターンとして提出した例だったんだけどね。
本当に愚者というのは度し難いというか。。
本当に愚者というのは度し難いというか。。
644デフォルトの名無しさん
2019/03/24(日) 09:21:19.70ID:EkBj7yKG CStringをこの世から完全に消し去って欲しい
せめてbasic_stringと互換性のあるインターフェースを持たせてからフェードアウトして欲しかった
せめてbasic_stringと互換性のあるインターフェースを持たせてからフェードアウトして欲しかった
645デフォルトの名無しさん
2019/03/24(日) 09:23:21.86ID:Wmd2CxZH CStringT::Format()系関数は、sprintf()系関数を2回呼ぶので冗長。
利用バッファサイズを事前に指定できないことが原因。
利用バッファサイズを事前に指定できないことが原因。
646デフォルトの名無しさん
2019/03/24(日) 09:27:05.22ID:EkBj7yKG647デフォルトの名無しさん
2019/03/24(日) 10:26:38.44ID:a59b/YMZ CStringってなに?
648さまよえる蟻人間 ◆T6xkBnTXz7B0
2019/03/24(日) 10:31:25.24ID:SVMO04Wq CStringは、Windows用のC++のクラスライブラリ、MFCの文字列クラス。
649デフォルトの名無しさん
2019/03/24(日) 10:45:02.21ID:myNgr9GS650デフォルトの名無しさん
2019/03/24(日) 10:47:24.53ID:0ur1Ot0v 便利さを求めるならなんかフレームワーク使えよ
軽さを求めるならchar配列でゴリゴリ書けよ
軽さを求めるならchar配列でゴリゴリ書けよ
651デフォルトの名無しさん
2019/03/24(日) 10:52:30.12ID:EkBj7yKG 性能も利便性も標準より低いフレームワークさん・・・
652デフォルトの名無しさん
2019/03/24(日) 11:06:49.87ID:Wmd2CxZH >>649
素直にsnprintf()のように最大バッファサイズを指定するオーバーライド関数を追加すべきでしょ。
CStringT::Format()関数を呼び出す側は、あらかじめサイズを予想できる状況にあることが多い。
素直にsnprintf()のように最大バッファサイズを指定するオーバーライド関数を追加すべきでしょ。
CStringT::Format()関数を呼び出す側は、あらかじめサイズを予想できる状況にあることが多い。
653デフォルトの名無しさん
2019/03/24(日) 11:52:04.64ID:0R743LPx >>646
天上人のつもりなのがそもそもの問題なんだがな。。
最近の標準委員は明らかにプログラム組んでなさそうな連中が決めてるような感じだし。
c++なんかは顕著だがそういうマウントの取り合いによる新機能拡充が一番現場を疲弊させてるっていうことを
なんでわからんかね。
天上人のつもりなのがそもそもの問題なんだがな。。
最近の標準委員は明らかにプログラム組んでなさそうな連中が決めてるような感じだし。
c++なんかは顕著だがそういうマウントの取り合いによる新機能拡充が一番現場を疲弊させてるっていうことを
なんでわからんかね。
654デフォルトの名無しさん
2019/03/24(日) 11:52:05.81ID:EHuBBnjq MFCが出来た頃のstd::stringはそりゃまあ酷いシロモノだったんじゃ
あまりCStringを責める気にはなれん
あまりCStringを責める気にはなれん
655デフォルトの名無しさん
2019/03/24(日) 11:55:08.60ID:DVu1xjKe いくらリリース時に型がすべて決まってるはずと言ったってDRYはそれなりに大事だろ
656デフォルトの名無しさん
2019/03/24(日) 12:01:45.23ID:rLn5TxmP >>653
標準化委員会の議論とまともに論理的な議論のできない5chを同一レベルで扱うなよ
標準化委員会の議論とまともに論理的な議論のできない5chを同一レベルで扱うなよ
657デフォルトの名無しさん
2019/03/24(日) 12:05:08.13ID:4oYv+rwZ しかし旧石器時代にSTLが作られたことを思うと、オーパーツと言ってよいのではないか。
数学的に洗練されたこの美しさ。
古代人は数学が得意だったのでは。
数学的に洗練されたこの美しさ。
古代人は数学が得意だったのでは。
658デフォルトの名無しさん
2019/03/24(日) 12:09:06.38ID:EkBj7yKG659デフォルトの名無しさん
2019/03/24(日) 12:09:46.38ID:Wmd2CxZH それにしてもiostreamの醜さよ。
660デフォルトの名無しさん
2019/03/24(日) 12:37:41.11ID:NSjukkr5662さまよえる蟻人間 ◆T6xkBnTXz7B0
2019/03/24(日) 12:47:06.43ID:rmV9lt2O <strsafe.h>を知らない人が多いのか?
663デフォルトの名無しさん
2019/03/24(日) 12:55:26.69ID:DqM6OskA664デフォルトの名無しさん
2019/03/24(日) 12:57:50.08ID:Wmd2CxZH >>660
簡単だから当然、実装はする。
下手にバッファサイズを測る手間をかけるくらいならバッファサイズを渡せという話。
バッファサイズを渡せば速度が通常のCStringT::Format()より30〜40%ほど改善するんだから、公式でも採用してもらいたいという趣旨。
簡単だから当然、実装はする。
下手にバッファサイズを測る手間をかけるくらいならバッファサイズを渡せという話。
バッファサイズを渡せば速度が通常のCStringT::Format()より30〜40%ほど改善するんだから、公式でも採用してもらいたいという趣旨。
665デフォルトの名無しさん
2019/03/24(日) 13:07:04.34ID:Wmd2CxZH gccとvcでは vsnprintf()の挙動が違う。va_listの内部実装が異なるからだろう。
gccの場合、同じva_listを使ってvsnprintf()を複数回呼び出すと…
gccの場合、同じva_listを使ってvsnprintf()を複数回呼び出すと…
666デフォルトの名無しさん
2019/03/24(日) 13:26:03.77ID:tvGVd8WB 続きはCMのあとで!!
667デフォルトの名無しさん
2019/03/24(日) 13:42:15.21ID:uLk8b7ur >>664
どうせ弄るなら、va_listとか旧世紀の遺物つかわなくても、templateの可変長引数を使って1から作り直した方が良い。
どうせ弄るなら、va_listとか旧世紀の遺物つかわなくても、templateの可変長引数を使って1から作り直した方が良い。
668デフォルトの名無しさん
2019/03/24(日) 13:44:34.27ID:EHuBBnjq va_listを他の関数に渡した後で、va_startで初期化せずに再使用するのは未定義動作
何が起きても文句は言えないしコンパイラごとに挙動が違うのは当然というものだ
何が起きても文句は言えないしコンパイラごとに挙動が違うのは当然というものだ
669デフォルトの名無しさん
2019/03/24(日) 13:55:44.10ID:oV9fIVj4 string_viewはどうだろうか?
670デフォルトの名無しさん
2019/03/24(日) 13:56:05.38ID:Wmd2CxZH671デフォルトの名無しさん
2019/03/24(日) 13:59:03.55ID:myNgr9GS >>664
そんな旧態依然のインターフェイス欲しけりゃ自分でやれやってことだろ
そんな旧態依然のインターフェイス欲しけりゃ自分でやれやってことだろ
672デフォルトの名無しさん
2019/03/24(日) 14:13:40.53ID:Wmd2CxZH それにつけてもostringstreamの醜さよ。
673デフォルトの名無しさん
2019/03/24(日) 14:40:52.61ID:EkBj7yKG streamサイコー<<<<<<
674デフォルトの名無しさん
2019/03/24(日) 14:51:51.49ID:a59b/YMZ clang++使ってみたら、std::async使えない・・・
さすが、フリーだな
さすが、フリーだな
675デフォルトの名無しさん
2019/03/24(日) 14:52:15.46ID:b6oq5ESd clang++使ってみたら、std::async使えない・・・
さすが、フリーだな
さすが、フリーだな
676デフォルトの名無しさん
2019/03/24(日) 16:30:35.16ID:4oYv+rwZ >>672
何処がひどいですか?
何処がひどいですか?
677デフォルトの名無しさん
2019/03/24(日) 16:50:49.33ID:GJPzxHHg CStringのくそ設計にいまさら文句言ってもなぁ
そもそもメンバ関数、しかもdestination側と言う時点で使う側の利便性考えていない
そもそもメンバ関数、しかもdestination側と言う時点で使う側の利便性考えていない
678デフォルトの名無しさん
2019/03/24(日) 16:55:28.18ID:xAoD2jBj 遅いしフラグがいっぱいあるし読みにくいし
ostream& T::operator<<(ostream&, const T&)やistream& T::operator>>(ostream&, T&)をTにつき一種類しか定義できないから
万全の汎用性を有しているかというとそうでもないし、
唯一の長所は型安全なところだが、意図通りの出力になるまでどうせトライ&エラーすることになるのだから
それ以下の工数でprintf()の書式ミスを発見できるわ;;
ostream& T::operator<<(ostream&, const T&)やistream& T::operator>>(ostream&, T&)をTにつき一種類しか定義できないから
万全の汎用性を有しているかというとそうでもないし、
唯一の長所は型安全なところだが、意図通りの出力になるまでどうせトライ&エラーすることになるのだから
それ以下の工数でprintf()の書式ミスを発見できるわ;;
679デフォルトの名無しさん
2019/03/24(日) 16:58:49.26ID:xAoD2jBj CStringをdestination側に使うときの書き方はスゲーカンタン
CString cstr;
cstr = "Hello World!\n";
でおkコピー程度でCstring::Format()を使う必要はナス、
ソース側に使うときはむしろstd::stringよりカンタン
printf("%s\n", cstr);
で通る
CString cstr;
cstr = "Hello World!\n";
でおkコピー程度でCstring::Format()を使う必要はナス、
ソース側に使うときはむしろstd::stringよりカンタン
printf("%s\n", cstr);
で通る
680デフォルトの名無しさん
2019/03/24(日) 17:01:05.52ID:xAoD2jBj まあ個人k的にはprintf("%s\n", (char*)cstr); ぐらいで手を打つが
681デフォルトの名無しさん
2019/03/24(日) 17:10:19.89ID:b6oq5ESd CStringなんて使うのはc言語だけだろ
682デフォルトの名無しさん
2019/03/24(日) 17:19:45.54ID:PmamUspu683デフォルトの名無しさん
2019/03/24(日) 17:32:06.96ID:GJPzxHHg 標準化委員会はよくも悪くも開発者目線だなあとしか
提案者の用途さえ満たせれば良い的な仕様が多々見られる
最近だとto_charsとfrom_charsなんてまさにそんな感じ
提案者の用途さえ満たせれば良い的な仕様が多々見られる
最近だとto_charsとfrom_charsなんてまさにそんな感じ
>>678
>フラグがいっぱいあるし
この i/o stream のフラグってきちんと定義されているのでしょうかね…
処理系に依存してテキトーな気がしてしかたがない
https://mevius.5ch.net/test/read.cgi/tech/1434079972/30 を書くときにさんざん調べたつもりなのですが、よくわからなかったことを記憶しています。
今みると、嫌々 stream.fail() でごまかしていたようです
>フラグがいっぱいあるし
この i/o stream のフラグってきちんと定義されているのでしょうかね…
処理系に依存してテキトーな気がしてしかたがない
https://mevius.5ch.net/test/read.cgi/tech/1434079972/30 を書くときにさんざん調べたつもりなのですが、よくわからなかったことを記憶しています。
今みると、嫌々 stream.fail() でごまかしていたようです
685デフォルトの名無しさん
2019/03/24(日) 21:04:38.58ID:0R743LPx >>656
江添レベルの奴がやってる時点であんまここと変わらんだろ。
初心者に初めからautoで宣言させたコード実行させようとするような馬鹿だぞ。
初心者のためよりも自分のエゴ満たすためってのがあまりに優先されすぎてる。
江添レベルの奴がやってる時点であんまここと変わらんだろ。
初心者に初めからautoで宣言させたコード実行させようとするような馬鹿だぞ。
初心者のためよりも自分のエゴ満たすためってのがあまりに優先されすぎてる。
686デフォルトの名無しさん
2019/03/24(日) 21:11:22.21ID:EkBj7yKG687デフォルトの名無しさん
2019/03/24(日) 21:17:23.06ID:EHuBBnjq つい最近まで「トライグラフは現場でバリバリ使いまくってるから無くしちゃダメー!」って必死に訴えてる人達がいっぱい居たのが標準化委員会だよ
688デフォルトの名無しさん
2019/03/24(日) 21:37:39.78ID:GJPzxHHg 初心者にauto使わせるのは悪くないというかむしろそうすべきだろ。
現場が疲弊云々はそんな現場辞めてしまえとしか
標準化委員会はc++バリバリに使っている現場の意見が十分反映されているのだから
文句があるなら委員会に参加すれば良いんだよ
現場が疲弊云々はそんな現場辞めてしまえとしか
標準化委員会はc++バリバリに使っている現場の意見が十分反映されているのだから
文句があるなら委員会に参加すれば良いんだよ
689デフォルトの名無しさん
2019/03/24(日) 22:05:21.71ID:iBzlPNVB >>687
IBMだけな・・・
IBMだけな・・・
690デフォルトの名無しさん
2019/03/24(日) 22:08:27.13ID:zVUhrel1 >>688
C++を使わせないのが正しい。
C++を使わせないのが正しい。
692デフォルトの名無しさん
2019/03/24(日) 23:03:50.83ID:0R743LPx あれで現場の意向が本当に入ってると思ってる奴がいるのか?
c++の衰退とかデータで見ても信じない連中なのかね。。
まるでどこぞの統計データを今でも信じてる連中みたいだ。
c++の衰退とかデータで見ても信じない連中なのかね。。
まるでどこぞの統計データを今でも信じてる連中みたいだ。
693デフォルトの名無しさん
2019/03/24(日) 23:18:22.54ID:Wmd2CxZH メモリやCPUが安価で高性能になれば、コンパイル言語全般のシェアが下がるのは当然なのでは。
694デフォルトの名無しさん
2019/03/24(日) 23:22:35.66ID:dT6Xb8jy >>693
時代は静的型だよ
時代は静的型だよ
695デフォルトの名無しさん
2019/03/24(日) 23:31:19.17ID:KmR/jJEd 現場にはcとc++が違うことを知らない奴も多いwww
696デフォルトの名無しさん
2019/03/24(日) 23:38:44.81ID:GJPzxHHg 実際現場の意見入っている感じするじゃない?
どちらかと言うと実装側の都合でデグレードされたりすることが多い
コンセプトいい加減入れろよと
エラーメッセージわかりづらいし、SFINAE面倒くさいんだよ
どちらかと言うと実装側の都合でデグレードされたりすることが多い
コンセプトいい加減入れろよと
エラーメッセージわかりづらいし、SFINAE面倒くさいんだよ
697デフォルトの名無しさん
2019/03/24(日) 23:40:40.71ID:PmamUspu >>688
>初心者にauto使わせるのは悪くないというかむしろそうすべき
型や参照、ポインタ、修飾とかの違いでコンパイルエラーになるのを経験しないのは危険だと思うけどねぇ
推論された型を勘違いした上にたまたま通ってしまう可能性もあるわけだし
便利なのは否定しないけど静的型付け言語であるC++のパラダイムを変えるような機能ではない
>初心者にauto使わせるのは悪くないというかむしろそうすべき
型や参照、ポインタ、修飾とかの違いでコンパイルエラーになるのを経験しないのは危険だと思うけどねぇ
推論された型を勘違いした上にたまたま通ってしまう可能性もあるわけだし
便利なのは否定しないけど静的型付け言語であるC++のパラダイムを変えるような機能ではない
698デフォルトの名無しさん
2019/03/24(日) 23:46:22.50ID:dT6Xb8jy >>697
そういうことを言っていいのは出来合いのtypedefを使わないで全ての型名を愚直に書いている奴だけ
そういうことを言っていいのは出来合いのtypedefを使わないで全ての型名を愚直に書いている奴だけ
699デフォルトの名無しさん
2019/03/24(日) 23:53:18.03ID:PmamUspu700デフォルトの名無しさん
2019/03/24(日) 23:56:09.01ID:4oYv+rwZ キリバンゲット!!
701デフォルトの名無しさん
2019/03/25(月) 00:05:20.37ID:lHhl7aCC702デフォルトの名無しさん
2019/03/25(月) 01:23:08.49ID:dMeCWU6I 結局ビャーネって何を作ったの?
言語の仕様なんかは磯さんが決めてんでしょ
言語の仕様なんかは磯さんが決めてんでしょ
704デフォルトの名無しさん
2019/03/25(月) 01:47:24.45ID:LV8gdQ4G 陰謀論を唱えるような人は、先入観が強すぎて不具合の原因を見つけ出せずに時間を浪費するタイプの人だから、プログラマをやめるべき。
705デフォルトの名無しさん
2019/03/25(月) 07:31:49.87ID:+RmEIgLd 政治なんですよ政治
706デフォルトの名無しさん
2019/03/25(月) 07:46:27.12ID:mW0SiMKO MISRA-C 2004 の本は、トヨタなど大企業の50人が書いた本だけど、
ドワンゴ江添の本は、彼1人で書いたから、超人技!
Linux プログラミング・インタフェース、Michael Kerrisk、2012
この本とともに、神の書と言える!
KADOKAWA が言ってる。
当社はプログラミングの会社ではないけど、
なぜか、プログラマーが多いし、募集もしていますw
ドワンゴ江添の本は、彼1人で書いたから、超人技!
Linux プログラミング・インタフェース、Michael Kerrisk、2012
この本とともに、神の書と言える!
KADOKAWA が言ってる。
当社はプログラミングの会社ではないけど、
なぜか、プログラマーが多いし、募集もしていますw
707デフォルトの名無しさん
2019/03/25(月) 11:25:12.65ID:MuEFgcsw >>686 裁判費用をクラウドファウンディングで捻出する予定はありますか
708デフォルトの名無しさん
2019/03/25(月) 11:39:13.03ID:LV8gdQ4G 首都は「ヌルスルタン」、前大統領の名前に改称 : 国際 : 読売新聞オンライン
https://www.yomiuri.co.jp/world/20190325-OYT1T50119/
https://www.yomiuri.co.jp/world/20190325-OYT1T50119/
709デフォルトの名無しさん
2019/03/25(月) 21:09:33.79ID:DI1df1TX ファンクタって1回だけ使うならインスタンス生成する分関数より高コストで繰り返し使うなら生成済みのインスタンスを再利用できるから低コストという認識であってます?
710デフォルトの名無しさん
2019/03/25(月) 21:21:15.56ID:CfE+HAKL 一切知りません
711デフォルトの名無しさん
2019/03/25(月) 21:21:26.20ID:8+7iDICf あってません
712デフォルトの名無しさん
2019/03/25(月) 22:35:05.39ID:8zmAEr9n713デフォルトの名無しさん
2019/03/26(火) 00:05:13.64ID:Pu4N06vt >>712
なるだろ?
想定している利用者像が違うだけ
始めにauto使わないように慣らされたら、どうでも良い場面で型指定するバカに育って逆に面倒臭いだろ
まあ一番の害悪はnewやdelete、果てはmallocやfree使わせる奴だが
動的多次元配列でnewをループで入れ子にするのとか最悪
なるだろ?
想定している利用者像が違うだけ
始めにauto使わないように慣らされたら、どうでも良い場面で型指定するバカに育って逆に面倒臭いだろ
まあ一番の害悪はnewやdelete、果てはmallocやfree使わせる奴だが
動的多次元配列でnewをループで入れ子にするのとか最悪
714デフォルトの名無しさん
2019/03/26(火) 00:09:39.69ID:Xorohn3v 昨今のスクリプト言語は大抵autoじゃねえの
そうすりゃ初心者と型システムの都合なんてのはクソくらえ、だ
入門者にゃ型なんて意味無しじゃん
それに初心者にどうやってマイナスかどうか確かめたのか怪しい
ついでに型&autoとメモリ意識とは違うからな
そうすりゃ初心者と型システムの都合なんてのはクソくらえ、だ
入門者にゃ型なんて意味無しじゃん
それに初心者にどうやってマイナスかどうか確かめたのか怪しい
ついでに型&autoとメモリ意識とは違うからな
715デフォルトの名無しさん
2019/03/26(火) 00:12:14.24ID:Pu4N06vt 大体intとかあまり生で使わんよね
少なくともtypedefしておくもんじゃね
少なくともtypedefしておくもんじゃね
716デフォルトの名無しさん
2019/03/26(火) 00:29:37.47ID:otrrnTwO このスレ住民は、 auto によってコンパイル時には分からない意図せぬ動作で困った経験ってある?
717デフォルトの名無しさん
2019/03/26(火) 01:09:42.91ID:pnr0HSCh c++って便利なのは便利なんだが、やっぱ遅いよ
stream,asyncなんか、使い物にならん
stream,asyncなんか、使い物にならん
718デフォルトの名無しさん
2019/03/26(火) 01:11:09.93ID:SW23xWSB c++が遅かったら何が速いんだ
719デフォルトの名無しさん
2019/03/26(火) 01:12:08.10ID:qIOvz7c6 いや、コードを書いてるやつがいつまでも成長しない
だからコードが遅くなる
それがC++wwww
だからコードが遅くなる
それがC++wwww
720KAC
2019/03/26(火) 01:19:01.25ID:E0p6Aumv721デフォルトの名無しさん
2019/03/26(火) 01:22:01.94ID:pnr0HSCh >>718
つD
つD
722デフォルトの名無しさん
2019/03/26(火) 01:34:39.27ID:SW23xWSB そんな流行ってないもんでまともな仕事ができるかw
723デフォルトの名無しさん
2019/03/26(火) 03:04:08.84ID:5DO30Xtv Visual Studio使ってたらインテリセンスがautoをコンパイル前に展開して表示してくれるけど
724デフォルトの名無しさん
2019/03/26(火) 03:05:29.57ID:5DO30Xtv テンプレート以外で変数がコンパイル前に決まらないことってあるの?
テンプレートならauto使う必要なくね
テンプレートならauto使う必要なくね
725デフォルトの名無しさん
2019/03/26(火) 03:35:14.19ID:D6PYEJQv テンプレートだからこそ使いたい。
726デフォルトの名無しさん
2019/03/26(火) 03:48:53.98ID:fe5vrK8S727デフォルトの名無しさん
2019/03/26(火) 04:01:17.90ID:fe5vrK8S >>692
実感として、年々汚くて使いにくい仕様が増えている気がする。
実感として、年々汚くて使いにくい仕様が増えている気がする。
728デフォルトの名無しさん
2019/03/26(火) 07:21:28.81ID:JExaD8IX729デフォルトの名無しさん
2019/03/26(火) 09:23:59.45ID:Uaj934aJ >>722
仕事で流行ってる流行ってないなんて関係ないだろw
仕事で流行ってる流行ってないなんて関係ないだろw
730デフォルトの名無しさん
2019/03/26(火) 09:42:45.74ID:SW23xWSB 流行ってない=情報がない、人がいない、資産がない=ゴミ
731デフォルトの名無しさん
2019/03/26(火) 11:19:13.28ID:T41fm+6R ビジネスの都合しか考えられないゴミ
JavaとかC#使ってれば
JavaとかC#使ってれば
732デフォルトの名無しさん
2019/03/26(火) 12:49:08.72ID:hIENxLfE ビジネスの都合でc++って場合が多いだろ
ここに居るような奴等は
ここに居るような奴等は
733デフォルトの名無しさん
2019/03/26(火) 15:10:01.00ID:5W15sMAG734デフォルトの名無しさん
2019/03/26(火) 17:06:14.62ID:fe5vrK8S >>733
そういう名称の問題だけに限った話ではなくて、結論から言えば、仕様を
多数決で決めてしまうと初心者向けの言語になる。スクリプト言語とかに
近いような。
構造的な問題とか、統一感的な問題とかもあるし、そもそも、C/C++の
良さまで失うような標準仕様だとかも、例えば、boost などの、
stl = standard template library なんかも、ここでは信者が多いかの
用に見えるけど、まるでC/C++とは思想の異なる全く別のスクリプト言語の
ような仕様になっている感じがする。
そういう名称の問題だけに限った話ではなくて、結論から言えば、仕様を
多数決で決めてしまうと初心者向けの言語になる。スクリプト言語とかに
近いような。
構造的な問題とか、統一感的な問題とかもあるし、そもそも、C/C++の
良さまで失うような標準仕様だとかも、例えば、boost などの、
stl = standard template library なんかも、ここでは信者が多いかの
用に見えるけど、まるでC/C++とは思想の異なる全く別のスクリプト言語の
ような仕様になっている感じがする。
735デフォルトの名無しさん
2019/03/26(火) 17:40:36.88ID:hIENxLfE736デフォルトの名無しさん
2019/03/26(火) 17:46:54.15ID:NEQZ2SJi >>735
1998年くらいまでのC++はまあまあ良いと思っていたが、それ以後、別の
言語になってきてる気がする。特にここの人はSTL信者が多いが、
実は、98年くらいまでのC++とは似ても似つかないものだよ。
それを使ったコードには、往年の C の片鱗さえも残ってない。
だから、言語名から C という冠を下ろすべきだ。
1998年くらいまでのC++はまあまあ良いと思っていたが、それ以後、別の
言語になってきてる気がする。特にここの人はSTL信者が多いが、
実は、98年くらいまでのC++とは似ても似つかないものだよ。
それを使ったコードには、往年の C の片鱗さえも残ってない。
だから、言語名から C という冠を下ろすべきだ。
737デフォルトの名無しさん
2019/03/26(火) 17:51:58.82ID:hIENxLfE 信者も何も標準コンテナ使わずに何使うんだよ
自前で書くとかそれこそダメな方向だろう
eastlなんかでも使用感をなるべく標準に近づけているのに
自前で書くとかそれこそダメな方向だろう
eastlなんかでも使用感をなるべく標準に近づけているのに
738デフォルトの名無しさん
2019/03/26(火) 18:00:25.71ID:XEttPGHl C++98以前のC++が今より良いってどんなマゾだよ
739デフォルトの名無しさん
2019/03/26(火) 18:04:33.55ID:hIENxLfE template自体嫌いなんかな
それもうCで良いじゃない
それもうCで良いじゃない
740はちみつ餃子 ◆8X2XSCHEME
2019/03/26(火) 18:10:49.26ID:qKdh3SVz C++ の仕様に STL などというものは存在しない。
かつて STL と呼ばれていたものは完全に C++ の一部になっているし、
仕様の他の項目と区別する方法はない。
C++ 使いが C++ の機能を使うのは当たり前だ。
気に入らないと思うのは自由だし、良くない部分だって実際あるが、
常識的には標準が用意しているライブラリは言語の利用方法を体現するものであって、
言語の基本思想と極端に乖離してるわけないだろ。
かつて STL と呼ばれていたものは完全に C++ の一部になっているし、
仕様の他の項目と区別する方法はない。
C++ 使いが C++ の機能を使うのは当たり前だ。
気に入らないと思うのは自由だし、良くない部分だって実際あるが、
常識的には標準が用意しているライブラリは言語の利用方法を体現するものであって、
言語の基本思想と極端に乖離してるわけないだろ。
741デフォルトの名無しさん
2019/03/26(火) 18:36:42.18ID:5P0efKyY 標準ライブラリだからといって使う義務はないわけで
最小限のランタイムで動くnative言語というところがc++を使う理由になってるプロジェクトが多いだろう
その目的にそぐわないのが今の標準ライブラリのデザイン
メタプログミングの遊び場とかしている
ただし20年前と比べるのはどうかと思うが
最小限のランタイムで動くnative言語というところがc++を使う理由になってるプロジェクトが多いだろう
その目的にそぐわないのが今の標準ライブラリのデザイン
メタプログミングの遊び場とかしている
ただし20年前と比べるのはどうかと思うが
742はちみつ餃子 ◆8X2XSCHEME
2019/03/26(火) 18:44:59.17ID:qKdh3SVz 標準ライブラリをどうしても使わなきゃならんってことはないけど、
使わないための積極的な理由がなきゃ標準を選択するよ。
リソースが制限されているところで使わないっつーならそれはそれでいいよ。
それも出来るのが C++ だからな。
使わないための積極的な理由がなきゃ標準を選択するよ。
リソースが制限されているところで使わないっつーならそれはそれでいいよ。
それも出来るのが C++ だからな。
743デフォルトの名無しさん
2019/03/26(火) 19:08:13.59ID:NEQZ2SJi 結論から言えば、STLはライブラリとしての「センス」が悪い。
POSIX の fopen()系や printf() 系などは使いやすいと思っていたが、
STLにはそれを感じないし、coutも変だったが STLもそれと同じ轍を踏んでる感じ。
POSIX の fopen()系や printf() 系などは使いやすいと思っていたが、
STLにはそれを感じないし、coutも変だったが STLもそれと同じ轍を踏んでる感じ。
744デフォルトの名無しさん
2019/03/26(火) 19:17:04.87ID:+JfIlK2p >>743
お前さんのレスからは、「僕の好みじゃないからヤダヤダ」という程度のことしか見えてこない。
お前さんのレスからは、「僕の好みじゃないからヤダヤダ」という程度のことしか見えてこない。
745デフォルトの名無しさん
2019/03/26(火) 19:19:36.63ID:NbUyZWCM 誰でも頭が良くなる、プログラムが書けるようになる方法が発見される 86052
https://you-can-program.hatenablog.jp
https://you-can-program.hatenablog.jp
746デフォルトの名無しさん
2019/03/26(火) 19:23:47.27ID:/YNua4WM メイヤーズは最高に美しいライブラリと言っている
747デフォルトの名無しさん
2019/03/26(火) 19:27:39.30ID: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" があるが、これは「負け惜しみ」を意味する。
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" があるが、これは「負け惜しみ」を意味する。
748デフォルトの名無しさん
2019/03/26(火) 19:27:52.44ID:NEQZ2SJi やっぱりネットは駄目だ。
頭の悪いプログラマが支配してる。
頭の悪いプログラマが支配してる。
749デフォルトの名無しさん
2019/03/26(火) 19:29:16.09ID:fe5vrK8S750はちみつ餃子 ◆8X2XSCHEME
2019/03/26(火) 19:30:19.23ID:qKdh3SVz cout よりも printf が相対的に良いという人はたくさんいると思うが、
iostream が特に駄目ってだけで、
C++ 的に見れば printf がセンスいいとはとても言えんぞ……
iostream が特に駄目ってだけで、
C++ 的に見れば printf がセンスいいとはとても言えんぞ……
751デフォルトの名無しさん
2019/03/26(火) 19:31:00.18ID:eqSsbUbG 昔みたいにドヤ顔してboost使う必要がなくなったのはいいことだと思うよ。標準が充実していってさ。
最初からヌエ的な発展しかありえないのはそういうものだと思うし。
最初からヌエ的な発展しかありえないのはそういうものだと思うし。
752デフォルトの名無しさん
2019/03/26(火) 19:31:45.68ID:5p1uA41w753デフォルトの名無しさん
2019/03/26(火) 19:34:05.19ID:5p1uA41w あ、すまん逆ではなかったな
754デフォルトの名無しさん
2019/03/26(火) 19:39:12.76ID:fe5vrK8S ただ、多数決というのは、正しくも良くも無いけどな。
755デフォルトの名無しさん
2019/03/26(火) 19:48:04.23ID:gp3lODpj だったら君が最高の言語を作ればいい
設計は君の最高のセンスをふんだんに盛り込んで独裁的にやればいいよ
設計は君の最高のセンスをふんだんに盛り込んで独裁的にやればいいよ
756デフォルトの名無しさん
2019/03/26(火) 19:59:43.01ID:otrrnTwO とりあえず全員ダメージ受けとけ。
757デフォルトの名無しさん
2019/03/26(火) 20:35:50.63ID:OoUi3Qk7 stlのないC++なんてクリープ入れないコーヒーみたいなもん
758デフォルトの名無しさん
2019/03/26(火) 21:11:51.51ID:ExDeReqX >>740
C++ の仕様にSTLがないって本当かいな、と思って調べたら
確かに n3337.pdf (C++11のドラフト?) には STL という単語が出てないね。
STLのセンスが良いか悪いか、使うべきか使わざるべきか、
その辺について意見を出せるほど見識はないんで、事実の報告だけ。
『プログラミング言語C++』第4版に「STLなんちゃら」って章が
いくつか載ってるから、仕様の言葉だと思ってたわ。
C++ の仕様にSTLがないって本当かいな、と思って調べたら
確かに n3337.pdf (C++11のドラフト?) には STL という単語が出てないね。
STLのセンスが良いか悪いか、使うべきか使わざるべきか、
その辺について意見を出せるほど見識はないんで、事実の報告だけ。
『プログラミング言語C++』第4版に「STLなんちゃら」って章が
いくつか載ってるから、仕様の言葉だと思ってたわ。
759デフォルトの名無しさん
2019/03/26(火) 21:17:41.21ID:zBAPpXX5 プログラミング言語C++に後にSTLとなるテンプレートライブラリ作ってストロストラウップに勧めに来た奴が居たので
ストロストラウップが試したら、彼が信条とする「良いライブラリ10箇条に全部あてはまってこりゃスゲーとなったという
エピソードがあったような
なかったような
ストロストラウップが試したら、彼が信条とする「良いライブラリ10箇条に全部あてはまってこりゃスゲーとなったという
エピソードがあったような
なかったような
760デフォルトの名無しさん
2019/03/26(火) 21:25:01.06ID:5p1uA41w STLは俗称だし、定義も曖昧
皆そう呼ぶのが便利だからSTLという呼び方してるだけ
HPの研究所で働いてたAlex Stepanovが発案して94年あたりに持ち込んだっぽい
ライブラリじゃなくて、いわゆる「汎用コンテナ(データ構造)ライブラリ」についてBjarneが重要と考えたチェックリストのほぼ全部にパスした
皆そう呼ぶのが便利だからSTLという呼び方してるだけ
HPの研究所で働いてたAlex Stepanovが発案して94年あたりに持ち込んだっぽい
ライブラリじゃなくて、いわゆる「汎用コンテナ(データ構造)ライブラリ」についてBjarneが重要と考えたチェックリストのほぼ全部にパスした
761デフォルトの名無しさん
2019/03/26(火) 21:30:19.89ID:pGZA6Dfc c++の仕様にSTLが無くてもrange-based forのようにSTLが備えてるbegin,endに依存した構文は出てる。
762デフォルトの名無しさん
2019/03/26(火) 21:41:34.25ID:aW2tbkLS STLつってもどうせvectorとmapくらいしか使っとらんだろ。
まあそれで十分なんだが。
まあそれで十分なんだが。
763デフォルトの名無しさん
2019/03/26(火) 21:52:00.50ID:2lj4xCZe STLという言葉を発することがもうほとんどなくないか?
stdは使うけど、まあどっちも輪郭のはっきりしない言葉だ
stdは使うけど、まあどっちも輪郭のはっきりしない言葉だ
764デフォルトの名無しさん
2019/03/26(火) 21:53:11.01ID:D6PYEJQv STLは洗練されている。
素晴らしいデザイン。
コンセプトが入ったらさらに洗練できると思う。
素晴らしいデザイン。
コンセプトが入ったらさらに洗練できると思う。
765デフォルトの名無しさん
2019/03/26(火) 21:58:59.96ID:5P0efKyY >>742
リソースが制限されてるというより、最大限のパフォーマンス出す場合な
つまりリソースがリッチかどうかは直接関係ない
AAAのpcゲームとかね
パフォーマンスそこそこでいいならc++なんか使う理由がない
遊び以外
リソースが制限されてるというより、最大限のパフォーマンス出す場合な
つまりリソースがリッチかどうかは直接関係ない
AAAのpcゲームとかね
パフォーマンスそこそこでいいならc++なんか使う理由がない
遊び以外
767デフォルトの名無しさん
2019/03/26(火) 22:05:23.77ID:Pu4N06vt 最大限のパフォーマンスを出すために作ったeastlみたいなのも標準の使用感踏襲するくらいには標準の設計は良くできているよ
768デフォルトの名無しさん
2019/03/26(火) 22:05:31.83ID:D6PYEJQv STLはわしが育てた。
769はちみつ餃子 ◆8X2XSCHEME
2019/03/26(火) 22:17:08.86ID:qKdh3SVz そうか。
770デフォルトの名無しさん
2019/03/26(火) 22:23:19.39ID:d5snerrZ tupleはSTL?
771デフォルトの名無しさん
2019/03/26(火) 22:33:50.26ID:5P0efKyY772デフォルトの名無しさん
2019/03/26(火) 22:49:38.25ID:D6PYEJQv C++2zには俺の作ったライブラリが標準搭載されると思う。
773デフォルトの名無しさん
2019/03/26(火) 23:13:14.99ID:T41fm+6R 天下のマイクロソフトが考えたATLでもいいんだぞ
774デフォルトの名無しさん
2019/03/26(火) 23:32:43.00ID:zBAPpXX5 ATL(adult T-cell leukemia-lymphoma)は語呂が悪い
775デフォルトの名無しさん
2019/03/26(火) 23:38:15.00ID:zBAPpXX5 std::tuppleはPythonフリークが無理矢理ねじ込んだのではないか
C++11で追加された可変長テンプレートなくして有り得なかったコンテナやし
std::pairと被っとる
C++11で追加された可変長テンプレートなくして有り得なかったコンテナやし
std::pairと被っとる
776デフォルトの名無しさん
2019/03/26(火) 23:43:43.21ID:T41fm+6R tupleなんかどの言語にもあるだろ
現代の言語の基本的概念の一つで当然サポートされるべき
現代の言語の基本的概念の一つで当然サポートされるべき
777デフォルトの名無しさん
2019/03/26(火) 23:49:19.01ID:WJaRDiZ5 ライブラリでサポートだけどな
これがダメなところ
これがダメなところ
778デフォルトの名無しさん
2019/03/27(水) 00:07:37.22ID:QPwampGA 何で?
779デフォルトの名無しさん
2019/03/27(水) 00:38:40.54ID:Wsy7XdfH780デフォルトの名無しさん
2019/03/27(水) 00:42:46.01ID:bx8pTnoV なんちゃらラウップは言いにくいからいつも
ビョーーンさん、と呼んでいる
ビョーーンさん、と呼んでいる
781デフォルトの名無しさん
2019/03/27(水) 00:47:30.04ID:Mw4em8Pz tupleは型関数でも重宝するよね
782デフォルトの名無しさん
2019/03/27(水) 00:56:42.26ID:ZXIZSYy+ タプルはなにが嫌といって get<0> とかいうのがものすごく嫌
要素が4個ぐらいになったら1年後ぐらいにコード書き直そうとして
・・えっとこの値取りだすの get<1> だっけ? get<2> だっけ?とか絶対なるから使わない
要素が4個ぐらいになったら1年後ぐらいにコード書き直そうとして
・・えっとこの値取りだすの get<1> だっけ? get<2> だっけ?とか絶対なるから使わない
783デフォルトの名無しさん
2019/03/27(水) 00:58:48.50ID:DfX99uD1 そんな貴方にenum定数
784デフォルトの名無しさん
2019/03/27(水) 01:03:41.91ID:Mw4em8Pz いい加減enumにメンバ関数定義させろと。
enum classの時にどうにかすべきだった気もするが。
後は静的なリフレクションも
enumと文字列の相互変換とか殆ど定型コードになるのにいちいち書くのが面倒すぎる。
マクロで書くのも微妙だし
enum classの時にどうにかすべきだった気もするが。
後は静的なリフレクションも
enumと文字列の相互変換とか殆ど定型コードになるのにいちいち書くのが面倒すぎる。
マクロで書くのも微妙だし
785はちみつ餃子 ◆8X2XSCHEME
2019/03/27(水) 02:16:29.42ID:1nw30Wbv786デフォルトの名無しさん
2019/03/27(水) 02:25:21.92ID:Mw4em8Pz 標準コンテナ使わないらしい人の
抜群のセンスを見てみたいので、コードの一部でも見せて欲しいものだな
抜群のセンスを見てみたいので、コードの一部でも見せて欲しいものだな
787デフォルトの名無しさん
2019/03/27(水) 02:59:41.39ID:V3NaDuAs Eigenが絶妙に不便なんだけど行列演算を標準でサポートする予定ってあるの?
788デフォルトの名無しさん
2019/03/27(水) 03:31:56.74ID:Wsy7XdfH >>786
アイデア盗まれるだけ損。
アイデア盗まれるだけ損。
789デフォルトの名無しさん
2019/03/27(水) 06:12:39.11ID:0QkCU47u センスが悪いというだけで具体的にどこがどう悪いか、どんなだったらセンスが良いのか言わないと、説得力ゼロだな。
790デフォルトの名無しさん
2019/03/27(水) 06:31:30.44ID:J3LATpLk >>743
+1
+1
791デフォルトの名無しさん
2019/03/27(水) 06:40:01.31ID:J3LATpLk >>780
禿
禿
792デフォルトの名無しさん
2019/03/27(水) 06:52:27.00ID:Ojl0EpZo >>784
定型文ならtemplateで書けないの?
定型文ならtemplateで書けないの?
793デフォルトの名無しさん
2019/03/27(水) 07:12:11.84ID:Mw4em8Pz >>792
やりたいことは単にenumの値の識別子とその文字列を対応付けるだけなんだが、templateで書けるの?
enum class Color {
Red,
Green,
Blue
};
inline auto to_string(Color c)
{
switch (c){
case Color::Red:return "Red";
...
}
}
こんな感じのことがしたい
やりたいことは単にenumの値の識別子とその文字列を対応付けるだけなんだが、templateで書けるの?
enum class Color {
Red,
Green,
Blue
};
inline auto to_string(Color c)
{
switch (c){
case Color::Red:return "Red";
...
}
}
こんな感じのことがしたい
794デフォルトの名無しさん
2019/03/27(水) 07:24:00.67ID:DfX99uD1 マクロ Stringizing Operator (#) を使うしかないのでは。
795デフォルトの名無しさん
2019/03/27(水) 07:44:38.63ID:QPwampGA796デフォルトの名無しさん
2019/03/27(水) 07:59:25.35ID:KDFmmUkx ストラウストラップも例外入れるかどうかあたりまでは
かなり真剣に仕様を考えてた印象だけれどそれ以降はタガが外れた感じだ。
最近はもうどうしようもなくなってる。
かなり真剣に仕様を考えてた印象だけれどそれ以降はタガが外れた感じだ。
最近はもうどうしようもなくなってる。
797デフォルトの名無しさん
2019/03/27(水) 08:00:04.09ID:Ojl0EpZo >>793
その処理ならmapかunordered_map使うのが良くないだろうか?
その処理ならmapかunordered_map使うのが良くないだろうか?
798デフォルトの名無しさん
2019/03/27(水) 08:06:10.74ID:QPwampGA なお誰もストラウストラップに意見を出せるほどプログラミング言語の勉強をしていないもよう
799デフォルトの名無しさん
2019/03/27(水) 08:07:01.17ID:Kgbo0Zp4800デフォルトの名無しさん
2019/03/27(水) 08:25:16.34ID:HgdvOlrd 関数の引数として vector<int> を参照渡ししたいのですが、これのデフォルト引数を空の vector<int> にする方法ってありますか
801デフォルトの名無しさん
2019/03/27(水) 08:33:50.59ID:pdL3Pyxp std::vector<int> &v = std::vector<int>() じゃないのん
802デフォルトの名無しさん
2019/03/27(水) 08:43:24.12ID:HgdvOlrd >>801
参照渡しでもそのやり方できますか?
参照渡しでもそのやり方できますか?
803デフォルトの名無しさん
2019/03/27(水) 08:45:04.79ID:pdL3Pyxp やればわかる
804デフォルトの名無しさん
2019/03/27(水) 09:24:45.56ID:7IO5xMdH const?
805デフォルトの名無しさん
2019/03/27(水) 09:33:08.23ID:p4oEJ8zd >>786
センスうんぬんを言ったのはおれじゃないけど、
標準ライブラリ使わないという主張に対して、ソースがエレガントかどうかを問うのは目的がわかってない
端的にいうと標準ライブラリのオーバーヘッドが許容できないんだよ
多少記述が汚くなろうがパフォーマンス引き出すのが優先
cとc++のベンチだと結局cの方がいいスコアになってること多いだろ
(全てがそうでないのは知ってる)
そこをcと同等まで引き上げるわけだ
センスうんぬんを言ったのはおれじゃないけど、
標準ライブラリ使わないという主張に対して、ソースがエレガントかどうかを問うのは目的がわかってない
端的にいうと標準ライブラリのオーバーヘッドが許容できないんだよ
多少記述が汚くなろうがパフォーマンス引き出すのが優先
cとc++のベンチだと結局cの方がいいスコアになってること多いだろ
(全てがそうでないのは知ってる)
そこをcと同等まで引き上げるわけだ
806デフォルトの名無しさん
2019/03/27(水) 09:36:50.33ID:QPwampGA だったらC使ってれば
それ以外の選択肢無いんだから
それ以外の選択肢無いんだから
807デフォルトの名無しさん
2019/03/27(水) 09:40:51.50ID:p4oEJ8zd >>806
そこはアセンブラ使えばというところだろ
そこはアセンブラ使えばというところだろ
808デフォルトの名無しさん
2019/03/27(水) 09:40:55.11ID:pdL3Pyxp809デフォルトの名無しさん
2019/03/27(水) 09:45:55.40ID:p4oEJ8zd いうまでもなく、ボトルネックでないところは労力はかけない
メンテが楽な手法を使う
それに完全にゼロコストなものは普通に使うさ
メンテが楽な手法を使う
それに完全にゼロコストなものは普通に使うさ
810デフォルトの名無しさん
2019/03/27(水) 09:52:34.13ID:U9bjaUkC 標準コンテナでcより遅くなるってどんなパターン?
単方向listで十分なのにlistだと双方向とかそんなやつ?
あんまりlist使わんからよくわからんが
vectorは使い方を余程間違えない限り大抵代替品より速いような
メモリ確保回りはallocator使えばいいし
data使えばただのメモリブロックだよね
単方向listで十分なのにlistだと双方向とかそんなやつ?
あんまりlist使わんからよくわからんが
vectorは使い方を余程間違えない限り大抵代替品より速いような
メモリ確保回りはallocator使えばいいし
data使えばただのメモリブロックだよね
811デフォルトの名無しさん
2019/03/27(水) 10:01:31.18ID:QPwampGA 99%iostreamのこといってるからな
812デフォルトの名無しさん
2019/03/27(水) 10:04:51.88ID:tQ4XPcUj >>810
要素の追加時に容量の拡張が必要かどうかのチェックが入ったりするから、オーバーヘッドはゼロではないよ
要素の追加時に容量の拡張が必要かどうかのチェックが入ったりするから、オーバーヘッドはゼロではないよ
813デフォルトの名無しさん
2019/03/27(水) 10:08:24.05ID:U9bjaUkC814デフォルトの名無しさん
2019/03/27(水) 10:12:49.51ID:QPwampGA Cで作っても同じでワロタ
815デフォルトの名無しさん
2019/03/27(水) 10:22:17.37ID:tQ4XPcUj >>813
便利なものがあれば人間は使ってしまうもんだ
その積み重ねがパフォーマンスの差に繋がる
俺は一般には便利なものを使って時間を節約することでボトルネック解消にかける時間を確保でき、
結果的にパフォーマンスはより高くなると思うけど、そこはスケジュールの制約次第だな
便利なものがあれば人間は使ってしまうもんだ
その積み重ねがパフォーマンスの差に繋がる
俺は一般には便利なものを使って時間を節約することでボトルネック解消にかける時間を確保でき、
結果的にパフォーマンスはより高くなると思うけど、そこはスケジュールの制約次第だな
816デフォルトの名無しさん
2019/03/27(水) 10:29:47.46ID:9ko5ghKo Cマスター「C++は配列に追加するときにサイズチェックするから遅い(キリッ」
wwwwwwwwwwwwwwwwwwwwww
こんな雑魚がでかい顔してるからいつまでもセキュリティホールがなくならないんすなあ
wwwwwwwwwwwwwwwwwwwwww
こんな雑魚がでかい顔してるからいつまでもセキュリティホールがなくならないんすなあ
817デフォルトの名無しさん
2019/03/27(水) 10:34:12.90ID:9ko5ghKo Cマスター「要素追加時にサイズチェックするという便利さの積み重ねがパフォーマンスを落とす(キリッキリッ」
やべえ笑い死にしそう
笑い事じゃないけど
やべえ笑い死にしそう
笑い事じゃないけど
818デフォルトの名無しさん
2019/03/27(水) 12:49:47.89ID:DY72tOrL プロファイラで調べて本当に問題あるならどうにかするけど
ただわざわざc的に書いても大抵誤差レベルでしか変わらんよね
どちらかと言うとバッファの確保の仕方を工夫した方が効果が大きい
ただわざわざc的に書いても大抵誤差レベルでしか変わらんよね
どちらかと言うとバッファの確保の仕方を工夫した方が効果が大きい
819デフォルトの名無しさん
2019/03/27(水) 13:05:12.78ID:fzYgEwLp >>816
トレードオフもわからん雑魚
トレードオフもわからん雑魚
820デフォルトの名無しさん
2019/03/27(水) 13:06:52.67ID:C+1U7WOU >>810
・以下、要素数が N とする。
・C/C++ の原定義の固定長配列は、要素の代入に1クロックしかかからない。もちろん、
O(1)で、物凄く速い。なお、固定長なので「代入」であり「追加」ではない。
・Listはリストだから1個の要素の追加はO(1)で、要素数に依存せず安定した速度が出るが、
内部で、newされるはずなので、最低でも170クロックほどかかってしまう。
・Vectorは動的配列だから、最悪のケースでは要素の追加にO(N)の時間がかかり固定長配列より遅くなる
と思う(よく知らない)。
・以下、要素数が N とする。
・C/C++ の原定義の固定長配列は、要素の代入に1クロックしかかからない。もちろん、
O(1)で、物凄く速い。なお、固定長なので「代入」であり「追加」ではない。
・Listはリストだから1個の要素の追加はO(1)で、要素数に依存せず安定した速度が出るが、
内部で、newされるはずなので、最低でも170クロックほどかかってしまう。
・Vectorは動的配列だから、最悪のケースでは要素の追加にO(N)の時間がかかり固定長配列より遅くなる
と思う(よく知らない)。
821デフォルトの名無しさん
2019/03/27(水) 13:34:58.24ID:tQ4XPcUj >>817
複数の要素を追加するとき、わざわざ事前にまとめてリサイズするか?ということだよ
1要素ずつ処理するのは生ポならかえって面倒になることが多いし、見た目にいかにも非効率そうなコードに見えるから、大抵の人は自然にそうするだろう
一方vectorだとどうだろうね
心理的な問題なの
複数の要素を追加するとき、わざわざ事前にまとめてリサイズするか?ということだよ
1要素ずつ処理するのは生ポならかえって面倒になることが多いし、見た目にいかにも非効率そうなコードに見えるから、大抵の人は自然にそうするだろう
一方vectorだとどうだろうね
心理的な問題なの
822デフォルトの名無しさん
2019/03/27(水) 13:45:54.22ID:tQ4XPcUj 同じようなことはvectorに限らず一般的に言ええて、
例えばC++はRTTIの便利さ故にCと比較してプログラマが無駄なメモリの確保や破棄を行いやすい傾向がある
逆にCだと無駄に大きなバッファ作りがちだったり、バッファの使いまわしによりスレッドセーフでないコードを書きがちであったりする
例えばC++はRTTIの便利さ故にCと比較してプログラマが無駄なメモリの確保や破棄を行いやすい傾向がある
逆にCだと無駄に大きなバッファ作りがちだったり、バッファの使いまわしによりスレッドセーフでないコードを書きがちであったりする
823デフォルトの名無しさん
2019/03/27(水) 13:46:41.13ID:tQ4XPcUj すまんRTTIじゃなくてRAIIな
824デフォルトの名無しさん
2019/03/27(水) 14:07:44.29ID:xtV64SvS クロックなんてわからんじゃろ
825デフォルトの名無しさん
2019/03/27(水) 14:29:28.16ID:t7f2HshG VC++2017なんだけど
デストラクタで投げた例外をキャッチできずabortするのはVC++の仕様?
RAIIとラムダを駆使した自作finally内で
例外投げたらキャッチできずabortしてハマったわ
デストラクタ内で例外投げるのが汚いのは知ってたが
そうか、自作finallyもデストラクタ利用してるからダメなのかな
デストラクタで投げた例外をキャッチできずabortするのはVC++の仕様?
RAIIとラムダを駆使した自作finally内で
例外投げたらキャッチできずabortしてハマったわ
デストラクタ内で例外投げるのが汚いのは知ってたが
そうか、自作finallyもデストラクタ利用してるからダメなのかな
826デフォルトの名無しさん
2019/03/27(水) 14:35:28.06ID:fzYgEwLp デストラクタはデフォルトでnoexceptやで
827デフォルトの名無しさん
2019/03/27(水) 14:54:30.22ID:t7f2HshG サンクス
デストラクタをnoexcept(false)指定したらcatch出来たわ
てことは自作finallyは念のためnoexcept(false)指定にしたほうが良いのか
それか自作finally内で例外投げるのは完全禁止にするか
悩むわ
デストラクタをnoexcept(false)指定したらcatch出来たわ
てことは自作finallyは念のためnoexcept(false)指定にしたほうが良いのか
それか自作finally内で例外投げるのは完全禁止にするか
悩むわ
828デフォルトの名無しさん
2019/03/27(水) 14:56:55.41ID:t7f2HshG まぁでもよく考えたら
例外が発生して自作finallyが実行されてる時に
さらに自作finally内で例外飛ばしたら二重例外になるから危険か
なるほどなるのど
例外が発生して自作finallyが実行されてる時に
さらに自作finally内で例外飛ばしたら二重例外になるから危険か
なるほどなるのど
829デフォルトの名無しさん
2019/03/27(水) 17:38:06.36ID:8XRRZQAn830デフォルトの名無しさん
2019/03/27(水) 17:50:46.31ID:fzYgEwLp 全体じゃなくて一要素やろ?
831デフォルトの名無しさん
2019/03/27(水) 17:55:38.42ID:8XRRZQAn あーそう言うことか
固定長的に使いたいなら始めにresizeするだけじゃない
便利だからチーム内で使ってしまう人がいることを問題にするより、使わずにいちいち独自コードで処理されて余計遅くなったり、バグ仕込まれたりする方が余程ヤバイだろ
固定長的に使いたいなら始めにresizeするだけじゃない
便利だからチーム内で使ってしまう人がいることを問題にするより、使わずにいちいち独自コードで処理されて余計遅くなったり、バグ仕込まれたりする方が余程ヤバイだろ
832デフォルトの名無しさん
2019/03/27(水) 18:00:35.88ID:xtV64SvS 先生、配列の長さにリミットを設ける方法を教えてください
833デフォルトの名無しさん
2019/03/27(水) 18:00:36.53ID:fzYgEwLp まぁそれでも範囲チェックは入るし、常にヒープ使われるし
それすら問題になるようなクリティカルな場所なら生配列なりarray使えばいいと思うけど
適材適所じゃないかねぇ
それすら問題になるようなクリティカルな場所なら生配列なりarray使えばいいと思うけど
適材適所じゃないかねぇ
834デフォルトの名無しさん
2019/03/27(水) 18:03:25.00ID:97C5Fzq7 operator[]なら範囲チェック入らんよ
835デフォルトの名無しさん
2019/03/27(水) 18:14:58.29ID:QPwampGA 末尾に追加の話だろ
836デフォルトの名無しさん
2019/03/27(水) 18:15:04.13ID:fzYgEwLp うお、マジだ誤解してた
837デフォルトの名無しさん
2019/03/27(水) 18:20:39.73ID:fzYgEwLp838デフォルトの名無しさん
2019/03/27(水) 18:39:59.51ID:ZT8Ntgus よくあの時代にこのような洗練されたライブラリを設計できたものだと思います。
もしかすると宇宙人にもらったのかも。
もしかすると宇宙人にもらったのかも。
839デフォルトの名無しさん
2019/03/27(水) 20:06:12.42ID:KDFmmUkx 配列の長さチェックのオーバーヘッドとかなんかものすごくデジャブ感のある議論だな。
肯定、否定どちらにしてもマウンティングかましたくなる題材なんかね。
肯定、否定どちらにしてもマウンティングかましたくなる題材なんかね。
840デフォルトの名無しさん
2019/03/27(水) 21:09:05.61ID:p4oEJ8zd 標準コンテナで問題になるのはやっぱりヒープだよ
境界チェックとか仮に無断だとしても一定時間で終わる処理
ヒープ使われると最悪システムコールで負荷変動大きすぎる
ちなみにアロケータは要素数で管理できないから面倒
あとvectorで最初にreserveしても最大長越えないチェックが必要で面倒
でこれらを解決するコンテナがboostにあるのでそれを使う
境界チェックとか仮に無断だとしても一定時間で終わる処理
ヒープ使われると最悪システムコールで負荷変動大きすぎる
ちなみにアロケータは要素数で管理できないから面倒
あとvectorで最初にreserveしても最大長越えないチェックが必要で面倒
でこれらを解決するコンテナがboostにあるのでそれを使う
841デフォルトの名無しさん
2019/03/27(水) 21:18:02.40ID:p4oEJ8zd あと標準ライブラリのリンクリストはそもそもの設計が非効率
(クリーンな設計ではあるが)
素朴なcの実装と比べてかなり差がでる
これも代替がboostにある
(クリーンな設計ではあるが)
素朴なcの実装と比べてかなり差がでる
これも代替がboostにある
842デフォルトの名無しさん
2019/03/27(水) 21:25:03.72ID:4bSYNNTL >>820
なんか変じゃないですか?
list や vector のときは要素の「追加」なのに、生配列だけ要素の「代入」と設定するのですか?
list や vector で要素の「追加」を考察するのなら、生配列の場合も要素の「追加」を検討してください
なんか変じゃないですか?
list や vector のときは要素の「追加」なのに、生配列だけ要素の「代入」と設定するのですか?
list や vector で要素の「追加」を考察するのなら、生配列の場合も要素の「追加」を検討してください
844デフォルトの名無しさん
2019/03/27(水) 21:38:22.09ID:p4oEJ8zd845デフォルトの名無しさん
2019/03/27(水) 21:45:52.93ID:9ko5ghKo ここのCマスター様は、現在の配列長と挿入インデックスのチェックしてreallocしてなんていう
パフォーマンスの悪い便利さに甘えた処理などしない
堂々とv[N]に無条件代入を行って超高速O(1)追加を実現するのだ
パフォーマンスの悪い便利さに甘えた処理などしない
堂々とv[N]に無条件代入を行って超高速O(1)追加を実現するのだ
846さまよえる蟻人間 ◆T6xkBnTXz7B0
2019/03/27(水) 21:50:08.37ID:X5Tg+wiF 事前のresizeかreserveでええんとちゃう?
847デフォルトの名無しさん
2019/03/27(水) 21:51:09.94ID:t38PuBqi 事前に分かるならスタック固定長でいいじゃん
848デフォルトの名無しさん
2019/03/27(水) 22:02:47.67ID:gbxz82US reserve あれば困る事なんてないやろ
849デフォルトの名無しさん
2019/03/27(水) 23:54:55.06ID:QPwampGA 一般的には無いよ
局所的な話を持ち出してああだこうだ言ってるのが今
そして何をするつもりかは誰も知らん
局所的な話を持ち出してああだこうだ言ってるのが今
そして何をするつもりかは誰も知らん
850デフォルトの名無しさん
2019/03/28(木) 00:42:33.33ID:yLTGLAEP >>829
要素数がN、データの大きさは4バイト、と仮定した場合の話。
要素数がN、データの大きさは4バイト、と仮定した場合の話。
851デフォルトの名無しさん
2019/03/28(木) 00:47:43.37ID:yLTGLAEP >>843
4バイト整数のN要素の配列を仮定しているが、Cの単純な固定長配列だと
4バイト整数はコピーするのが当然。
ところが、Listだと、「追加」するしかない。動的配列である
Vectorも、基本的には「追加」が基本。そうでなければ「動的」と言わない。
4バイト整数のN要素の配列を仮定しているが、Cの単純な固定長配列だと
4バイト整数はコピーするのが当然。
ところが、Listだと、「追加」するしかない。動的配列である
Vectorも、基本的には「追加」が基本。そうでなければ「動的」と言わない。
852デフォルトの名無しさん
2019/03/28(木) 00:53:54.09ID:AOcR4eqo vector.data()、basic_string.c_str()はCと同じの配列の連続アドレスを保証する数少ないインターフェースでしょ。
853デフォルトの名無しさん
2019/03/28(木) 01:07:32.08ID:Csoqrb4z 正直stringがゼロ終端を保証したのはちょっとどうかなと思ってる
いや便利なんだけどさ・・
いや便利なんだけどさ・・
854デフォルトの名無しさん
2019/03/28(木) 01:15:59.09ID:eE4sGejC >>853
特に不都合無いのだからいいだろう
特に不都合無いのだからいいだろう
855デフォルトの名無しさん
2019/03/28(木) 01:39:16.25ID:AOcR4eqo アドレスと一緒にバッファサイズを渡せないAPIが世の中に無数にある。ヌル終端は優しさ。
856デフォルトの名無しさん
2019/03/28(木) 03:12:24.24ID:0b3fKrWQ そもそも printf が
857デフォルトの名無しさん
2019/03/28(木) 05:04:36.64ID:fRHhg+J8859デフォルトの名無しさん
2019/03/28(木) 07:13:39.49ID:mfvsZ6Gk >>851
ようゴCマスター様
マスター様は知らなくてビックリするけど、C++ではvectorやlistは要素数が実行時に決まるときに使うんだ
そして驚くべきことに、Cにも要素数が実行時に決まるときに使うための愚かしい機能がなぜか備わってるんだ
reallocっていうらしいんだけどさ
使うときは確保済みのバッファの長さをいちいち調べて、足りなかったら再確保して必要に応じて要素を全部コピーするらしいっすよ
もちろんそんな馬鹿げたオーバーヘッドを払う奴はC++かぶれのド素人だけだけどな
真のCプログラマは一度確保した配列の自由なインデックスにコピーすることでvectorの無意味なオーバーヘッドを回避し超高速O(1)を実現するのだ
ようゴCマスター様
マスター様は知らなくてビックリするけど、C++ではvectorやlistは要素数が実行時に決まるときに使うんだ
そして驚くべきことに、Cにも要素数が実行時に決まるときに使うための愚かしい機能がなぜか備わってるんだ
reallocっていうらしいんだけどさ
使うときは確保済みのバッファの長さをいちいち調べて、足りなかったら再確保して必要に応じて要素を全部コピーするらしいっすよ
もちろんそんな馬鹿げたオーバーヘッドを払う奴はC++かぶれのド素人だけだけどな
真のCプログラマは一度確保した配列の自由なインデックスにコピーすることでvectorの無意味なオーバーヘッドを回避し超高速O(1)を実現するのだ
860デフォルトの名無しさん
2019/03/28(木) 08:00:11.54ID:PaLXcDGr なんかツッコもうと思ったら既に>>813に書いてあった
861デフォルトの名無しさん
2019/03/28(木) 10:11:22.12ID:yLTGLAEP862デフォルトの名無しさん
2019/03/28(木) 11:32:51.21ID:yLTGLAEP >>859
>そして驚くべきことに、Cにも要素数が実行時に決まるときに使うための愚かしい機能がなぜか備わってるんだ
>reallocっていうらしいんだけどさ
Cでは、realloc は推奨されて無い。
Cで、要素数が実行時に決まるような集合を扱いたい場合は、自前で
ポインタでリンクする、リンクリストを使う。
毎回それをやると間違いやすいので、賢い人は、自前でリストライブラリを作って
それを用いて操作する。
>そして驚くべきことに、Cにも要素数が実行時に決まるときに使うための愚かしい機能がなぜか備わってるんだ
>reallocっていうらしいんだけどさ
Cでは、realloc は推奨されて無い。
Cで、要素数が実行時に決まるような集合を扱いたい場合は、自前で
ポインタでリンクする、リンクリストを使う。
毎回それをやると間違いやすいので、賢い人は、自前でリストライブラリを作って
それを用いて操作する。
863デフォルトの名無しさん
2019/03/28(木) 11:39:08.71ID:dMtNAb9A Linuxのソースなんだけど
close(0) close(1) close(2)って書いてあるの見つけたのだが
これってなんの効果が期待できるの?
ファイルディスクリプタ?だと思っていてオープン等をした値番号だと思ってたけど、0 1 2に該当するのがなんなのかと
close(0) close(1) close(2)って書いてあるの見つけたのだが
これってなんの効果が期待できるの?
ファイルディスクリプタ?だと思っていてオープン等をした値番号だと思ってたけど、0 1 2に該当するのがなんなのかと
864デフォルトの名無しさん
2019/03/28(木) 12:01:08.00ID:5UOqavsG stdin, stdout, stderr
865デフォルトの名無しさん
2019/03/28(木) 12:18:22.29ID:des+yyG9 iteratorでstartとendの中に納まってることが保証されてるのに
各要素にアクセスするときにまた範囲チェックとかあると無駄やん
そりゃ書こうと思えばいくらでも危険なコードは書けるけど
安全なときはそういうの省いて高速化出来るのがCの良いところなのに
(レジスタの値が知らない間に壊れても正常に動くようにとか言ってるなら知らん)
各要素にアクセスするときにまた範囲チェックとかあると無駄やん
そりゃ書こうと思えばいくらでも危険なコードは書けるけど
安全なときはそういうの省いて高速化出来るのがCの良いところなのに
(レジスタの値が知らない間に壊れても正常に動くようにとか言ってるなら知らん)
866デフォルトの名無しさん
2019/03/28(木) 12:31:30.80ID:yd30y0n6 >>861
固定とか決めつけてるのを別にしても何を言いたいのかさっぱりわからん
固定とか決めつけてるのを別にしても何を言いたいのかさっぱりわからん
867デフォルトの名無しさん
2019/03/28(木) 12:34:41.89ID:OvbnMtjj868デフォルトの名無しさん
2019/03/28(木) 12:45:22.23ID:yiBU3VRL 差異があるとすれば、deep copyだね
決めつけ良くない
決めつけ良くない
869デフォルトの名無しさん
2019/03/28(木) 12:48:36.64ID:ADAikd1k >>862
ランタイムでサイズが決まる動的配列にリンクリスト使うのはさすがにダメすぎる
ランタイムでサイズが決まる動的配列にリンクリスト使うのはさすがにダメすぎる
870デフォルトの名無しさん
2019/03/28(木) 12:56:24.56ID:TvMamSuP >>863
デーモンになりたいんだろうな
デーモンになりたいんだろうな
871デフォルトの名無しさん
2019/03/28(木) 13:00:41.99ID:yLTGLAEP872デフォルトの名無しさん
2019/03/28(木) 13:05:17.92ID:AOcR4eqo >>869,871
ソートはどうなの? (・∀・)ニヤニヤ
ソートはどうなの? (・∀・)ニヤニヤ
873デフォルトの名無しさん
2019/03/28(木) 13:06:22.45ID:AOcR4eqo 春休みでスレの勢いが上がり、スレの品質が落ちた。
874デフォルトの名無しさん
2019/03/28(木) 13:22:32.10ID:des+yyG9 義務教育でプログラミングとか教えたら
もっと変なの増えそう
python界隈に来ないで欲しい
もっと変なの増えそう
python界隈に来ないで欲しい
875デフォルトの名無しさん
2019/03/28(木) 13:29:56.71ID:t1sztID7876デフォルトの名無しさん
2019/03/28(木) 13:49:18.36ID:KoUoPeo+ そのへんの化石言語はいい加減消滅させるべき
877デフォルトの名無しさん
2019/03/28(木) 13:51:20.07ID:0CdADxX3 化石じゃないまだドメイン次第で現役Fortranだってこの間新しい仕様出たし!ってつっかかられるぞ
08をちゃんと実装したコンパイラ出してから言ってくれよって気持ちだが
08をちゃんと実装したコンパイラ出してから言ってくれよって気持ちだが
878デフォルトの名無しさん
2019/03/28(木) 14:01:46.15ID:Csoqrb4z >>873
お前が言うな
お前が言うな
879デフォルトの名無しさん
2019/03/28(木) 14:03:11.91ID:CwLqpfbs _____(コボル)
答え COBOL
_____(フォートラン)
答え FORTRAN
これのどこが問題集やねん!
答え COBOL
_____(フォートラン)
答え FORTRAN
これのどこが問題集やねん!
880デフォルトの名無しさん
2019/03/28(木) 14:08:39.40ID:t1sztID7 来年度からこれが流通するぞ
881デフォルトの名無しさん
2019/03/28(木) 15:14:03.54ID:KoUoPeo+ ほんと役人どもがやることはいつもずれてる
882デフォルトの名無しさん
2019/03/28(木) 16:17:03.97ID:yLTGLAEP >>880
その言葉を見る限り、あなたは日本人じゃない気がする。
この文脈で、あなたが言いたかったのは、
「来年度からこれが流通するぞ」ではなく
「来年度からこれが常態化するぞ」
という事だったと思うから。
その言葉を見る限り、あなたは日本人じゃない気がする。
この文脈で、あなたが言いたかったのは、
「来年度からこれが流通するぞ」ではなく
「来年度からこれが常態化するぞ」
という事だったと思うから。
883デフォルトの名無しさん
2019/03/28(木) 17:38:04.05ID:ADAikd1k884デフォルトの名無しさん
2019/03/28(木) 17:39:39.59ID:ADAikd1k だいたいC++にはasmがあるしな
アセンブラで出来ることは出来るんじゃね
アセンブラで出来ることは出来るんじゃね
885デフォルトの名無しさん
2019/03/28(木) 18:18:56.58ID:JEyrctWP886デフォルトの名無しさん
2019/03/28(木) 18:20:50.90ID:KoUoPeo+ それは一理ある
日本は官僚統治国家だから
日本は官僚統治国家だから
887デフォルトの名無しさん
2019/03/28(木) 18:30:14.54ID:t1sztID7 公僕が・・・舐めてると潰すぞ
888デフォルトの名無しさん
2019/03/28(木) 18:32:28.62ID:des+yyG9 888
889デフォルトの名無しさん
2019/03/28(木) 18:42:36.05ID:pafVG92t でも、ターゲットにRubyとC++を選択したのは正解だと思ってるよ。
890デフォルトの名無しさん
2019/03/28(木) 18:43:27.34ID:KoUoPeo+ Rubyはない
891デフォルトの名無しさん
2019/03/28(木) 18:45:09.06ID:yLTGLAEP 日本政府は日本人と将来の日本の年金などのための政治を行えばいいのだから、
日本人が作ったものを使うように推進するのは悪いことではない。
余りにも使いにくいもので無い限りは。
だからWordをやめて一太郎を使うようにしたり、Rubyを使うようにしたり
するとすれば、それは英断だよ。
日本人が作ったものを使うように推進するのは悪いことではない。
余りにも使いにくいもので無い限りは。
だからWordをやめて一太郎を使うようにしたり、Rubyを使うようにしたり
するとすれば、それは英断だよ。
892デフォルトの名無しさん
2019/03/28(木) 18:45:11.14ID:JEyrctWP RubyはWindowsでまともに動かないから、Linux採用するのかな。
893デフォルトの名無しさん
2019/03/28(木) 18:48:52.21ID:pafVG92t >>892
自分の環境では、Windowsで普通に動いてると思ってるけど。
自分の環境では、Windowsで普通に動いてると思ってるけど。
894デフォルトの名無しさん
2019/03/28(木) 18:49:56.61ID:JEyrctWP 関数型教えればいいのに。
895デフォルトの名無しさん
2019/03/28(木) 18:58:40.35ID:KoUoPeo+ 教えるなら実用性と手軽さからしてC++、Javascript、python
896デフォルトの名無しさん
2019/03/28(木) 18:59:00.99ID:yiBU3VRL >>883
えっ配列初期化子がC++でも使えるように?
えっ配列初期化子がC++でも使えるように?
897デフォルトの名無しさん
2019/03/28(木) 19:00:37.17ID:des+yyG9898デフォルトの名無しさん
2019/03/28(木) 19:04:55.98ID:KoUoPeo+ 国産であっても良いものでなければ応援するべきではない
Rubyは滅ぶべき言語トップ10に入る
Rubyは滅ぶべき言語トップ10に入る
899デフォルトの名無しさん
2019/03/28(木) 19:07:54.30ID:OttlZ3Q/900デフォルトの名無しさん
2019/03/28(木) 19:20:56.01ID:pafVG92t PythonとRubyだったら、Rubyもそんなに悪くは無いと思う。
Pythonは可読性が悪いように感じる。空白インデントだけでブロックや
関数の終わりを決めてしまうので、内部関数が終わってるかどうか分からず、
人の書いたソースが読みにくくて困ったことがある。
Pythonは可読性が悪いように感じる。空白インデントだけでブロックや
関数の終わりを決めてしまうので、内部関数が終わってるかどうか分からず、
人の書いたソースが読みにくくて困ったことがある。
901デフォルトの名無しさん
2019/03/28(木) 19:39:26.72ID:lj2W5NqA C++er的には
動的型の時点でノーサンキューだろ
そういうのが嫌でC++使ってるんじゃないのか
動的型の時点でノーサンキューだろ
そういうのが嫌でC++使ってるんじゃないのか
902デフォルトの名無しさん
2019/03/28(木) 19:40:51.32ID:lj2W5NqA 特にRubyは教祖様が
絶対に型は書きたくない
って駄々こねてるから
これはもう日本のガラパゴス化が一層激しくなるな
絶対に型は書きたくない
って駄々こねてるから
これはもう日本のガラパゴス化が一層激しくなるな
903デフォルトの名無しさん
2019/03/28(木) 19:43:44.68ID:jnmpmBFr pyは読みより書きの方が問題
間違えてインデントけずっても気づかないことが多い
間違えてインデントけずっても気づかないことが多い
904デフォルトの名無しさん
2019/03/28(木) 19:51:12.67ID:WN0VVTEM >>901
個人的には型のある言語の方が好きだ。
型があった方が、変な問題にはまる率が下がるので開発が速く進む。
大規模開発には絶対、型が必要。
初心者にも大人気言語だった元祖のBASICも、Aが浮動小数点型、A$が文字列型で、
確か、A% が整数型。配列は DIM A(100) や、DIM B%(10,10) などで、
宣言は省略できる場合が多いが、ちゃんと型はあった。
Rubyなどは、A にあらゆる型が入れられるので、関数呼び出しなどが
かなり怖い。間違っていても問題の切り分けが出来ないので「はまったら」大変。
だから、とても慎重にコードを目で見ないといけなくなる。
個人的には型のある言語の方が好きだ。
型があった方が、変な問題にはまる率が下がるので開発が速く進む。
大規模開発には絶対、型が必要。
初心者にも大人気言語だった元祖のBASICも、Aが浮動小数点型、A$が文字列型で、
確か、A% が整数型。配列は DIM A(100) や、DIM B%(10,10) などで、
宣言は省略できる場合が多いが、ちゃんと型はあった。
Rubyなどは、A にあらゆる型が入れられるので、関数呼び出しなどが
かなり怖い。間違っていても問題の切り分けが出来ないので「はまったら」大変。
だから、とても慎重にコードを目で見ないといけなくなる。
905デフォルトの名無しさん
2019/03/28(木) 19:52:41.47ID:wxB03uV3906デフォルトの名無しさん
2019/03/28(木) 19:55:00.97ID:KoUoPeo+ 言語仕様上は揃ってさえいればいい
907デフォルトの名無しさん
2019/03/28(木) 19:59:44.37ID:WN0VVTEM >>906
やはりそうだったんだ。だから余計に解読できなかったんだな。
エディタでカラムを数えたり、上まで戻ったりして、やっと認識していた。
でも不安が残った。ブロックが終わってるのかどうか物凄く分かりにくい。
やはりそうだったんだ。だから余計に解読できなかったんだな。
エディタでカラムを数えたり、上まで戻ったりして、やっと認識していた。
でも不安が残った。ブロックが終わってるのかどうか物凄く分かりにくい。
908デフォルトの名無しさん
2019/03/28(木) 20:02:46.54ID:eE4sGejC 今のPythonはカオスだからな
見易い文法目指していたはずが
内包表記やらラムダやら見づらくする文法が増えて推奨までされている
フレーム作るか否かもわかりづらいことこの上ない
見易い文法目指していたはずが
内包表記やらラムダやら見づらくする文法が増えて推奨までされている
フレーム作るか否かもわかりづらいことこの上ない
910デフォルトの名無しさん
2019/03/28(木) 20:33:45.97ID:BoT1RII7911デフォルトの名無しさん
2019/03/28(木) 20:46:24.22ID:jnmpmBFr メリデメっていうやつw
すまんがめっちゃ底辺臭する
すまんがめっちゃ底辺臭する
912デフォルトの名無しさん
2019/03/28(木) 20:56:41.12ID:JEyrctWP ハイクラスの人はなんて言うんだよ。
913デフォルトの名無しさん
2019/03/28(木) 21:07:04.95ID:siqlJJfC >>882
お前さんの言い換えた方の日本語もかなり不自然だよ。他人の言葉尻をとらえてどうこう言えるほど、お前さんも日本語が得意な訳ではないだろう。
そもそも、普通の人はそんなことで日本人かどうか気にしたりしない。
お前さんの言い換えた方の日本語もかなり不自然だよ。他人の言葉尻をとらえてどうこう言えるほど、お前さんも日本語が得意な訳ではないだろう。
そもそも、普通の人はそんなことで日本人かどうか気にしたりしない。
914デフォルトの名無しさん
2019/03/28(木) 21:20:29.56ID:1SvA7cSr >>858
文字列の途中に格納することは新仕様でもできるでしょ?
文字列の途中に格納することは新仕様でもできるでしょ?
>>912
「不正確な略語を口にするのは doubleplus-unwise である」
という事実をジョージ・オーウェルに学びました、彼は略語と esperant は毛嫌いしていたようです
https://ja.wikipedia.org/wiki/%E3%83%8B%E3%83%A5%E3%83%BC%E3%82%B9%E3%83%94%E3%83%BC%E3%82%AF
「不正確な略語を口にするのは doubleplus-unwise である」
という事実をジョージ・オーウェルに学びました、彼は略語と esperant は毛嫌いしていたようです
https://ja.wikipedia.org/wiki/%E3%83%8B%E3%83%A5%E3%83%BC%E3%82%B9%E3%83%94%E3%83%BC%E3%82%AF
916デフォルトの名無しさん
2019/03/28(木) 22:54:40.69ID:e7Ukr6X3 double型の変数a、bがあるとして、
a/bが整数かどうか判定するには
a/bが整数かどうか判定するには
917デフォルトの名無しさん
2019/03/28(木) 22:55:53.73ID:Qz7GRSnS 厳密には無理
918デフォルトの名無しさん
2019/03/28(木) 23:04:52.64ID:e7Ukr6X3 なぜ>>917はベストを尽くさないのか
919デフォルトの名無しさん
2019/03/28(木) 23:06:15.20ID:2+cLemOj 標準のコンテナなんて使う理由ある?
遅くて使い物にならん
ストリームなんて実用に耐えれないくらい遅いだろ
遅くて使い物にならん
ストリームなんて実用に耐えれないくらい遅いだろ
920デフォルトの名無しさん
2019/03/28(木) 23:08:40.51ID:t1sztID7 もう飽きたからいいよ
921デフォルトの名無しさん
2019/03/28(木) 23:14:08.39ID:e7Ukr6X3 ではa/bに最も近い整数はどうやったら出せますのん?
922デフォルトの名無しさん
2019/03/28(木) 23:17:25.36ID:AOcR4eqo (int)((a + 0.5) / b)
923デフォルトの名無しさん
2019/03/28(木) 23:17:26.82ID:EVp1RRUC a/bを丸めりゃいいと思うが?
924デフォルトの名無しさん
2019/03/28(木) 23:21:48.84ID:KoUoPeo+ std::round(a/b)
925デフォルトの名無しさん
2019/03/28(木) 23:22:20.86ID:e7Ukr6X3 両方の案を採ってC++14ではstd::floor(a / b + 0.5)にケテーイ?
C99なら丸め関数あるけど…
C99なら丸め関数あるけど…
926デフォルトの名無しさん
2019/03/28(木) 23:23:14.15ID:KoUoPeo+ CにあってなぜC++にないと思った
927デフォルトの名無しさん
2019/03/28(木) 23:24:22.62ID:e7Ukr6X3 C99はもはやC++とは別物やし…
928デフォルトの名無しさん
2019/03/28(木) 23:33:50.74ID:eE4sGejC 丸めって絶対の正解がないからな
929922
2019/03/28(木) 23:36:38.79ID:AOcR4eqo お恥ずかしい。素で間違えた。括弧の位置が違う。
930デフォルトの名無しさん
2019/03/28(木) 23:49:56.39ID:JEyrctWP >>918
それは自分に問いかける言葉だったんじゃ。
それは自分に問いかける言葉だったんじゃ。
931デフォルトの名無しさん
2019/03/29(金) 00:05:03.99ID:daDbIW6D932デフォルトの名無しさん
2019/03/29(金) 00:08:06.95ID:KSfDlte3 >>931
いや、元ネタの話。
いや、元ネタの話。
933デフォルトの名無しさん
2019/03/29(金) 00:09:22.47ID:KSfDlte3 上田次郎の言葉。
934デフォルトの名無しさん
2019/03/29(金) 00:20:10.55ID:0t+U2b3s 一太郎は自滅したからなぁ
どうしているのかと思えば名簿の話であんなことしていたのかと・・・
上手くやればいくらでも出来たのに勿体無い
どうしているのかと思えば名簿の話であんなことしていたのかと・・・
上手くやればいくらでも出来たのに勿体無い
935デフォルトの名無しさん
2019/03/29(金) 00:38:09.37ID:Sh9jl/tc >>931
いやこの場合はイプシロンじゃなくバイナリ一致で比較すべき
いやこの場合はイプシロンじゃなくバイナリ一致で比較すべき
936デフォルトの名無しさん
2019/03/29(金) 00:53:41.69ID:e60P0oPD まだ428万なのに一勝で400くらいしか上がらなくなったんだけど中堅名乗ってええか?
937デフォルトの名無しさん
2019/03/29(金) 00:53:59.93ID:e60P0oPD 誤爆
939デフォルトの名無しさん
2019/03/29(金) 01:45:14.97ID:DyQclHpC lisp は大昔 emacs のカスタマイズするのにしょっちゅう書いてたけど
なんでこんなクソみたいな古代言語を有り難がるやつがいるのかいつも謎だった
普通に C 風の文法のスクリプトでも搭載してくれたほうがよっぽどありがたい
なんでこんなクソみたいな古代言語を有り難がるやつがいるのかいつも謎だった
普通に C 風の文法のスクリプトでも搭載してくれたほうがよっぽどありがたい
940はちみつ餃子 ◆8X2XSCHEME
2019/03/29(金) 02:03:38.50ID:PFvplbFR941デフォルトの名無しさん
2019/03/29(金) 02:15:27.46ID:e60P0oPD どうしてC言語風のスクリプト言語が無いんだ
どいつもこいつも分かりにくいうえにデバッガも無いもん作りやがって
どいつもこいつも分かりにくいうえにデバッガも無いもん作りやがって
942デフォルトの名無しさん
2019/03/29(金) 05:41:16.20ID:VktwsX1+943デフォルトの名無しさん
2019/03/29(金) 05:42:05.38ID:VktwsX1+ 941
あったけど流行らなかった
pythonの方が役にたつ
あったけど流行らなかった
pythonの方が役にたつ
944デフォルトの名無しさん
2019/03/29(金) 06:59:38.46ID:Eeymx9+7 >>916
int型にしてdouble型に戻したのと比較するとか、floor関数使ったのと比較する。
int型にしてdouble型に戻したのと比較するとか、floor関数使ったのと比較する。
945デフォルトの名無しさん
2019/03/29(金) 07:49:31.47ID:WBACpCX+ >>941
Cインタプリタってのがいくつもある
Cインタプリタってのがいくつもある
946デフォルトの名無しさん
2019/03/29(金) 08:07:13.38ID:Ta+0qHqT >>931
min()以下の非正規化数でも残差があればそれは整数じゃないんだから単純に0との比較でいい。
min()以下の非正規化数でも残差があればそれは整数じゃないんだから単純に0との比較でいい。
947デフォルトの名無しさん
2019/03/29(金) 08:12:49.10ID:vRMp+NmG 固定小数型が標準でほしい
948デフォルトの名無しさん
2019/03/29(金) 08:23:09.46ID:WBACpCX+ 小数なんかいらん
ビッグインテジャークラスを標準でほしい
ビッグインテジャークラスを標準でほしい
949デフォルトの名無しさん
2019/03/29(金) 08:32:27.31ID:q1OkKHKh 設定はpythonでいいよ
950デフォルトの名無しさん
2019/03/29(金) 09:40:31.26ID:e60P0oPD >>945
あるけど誰も採用してない
何故かみんなオリジナルの言語を作り始める
相当慣れないとautotoolsとか解読困難だし
なんならこれもperlにすればよかったのに
おかげで出回ってるものもコピペを繰り返した秘伝のタレ状態だわ
あるけど誰も採用してない
何故かみんなオリジナルの言語を作り始める
相当慣れないとautotoolsとか解読困難だし
なんならこれもperlにすればよかったのに
おかげで出回ってるものもコピペを繰り返した秘伝のタレ状態だわ
951デフォルトの名無しさん
2019/03/29(金) 10:25:09.68ID:c3N751dA オリジナル言語といいつつ、
昔からあるautotoolsを持ち出すとか
昔からあるautotoolsを持ち出すとか
952デフォルトの名無しさん
2019/03/29(金) 11:34:19.48ID:r9qVljUb >>933
ジミーカーターだよ
ジミーカーターだよ
953デフォルトの名無しさん
2019/03/29(金) 12:15:03.74ID:QqxpOyVg python+ctypes最強やで
954デフォルトの名無しさん
2019/03/29(金) 13:00:40.33ID:HmBCV24x 【速報】金券500円分タダでもらえる
https://pbs.twimg.com/media/D2y37QFVAAAmz1l.jpg
@タイムバンクをインストール
iOS: https://itunes.apple.com/jp/app/%E3%82%BF%E3%82%A4%E3%83%A0%E3%83%90%E3%83%B3%E3%82%AF/id1253351424?mt=8
Android: https://play.google.com/store/apps/details?id=jp.timebank
A会員登録
Bマイページへ移動する。
C招待コード→招待コードを入力する [RirzTu]
コードを入力した方に600円もらえます
今なら更に500円ギフト券を貰った残高からただで買えます。
貰ったギフティプレモはAmazonギフト券(チャージタイプ)に交換できます(電子マネー払いにて)
数分で出来るので是非ご利用下さい
https://pbs.twimg.com/media/D2y37QFVAAAmz1l.jpg
@タイムバンクをインストール
iOS: https://itunes.apple.com/jp/app/%E3%82%BF%E3%82%A4%E3%83%A0%E3%83%90%E3%83%B3%E3%82%AF/id1253351424?mt=8
Android: https://play.google.com/store/apps/details?id=jp.timebank
A会員登録
Bマイページへ移動する。
C招待コード→招待コードを入力する [RirzTu]
コードを入力した方に600円もらえます
今なら更に500円ギフト券を貰った残高からただで買えます。
貰ったギフティプレモはAmazonギフト券(チャージタイプ)に交換できます(電子マネー払いにて)
数分で出来るので是非ご利用下さい
955デフォルトの名無しさん
2019/03/29(金) 13:00:55.65ID:zXK6y1Ir プロセス間通信でよくね問題
956デフォルトの名無しさん
2019/03/29(金) 18:35:30.88ID:NYOzkE7a >>954
本当じゃん
本当じゃん
>>940
では common lisp 準拠の xyzzy を推奨いたしましょう
では common lisp 準拠の xyzzy を推奨いたしましょう
958デフォルトの名無しさん
2019/03/29(金) 18:58:22.81ID:KSfDlte3 パワハラ学んだほうが役に立つのにな。
959はちみつ餃子 ◆8X2XSCHEME
2019/03/29(金) 19:03:34.54ID:PFvplbFR960デフォルトの名無しさん
2019/03/29(金) 19:13:35.93ID:SLNwR97S emacsではdynamicもそれはそれで便利なんだが
エディタだから各関数がコンテキストによって挙動変えるけど、それを引数として渡す訳じゃないからね
dynamicのスタック的な状態変更は便利
エディタだから各関数がコンテキストによって挙動変えるけど、それを引数として渡す訳じゃないからね
dynamicのスタック的な状態変更は便利
961デフォルトの名無しさん
2019/03/29(金) 21:18:40.18ID:ddIXjKBD lispってまとめられがちだけれど言語としてのくくりで言えばalgol系くらいの意味合いしかない。
schemeとcommon lispだったらc#とjavaのがよっぽど近い。
schemeとcommon lispだったらc#とjavaのがよっぽど近い。
962デフォルトの名無しさん
2019/03/29(金) 23:20:11.58ID:/wIL6yoo template<class B,class D>
class B : public D{
//...
};
ってなにがしたいんだろ
class B : public D{
//...
};
ってなにがしたいんだろ
963はちみつ餃子 ◆8X2XSCHEME
2019/03/30(土) 00:58:44.45ID:raLgb94a964デフォルトの名無しさん
2019/03/30(土) 13:00:53.68ID:syvaDn83 Java 8は関数型言語らしい。
965デフォルトの名無しさん
2019/03/30(土) 13:16:14.77ID:JgN5T55+ まあFORTHとPostScriptの違いくらいかな
966デフォルトの名無しさん
2019/03/30(土) 17:34:43.10ID:syvaDn83 ほぼ同じってことか。
967L
2019/03/30(土) 17:36:09.42ID:thjEqqk2 [C++でブラウザアプリ]
田園風景とゆらゆら揺れるアサガオのテスト:
WebAssemblyが使えるブラウザならすぐ見れるよ:
http://nowsmartsoft.atwebpages.com/demo2/index.html
ひここもりなので、ここでしか見てもらえないんだ。
田園風景とゆらゆら揺れるアサガオのテスト:
WebAssemblyが使えるブラウザならすぐ見れるよ:
http://nowsmartsoft.atwebpages.com/demo2/index.html
ひここもりなので、ここでしか見てもらえないんだ。
968デフォルトの名無しさん
2019/03/30(土) 17:58:09.48ID:wKuhZLCD >>967
相談じゃないんだろ。スレ違いだから巣に帰れ。
相談じゃないんだろ。スレ違いだから巣に帰れ。
969デフォルトの名無しさん
2019/03/30(土) 18:15:25.48ID:VC6Jp+wI 相談スレじゃねえだろ
ひけらかしスレだから合ってるだろ
ひけらかしスレだから合ってるだろ
970デフォルトの名無しさん
2019/03/30(土) 18:17:34.73ID:syvaDn83 でも、この前、住所さらされたからな。
971はちみつ餃子 ◆8X2XSCHEME
2019/03/30(土) 20:56:32.41ID:raLgb94a972デフォルトの名無しさん
2019/03/31(日) 01:36:25.21ID:kdwrDA9x uint64同士の掛け算でオーバーフローしていないことを確認するには
(long double) a * b <= UINT64_MAX
であってますか?
(long double) a * b <= UINT64_MAX
であってますか?
973デフォルトの名無しさん
2019/03/31(日) 02:01:02.28ID:XYg5fWSm > (long double) a * b <= UINT64_MAX
変形してこれでいいのでは?
a <= UINT64_MAX / b; // b!=0
変形してこれでいいのでは?
a <= UINT64_MAX / b; // b!=0
974デフォルトの名無しさん
2019/03/31(日) 08:45:18.44ID:kdwrDA9x975デフォルトの名無しさん
2019/03/31(日) 11:34:02.92ID:qtVJ0qYe CPUのオーバーフローフラグを見る標準の手段が未だにないのが不満です
976デフォルトの名無しさん
2019/03/31(日) 11:42:31.55ID:TSA6EeAl mul_highみたいなの位標準化してくれればいいのにね
大抵のアーキテクチャでは命令として存在するのだし
大抵のアーキテクチャでは命令として存在するのだし
977デフォルトの名無しさん
2019/03/31(日) 12:23:30.31ID:JrOSOdLx オーバーフローの前にキャリーフラグだろ…
979はちみつ餃子 ◆8X2XSCHEME
2019/03/31(日) 14:16:24.03ID:8f3NbPLB >>978
コンテンツは面白いので、データが残ってたら Github かどっかに置いてくんない?
コンテンツは面白いので、データが残ってたら Github かどっかに置いてくんない?
980デフォルトの名無しさん
2019/03/31(日) 15:51:07.66ID:MPbGMBOz 住所晒すやつのサイトなんて見ねえ
即NG
即NG
981デフォルトの名無しさん
2019/03/31(日) 16:15:32.43ID:4SqFrjwY 自分のIPアドレスじゃねえだろ
982デフォルトの名無しさん
2019/03/31(日) 17:20:07.40ID:vDO0/VaM983デフォルトの名無しさん
2019/03/31(日) 17:22:28.81ID:vDO0/VaM http://nowsmartsoft.atwebpages.com/demo_land/index.html
3D 地形を canvas 2D のワイヤーフレームで表示してみた。
ChromeよりFireFoxの方が速いらしい。
3D 地形を canvas 2D のワイヤーフレームで表示してみた。
ChromeよりFireFoxの方が速いらしい。
984デフォルトの名無しさん
2019/03/31(日) 19:00:54.99 >>954
覇権争いのおこぼれかな。
一応貰っておいた
覇権争いのおこぼれかな。
一応貰っておいた
985デフォルトの名無しさん
2019/04/01(月) 00:06:38.24ID:sCEGrn1T コンストラクタにアウトプット変数をつけるのって邪道ですか?
986デフォルトの名無しさん
2019/04/01(月) 00:44:54.36ID:sCEGrn1T ↑出力用引数です。。。
987デフォルトの名無しさん
2019/04/01(月) 00:54:01.89ID:1RmlgYYh お好きにどうぞ
988デフォルトの名無しさん
2019/04/01(月) 04:25:02.60ID:uqkfEU2b set<int> を0からnまでの連番でお手軽に初期化する方法ってありますか?
for文でinsertしまくるのが普通ですか?
for文でinsertしまくるのが普通ですか?
989さまよえる蟻人間 ◆T6xkBnTXz7B0
2019/04/01(月) 06:36:52.73ID:OIWsA4Np C++11なら
std::set<int> = {1, 2, 3};
と書ける。
std::set<int> = {1, 2, 3};
と書ける。
990デフォルトの名無しさん
2019/04/01(月) 08:27:39.15ID:RynKy10x std::iota
991デフォルトの名無しさん
2019/04/01(月) 10:36:34.64ID:0fT1DSaw array<int,3>={1,1,1};
初期化子より要素が3ケなのはわかるのに
なんで一々3って記述しなきゃいけないの?
初期化子より要素が3ケなのはわかるのに
なんで一々3って記述しなきゃいけないの?
992デフォルトの名無しさん
2019/04/01(月) 10:54:40.61ID:4B82+HWP 配列初期化子が如何に便利か良く判る
993デフォルトの名無しさん
2019/04/01(月) 12:16:32.59ID:xC6wZxP+ make_array関数でも作成すれば?
994デフォルトの名無しさん
2019/04/01(月) 12:30:23.48ID:2+x4EAiR >>985
別につけてもいいけどメソッドとかで返した方が使いやすくね?
別につけてもいいけどメソッドとかで返した方が使いやすくね?
996デフォルトの名無しさん
2019/04/01(月) 13:31:15.62ID:1RmlgYYh 警察だ
997デフォルトの名無しさん
2019/04/01(月) 13:36:56.63ID:o/H/iRdv onCreateをbindしたいのですが、これはどうすればコンパイル通りますかね…
template<class T>
void test(T&& value){
auto onCreate = std::bind(std::fowrawd<T>(value)->onCreate,std::forward<T>(value),std::placeholders::_1);
}
template<class T>
void test(T&& value){
auto onCreate = std::bind(std::fowrawd<T>(value)->onCreate,std::forward<T>(value),std::placeholders::_1);
}
998 【男の娘】
2019/04/01(月) 13:42:00.26ID:QUlyRw/u 梅
999デフォルトの名無しさん
2019/04/01(月) 13:53:43.17ID:2cPHsZN4 梅
万葉集巻五 梅花の歌三十二首、并せて序
「初春令月、氣淑風和、梅披鏡前之粉、蘭薫珮後之香」
初春の令月にして氣淑(よ)く風和ぎ梅は鏡前の粉を披き、蘭は珮後(はいご)の香を薫す
万葉集巻五 梅花の歌三十二首、并せて序
「初春令月、氣淑風和、梅披鏡前之粉、蘭薫珮後之香」
初春の令月にして氣淑(よ)く風和ぎ梅は鏡前の粉を披き、蘭は珮後(はいご)の香を薫す
1000デフォルトの名無しさん
2019/04/01(月) 13:54:41.31ID:iIi946R+10011001
Over 1000Thread このスレッドは1000を超えました。
新しいスレッドを立ててください。
おみくじ集計(特殊)
【男の娘】 1
【腐女子】 0
【髪】 0
【神】 0
【姫君】 0
【女神】 0
【尊師】 0
life time: 38日 10時間 46分 58秒
新しいスレッドを立ててください。
おみくじ集計(特殊)
【男の娘】 1
【腐女子】 0
【髪】 0
【神】 0
【姫君】 0
【女神】 0
【尊師】 0
life time: 38日 10時間 46分 58秒
10021002
Over 1000Thread 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。
