X



C++相談室 part141
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
垢版 |
2019/02/22(金) 03:07:43.52ID:MgOIx7iK
次スレを立てる時は本文の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
0002デフォルトの名無しさん
垢版 |
2019/02/22(金) 05:33:28.83ID:7jsMxmv+
Cの場合は
#define BIT(n) (1<<n)
if(data & BIT(3)){ data &=~BIT(3); }
みたいなやり方をするんだが、C++の場合は#defineは使わない方がいいらしいけどどういう書き方が
一般的なのだろう。
0003デフォルトの名無しさん
垢版 |
2019/02/22(金) 05:43:25.43ID:kNNcPZDM
inlineにしてる。
0004デフォルトの名無しさん
垢版 |
2019/02/22(金) 05:45:32.03ID:9HNz13T8
そういう場合にマクロ使うなと言われるのは、単にインライン関数にした方がややこしいバグを産みにくいってだけ
別にどっちでもいい
0005デフォルトの名無しさん
垢版 |
2019/02/22(金) 05:51:49.61ID:kNNcPZDM
そろそろonline関数も必要だよな。
0006デフォルトの名無しさん
垢版 |
2019/02/22(金) 06:59:58.96ID:uV/D6RzS
マクロ関数 BIT() の部分、マスク生成をinline関数にするか、
引数を2つ取って、整数値の指定ビットを落とした値を返すinline関数にするか、
if ~ の部分まで含めて、変数の指定ビットを落とすinline関数にするか…。

と思ってちょいと考えたら、この場合は if 不要と気づいた。
最初から 0 か、ビット操作の結果か、いずれにせよ data の bit3 は 0 になるね。
本筋とは関係ない部分だけど。
0007デフォルトの名無しさん
垢版 |
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はあまり使ったことがないですが、なんかマクロ変換に使えそうな気がします。
0008デフォルトの名無しさん
垢版 |
2019/02/22(金) 08:17:36.02ID:9HNz13T8
constexprは暗黙的にinlineつくからconstexprでもいい

using Funcの部分は根本的に勘違いしてると思う
それの場合intを受け取りintを返す関数のポインタの"型"に
Funcという別名つけてるだけやで
0009デフォルトの名無しさん
垢版 |
2019/02/22(金) 08:29:39.37ID:9HNz13T8
あと前スレ>>999
PCゲームやスマホゲーでも、STL使おうが使わまいが標準のヒープを直接は使わないことはよくあるよ
コンシューマへの移植性やパフォーマンスのためにカスタムのメモリマネージャ作ってるメーカーなんてザラにある
PCだから/メモリ有り余ってるからお仕着せのライブラリを適当に使うだけでいい、と思ってるなら何も分かってない
0010デフォルトの名無しさん
垢版 |
2019/02/22(金) 08:34:10.02ID:nGlWTBX9
現実の開発では、とりあえず動くようにしてから余った時間で最適化したほうが速くなるんだけどね
0011デフォルトの名無しさん
垢版 |
2019/02/22(金) 08:39:17.41ID:nqPCiyAK
まぁオブジェクトコードから臭いを嗅ぎ取った事は
無いな、感じられる人は耳鼻科行った方が良いかと
0012デフォルトの名無しさん
垢版 |
2019/02/22(金) 09:28:57.73ID:15zpzt8/
>>9
スレ跨ぐなカス
いつゲームの話なんかしたんですかねえ???????
それともゲームしか入ってないんですか?????????
0014デフォルトの名無しさん
垢版 |
2019/02/22(金) 17:51:49.69ID:PtH+29Wq
「C」からって限定条件なら tcl/tk + canvas はありだと思うが
別に tcl の勉強しなくても使えるし
0016デフォルトの名無しさん
垢版 |
2019/02/22(金) 19:16:25.53ID:kNNcPZDM
ワイドスタジオ使っちゃえば?
0017デフォルトの名無しさん
垢版 |
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の寿命が尽きても実行時にエラーも出ないのですが
このようなプログラムはありですか
0018デフォルトの名無しさん
垢版 |
2019/02/23(土) 11:42:14.30ID:+DV3f+Dk
そいつにリソース占領させてみればいい
0020デフォルトの名無しさん
垢版 |
2019/02/23(土) 18:45:10.43ID:3YtKndGk
紅蓮弐式のほうが強い。
ハイ論破。
0021デフォルトの名無しさん
垢版 |
2019/02/24(日) 14:23:19.37ID:YwY0sV++
C++ を使っても綺麗にならない
C++ を使ってる意味が無い
0022デフォルトの名無しさん
垢版 |
2019/02/24(日) 19:25:23.97ID:iK4D+UQi
C++に綺麗さを求めるの初めて見た。
0026デフォルトの名無しさん
垢版 |
2019/02/25(月) 00:01:28.93ID:Jz0DexUX
つまりJavaか。
0028デフォルトの名無しさん
垢版 |
2019/02/25(月) 01:34:14.73ID:1EOktSCH
ランタイム速度最速を謳ってバカに新機能の実験台になってもらう。
それがc++
0032デフォルトの名無しさん
垢版 |
2019/02/25(月) 07:40:11.99ID:4l/+z2Zp
古いサイトとか見てるとグローバルな関数に::ってつけるこだわりがよくわからん
::CreateProcessとかさ
0033 ◆QZaw55cn4c
垢版 |
2019/02/25(月) 08:14:06.58ID:0evRXBiA
>>32
自分の定義した関数にはつけず、win32api には付けて区別しています…
0034デフォルトの名無しさん
垢版 |
2019/02/25(月) 09:12:10.78ID:RhTHp1T7
公式「バランス調整はVIP部屋を参考にする」
桜井「○○の使用率ガー」

アホ「調整はVIPの使用率できめるらしい」←????
0038デフォルトの名無しさん
垢版 |
2019/02/25(月) 18:50:34.75ID:Jz0DexUX
では評価関数を。
0039デフォルトの名無しさん
垢版 |
2019/02/25(月) 23:50:43.17ID:sPAFtFpG
double の 999999998 と 999999999 の積が正しい答えである 999999997000000002 じゃなくて 999999997000000000 になります

なんででしょうか
double の範囲に余裕でおさまってますよね?
0043デフォルトの名無しさん
垢版 |
2019/02/26(火) 14:43:31.98ID:8+7ktUtN
桁落ち
0044デフォルトの名無しさん
垢版 |
2019/02/26(火) 15:56:22.96ID:5MxkS3P7
浮動小数点は元々、誤差があるから、大雑把な数値でよい

正確な数値を求める場合は、整数型か、decimal を使う
0045デフォルトの名無しさん
垢版 |
2019/02/26(火) 16:22:19.66ID:aKbIPEAT
>>32
同じ関数で、MFC 版と Win32 版があることがあり、混乱が生じて、
切り分けの難しい不具合を生じる可能性を避けるため、そうしている。

C++だと、実引数を省略することもできる場合があり、その場合、Win32版を
使っているつもりが、MFC版が勝手に呼び出されて、動作が自分の思ったものと
少し違ってしまう可能性があるかもしれない。この時、コンパイラは何の
警告も出してくれないかもしれない。それを避けたいため、絶対に
Win32版を呼び出したい場合には、:: を付けることがある。
0046デフォルトの名無しさん
垢版 |
2019/02/26(火) 19:26:51.90ID:7oeDt7bv
DoxygenがモダンC++に対応していないんだけど、何か代わりの物はありますか?
0048デフォルトの名無しさん
垢版 |
2019/02/26(火) 23:24:35.69ID:S/5yarce
C++のthreadってOSの無いマイコン環境でも動作するんだろうか?
threadが使えるってことは、ハードウエア的に最低でもタイマー割り込みを使う必要が
あるんじゃなかろうか? そうするとそういうタイマーなどのハードリソースはすべて自前で
用意するというのが前提のマイコンではどうするんだろとふと疑問に思った。
0049はちみつ餃子 ◆8X2XSCHEME
垢版 |
2019/02/27(水) 01:13:25.57ID:FtVEDFBt
>>48
どうにもならんのじゃない?
仕様に完全準拠した処理系 (ライブラリ) は提供できんってだけだろ。
0050デフォルトの名無しさん
垢版 |
2019/02/27(水) 01:32:45.56ID:apYcTfdI
effective Modern C++ / Scott Meyersには
C++11の偉業として
 C++の平行対応作業の大部分がコンパイラ開発側が負担する形で実現されたおかげで、標準
規格としてC++の歴史上はじめてどのプラットフォームでも動作が変わらないマルチスレッドプログラム
の開発が可能となりました。
と書かれている。
「どのプラットフォームでも」と書かれているがOSのないマイコンだってプラットフォームだからそれを含まない
と可笑しいとおもうが、、
0054デフォルトの名無しさん
垢版 |
2019/02/27(水) 09:20:12.60ID:fYEBa3GD
マイコンには関数も変数も無いだろ
機械語セットのどこにも関数とか変数とかの命令は無いじゃん
変数が存在してるように見えるのはコンパイラのおかげ
0055はちみつ餃子 ◆8X2XSCHEME
垢版 |
2019/02/27(水) 12:06:10.51ID:FtVEDFBt
C/C++ というのはそういうランタイムサポートが期待できない環境、いわゆる「ベアメタル」でも使い物になる
システムプログラミング言語であるというのがキモの言語だろ。
フルセットで使える環境なら std::thread という共通インターフェイスを使ってねというだけのことで、
リソースが限られたアーキテクチャでもフルセットが使えるべきというほどのもんではない。
0056デフォルトの名無しさん
垢版 |
2019/02/27(水) 12:51:06.39ID:Gf38Q9uK
>>48
(組み込みの)マイコンでは、普通、single thread なんじゃないかな。
マルチスレッドを使えるOSを作るのは結構複雑。

>>53
そういうOSをマイコンに作れば使えるようにはなるだろうけど、そこまでは
やってないことも多いと思う。そもそもマルチスレッドはプログラミングが
複雑になり予想も難しくなるのでバグが入り易い。カメラや炊飯器が誤動作して
も困る。
0057デフォルトの名無しさん
垢版 |
2019/02/27(水) 14:09:36.66ID:+TCpifLa
>>53
mainが無いのもあった気がする
0058デフォルトの名無しさん
垢版 |
2019/02/27(水) 15:17:57.76ID:6BQDuKk1
>>53
PCよりテヘロジニアス化(専用機をCPUに統合)が進んでるので、GPGPUみたいな感じってネットで読んだことあるな。
0061デフォルトの名無しさん
垢版 |
2019/02/27(水) 18:55:35.12ID:BQO9B3mv
template<class T>
int print(T v)
{
 printf("%d",v);// intの場合
 printf("%lf",v);// doubleの場合
}

printfを使うことは必須なんですが、どうすれば実現できます?
0064デフォルトの名無しさん
垢版 |
2019/02/27(水) 19:17:04.78ID:ZZbXSlBN
>>52
戻り値の型をautoと書くとオーバーロードを認識しなくなるとかです。
0068デフォルトの名無しさん
垢版 |
2019/02/27(水) 19:53:26.31ID:ZZbXSlBN
>>65
decltype使うときとかです。
0069デフォルトの名無しさん
垢版 |
2019/02/27(水) 19:56:24.14ID:ZZbXSlBN
std::enable_if<>を使うと超長くなるんだけど、doxygenは戻り値の型の欄を改行してくれないので、関数名や説明の欄が横一文字とかになってしまいそうです。
何とかしてほしいです。
0070デフォルトの名無しさん
垢版 |
2019/02/27(水) 20:23:21.57ID:Lz5cBdad
>>65
constexpr auto succ(auto num) {
return ++num;
}
0074デフォルトの名無しさん
垢版 |
2019/02/28(木) 07:48:59.08ID:nAsBylgf
なるほど、まず文字列に変換、統一してから %s で表示か。
>>62 の「テンプレート関数の特殊化」を教える例題って説も納得いくけど、
std::string の変換関数の好例でもあるな。

>>71 %lf は規格で認められてる変換指定だね、一応。
間違って使う奴があまりに多いので現状追認で追加された、
という経緯らしいけど。
どうやら C90 では未定義、C99以降は %f と同様みたい。
0075デフォルトの名無しさん
垢版 |
2019/02/28(木) 12:32:13.81ID:yyOtWed3
>>73
%06d とか %7.3f とかできなくなるやん
007672
垢版 |
2019/02/28(木) 13:07:02.05ID:g9ECmttI
>>75
質問主がデフォルトの書式だからとりあえずそのままで書いた
型ごとに書式を指定するなら上にもあるように特殊化するしかないな
007774
垢版 |
2019/02/28(木) 15:32:45.18ID:nAsBylgf
自分で書いといてアレだけど、
C++に含まれるCの標準関数ってどうなってるんだろ?
Cの規格に追従して自動的に更新されてくのか、
ある時点で分裂したら再統合されるまで離れる一方なのか。

後者だとしたら、C99以降でprintf()の%lfが正当になったとしても
C++に関してはどのバージョンでも未定義、って危険があるな。
0078はちみつ餃子 ◆8X2XSCHEME
垢版 |
2019/02/28(木) 16:24:48.52ID:KlP/6TOW
>>77
今のところつかず離れずを維持してる。
C++ 中の C 関数は「この C 規格を参照」という感じで明記しているので、
ある程度になると状況を見て参照先を変更するってだけ。

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

C の _Noreturn と C++ の [[noreturn]] はどっちかに統一するのじゃ駄目だったんかなぁ? とか。
0079デフォルトの名無しさん
垢版 |
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したいなーってのがあるんですけど上手い方法無いもんでしょうか
全然思いつかなくて
0080デフォルトの名無しさん
垢版 |
2019/02/28(木) 18:01:05.88ID:3CdGs56r
>>78
そう言うのは好みだからどっちかが大人になって折れるかよほど力の差があるとかでないと統合は無理
0082デフォルトの名無しさん
垢版 |
2019/02/28(木) 18:41:06.34ID:IByT54N8
英語だ!!!
0083 ◆QZaw55cn4c
垢版 |
2019/02/28(木) 20:13:33.80ID:FII1Vkt+
>>61
確か double に対応する書式指定は "%f" であって "%lf" ではない、という記憶がありますが
0084デフォルトの名無しさん
垢版 |
2019/02/28(木) 20:22:30.93ID:SJVUajxC
K&Rのfloatは引数にするとdoubleに昇格するというルールが残っているのでしょう
0086デフォルトの名無しさん
垢版 |
2019/02/28(木) 23:37:27.00ID:ufQTgCzR
プロトタイプ宣言されたfloat引数にはfloatで渡すけど
可変引数にはfloatは渡せないままなんだな何故か
0088デフォルトの名無しさん
垢版 |
2019/02/28(木) 23:51:53.97ID:LhFhdmbG
可変長引数関連はスタック周りを弄るコードを「マクロで」wrapしたものだから
C言語と互換性を持たせるためには仕様の詳細まで引き継ぐしか致し方なかったんじゃないの知らんけど

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

ただしそうしたとしたら、extern "C"したのにC言語から呼ばれへん
何で!?となってプチ大混乱が生じそう
知らんけどな…
0089デフォルトの名無しさん
垢版 |
2019/02/28(木) 23:53:46.30ID:LhFhdmbG
printf()ではdoubleを出力できるのに、
scanf()ではfloatしか受け取れない(doubleをスキャンする機能が無い)というのは
C言語の七不思議のうちの一つ
0091デフォルトの名無しさん
垢版 |
2019/03/01(金) 00:15:41.73ID:fP7U0W+N
しかしさすがにscanf()でdoubleをスキャンできるようにする近代化は一筋縄ではいかなさげ
0092デフォルトの名無しさん
垢版 |
2019/03/01(金) 13:14:40.93ID:ozM8zBQ9
>>89
えっ
0097デフォルトの名無しさん
垢版 |
2019/03/02(土) 10:59:08.67ID:+L4gK20K
出鱈目ばっかり書き込むスレですか?
0099デフォルトの名無しさん
垢版 |
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; }
0101デフォルトの名無しさん
垢版 |
2019/03/02(土) 12:23:27.09ID:LLfR4tsY
rhsにNULL入れてるってことはrhsのデストラクタで解放されたら困るってことでしょ
一時オブジェクトだろうが何だろうが破棄されるときにデストラクタは走るから、
その例だとNULL入れる必要はある

というかその例は綺麗にムーブを使うべき例
0102デフォルトの名無しさん
垢版 |
2019/03/02(土) 12:37:35.01ID:0O78HlO0
>>101
>rhsにNULL入れてるってことはrhsのデストラクタで解放されたら困るってことでしょ
なるほど確かに…
ていうか鋭い

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

>>105
関数ポインタは引数の型が違うと別の型になる
0107デフォルトの名無しさん
垢版 |
2019/03/02(土) 15:54:45.54ID:uEwpVDqh
VC++でmsado15.dllをインポートしようとしても参照されずエラーになるのですが原因は何でしょうか?
0109デフォルトの名無しさん
垢版 |
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
0111デフォルトの名無しさん
垢版 |
2019/03/02(土) 18:12:08.54ID:uEwpVDqh
>>109
必要かどうかわからなかったのですが
regsvr32.exeでmsado15.dllを登録

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

msado15.dllのようなDLLはC(VC)++で扱うのは難しいですね。
インテリセンスが働きませんから…
0114デフォルトの名無しさん
垢版 |
2019/03/02(土) 22:58:26.16ID:9ABljqhX
はじめまして。
C++でスケジューラのようなものを作りたいのですが、
相談に乗っていただけますでしょうか?

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

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

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

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

無知な部分が多いと思いますが、皆さんの意見をお聞かせ頂ければと思いますので、よろしくお願いいたします。
0115さまよえる蟻人間 ◆T6xkBnTXz7B0
垢版 |
2019/03/02(土) 23:07:26.95ID:HH5zv832
それなら、OLE D&Dを実装することになる。具体的には、IDataObject, IDataSource, IDropTargetインターフェースの実装。
0116デフォルトの名無しさん
垢版 |
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みたいな事を実現可能な方法って無いですかね?
そもそも書き方が間違ってる?
0118デフォルトの名無しさん
垢版 |
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'); }
...
いくらでも作れる……!
0120デフォルトの名無しさん
垢版 |
2019/03/02(土) 23:59:54.93ID:4PbQivqk
>>117
特殊化の方法、、、私の知識では分からないですね、、、

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


これ、全組み合わせを書かなきゃダメなんですかね?
template<T, U> みたいなのを、
template<T, int> みたいな感じで一部だけ型指定していくのは無理、
というのは見た事があります。
0122デフォルトの名無しさん
垢版 |
2019/03/03(日) 00:12:10.08ID:ET38y2ec
cpp2の翻訳単位内で完全に実体化させないとどうやっても外からはよべないので
少なくともcpp2の中ではそのように書かないといけないと思う
0124デフォルトの名無しさん
垢版 |
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() に戻り値の型指定を追加したいな、
って事でやりはじめたんですよね。

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

ということならこんなんでど(ry
ttps://ideone.com/1Fh8sg
0126デフォルトの名無しさん
垢版 |
2019/03/03(日) 00:38:22.33ID:1zX/ygG4
>>123
やっぱりそういう物なのですかね

>>125
仕様はそんな感じです
ただ、func() の戻り値をテンプレ使用でなんとかする方法が無いのかな、と
サンプルもありがとうございます
0127デフォルトの名無しさん
垢版 |
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個書いたらできるようにはなる

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


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

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

structとclassが違うとリンクでこけるのも糞
0136デフォルトの名無しさん
垢版 |
2019/03/03(日) 05:50:17.03ID:EorZPwcP
えっ、何か革新的なことをしているの?
C++は今までつかったことがなかったんだが、最近マイコンの開発に使ってから
かなり気に入っている。これならPCでも使えるかもと今考えているところ。
0137デフォルトの名無しさん
垢版 |
2019/03/03(日) 06:33:00.88ID:ChZC+e8W
組み込み用途だとC++よりCの方が融通効くと思うんだが
最近の組み込みはひょっとして随分恵まれてるのか
0138デフォルトの名無しさん
垢版 |
2019/03/03(日) 07:57:12.43ID:EUJr/Yte
>>137
お前さんの認識が古いだけ
数KBメモリーとモダンなプロセッサならC++で開発は普通にできる
0139 ◆QZaw55cn4c
垢版 |
2019/03/03(日) 10:05:41.46ID:OccEVyH1
ふと思ったんですが、Java でデコレーターを記述するのに
BufferedReader br = new BufferedReader(new InpustStreamReader(System.in));
などと、new したオブジェクトのポインタを取っておかず、new したまま放置してしまう書き方がありますが、
スコープ内で new したオブジェクトは、スコープを外れるときに C++翻訳系が自分で delete する、と決め打ちしてしまうと、互換性で問題がでるでしょうか?
0141 ◆QZaw55cn4c
垢版 |
2019/03/03(日) 10:23:45.41ID:OccEVyH1
>>140
では、あからさまに new したポインタを捨ててしまっている記述に限り自動で delete する、というのはどうですか?
目的は…classpath を共用したいのです、classpath はあらたに c++ で書くとして
0143デフォルトの名無しさん
垢版 |
2019/03/03(日) 10:31:40.12ID:8Bef4COm
よくわかんねえけど楽してJavaを移植したいってこと?
Boehm GCでも使ってみたらどうだ
0144 ◆QZaw55cn4c
垢版 |
2019/03/03(日) 10:35:18.92ID:OccEVyH1
>>142
new したポインタを捨ててしまっている記述に限り、処理系で delete する、と決めるのですから「ポインタを渡した先」というのは存在しないことになります

>>143
C++ と Java で classpath ライブラリを共用したいのです!
0146 ◆QZaw55cn4c
垢版 |
2019/03/03(日) 10:41:59.49ID:OccEVyH1
>>145
スマートポインタを導入せずとも、ナマポであっても classpath を共用できるようにならないものか
そのためには c++ 処理系にどんな制限or追加を課せばいいか?
0147 ◆QZaw55cn4c
垢版 |
2019/03/03(日) 10:47:25.17ID:OccEVyH1
>>142
内容を誤解していました、すみません
あらためて回答します

プログラマが new したポインタ値を変数に取っておく記述をした場合は、delete の責任はプログラマにあるものとし、処理系では何もしないものとします
0148デフォルトの名無しさん
垢版 |
2019/03/03(日) 10:53:36.82ID:rOejoJLo
>>116
遅レスだけど、テンプレートはcppに隠蔽しようとか考えない方がいいと思う
dllとかにしたいなら別だけど・・
0149デフォルトの名無しさん
垢版 |
2019/03/03(日) 10:59:02.77ID:kd4WdA4I
javaでnewしているからってc++でnewするなって
classpath共用が何を意味しているのかは分からんが
0151デフォルトの名無しさん
垢版 |
2019/03/03(日) 11:24:20.63ID:0vjeZZiI
>>147
だからさあ
newして渡した先では殆どの場合はそれをフィールドに入れてるだろ
殆ど100%のケースでは「何もしない」に該当するんだよ
0152デフォルトの名無しさん
垢版 |
2019/03/03(日) 11:44:43.82ID:lodoh91K
>>147
そのオレオレC++拡張の仕様を自分で決めて自分で実装して公開してみな。
万に一つもないと思うが、それを有用だと思って喜ぶ人がいるかもよ。
0153 ◆QZaw55cn4c
垢版 |
2019/03/03(日) 11:58:52.90ID:OccEVyH1
>>151
んんー、それは c++ 的な扱い(delete はプログラマの責任)でいいかと、私の思考に何が抜けているのかな?もう少し考えて見ます
0154デフォルトの名無しさん
垢版 |
2019/03/03(日) 12:18:50.69ID:kd4WdA4I
>>139
規格ではdeleteしないものをdeleteしたら互換性に問題が出る。
自動でdeleteしたかったらスマートポインタ使うべき
独自c++擬き想定しているならc++17使うのも当然okのはず

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

と書いた時で
違いは生じますか?
生じるとしたらどんな違いですか?
0160デフォルトの名無しさん
垢版 |
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/
0161デフォルトの名無しさん
垢版 |
2019/03/03(日) 17:35:34.30ID:8Bef4COm
>>159
直接初期化とコピー初期化の違いを説明するとクソややこしい話になるんだけど
結論から言えばその場合はどっちも全く同じ
0162デフォルトの名無しさん
垢版 |
2019/03/03(日) 17:53:40.63ID:E4UxtVYi
make_shared使った方が良い?
0164デフォルトの名無しさん
垢版 |
2019/03/04(月) 04:26:14.48ID:FZO2lxM7
new 呼び出しが少なければ少ないほど精神衛生に良い。
0165デフォルトの名無しさん
垢版 |
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も空にしたい)
単純に一時変数を用意して一つずつ判定するしかありませんか?
0166デフォルトの名無しさん
垢版 |
2019/03/04(月) 06:27:48.33ID:iluilBaY
typename Iterator::container_type::value_type
こんな風に::で三個つなげるのは合法ですかね??
0168デフォルトの名無しさん
垢版 |
2019/03/04(月) 06:33:10.80ID:7Cz1/mIW
funcN() を追加する直前の result.size() を記憶しておいて、
足した後に長さが増えてなかったら、今呼んだ funcN() の結果は空だった、
と判定することはできるか。

string から整数になるだけで、一時変数を使うのは変わらない上に、
処理内容が分かりやすくなるわけでもないけど。
0171デフォルトの名無しさん
垢版 |
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)の様に同時に初期化したいとき
どう書けば良いか知りたいです
0173デフォルトの名無しさん
垢版 |
2019/03/04(月) 19:03:47.51ID:iluilBaY
>>170
どうもありがとう。
0174165
垢版 |
2019/03/04(月) 22:26:16.82ID:eTdHd+Gg
>>168
>>169
ありがとうございます

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

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

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

個人的には使わないから知らんが
0186デフォルトの名無しさん
垢版 |
2019/03/05(火) 02:16:13.00ID:VDry4yCP
>>171
unique_ptr<int[]> u(new int[2]{6, 7});
0188デフォルトの名無しさん
垢版 |
2019/03/05(火) 03:25:14.57ID:VDry4yCP
なんだろう
この違和感
0189デフォルトの名無しさん
垢版 |
2019/03/05(火) 04:45:14.68ID:mm49B1QN
ライブラリを作るときは、hpp にはクラスの定義を、cpp には実装を書く、と理解しています。

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


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


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


>>193
であれば、今私は複数の cpp ファイルを持つ予定はないので、ヘッダファイルは全く不要ということになります。
0195デフォルトの名無しさん
垢版 |
2019/03/05(火) 05:55:22.28ID:3HlR5qin
ライブラリなんだろ?
自分はcpp1つでも、他の人のcppで使わせるためのクラスや関数があるはずだ
それをヘッダに書け
0196デフォルトの名無しさん
垢版 |
2019/03/05(火) 05:59:24.21ID:mm49B1QN
>>195
その際、「プロトタイプ宣言はヘッダで、中身は cpp ファイルに」というルールかマナーか慣習はありますか
0197デフォルトの名無しさん
垢版 |
2019/03/05(火) 06:13:55.29ID:Lvsoqpfj
>>196
特にないから適当に他人のマネしとけばいいと思う。
0198デフォルトの名無しさん
垢版 |
2019/03/05(火) 11:45:31.15ID:HwCl8Q1J
>>193
>1つのcppの中でしか使わず外に見せないクラスや関数はcppの中でいいよ

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

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

無名 (unnamed) namespace って使う?
0200デフォルトの名無しさん
垢版 |
2019/03/05(火) 12:35:48.55ID:zIeyIuEy
関数よりファンクタの方が速いという情報を見たのですが、メンバ関数を入れ子クラスでメンバファンクタ化すると高速化が期待できますか?
0201デフォルトの名無しさん
垢版 |
2019/03/05(火) 12:41:35.39ID:xaYVlIsQ
コンパイラ次第だろ
実験
0202デフォルトの名無しさん
垢版 |
2019/03/05(火) 12:50:59.28ID:zIeyIuEy
VC2017で試したのですがテスト用の関数が単純すぎるのかグローバルのインライン関数、クラスのメンバ関数、クラスのメンバファンクタで差異が見られませんでした・・・
0203デフォルトの名無しさん
垢版 |
2019/03/05(火) 12:51:22.93ID:fI+Bf2nm
どこに書いてもいいだろ
他人の書いたコードなんてどうせ誰も読まないし
読ませたいならドキュメントしっかりさせたほうがいい
0204デフォルトの名無しさん
垢版 |
2019/03/05(火) 15:12:40.70ID:pv9Sbimr
>>202
その「ファンクタの方が速い」ってのは、一般的に関数ポインタを介するのと比較して、だよ
理由はインライン展開できるからであって、その実験で差異が出ないのは当然
0205デフォルトの名無しさん
垢版 |
2019/03/05(火) 19:05:23.76ID:A2wr9SaM
ストアドよりインデックスのほうが速いよってスレなかったっけ。
0207デフォルトの名無しさん
垢版 |
2019/03/05(火) 21:56:22.01ID:+aoESyYJ
>>199
使う理由としてはメンバ関数を内部リンケージにしたらリンク速くなるかもという期待だけだな
実際速くなるか調べたことないけど

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

c++はこういうダメ仕様多過ぎてうんざりだわ
0208デフォルトの名無しさん
垢版 |
2019/03/05(火) 22:06:02.21ID:fIhIM0AX
腐ったビルド戦略のせいで無駄なオブジェクトコードの重複を生じるのはゼロオーバーヘッド原則に反しないのか?は疑問だな
極一部のマニアしか使わない機能付けてオナニーしてる暇があったら、いいかげん時代錯誤なビルド処理の抜本的な見直しをやってほしい
0209デフォルトの名無しさん
垢版 |
2019/03/05(火) 22:21:06.27ID:R3KidTI1
メンバ関数の数はクラスのオブジェクト生成コストにどれくらい影響しますか?
0212デフォルトの名無しさん
垢版 |
2019/03/05(火) 23:19:26.52ID:R3KidTI1
ありがとうございます
というのもメンバ変数がなく多数の関数をまとめただけのクラスがあるのですが、次のどれがいいのか悩んでいまして
(1) 全部static関数にする
(2) クラスをnamespaceにして全部グローバル関数にする
(3) 呼び出す場所で逐次インスタンスを作成する
(4) 呼び出し側クラスでこのクラスのポインタをメンバとして持ち、コンストラクタでインスタンスを受け取るまたは生成する
この場合のベストプラクティスはありますか?
0214デフォルトの名無しさん
垢版 |
2019/03/06(水) 00:17:08.38ID:URVwFrjm
特に何もないなら2

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

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

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

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

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

このようにインスタンスを作らなくても、呼べる関数をモジュール関数と言って、
各インスタンスから呼ぶ関数を、メソッドと言って区別している
0217212
垢版 |
2019/03/06(水) 00:42:25.73ID:pU9AS85W
そう言われるとそうですね
オブジェクト指向ではmain関数以外全部クラス/構造体で作成するものだという先入観がありました
0218デフォルトの名無しさん
垢版 |
2019/03/06(水) 01:06:06.33ID:Riy5qgFP
>>214
無理矢理4にしたいケースを考えると、同じインターフェースを持つ関数群A,Bを場合によって切り替えて使いたい場合に敢えてインスタンスのポインタとすることもあるかな。今回の質問者の場合には当てはまらないだろうけど。
0219デフォルトの名無しさん
垢版 |
2019/03/06(水) 01:10:14.42ID:MDLmYlCa
>>193
>1つのcppの中でしか使わず外に見せないクラスや関数はcppの中でいいよ
名前無しでも何でも良いが、その場合はクラスはnamespaceの中に入れないと危険が危なすぐる…

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

一方、名前付きnamespaceでは異なるCPPで偶然
同じ名前空間に属する同じシグネチャのFoo::func()が作られてしまう危険性を排除できない
0222デフォルトの名無しさん
垢版 |
2019/03/06(水) 01:21:31.24ID:MDLmYlCa
>>220
そのクラスに非staticなメソッドを設けたとたん、
>>219と同じ話でどのFoo::func()が呼ばれるかわからないという不正な動作をする危険性が生じる

驚くべきことに、VC++2010の場合リンカが何のエラーも警告も出さない
それでいてしっかり変な動作になる(a.cppで定義したFoo::func()を呼んだつもりがb.cppで定義された同じシグネチャの別のFoo:func()が呼ばれる
0223KAC
垢版 |
2019/03/06(水) 01:53:40.57ID:tePy6oFI
>>216
C/C++では、staticなどキーワードが全く違う複数の意味で使われるから注意な。
0224216
垢版 |
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
0226216
垢版 |
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などと呼ばれる
0227デフォルトの名無しさん
垢版 |
2019/03/06(水) 02:46:55.34ID:Riy5qgFP
>>216
>>212の(1)はクラスのstaticメンバ関数のことを言っているのだか、>>216>>226を見てるとそれを理解していないように思える。
いつも書籍や他人の発言を引用して〜〜では、という書き方ばかりしているのを見かけるが、自分の中に落とし込んで理解できてないならわざわざ書き込まないでくれ。
0229デフォルトの名無しさん
垢版 |
2019/03/06(水) 06:59:23.47ID:3Q0pfzsC
質問(ネタ振り)に対して見当違いな返答は混乱の元ってのはその通りとして。
読者の立場では、話題が広がってくのは嫌いじゃない。

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

その上で「あの著者/本は間違いが多い、例えば…」とか、
「記述が古い、新しい規格でもっと便利な機能が追加された」みたいな
追加情報(具体的なもの)が出てくればなお嬉しい。
0230デフォルトの名無しさん
垢版 |
2019/03/06(水) 09:56:40.41ID:mg6kC0Yg
>>205
SQLの話ですか(苦笑)
0231デフォルトの名無しさん
垢版 |
2019/03/06(水) 18:18:48.94ID:paKD8ls/
名前なし名前空間を名前あり名前空間の中に作ることができる。便利ちゃあ便利。

namespace hoge {
namespace {
int foobar = 1;
};
};
0232デフォルトの名無しさん
垢版 |
2019/03/06(水) 21:53:00.33ID:paKD8ls/
64bit環境で文字列ストリームクラスstd::ostringstreamのインスタンスのスタックサイズが、
gccで376バイト, VS2017で232バイトもあるんだがもっと小さくできるんじゃないの?
ちなみに、std::string はgccとVS2017どちらも32バイト。
どうよ?
0233はちみつ餃子 ◆8X2XSCHEME
垢版 |
2019/03/06(水) 22:13:52.26ID:7/fqDaVy
>>232
std::ostringstream は文字列の一種というよりも入出力の系統だし、
std::basic_ostream を抱えているのでそんなもんちゃう?
0237デフォルトの名無しさん
垢版 |
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

どうよ?
0238237
垢版 |
2019/03/07(木) 01:39:26.14ID:7rstSYcJ
間違えた。gccとVS2017は逆です。
何が言いたいというと、組み込みで気軽に使えるC++を目指すならiostream周りを何とかしないとね、という話。
0239デフォルトの名無しさん
垢版 |
2019/03/07(木) 01:41:48.62ID:1uoKMGSD
組み込みで気軽に使えるC++を目指してないしどこまで削れるかはベンダーの努力次第
0240237
垢版 |
2019/03/07(木) 01:45:06.81ID:7rstSYcJ
Cがコンパイル言語であるにもかかわらずprintf()系の構文解析でJITコンパイルする野暮ったさを解決すべく導入されたはずのiostreamがまったく活かされていないね。
0241デフォルトの名無しさん
垢版 |
2019/03/07(木) 01:45:09.29ID:E2AqWV/D
その程度のスタック消費でヒーヒー言うような組み込み案件でiostream使わんだろ
0242237
垢版 |
2019/03/07(木) 01:49:48.32ID:7rstSYcJ
>>241
スタック消費でヒーハー言う組み込み案件に進出するのもC++のひとつの課題なのでは有馬温泉
0245デフォルトの名無しさん
垢版 |
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 のヘッダを読んでみましたがさっぱりでした
0246はちみつ餃子 ◆8X2XSCHEME
垢版 |
2019/03/07(木) 03:21:15.84ID:fFrTWbSf
>>245
やりたいのはこういうこと?

class C : public std::function<int(int)>{
using std::function<int(int)>::function;
};
0248デフォルトの名無しさん
垢版 |
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を消したい感じです。
0249はちみつ餃子 ◆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 のメンバとして
見えるからおおよそ期待する挙動になると思う。
0250デフォルトの名無しさん
垢版 |
2019/03/07(木) 04:06:09.21ID:V0jGdMU/
>>249
なるほど、そういう意味だったのですね。
ちょっと試してみます。ありがとうございます。
0252デフォルトの名無しさん
垢版 |
2019/03/08(金) 01:15:31.98ID:jsJl1WSX
テンプレートで何とかなりませんかね。
0254237
垢版 |
2019/03/08(金) 06:55:44.25ID:orP5LHkV
>>244 が提示してくれた from_chars, to_chars をgccに導入するにはどうしたらいい?
WSLのubuntuを使ってるんだけど規定でfrom_chars, to_charsの定義されたヘッダーファイルが入ってないっぽい。
0256デフォルトの名無しさん
垢版 |
2019/03/09(土) 11:07:13.09ID:jx9iLAiD
C++テンプレートテクニック第三版っていつ出るんですかね?
0258デフォルトの名無しさん
垢版 |
2019/03/10(日) 17:07:48.90ID:yzd/Af8M
テンプレート引数がクラスでpush_back()メンバを持っているというようなことを検査することはできますかね?
0260デフォルトの名無しさん
垢版 |
2019/03/10(日) 17:15:14.74ID:yzd/Af8M
でてくしょんいでおむってどの本見ればわかりますかね?
0261デフォルトの名無しさん
垢版 |
2019/03/10(日) 17:16:33.87ID:yzd/Af8M
decltype使えばいいのかな。
0263デフォルトの名無しさん
垢版 |
2019/03/10(日) 17:21:49.62ID:yzd/Af8M
ありがとう。
ちょっと読んでみます。
0264デフォルトの名無しさん
垢版 |
2019/03/10(日) 22:01:07.26ID:yzd/Af8M
std::byteの使い方がよくわからない。
暗黙の何とかを避けるのに使うんだろか。
0266デフォルトの名無しさん
垢版 |
2019/03/10(日) 22:30:00.78ID:yzd/Af8M
ソケットやファイルの入出力に使うって事かな?
0267デフォルトの名無しさん
垢版 |
2019/03/10(日) 22:49:36.48ID:8hqMg5Px
1バイトサイズの整数のつもりでcharを使ったらstreamで困ることがあったりしたしね。
0268デフォルトの名無しさん
垢版 |
2019/03/10(日) 23:15:04.53ID:yzd/Af8M
enum class byte : unsigned char { };
ってなってる。
0273デフォルトの名無しさん
垢版 |
2019/03/10(日) 23:57:35.21ID:6gF9+EwK
でも過去にそれで何かあったんでしょ
使うかどうかは任意だしある分には困らない
0276デフォルトの名無しさん
垢版 |
2019/03/11(月) 05:30:01.20ID:pTTv+VC9
>>265
なんで
uchar8_t
uchar16_t
uchar32_t
にしないんだろな
0281デフォルトの名無しさん
垢版 |
2019/03/11(月) 22:05:24.43ID:XA5PtgcF
getoptの標準化マダーチンチン(AA略
0282デフォルトの名無しさん
垢版 |
2019/03/12(火) 07:17:28.89ID:dEFL2K0T
void foo(std::function<void()> &&f){}

int main(){
auto lamda = [](){};
foo(lamda);
}
なぜコンパイルできるの?
0283デフォルトの名無しさん
垢版 |
2019/03/12(火) 07:23:08.39ID:FSVt1tPQ
>>281
オプションの渡し方がそもそも揺れてる
0284デフォルトの名無しさん
垢版 |
2019/03/12(火) 07:25:00.12ID:FSVt1tPQ
>>282
int main()
{
return main();
}
なぜコンパイルできるの?
0285デフォルトの名無しさん
垢版 |
2019/03/12(火) 11:46:00.90ID:6Uu2j9Xc
int main(std::function<void()> &&f){
return main([](){});
}
0288デフォルトの名無しさん
垢版 |
2019/03/12(火) 20:43:58.42ID:X3QnQcuN
getoptを標準化してしまうとハイフンで始まる変態ファイル名が鬼門になってしまうかな。
0289デフォルトの名無しさん
垢版 |
2019/03/12(火) 20:46:35.39ID:Zu3OGTTs
is_iterator、is_containerメタ関数はどうやったら作れるんでしょうね?
0291デフォルトの名無しさん
垢版 |
2019/03/12(火) 20:55:53.60ID:Zu3OGTTs
スフィ姉は知っているんですが。
そのあとが。
0292デフォルトの名無しさん
垢版 |
2019/03/12(火) 21:00:20.04ID:cgm/opRe
iterator_traitsに通してメンバ型が得られるか確認する?
*とか++とかの操作について確認する?
containerはbeginとendでイテレータ取れるか確認する?
0293デフォルトの名無しさん
垢版 |
2019/03/12(火) 21:34:26.86ID:Zu3OGTTs
template <typename T>
using is_iterator = std::is_class<typename std::iterator_traits<T>::iterator_category>;
これは使えますかね?
0298デフォルトの名無しさん
垢版 |
2019/03/12(火) 22:48:31.61ID:YKaKEG7g
結局はそれで何がしたいかによるんじゃね
標準のコンテナやそのイテレータで型分岐したいなら十分だけど、カスタム実装されたユーザー定義のイテレータがそのように実装されているかは分からんし
まあiterator_traitsの特殊化も追加で書くようにすれば使えるか
0300デフォルトの名無しさん
垢版 |
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{};
0301デフォルトの名無しさん
垢版 |
2019/03/12(火) 23:14:38.07ID:JuWddRAo
>>296,297
アホか、何がマウントだボケ
自分で試しもせずに2chに丸投げとか普通にダメだろ

>>298
iterator_traitsに与える型の要件(だけでいいかどうかはさておき)を満たすなら特殊化なんかいらんでしょ
リファレンス見る限り、iterator_traitsの特殊化はポインタのためだけにあると思う
0302デフォルトの名無しさん
垢版 |
2019/03/12(火) 23:27:20.69ID:Zu3OGTTs
>>300
どの本もそういう書き方になってるんだけど、その理由がわからない。
>>293は呼び出し方によっていろいろ問題が起きるんだけど、その理由がわからなさすぎる。
その辺がスッキリわかる本はないですかね。
0303デフォルトの名無しさん
垢版 |
2019/03/12(火) 23:39:14.10ID:YKaKEG7g
本は知らん
SFINAEが使えるのは宣言部分
そこで置換失敗すると宣言そのものが無かったことになる
0307デフォルトの名無しさん
垢版 |
2019/03/13(水) 20:50:37.56ID:u/DrurAb
規約はあるけど「実装が規約」をやっちゃってる部分が多くて、
しかもコンパイラのバージョン依存がひどいってのがc++だからな。
規約は語れても実際にどう動作するか語れない輩も多いだろうね。
0309デフォルトの名無しさん
垢版 |
2019/03/13(水) 21:25:53.81ID:Z/ka/TFK
どなたか iostreamの存在価値について熱く語ってくれないか。
0312デフォルトの名無しさん
垢版 |
2019/03/13(水) 21:55:23.80ID:780qHyAl
VS2019って4月2日に出るのかな?
0315290=301
垢版 |
2019/03/13(水) 23:05:00.60ID:QLyGxm6u
>>314
バカだろお前

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

> だから分からないのにマウント取るのやめたら?
お前のことだよ
0316デフォルトの名無しさん
垢版 |
2019/03/14(木) 18:41:51.50ID:qKfDR5xc
>>313
待ちどおしいね。
0317デフォルトの名無しさん
垢版 |
2019/03/14(木) 20:57:09.31ID:HZIDFMYl
このスレの住人は、新しいVisual Studioでどんなことに期待してるの?
0325デフォルトの名無しさん
垢版 |
2019/03/14(木) 22:54:08.60ID:qKfDR5xc
何個まで願い事聞いてくれるんだろ。
0334デフォルトの名無しさん
垢版 |
2019/03/15(金) 09:06:08.50ID:Uugk/tx2
まあでかいプロジェクトはこんなもんだろう。
例外は実際よくないと思うわ。
0335デフォルトの名無しさん
垢版 |
2019/03/15(金) 09:48:31.74ID:Af9j6Fb3
pimpl否定ってあったっけ?
うちのプロジェクトも原則例外禁止
むかしは一律禁止だったけど
0337デフォルトの名無しさん
垢版 |
2019/03/15(金) 11:55:34.06ID:E1i6RSEf
googleのスタイルガイドは和訳が古くて英語版しか読まなくなって何年にもなるが追いついてるのか?
0339デフォルトの名無しさん
垢版 |
2019/03/15(金) 12:37:29.90ID:hyh/CKnF
例外使った時点で疎結合もへったくれもなくなると思うわ。
能力的に幅のあるプロジェクトで使うには難しいよ。
0340デフォルトの名無しさん
垢版 |
2019/03/15(金) 12:56:39.19ID:ng8+eCdq
>>339
> 能力的に幅のあるプロジェクトで使うには難しいよ。
これには同意するけど

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

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

通信経路でやり取りするなら相手が例外処理で実装されていようがされていなかろうがなんの関係もないし
0349デフォルトの名無しさん
垢版 |
2019/03/15(金) 18:59:44.81ID:0PFucV7H
つまりJavaが至高。
0350デフォルトの名無しさん
垢版 |
2019/03/15(金) 20:05:35.24ID:LNWMUSed
例外だしてどーすんの
ミッションクリティカルで直せるの?
意味ないじゃん

例外使いたきゃ専用言語使えばいい
0352デフォルトの名無しさん
垢版 |
2019/03/15(金) 20:37:29.42ID:ng8+eCdq
>>345
> 他の言語や過去の (例外をあまり想定していない) システムと接続することもあるし、
> そういう全体のエコシステムを考えると例外がかえって面倒ということはあると思う。
もうそういう極端な例でしか反論できないことはわかったよw
0354デフォルトの名無しさん
垢版 |
2019/03/15(金) 21:09:50.31ID:2KXTO6ja
>>336
微妙に修正はされてる。
てかクソなc++本読むよりかよっぽど各機能の利点、問題点が簡潔に書けてると思うが。
0358デフォルトの名無しさん
垢版 |
2019/03/15(金) 22:38:20.91ID:4qwaELjT
>>338
大規模なところでも例外禁止あるから
mozillaもそうでしょ
AAAなゲームスタジオでも多い
性能引き出したかったらそういう厳しい制約がいるんだよ
0359はちみつ餃子 ◆8X2XSCHEME
垢版 |
2019/03/15(金) 22:40:04.57ID:q2a9nFaz
>>352
グーグルのガイドラインが極端なのは当たり前だ。
超巨大なエコシステムで成り立ってるわけだし。
例外を使わない派がしばしばグーグルのガイドラインを持ち出すんだけど、
そのガイドラインにすら、最初から設計してたら違ったかもしれないという
文言があるので、 C++ を使った設計理念一般としての強い根拠にならんのよな。

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

>>346
C++ はクソ設計でもどうにか形には出来るっていう方向性だと思う。
まともな設計ならそれが一番良いにきまってるけど、
それが期待できない場合が大半だという現実がある。
0360KAC
垢版 |
2019/03/15(金) 22:48:06.41ID:rqfh3/aR
例外禁止とかの環境って、
newの失敗とか毎回チェックするの?
0361デフォルトの名無しさん
垢版 |
2019/03/15(金) 22:54:50.21ID:2KXTO6ja
規約を守る守らんってことにしか目がいかんのな。
やっぱ馬鹿ばっかだわ。
0363デフォルトの名無しさん
垢版 |
2019/03/15(金) 23:03:42.33ID:L+hp7qbL
例外処理機構が無かったら、メモリ確保に失敗しても、
そこから過去のロールバックができない

自己流で、long jump するぐらいなら、例外処理の方がよい
0364デフォルトの名無しさん
垢版 |
2019/03/15(金) 23:09:45.82ID:12ZNVc6t
>>363
いや、失敗したら駄目だろ。失敗しないのが正しい。
プログラミング言語如きが考慮すべき問題ではない。
0367デフォルトの名無しさん
垢版 |
2019/03/15(金) 23:27:22.88ID:qA/WFgyI
当然特殊なケースは除くからな
一応言っておかないと組み込みガー君とか宇宙線でエラーガー君が飛んでくるからな
0368デフォルトの名無しさん
垢版 |
2019/03/15(金) 23:37:27.23ID:WyRx2/31
>>359
>私としては、一般的な C++ での設計の参考にするべきは標準ライブラリだと思う。
設計ではなく使い方の参考に、という意味では賛成だけど
テンプレートバリバリの設計はあまりにもコストがかかるというのを知っといて欲しい
ああいうのは湯水のごとく時間をかけられるからやれるんであって
0369デフォルトの名無しさん
垢版 |
2019/03/15(金) 23:38:17.19ID:iTKvW/zw
きみらはあれか、元記事とか全然読まずにコメントするクチか
リンク元には「例外は全く新規のプロジェクトならデメリットよりメリットが優先するので使って良い。
ただ既存のグーグルプロジェクトは元々例外を想定していないのでこれに例外のパターンを導入する
とリスクのほうが多いのでやめるべき。ただし Windows については例外がある(駄洒落ではない)」
と書いてあるんだがちゃんと読んだか。ちなみに駄洒落ではない、は俺が追加したのでなく元の文にある
0370はちみつ餃子 ◆8X2XSCHEME
垢版 |
2019/03/15(金) 23:45:56.39ID:q2a9nFaz
>>368
そんな極端な意味では言ってない。
手間が合理的な範囲内で「参考」には出来るよって程度の話。
0371デフォルトの名無しさん
垢版 |
2019/03/15(金) 23:48:42.07ID:5dVML2o5
エラーにはリカバリーすべきものとそうでないものがある
あとそのエラーが起こる頻度の違い

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

となると残りのリカバリーするものでかつたまにエラーがおこるようなのが例外にする価値があるエラー
あと例外発生時のunwindが重いからそれでも問題にならないもの
となるとあんまり使えるとこないんだよね
そういうわけで最近例外なしの言語がでてきてる流れなんだろう
0372KAC
垢版 |
2019/03/15(金) 23:51:56.30ID:rqfh3/aR
>>366
コンピュータが壊れない限りメモリ確保が失敗しない環境って凄いな。。。
0374デフォルトの名無しさん
垢版 |
2019/03/16(土) 00:07:16.61ID:HR8X4dmV
例外ってcatchしなきゃ投げたその場で落ちてくれるのがこの上なく便利だろう
問題残したまま実行続けて別の関係ないところで落ちるのが最悪
runtimeで落ちて困るような用途でも、
ソースコードあるやつなら静的解析で例外発生箇所網羅出来そうなものだが
網羅できればリソースリークする危険な場所わかるし、対処も出来るのにね

逆にソースコード無いライブラリやダイナミックリンクする奴は、例外含めて外部仕様としてかっちり決まっているべきものじゃね
0375デフォルトの名無しさん
垢版 |
2019/03/16(土) 00:11:00.29ID:oXtW8C30
>>374
> 例外ってcatchしなきゃ投げたその場で落ちてくれるのがこの上なく便利だろう

その場じゃなくstackが全部巻き戻ってからでしょ
0376デフォルトの名無しさん
垢版 |
2019/03/16(土) 00:15:00.35ID:U94TV9G4
>逆にソースコード無いライブラリやダイナミックリンクする奴は、例外含めて外部仕様としてかっちり決まっているべきものじゃね
んなもんコンテナで隔離する以外使い道ねーわ。
0377デフォルトの名無しさん
垢版 |
2019/03/16(土) 00:18:04.69ID:HR8X4dmV
>>376
仕様ってのは例外外に出すか出さないか、
出すなら出し得る例外の種類のリスト
出さないならエラー毎にエラーコードやら返し方やら決めるって話
0378デフォルトの名無しさん
垢版 |
2019/03/16(土) 00:23:45.45ID:oXtW8C30
そうなんだよね
例外の仕組みわかってないやつは平気で動的ライブラリの界面に
例外使ったりするんだよね
あと標準ライブラリ丸出しにするやつもしかり
それ誰も互換性保証してねーから
0379デフォルトの名無しさん
垢版 |
2019/03/16(土) 00:24:47.11ID:UXq90ll9
>>376
核戦争を生き抜くには。
0380デフォルトの名無しさん
垢版 |
2019/03/16(土) 00:24:57.90ID:HR8X4dmV
まあ標準ライブラリの例外の使い方のおかしさも気になるが

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

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

そこを言語の機構で保証できない、動的言語みたいななあなあ状態なのが残念なところだね。
それをきっちり保証しようとした検査例外はそれはそれで扱いづらいところがあるし。
0382デフォルトの名無しさん
垢版 |
2019/03/16(土) 00:29:25.98ID:U4afEAjj
>>371
リカバリーするかしないか、頻度が高いか低いか、どちらもプログラム(特にライブラリ)を書いてる時点では
言い切れないから困るんですよねぇ。
0383デフォルトの名無しさん
垢版 |
2019/03/16(土) 00:36:35.46ID:UXq90ll9
そこでプロパティ型なんですよ。
0385デフォルトの名無しさん
垢版 |
2019/03/16(土) 06:46:32.47ID:TLiwIm0H
復旧不可能な例外もあれば、些細な例外もあるよね。
戻り値チェックで十分でしょと思うようなところで例外を投げるJava/C#みたいな流儀だと、いちいちキャッチするのが面倒。
0386デフォルトの名無しさん
垢版 |
2019/03/16(土) 06:52:39.99ID:TLiwIm0H
Cでは戻り値で判定できたはずのエラー種別が例外クラスで細かく分類されてしまったことで、
エラー処理で書かなければならないコード量が増えて例外のキャッチ漏れまで起きる危険性が生み出された。
0388デフォルトの名無しさん
垢版 |
2019/03/16(土) 07:35:15.72ID:/kg6KhNe
例外の嫌なところは
処理できない案件を低水準側に丸投げするところなんだよな…

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

は入力を延々と待っている。
これ別スレッドから止めさせる方法はありますか?
0394デフォルトの名無しさん
垢版 |
2019/03/16(土) 15:40:22.15ID:/kg6KhNe
(組み込みはともかくアプリの場合は呼び出し元の方が高水準レイヤにあたるのではないかというツッコミが来ると思ったが
 来なかったので黙っていよう…
0395デフォルトの名無しさん
垢版 |
2019/03/16(土) 17:27:11.59ID:/kg6KhNe
>>390
プランBったって、プログラム起動時にあらかじめmallocしておいた何キロバイトかをfreeして
ダイアログを出して[OK]で終了、ぐらいなんじゃ…
0396デフォルトの名無しさん
垢版 |
2019/03/16(土) 19:15:22.19ID:zOgp3uDK
>>388
いや、プログラムでは、呼び出し側の方が高レベル、呼び出された側が低レベル
なので、呼び出された側が例外を投げた場合、高レベル側の関数で処理できる
ので適切。
0397デフォルトの名無しさん
垢版 |
2019/03/16(土) 20:00:47.57ID:TLiwIm0H
多くの例外の基底クラスになる exception にエラーコード整数値を出力する関数があればもう少しC寄りのエラー処理ができたと思うのだが。
既存のexceptionメンバ関数 const char *what() だけでは扱いが困難。
0398デフォルトの名無しさん
垢版 |
2019/03/16(土) 20:14:28.85ID:1JRLHvWf
std:::to_string();
0401デフォルトの名無しさん
垢版 |
2019/03/16(土) 20:39:18.42ID:cz3ooqCT
ユーザーにエラー原因を示すだけならconst char*でも大して問題ないし、
catchした側でエラーコードによって何かするというのはたいていアンチパターン。
0402デフォルトの名無しさん
垢版 |
2019/03/16(土) 22:15:57.75ID:HR8X4dmV
文字をwchar_tで処理しているプログラムだと例外文字列作るのが面倒
まあ詳細な情報出さずに固定文字列にしてしまえばいいんだけど
0403デフォルトの名無しさん
垢版 |
2019/03/17(日) 00:42:25.28ID:OzxlZzXh
templateの使い道がいまいちわからん
STLやboostみたいなものは非常に有益だが

同僚がドヤ顔でコンテナを作ったって自慢してたが、
stlのコンテナを使わずにそいつのコンテナを使う理由が無い
0407はちみつ餃子 ◆8X2XSCHEME
垢版 |
2019/03/17(日) 00:58:29.44ID:aA4z/LNt
重複があることを事前に発見するのは難しい場合もあるから、
同じことを何度も書いている気がするなと思ったら
どうにかしてまとめることを検討するという程度でもいいかもね。

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

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

※ 個人の感想です
0410デフォルトの名無しさん
垢版 |
2019/03/17(日) 01:43:06.21ID:Jta37aFk
>>409
そこはfpも抽象化でしょ。
intハンドル、FILE*、iostream、HANDLE などなど派生関係のないものをtemplate化できる。
0411デフォルトの名無しさん
垢版 |
2019/03/17(日) 01:44:01.66ID:7ciqStwp
なおこのテクをつきつめれば、テンプレートの特殊化というのは普通の意味では要らなくなるキモス、
むしろ特定の型の組み合わせについて自動展開を禁止したいときに使う
(例えば可変長データのread関数を、データの先頭にデータの個数を書く約束で作ったとして、
 個数を読み込む関数を整数のread(fp, x)に限定したい場合、個数の型をdoubleにした特殊化テンプレートを書いてわざとエラーにするとか、
0412デフォルトの名無しさん
垢版 |
2019/03/17(日) 01:47:31.21ID:7ciqStwp
>>410
FILE* fpは十分汎用的でしかも最大限高速なので他への代替の必要性はほとんど考えられないし、
サンプルコードでむやみに凝っても仕方が無い

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

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

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

あと一つは?
0420デフォルトの名無しさん
垢版 |
2019/03/17(日) 03:19:37.14ID:XP0TJBl2
STLにツリーがない理由を教えてください。
0421デフォルトの名無しさん
垢版 |
2019/03/17(日) 04:14:30.81ID:OzxlZzXh
あるクラスが非トリビアルなコピーコンストラクタをもっていることを検出したい
そのクラスのメンバの型が非トリビアルなコピーコンストラクタを持っていたとしても。
0424デフォルトの名無しさん
垢版 |
2019/03/17(日) 08:23:20.60ID:h3PfG3Ac
>>421
トリビアルコピー出来ないことを検出したいならis_trivially_copyableで充分だけどそれ以上のことがしたいの?
0427デフォルトの名無しさん
垢版 |
2019/03/17(日) 11:20:51.42ID:2Lg7N/Z5
>>411
> 個数の型をdoubleにした特殊化テンプレートを書いてわざとエラーにするとか、
そういうときはdelete指定が使えるんじゃね?
というかis_floating_pointとかで弾いた方がいいとも思うけど
0430デフォルトの名無しさん
垢版 |
2019/03/17(日) 13:42:47.24ID:XP0TJBl2
バリスティック・テンプルね。
0432デフォルトの名無しさん
垢版 |
2019/03/17(日) 15:29:33.79ID:XP0TJBl2
マウントの定義を教えてください。
0433デフォルトの名無しさん
垢版 |
2019/03/17(日) 16:01:22.88ID:Ymi5ijHL
明確な定義があるわけじゃないけど、主に「勘違いした高卒が高等な他人を見下してること、もしくはその様」を指す語としてつかわれてんじゃないの
0435KAC
垢版 |
2019/03/17(日) 21:23:45.76ID:nO6ODsyT
>>432
猿などが優位だと主張するために
相手に馬乗りになること

こういう場では、
相手に反論した(つもり)なら満足し、
反論を受けると過剰反応を示す奴をさすことが多い。
0436デフォルトの名無しさん
垢版 |
2019/03/17(日) 21:42:19.60ID:2Lg7N/Z5
>>435
>相手に反論した(つもり)なら満足し、
>反論を受けると過剰反応を示す奴をさすことが多い。
その説明だと某クソコテしか思い当たらないんだが・・・w
0438デフォルトの名無しさん
垢版 |
2019/03/17(日) 22:22:05.53ID:VD3ReUoA
オープンソース化されたWindowsの電卓を見たが、クッソ綺麗でモダンなコードだな
0440デフォルトの名無しさん
垢版 |
2019/03/17(日) 23:22:31.89ID:0FN5yhQH
>>438
あの手のコードって意味ないよな
無意味に11や14で追加された機能をなんかを使いたがるやついるわー
そういったやつに限って仕事が遅い

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

>>442 メンバ関数にした比較関数のプロトタイプ宣言はどんな感じ?
0445デフォルトの名無しさん
垢版 |
2019/03/18(月) 08:08:37.98ID:HNvbYtsL
非staticメンバをstaticのように使おうとしたときに出るエラーだからsortとか関係ない
Class::funcをsortに入れたんでしょ
Class().funcとするかfuncをstaticにするだけ
0453デフォルトの名無しさん
垢版 |
2019/03/18(月) 21:20:34.54ID:lCR32A1k
エクセルで使われているようなGUIにちょっとしたアニメーションをつけるには何使えばいい?
0455デフォルトの名無しさん
垢版 |
2019/03/18(月) 21:43:42.87ID:lCR32A1k
>>454
例えば四角形の座標の終点の値と移動にかかる時間をするだけでヌルッと動いてくれる機能があるやつがいいです
0456デフォルトの名無しさん
垢版 |
2019/03/18(月) 21:45:05.39ID:ok5NeesM
普通にcのsort関数使えばいいのに。
キャストしたら負けとでも思ってんのかね。
0458デフォルトの名無しさん
垢版 |
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

なんで?
0459デフォルトの名無しさん
垢版 |
2019/03/18(月) 22:56:40.87ID:bBcTS09+
>>458
std::initializer_listはちょっと変わったクラスで、コピーやムーブしても中身が付いてこない
関数の戻り値にしてコピー省略とかが入ったとしても同様
0460デフォルトの名無しさん
垢版 |
2019/03/18(月) 23:23:21.73ID:qPN/SC1k
>>456
cのsort関数はアドレス連続性がないコンテナには使えないでしょ。
vector::sort()とCのsort()の速度はあまり変わらないので、わざわざCのsort()を使う理由がない。
0462デフォルトの名無しさん
垢版 |
2019/03/19(火) 00:00:01.33ID:V3eHYYxi
cのsortってラムダ渡せないし、ワザワザ面倒くさい記述してまで使う意味無いだろう。
0463デフォルトの名無しさん
垢版 |
2019/03/19(火) 00:37:48.08ID:wfF3ncvB
template<typename T>
T func(T a){
}
という関数の中身として、T が int なら a*2 を返し、T が double ならa/2 を返し、それ以外なら a を返す、という処理にしたい場合どう書いたら良いのでしょうか。

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

簡単化のため、必要さが全くない例になっていますがよろしくお願いします。
0464デフォルトの名無しさん
垢版 |
2019/03/19(火) 00:43:22.56ID:fW/dBWxG
STLが天才なのは分かったけど、遅くなりそうなのも分かってしまった。
0466デフォルトの名無しさん
垢版 |
2019/03/19(火) 00:54:54.54ID:V3eHYYxi
>>463
簡単化しすぎて何を質問したいのかよくわからない
その例の程度の処理なら、intとdoubleの関数をオーバーロードして、template関数でデフォルトの処理も書けばいい
intとdoubleをどうしてもtemplate化したかったら特殊化で書けばいい

前後に長い共通処理がある場合の一部式だけ個別にしたいなら、関数オブジェクトで式を引数にとる補助template関数作って、上記手法で型毎にlambdaで式を変えて補助関数を呼び分ければいい
0468デフォルトの名無しさん
垢版 |
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; // 辞書式の昇順
}
0469468
垢版 |
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); // 比較関数
};

(「改行多すぎ」につき、もう一回だけつづく)
0470468
垢版 |
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 のメンバ関数も候補に入れてくれても良さそうな気がする。
なんでダメなんだろ?
0473デフォルトの名無しさん
垢版 |
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; // 辞書式の昇順
}
流に宣言、定義した場合に限りますか。
0474デフォルトの名無しさん
垢版 |
2019/03/19(火) 07:33:59.57ID:LjcR+vA2
何のために非staticにこだわるんだ?
メンバにアクセスしないならstaticつけとけよ
0475デフォルトの名無しさん
垢版 |
2019/03/19(火) 08:36:28.37ID:I3ez8Qch
比較関数をメンバ関数としてクラスに内在させるのが良くない
外部化するか、演算子オーバーロードする
どちらかと言うと比較関数を作らずに大小関係を定義する言語だ

実は、関数やクラスの間の包含関係がある
クラスを比較する関数はクラスの外部におかれるべきであって、メンバ関数にするのは筋が悪い
クラス内部に置くなら大小関係の定義にすべきだ
この手の階層関係は、規格書にもどんな教科書にも一切書かれてないけど、暗黙のうちに了解されている
0477デフォルトの名無しさん
垢版 |
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;
}
0481デフォルトの名無しさん
垢版 |
2019/03/19(火) 21:29:55.51ID:QA3viZTS
if constexprってtypeidで情報取ってきて比較するみたいなオーバーヘッドが0になりますか?
0482デフォルトの名無しさん
垢版 |
2019/03/19(火) 21:33:24.72ID:Nfgw9yWF
おじさん久々にC++の仕事受けたんだけど
色々進化してて面食らってます

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

んだけどさ、

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

ローカル変数の右辺値参照て何に使うん?
実験してみた限り、勝手にムーブとかしてくれるわけでもなさそうだし
ローカル変数に&&付いてると何に使えてんな時便利なの?
0484デフォルトの名無しさん
垢版 |
2019/03/19(火) 21:40:02.75ID:kyorfls3
>>482
右辺値参照はほぼムーブコンストラクタのためにあると思っていいと思う
左辺値参照と同じように書けるというだけで、使うことはないかと
0485デフォルトの名無しさん
垢版 |
2019/03/19(火) 22:04:14.68ID:gYGT/BxR
変数宣言した右辺値参照そのものは左辺値という罠
極力そんな物作るべきじゃないね
0486デフォルトの名無しさん
垢版 |
2019/03/19(火) 22:05:37.07ID:8COf7JeC
俺今使い道思いついたんだけど披露してもいい?
0493デフォルトの名無しさん
垢版 |
2019/03/20(水) 00:20:58.62ID:wnXzlprR
>>484
回答ありがとう
なるほど、文法上は書けるから仕様上厳密な定義はされてるけど、普通は特に使わないで良いのね
0494デフォルトの名無しさん
垢版 |
2019/03/20(水) 00:27:33.64ID:K21QzJf5
初心者がやたらとアスタリスク使ってポインタの参照値を得ようとするのに似た感じがある。
他言語に移植しにくいだろ、テンプレート化しにくくなるだろ、と小一時間。
0498はちみつ餃子 ◆8X2XSCHEME
垢版 |
2019/03/20(水) 04:53:08.98ID:K9L8gFp5
>>482
既に回答がついているとおり、 rvalue 参照はほとんどムーブのための機能。
ローカル変数的に使う理由はあんまりない。

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

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

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

でもこれって通常の値の代入のときも名前のない領域にコピーしてからさらにコピーというセマンティクスなの?
0505デフォルトの名無しさん
垢版 |
2019/03/20(水) 15:37:27.50ID:oYbI5+uJ
右辺値を参照で束縛すると、その右辺値の寿命は束縛してる参照と同じところまで引き伸ばされる
この点は左辺値参照も右辺値参照も一緒
0508デフォルトの名無しさん
垢版 |
2019/03/20(水) 20:55:29.39ID:9pRMZ9XY
一見リテラルのアドレスが取れて書き換えられる、ように見えることに疑問を持ってる
言い方変えると
右辺値参照に代入するとき
リテラルが右辺値でなくて、そのコピーが右辺値なのでは?
そこに寿命がどう関係あるのかわからない
0509デフォルトの名無しさん
垢版 |
2019/03/20(水) 21:07:28.64ID:LskeNtBJ
アセンブラレベルで言うなら、即値なのかdataセクションにあるのかの違いじゃないの
0510デフォルトの名無しさん
垢版 |
2019/03/20(水) 21:31:53.81ID:iA5XXTHz
>オブジェクト性
コピーでも参照でも対してコストがかからんものというかそういうニュアンスなんだが
思った以上に伝わらんもんだな。
わかりやすいようにintと文字列を例に出してもこんなもんかもね。
0512デフォルトの名無しさん
垢版 |
2019/03/20(水) 23:15:02.74ID:oYbI5+uJ
>>508
C++のリテラルというのは右辺値を生成する式なんだよ
「42」は値42を持つint型の右辺値を生成することを指示するリテラル
「"hello"」は中身が'h','e','l','l','o','\0'なchar[6]への参照を生成することを指示するリテラル
プログラムが実行時に扱うのは「リテラル」じゃなくてリテラルが生成した右辺値だ
その生成された右辺値は当然メモリ上にあっていいし書き換えられてもいい
(その必要がないならコンパイラがそうじゃないように最適化してももちろんいい)

「コピー」だと思うから違和感があるんじゃない?
リテラルなるものの実体が空の上やPCの隙間に隠れてるわけじゃないし、プログラムはそんなものは取り扱えない
0513デフォルトの名無しさん
垢版 |
2019/03/21(木) 00:07:41.99ID:2SUbybof
>>512
リテラルは右辺値でない、が正しい?
それなら半分なっとくだけど
ググるとリテラルは右辺値という説明がでてくる
0514デフォルトの名無しさん
垢版 |
2019/03/21(木) 00:13:13.37ID:2SUbybof
>>512
まだ半分なっとくできないのは、
上にも書いたけどリテラルで普通に代入するときも、
一旦右辺値を作ってから左辺にコピーする、というのかc++のセマンティクス?

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

実行時にはそんなものは出てこない
プログラムが扱えるのは「値」だけで、左辺値とか右辺値というのはその分類
int型の0x2Aという値を生成しろという命令をコンパイラに作ってもらうためにプログラマが書くものが「42」というリテラル
さっきからずっとそこを混同してる
0517デフォルトの名無しさん
垢版 |
2019/03/21(木) 01:01:57.88ID:7qm1Whlz
'\0' と L'\0' で違うしな
0518デフォルトの名無しさん
垢版 |
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&) に解決されるなら、
引数の参照を初期化する際に一時オブジェクトが作られることはある。
0519デフォルトの名無しさん
垢版 |
2019/03/21(木) 02:39:44.49ID:XdhJMiFj
即値になる場合があるから右辺値なのかね。
0521デフォルトの名無しさん
垢版 |
2019/03/21(木) 09:47:23.84ID:MFgTD1Yv
コピーのコストを抑えつつ、二重に参照されないように元のオブジェクトを指す変数を無効にしたいってのが
moveに期待される機能。
即値だったり呼び出しの引数にコンストラクタごと放り込まれた場合には
上記のような二重に参照されるようなシチュエーションにはならんのでmove受けする関数が定義されてれば
その関数を呼びましょうってのがc++のmoveの取り扱い。
しかしこんなにもシンタックスが複雑で機能性も新しくてオーバーロードでさらに複雑になってるってのは
やっぱよくないと思うわ。
テンプレートの都合でオーバーロードが必要なのもわかるが明らかにやりすぎ。
0522デフォルトの名無しさん
垢版 |
2019/03/21(木) 23:38:07.17ID:/AmzWt7k
会社にもいるわ、そんなどうでもいいことをウンチクばっか垂れて一向に仕事が終わらないやつw
言語を設計するなら、必要かもしれんが大抵は不要
0525はちみつ餃子 ◆8X2XSCHEME
垢版 |
2019/03/21(木) 23:53:05.57ID:uQDXDHVg
理屈がわかってないのに仕事が終わってるのもそれはそれで不気味じゃない?
0529デフォルトの名無しさん
垢版 |
2019/03/22(金) 00:10:18.90ID:cT8zbTae
templateも使うことは、OKだがtemplateを用いたクラスを作ることは禁止されている場合がおおい
そもそも、設計段階で型が決定しないなんてことは、汎用ライブラリを書く以外はないだろ
0530デフォルトの名無しさん
垢版 |
2019/03/22(金) 00:22:46.08ID:aMVb4R4+
いやいや
決まっていてもそれが複数だった場合使うだろ
あと普通にライブラリは作るものじゃ
0531デフォルトの名無しさん
垢版 |
2019/03/22(金) 00:54:33.33ID:wBHxe+dJ
ていうか、普通に仕事をしていたら「ああここは処理共通だからまとめて・・
・・あとここをこうしとけば拡張にも対応できるし・・まあ客が無茶振りして
きたときの予防にそれなりに汎用性もたせとくか」とかやっているうちに
いつのまにかライブラリができあがってる、これがプロの仕事だ
0533デフォルトの名無しさん
垢版 |
2019/03/22(金) 01:10:14.13ID:LxKdyD8r
定数って参照透過性があるよね。
C++はconstexprがあるのだから、関数型プログラミングを超える、定数型プログラミングという新パラダイムを提唱したいと思います。
0534はちみつ餃子 ◆8X2XSCHEME
垢版 |
2019/03/22(金) 01:14:02.50ID:6voZlles
コンパイル時レイトレーシングとかやってる人もいるけど狂気の産物って感じがして C++ ぽくて良い。
0535デフォルトの名無しさん
垢版 |
2019/03/22(金) 02:28:04.74ID:jw/5aFNH
しーぷら一筋30年〜、速いの、上手いの、やっすいの〜
0536デフォルトの名無しさん
垢版 |
2019/03/22(金) 02:37:28.24ID:M4ChOHMa
>>534
>コンパイル時レイトレーシング
一応訊くけど、ああいうのはレイ当てる3Dオブジェクトのデータは
全てC++のソースに書かないといけないことは分かってる?(モデリングデータをファイルから読んでコンパイル時にレイトレするのは当然不可能)
あの試み自体は面白いと思うけどね・・
実用性や(ソフトウェアの)ユーザーの利益にならないことをもてはやさないで欲しいもんだが
0537デフォルトの名無しさん
垢版 |
2019/03/22(金) 06:24:27.94ID:j45II+ff
プリレンダのゲームは大量にあるしレイトレーシングしとくのもその延長線上じゃない
0538デフォルトの名無しさん
垢版 |
2019/03/22(金) 08:03:01.00ID:VPBgCitj
コンパイル時ファイル入出力がサポートされればいいわけだ
それにレイトレーシングはまあ確かに冗談も含まれてるだろうけどそれだけ複雑で重い処理でも可能だという技術デモは価値があるだろう
画像にフィルタを適用するとかパターンが決まっているエフェクトを生成するだとか色々できて可能性はあると思うよ
0539デフォルトの名無しさん
垢版 |
2019/03/22(金) 08:17:25.29ID:sSVPAm0I
汎用的につかってもらうことを目的としているライブラリを除けば
コーディング時に型が決まっていないことなんてありえない

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

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

後で、intからdoubleになるかもしれないから、なんて言ってるバカいるけど
きっちり設計しろよ
0545デフォルトの名無しさん
垢版 |
2019/03/22(金) 10:20:45.52ID:RSNtol3b
メタプログラミングってコンパイル時に評価してゼロオーバーヘッドとかすごいとは思うけど
学習コストや可読性と釣り合ってるか?
0546デフォルトの名無しさん
垢版 |
2019/03/22(金) 10:32:59.03ID:OAKB0NCU
仕事で4月になったらまた新しいメンバーシップ増えるけど
なまじ趣味でc++使ってたやつが一番困る
新しい機能使いたいだけでトータルの生産性考えないんだよね
0548デフォルトの名無しさん
垢版 |
2019/03/22(金) 10:45:43.23ID:VPBgCitj
毎回同じこといってる奴いるよな
このスレには10人くらいしか居ないってネタは挙がってるし
0549デフォルトの名無しさん
垢版 |
2019/03/22(金) 11:07:13.15ID:v3KGlGVP
>>545
釣り合う点がどこなのかは人それぞれだから各自が判断してバランスいいところで使えばいい。
チーム開発ならプロジェクトごとに指針を決めれば良いかと。
0550デフォルトの名無しさん
垢版 |
2019/03/22(金) 11:11:55.43ID:nPC1T1eJ
>>545
やってることの性質にもよる
サーバーサイドなんかで潤沢なリソースを使って長時間動くものだとほとんど意味はないよ
その場合.NETやJavaのような実行時コード生成の方が遥かに柔軟性が高く、オーバーヘッドも実質的にはほとんどない
0551はちみつ餃子 ◆8X2XSCHEME
垢版 |
2019/03/22(金) 12:34:15.37ID:6voZlles
>>536
それ自体はただの余興だけど、
コンパイラのバグを顕在化させる成果を出したりもしてるよ。
処理系の開発チームにとってもまずは問題を発見できなきゃ直せないからさ、
色んな形で使ってみる人だってそれはそれで必要なんだよ。
処理系の質が良くなるのは間接的にユーザの利益にだってなる。
0553デフォルトの名無しさん
垢版 |
2019/03/22(金) 14:12:54.65ID:M4ChOHMa
>>551
まぁその理屈はわからんでもないしメタプログラミングやってるとあの人のブログは勉強になるけどね
ただああいうのはブラックジョークの類であることを忘れると>>537みたいな勘違いした奴が出てくる

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

重ねて言うけど、面白い試みだけど実用的ではないんだよ、ああいうのをC++的だとかカッコいいとかもてはやすのはC++の衰退を招くだけ
趣味グラマは自分が趣味グラマであって時に実用性からかけ離れてるということを自覚すべき
0554デフォルトの名無しさん
垢版 |
2019/03/22(金) 14:23:16.46ID:M4ChOHMa
あ、でも
>>538
>コンパイル時ファイル入出力
これはやり過ぎな気もするけど個人的にはあっても良いとは思うw
ただ、画像のフィルタリングをコンパイル時にやるのとツール作って実行時にやるのとで
前者が便利な場面ってあるのかね?(しかも前者は非常に開発コストかかる
0555デフォルトの名無しさん
垢版 |
2019/03/22(金) 14:28:03.34ID:VPBgCitj
>>553
コンパイル時に確定しているデータがあるかもしれないし無いかもしれない
fstreamがコンパイル時に動くようになればいいだけ
そうなれば準備が面倒なプリプロセスも必要ない

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

そのうち仕事で特に理由なくむやみに重いconstexprぶちこむやつがでてくるだろう
それでビルド時間5分10分長くなったりするわけだ
ほんとc++はクソ
0557デフォルトの名無しさん
垢版 |
2019/03/22(金) 14:32:15.97ID:VPBgCitj
>>556
問題があるならお前が指摘すればいいだけだし
リリースビルドのときだけコンパイル時計算になるようにすればいいだけ
工夫がたらんなあ
0558デフォルトの名無しさん
垢版 |
2019/03/22(金) 14:49:00.32ID:X0mnKdTP
>>555
constexpr関数みたいにコンパイル時にできる、実行時にしか出来ない、を「自動で振り分けて問題なく動く仕組み」
の範囲に全て収まるならそうだろうな

後半煽ってきたのでキツめに言わせて頂くが、コンパイル時レイトレはソース公開されてたろ?
あれを実用したゲーム開発の例を一つでも挙げてみろ
有意義な研究ならとっくに実用されてんだよボケ
あるいはボレロ氏の試みに同調して何もかも(ファイル入出力すら)コンパイル時に出来る言語にしよう、なんて動きが委員会に起きてるのか?
お前多分まともにメタプログラミング出来てるレベルじゃないのに調子乗ってるだろ
0559デフォルトの名無しさん
垢版 |
2019/03/22(金) 15:11:09.28ID:VPBgCitj
>>558
これだけ複雑な処理も出来るんですよっていうだけの話だからレイトレーシングである必要はない
それができるならこういうこともできるんじゃないか?ってなるのが普通
あとゲームのソースは公開されないから知るかとしか言いようがない
C++20でコンパイル時動的メモリが追加される予定だし、実行時でもコンパイル時でもタイミングが違うだけだからいつでも何でもできていいだろっていう流れは既にできている
標準化委員会がボレロを認知しているかは知らん
0560デフォルトの名無しさん
垢版 |
2019/03/22(金) 15:55:54.71ID:2qpWO6k3
コンパイラで高度なことが色々できるし、原理も実現も公開されてる、
興味を持って調べれば(ある程度なら)理解だってできるかもしれない。
というのはC++の素晴らしい部分だと思うのよ。

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


分からないのは、「俺はこれ知ってる、お前は知らないだろ」と
他人より優位に立つ材料としてしか知識を使ってないような
投稿が見受けられることなんだよね。
ことにネット掲示板なんて、見ず知らずの他人同士なんだから、
相手をバカにしたって仕方ない、何の益もないだろうに。
0561デフォルトの名無しさん
垢版 |
2019/03/22(金) 16:19:37.76ID:M4ChOHMa
>>559
>それができるならこういうこともできるんじゃないか?ってなるのが普通
最初の方の主張からずいぶんと縮小したなw

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

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

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

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


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

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

ネットワーク関係が得意だと言って下さい。JP1の経験があれば、
なおよし。ECUの経験があれば、さらによし。キャティアのマクロが
書ける人、大歓迎。(これらは、必須ではありません。)
0567デフォルトの名無しさん
垢版 |
2019/03/22(金) 16:48:35.97ID:OAKB0NCU
>>557
それがお前の案?
手動じゃんそれ
くそださいとしか

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

まずはビルド時間の推移とか、内訳を監視するタスクを回すことを考えるだろうが
そういう非生産的な仕事が増えることがクソなんだよ
0569デフォルトの名無しさん
垢版 |
2019/03/22(金) 16:51:56.89ID:y6Rn9cx8
C++の新機能なんて大半の開発現場にはいらんだろ
前いたところは初心者向けの教科書を読めばだいたいわかる基本的な構文しか使ってなかった
constexprもなければテンプレートもラムダ式もなかった
コード書けん奴がコードレビューするからそんなもん使った日にはわかりやすく書けとか怒られた
0571デフォルトの名無しさん
垢版 |
2019/03/22(金) 16:56:04.17ID:VPBgCitj
>>567
できあがった物の性能を少しでも上げようっていう話なんだがそれに価値を見いだせないならどうでもいいよ
つまんねえから口を開かないでくれ
0572デフォルトの名無しさん
垢版 |
2019/03/22(金) 17:00:41.61ID:M4ChOHMa
まぁconstexprのコンパイル時コストを気にするだけなら多分ifdefでdefine CONSTEXPRとかすればいいだろうけど
メタプログラミングはやっぱコンパイル時間長くなる
個人で開発してても無視出来ないわ・・

>>571
性能上げて比較結果を出してから言うべき
0574デフォルトの名無しさん
垢版 |
2019/03/22(金) 17:06:35.17ID:nPC1T1eJ
>>571
一般に、無駄な拘りに時間かけるのを避けてその分ボトルネック潰しに時間をかけたほうがソフトウェアのパフォーマンスは良くなるよ
0576デフォルトの名無しさん
垢版 |
2019/03/22(金) 18:34:40.09ID:LxKdyD8r
関数型同様、定数型プログラミングにもアンチがわいてきましたか。
アンチがわいたってことは、定数型プログラミングが世の中に受け入れられたってことでいいですね?
0577デフォルトの名無しさん
垢版 |
2019/03/22(金) 19:08:02.11ID:2qpWO6k3
その機能自体への好悪もあるか知れないけど、
「導入されたからには直ちに覚えて使わないのは罪悪」あるいは
「使わない奴は学習能力の劣る無能、使わないのでなく使えないんだろ」
みたいな、新機能の押し付けが嫌がられてるって部分もあるんでないかな。
0579デフォルトの名無しさん
垢版 |
2019/03/22(金) 19:21:05.55ID:OAKB0NCU
>>576
関数型持ち出すやつが、c++のconstexprの持ち上げたらいかんだろ
関数型はそんなキーワードなしに部分評価するだけで実現できんだから
0580デフォルトの名無しさん
垢版 |
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
0581デフォルトの名無しさん
垢版 |
2019/03/22(金) 19:26:07.13ID:LxKdyD8r
【定数型プログラミングの掟】
> 「ブッ殺す」と心の中で思ったならッ!その時スデに行動は終わっているんだッ!
0584 ◆QZaw55cn4c
垢版 |
2019/03/22(金) 21:54:10.43ID:nrO+MVHg
>>534
>コンパイル時レイトレーシング
……
0587デフォルトの名無しさん
垢版 |
2019/03/22(金) 22:42:15.38ID:78R951f8
自分の知らない概念を勉強するって意味ならlispのマクロでも覚えたほうがはるかに有意義なんだが
そうしないだよね。
なぜならそれじゃ老害にマウントできないから。
まあそういうクソみたいな思想のやつが年取って老害化するんだけど。
0588デフォルトの名無しさん
垢版 |
2019/03/22(金) 23:22:27.03ID:C43yQc+Q
>>545
コンパイル時に決定していることしかできませんよ
コンパイル時に3の階乗を計算して、ドヤってるやついるけど、それなら6ってタイプしとけよw
0589デフォルトの名無しさん
垢版 |
2019/03/22(金) 23:29:13.79ID:LxKdyD8r
でもそれがLALR(1)パーサーを生成するなら?
0590デフォルトの名無しさん
垢版 |
2019/03/22(金) 23:36:46.32ID:tosUzxZE
コンパイルに時間かかるから、その間暇つぶしに裏でレイトレーシングして遊んでんのかと思った
0591デフォルトの名無しさん
垢版 |
2019/03/23(土) 00:40:56.99ID:A6OyMWzd
デイトレーシングってストーカーのことだっけ。
0592デフォルトの名無しさん
垢版 |
2019/03/23(土) 06:55:12.12ID:jegHMgvE
>>580
「同じプロジェクトで働く他の仲間はアホかもしれない、
あなたの仕事を引き継ぐ奴はボンクラかもしれない、
だから難しい機能を使うのは自重しましょう」って感じか?
一見「あなただけは特別な存在です」と言ってるように見えて、
実は現場の全社員を見下してるような文面だなぁ。
「技巧に走るより素直な書き方をしろ」って趣旨は分かるんだけど。

>>588
参加者の順列で生じるパターンの状態を記録する配列の要素数、
しかも参加者数は変更の可能性あり(コンパイル時には確定する)、
という場合なら contexpr の階乗関数を仕込む意味はありそうね。
0594デフォルトの名無しさん
垢版 |
2019/03/23(土) 08:07:02.46ID:T5eFVdJU
constexpr指定するだけのことが技巧的なのか知らなかった
I/Oや動的メモリと関係なさそうなところに脳死で適当に付けておくだけでいいのに
0595デフォルトの名無しさん
垢版 |
2019/03/23(土) 08:35:25.57ID:RdkKrV9k
霞ヶ関文学は禁止ってこった。
0597デフォルトの名無しさん
垢版 |
2019/03/23(土) 12:50:41.97ID:p3DdVUb8
数学への回帰と先祖返りじゃないの
分かり易くなるんじゃない、難しくなるんだよ
0598デフォルトの名無しさん
垢版 |
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
0600デフォルトの名無しさん
垢版 |
2019/03/23(土) 13:49:44.59ID:T5eFVdJU
何か変か?
c_strを持っているクラスのみを想定しているんじゃないの
本当はSFINAEで消すべきかも知れないけど
0603デフォルトの名無しさん
垢版 |
2019/03/23(土) 14:56:23.90ID:EB4wgvrK
basic_stringの特殊化に限定するなら文字型を受け取るだけでいいと思うんだけど
0605デフォルトの名無しさん
垢版 |
2019/03/23(土) 15:03:42.82ID:EB4wgvrK
それは型の情報だから、すでに言われてるようにメタプログラミングでsfinae使って調べるしかない
0607デフォルトの名無しさん
垢版 |
2019/03/23(土) 16:15:35.83ID:T5eFVdJU
アレルギーが重症化すると辺境で難癖付けて騒ぎ出したりテンプレート指定すると何故か生産性が落ち出したりするからな
0608デフォルトの名無しさん
垢版 |
2019/03/23(土) 17:08:18.78ID:qcSb+DlG
pythonみたいにエラーメッセージ表示してくれるだけで大分マシになると思うんだけどな
0609デフォルトの名無しさん
垢版 |
2019/03/23(土) 18:52:42.53ID:4cH0E/is
そうなんだよね
1500行のエラーメッセージの代わりに「itemのメンバ関数c_str()が見つかりませんでした」ってコンパイラが言ってくれてたら
ここまでテンプレートは嫌われなかった
0610デフォルトの名無しさん
垢版 |
2019/03/23(土) 18:54:43.76ID:enzaJQTj
だからgoのコード生成系のアプローチのがマシってことなんだが馬鹿は脳内でしかビルドしないから通じない訳だ。
0611デフォルトの名無しさん
垢版 |
2019/03/23(土) 19:11:19.55ID:A6OyMWzd
これからは定数型プログラミングの時代。
0613デフォルトの名無しさん
垢版 |
2019/03/23(土) 19:18:48.99ID:iMO+WCpL
過去の話をしてるのに未来の話で返されてもな
0614デフォルトの名無しさん
垢版 |
2019/03/23(土) 19:22:34.86ID:A6OyMWzd
エラーメッセージがわかりにくいなら、VC++を使うべき。
0618デフォルトの名無しさん
垢版 |
2019/03/23(土) 21:40:53.85ID:eUSVaq66
>>598
嫌なら実体化しなければ良いんじゃ…
仮にFooのインスタンスを生成したとしても、Foo::InsertItem()を呼ばなければFoo::InsertItem()は実体化されないはず…
0619デフォルトの名無しさん
垢版 |
2019/03/23(土) 22:45:17.73ID:4cH0E/is
今思えばC++0xのコンセプト案はいろいろ酷かったな
あのまま入らなくてよかった
0620デフォルトの名無しさん
垢版 |
2019/03/23(土) 23:17:20.42ID:EB4wgvrK
コンセプトマップだとかコンセプトを満たすことを自己申告しなきゃいけないだとか
傍目に見て正直意味わからんかった
0622デフォルトの名無しさん
垢版 |
2019/03/23(土) 23:53:58.85ID:enzaJQTj
>>588
フーリエ変換の係数みたいなものは実行時には定数だけれど、事前に計算式で計算しておきたくはなる。
でもまあ普通に考えればビルド構成の問題だわな。
なぜコンパイラに無理やり突っ込むかと言えばまともにビルド構成を考える能力がないからっていうね。
0624デフォルトの名無しさん
垢版 |
2019/03/24(日) 00:40:12.28ID:7x4/H6l4
C++の複雑さはオナニー的なところがある
0625デフォルトの名無しさん
垢版 |
2019/03/24(日) 01:38:06.52ID:b8r3VMdD
コンパイル時に決定してることしかできないなら、コード書く必要あるか?
1+2しか計算できないんだろ、2+3の結果が欲しかったら、コンパイルし直しw
0626デフォルトの名無しさん
垢版 |
2019/03/24(日) 02:05:19.27ID:xAoD2jBj
狭義のアルゴリズム(有限ステップで終わる)を記述する分にはそれで十分
無限ループを含む手続きを記述したかったら無限再帰すればええ
と考えればメモリが無限にあればコンパイルが終わるまでに任意の処理ができる
0627デフォルトの名無しさん
垢版 |
2019/03/24(日) 02:07:46.29ID:4oYv+rwZ
定数型プログラミングでコンパイラを創ろう。
0628はちみつ餃子 ◆8X2XSCHEME
垢版 |
2019/03/24(日) 02:16:59.70ID:9ZLLLplX
コンパイル時に畳み込んで定数にした方がよいかどうかはコンパイラの最適化で頑張って欲しい話で、
それで足りない、さらなるチューニングが必要なときの記法が統一的だったらうれしいねっていう程度の話じゃないかな。
普段からそんなにコンパイル時計算を意図したりはしないよ。
0629デフォルトの名無しさん
垢版 |
2019/03/24(日) 02:25:38.27ID:Wmd2CxZH
P言語でC++中間コードを生成するスクリプトを書けばいいじゃない。
swigみたいな。
カスタムコンパイルやカスタムビルドはそのためにある。
0630デフォルトの名無しさん
垢版 |
2019/03/24(日) 02:33:38.88ID:4oYv+rwZ
ヤック、レック相当をメタプログラミングで実現することができるのではないか。
スピリチュアルな方向性ではなく。
0631はちみつ餃子 ◆8X2XSCHEME
垢版 |
2019/03/24(日) 02:50:04.22ID:9ZLLLplX
PEG 相当のことを実現しているライブラリとしては Qi があるけど、
Yacc みたいに LALR をやってくれるのは知らないなぁ。
出来るのかな?
0632デフォルトの名無しさん
垢版 |
2019/03/24(日) 03:13:50.09ID:PmamUspu
>>628
個人的には、メタプログラミングで定数値のパラメータ作るのに構造体でメタプログラミングする必要が無くなったのはconstexprにかわしゃ
0633デフォルトの名無しさん
垢版 |
2019/03/24(日) 03:16:29.85ID:PmamUspu
ごめん間違って送信した、
constexprに感謝してるw
あとビット演算とか整数値の計算する関数もconstexprつけときゃテンプレートパラメータに渡せるし
高速化は二の次だと個人的には思ってる
0634デフォルトの名無しさん
垢版 |
2019/03/24(日) 03:23:59.40ID:4oYv+rwZ
STLあっての私たち。
0636デフォルトの名無しさん
垢版 |
2019/03/24(日) 03:32:16.98ID:4oYv+rwZ
確かに遅いね。
0637デフォルトの名無しさん
垢版 |
2019/03/24(日) 03:37:58.18ID:4oYv+rwZ
テンプレートメタプログラミングは永久機関。
0639デフォルトの名無しさん
垢版 |
2019/03/24(日) 05:41:26.93ID:NAaHZN6A
嫌です
0641デフォルトの名無しさん
垢版 |
2019/03/24(日) 06:09:08.25ID:xAoD2jBj
sprintf_s()と_cuntof(array)がどこの環境でも標準で使えるならchar[]も悪くない選択肢ではある
0642デフォルトの名無しさん
垢版 |
2019/03/24(日) 08:26:16.35ID:3s1WkY0F
boost spiritはコンパイルが糞遅いし、何か間違えると何処が原因かさっぱりわからんし、
実用には程遠かったな。テンプレートでここまでできるという一発芸的な。
0643デフォルトの名無しさん
垢版 |
2019/03/24(日) 09:20:48.36ID:0R743LPx
テンプレートメタプログラミングって元々はアンチパターンとして提出した例だったんだけどね。
本当に愚者というのは度し難いというか。。
0644デフォルトの名無しさん
垢版 |
2019/03/24(日) 09:21:19.70ID:EkBj7yKG
CStringをこの世から完全に消し去って欲しい
せめてbasic_stringと互換性のあるインターフェースを持たせてからフェードアウトして欲しかった
0645デフォルトの名無しさん
垢版 |
2019/03/24(日) 09:23:21.86ID:Wmd2CxZH
CStringT::Format()系関数は、sprintf()系関数を2回呼ぶので冗長。
利用バッファサイズを事前に指定できないことが原因。
0646デフォルトの名無しさん
垢版 |
2019/03/24(日) 09:27:05.22ID:EkBj7yKG
>>643
だから天井人がお前ら下々に分かるレベルにしてやるよってことで様々な改良が加えられてるんだよなあ
それでもまだ分からないとなったらどこまでレベルを下げればいいんだってなって頭抱えちゃうよ
0649デフォルトの名無しさん
垢版 |
2019/03/24(日) 10:45:02.21ID:myNgr9GS
>>645
冗長って言われても一度パースしないと必要サイズはわからんからしょうがないだろ
まあ1KB程度のバッファー持って処理中に足りなくなったらパースし直すとかでもいいとは思うが
0650デフォルトの名無しさん
垢版 |
2019/03/24(日) 10:47:24.53ID:0ur1Ot0v
便利さを求めるならなんかフレームワーク使えよ
軽さを求めるならchar配列でゴリゴリ書けよ
0652デフォルトの名無しさん
垢版 |
2019/03/24(日) 11:06:49.87ID:Wmd2CxZH
>>649
素直にsnprintf()のように最大バッファサイズを指定するオーバーライド関数を追加すべきでしょ。
CStringT::Format()関数を呼び出す側は、あらかじめサイズを予想できる状況にあることが多い。
0653デフォルトの名無しさん
垢版 |
2019/03/24(日) 11:52:04.64ID:0R743LPx
>>646
天上人のつもりなのがそもそもの問題なんだがな。。
最近の標準委員は明らかにプログラム組んでなさそうな連中が決めてるような感じだし。
c++なんかは顕著だがそういうマウントの取り合いによる新機能拡充が一番現場を疲弊させてるっていうことを
なんでわからんかね。
0654デフォルトの名無しさん
垢版 |
2019/03/24(日) 11:52:05.81ID:EHuBBnjq
MFCが出来た頃のstd::stringはそりゃまあ酷いシロモノだったんじゃ
あまりCStringを責める気にはなれん
0655デフォルトの名無しさん
垢版 |
2019/03/24(日) 11:55:08.60ID:DVu1xjKe
いくらリリース時に型がすべて決まってるはずと言ったってDRYはそれなりに大事だろ
0657デフォルトの名無しさん
垢版 |
2019/03/24(日) 12:05:08.13ID:4oYv+rwZ
しかし旧石器時代にSTLが作られたことを思うと、オーパーツと言ってよいのではないか。
数学的に洗練されたこの美しさ。
古代人は数学が得意だったのでは。
0658デフォルトの名無しさん
垢版 |
2019/03/24(日) 12:09:06.38ID:EkBj7yKG
>>654
まあそれはある
でもstlが普及してからも互換性が全くないまま終了したので負債になってしまったのは悲しい
0661デフォルトの名無しさん
垢版 |
2019/03/24(日) 12:46:47.36ID:DqM6OskA
>>648

>>647 はそんなの百も承知で書いてると思うが
0663デフォルトの名無しさん
垢版 |
2019/03/24(日) 12:55:26.69ID:DqM6OskA
>>657
そうか?
全然そんなことないと思うぞ

MFCのはもっと酷かったからそれよりマシかなって程度
0664デフォルトの名無しさん
垢版 |
2019/03/24(日) 12:57:50.08ID:Wmd2CxZH
>>660
簡単だから当然、実装はする。
下手にバッファサイズを測る手間をかけるくらいならバッファサイズを渡せという話。
バッファサイズを渡せば速度が通常のCStringT::Format()より30〜40%ほど改善するんだから、公式でも採用してもらいたいという趣旨。
0665デフォルトの名無しさん
垢版 |
2019/03/24(日) 13:07:04.34ID:Wmd2CxZH
gccとvcでは vsnprintf()の挙動が違う。va_listの内部実装が異なるからだろう。
gccの場合、同じva_listを使ってvsnprintf()を複数回呼び出すと…
0666デフォルトの名無しさん
垢版 |
2019/03/24(日) 13:26:03.77ID:tvGVd8WB
続きはCMのあとで!!
0667デフォルトの名無しさん
垢版 |
2019/03/24(日) 13:42:15.21ID:uLk8b7ur
>>664
どうせ弄るなら、va_listとか旧世紀の遺物つかわなくても、templateの可変長引数を使って1から作り直した方が良い。
0668デフォルトの名無しさん
垢版 |
2019/03/24(日) 13:44:34.27ID:EHuBBnjq
va_listを他の関数に渡した後で、va_startで初期化せずに再使用するのは未定義動作
何が起きても文句は言えないしコンパイラごとに挙動が違うのは当然というものだ
0670デフォルトの名無しさん
垢版 |
2019/03/24(日) 13:56:05.38ID:Wmd2CxZH
>>668
それはつまり、gccではCStringT::FormatV()相当の実装が困難ということを意味している。
バッファサイズを自分で渡す仕様が最適解ということ。
0672デフォルトの名無しさん
垢版 |
2019/03/24(日) 14:13:40.53ID:Wmd2CxZH
それにつけてもostringstreamの醜さよ。
0676デフォルトの名無しさん
垢版 |
2019/03/24(日) 16:30:35.16ID:4oYv+rwZ
>>672
何処がひどいですか?
0677デフォルトの名無しさん
垢版 |
2019/03/24(日) 16:50:49.33ID:GJPzxHHg
CStringのくそ設計にいまさら文句言ってもなぁ
そもそもメンバ関数、しかもdestination側と言う時点で使う側の利便性考えていない
0678デフォルトの名無しさん
垢版 |
2019/03/24(日) 16:55:28.18ID:xAoD2jBj
遅いしフラグがいっぱいあるし読みにくいし
ostream& T::operator<<(ostream&, const T&)やistream& T::operator>>(ostream&, T&)をTにつき一種類しか定義できないから
万全の汎用性を有しているかというとそうでもないし、

唯一の長所は型安全なところだが、意図通りの出力になるまでどうせトライ&エラーすることになるのだから
それ以下の工数でprintf()の書式ミスを発見できるわ;;
0679デフォルトの名無しさん
垢版 |
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);
で通る
0682デフォルトの名無しさん
垢版 |
2019/03/24(日) 17:19:45.54ID:PmamUspu
>>653
ここはマウント取りたいだけのバカが沢山居るけどさすがに標準化委員会は違うだろ
ただソフト開発者や標準・boost以外のライブラリ設計者はほぼ居ないんだろうなとは思うが
0683デフォルトの名無しさん
垢版 |
2019/03/24(日) 17:32:06.96ID:GJPzxHHg
標準化委員会はよくも悪くも開発者目線だなあとしか
提案者の用途さえ満たせれば良い的な仕様が多々見られる

最近だとto_charsとfrom_charsなんてまさにそんな感じ
0684 ◆QZaw55cn4c
垢版 |
2019/03/24(日) 17:44:39.67ID:6DYvLdXI
>>678
>フラグがいっぱいあるし

この i/o stream のフラグってきちんと定義されているのでしょうかね…
処理系に依存してテキトーな気がしてしかたがない
https://mevius.5ch.net/test/read.cgi/tech/1434079972/30 を書くときにさんざん調べたつもりなのですが、よくわからなかったことを記憶しています。
今みると、嫌々 stream.fail() でごまかしていたようです
0685デフォルトの名無しさん
垢版 |
2019/03/24(日) 21:04:38.58ID:0R743LPx
>>656
江添レベルの奴がやってる時点であんまここと変わらんだろ。
初心者に初めからautoで宣言させたコード実行させようとするような馬鹿だぞ。
初心者のためよりも自分のエゴ満たすためってのがあまりに優先されすぎてる。
0686デフォルトの名無しさん
垢版 |
2019/03/24(日) 21:11:22.21ID:EkBj7yKG
>>682
そんなわけないが
研究者だけでなく様々な企業のエンジニアも参加している
お前らの好きな組み込み業界や自動車業界も人を派遣してる
0687デフォルトの名無しさん
垢版 |
2019/03/24(日) 21:17:23.06ID:EHuBBnjq
つい最近まで「トライグラフは現場でバリバリ使いまくってるから無くしちゃダメー!」って必死に訴えてる人達がいっぱい居たのが標準化委員会だよ
0688デフォルトの名無しさん
垢版 |
2019/03/24(日) 21:37:39.78ID:GJPzxHHg
初心者にauto使わせるのは悪くないというかむしろそうすべきだろ。
現場が疲弊云々はそんな現場辞めてしまえとしか
標準化委員会はc++バリバリに使っている現場の意見が十分反映されているのだから

文句があるなら委員会に参加すれば良いんだよ
0691KAC
垢版 |
2019/03/24(日) 22:12:29.07ID:baOwhHMi
>>690
そうじゃない
688の思想は、Cにも取り入れる方向だろう
0692デフォルトの名無しさん
垢版 |
2019/03/24(日) 23:03:50.83ID:0R743LPx
あれで現場の意向が本当に入ってると思ってる奴がいるのか?
c++の衰退とかデータで見ても信じない連中なのかね。。
まるでどこぞの統計データを今でも信じてる連中みたいだ。
0693デフォルトの名無しさん
垢版 |
2019/03/24(日) 23:18:22.54ID:Wmd2CxZH
メモリやCPUが安価で高性能になれば、コンパイル言語全般のシェアが下がるのは当然なのでは。
0696デフォルトの名無しさん
垢版 |
2019/03/24(日) 23:38:44.81ID:GJPzxHHg
実際現場の意見入っている感じするじゃない?
どちらかと言うと実装側の都合でデグレードされたりすることが多い
コンセプトいい加減入れろよと
エラーメッセージわかりづらいし、SFINAE面倒くさいんだよ
0697デフォルトの名無しさん
垢版 |
2019/03/24(日) 23:40:40.71ID:PmamUspu
>>688
>初心者にauto使わせるのは悪くないというかむしろそうすべき
型や参照、ポインタ、修飾とかの違いでコンパイルエラーになるのを経験しないのは危険だと思うけどねぇ
推論された型を勘違いした上にたまたま通ってしまう可能性もあるわけだし

便利なのは否定しないけど静的型付け言語であるC++のパラダイムを変えるような機能ではない
0698デフォルトの名無しさん
垢版 |
2019/03/24(日) 23:46:22.50ID:dT6Xb8jy
>>697
そういうことを言っていいのは出来合いのtypedefを使わないで全ての型名を愚直に書いている奴だけ
0700デフォルトの名無しさん
垢版 |
2019/03/24(日) 23:56:09.01ID:4oYv+rwZ
キリバンゲット!!
0701デフォルトの名無しさん
垢版 |
2019/03/25(月) 00:05:20.37ID:lHhl7aCC
>>685
この書き込み自体がもうね
江添の考え方に反対するならそう言えば良いのに、エゴとか完全に個人攻撃しちゃっているじゃない
0702デフォルトの名無しさん
垢版 |
2019/03/25(月) 01:23:08.49ID:dMeCWU6I
結局ビャーネって何を作ったの?
言語の仕様なんかは磯さんが決めてんでしょ
0703 ◆QZaw55cn4c
垢版 |
2019/03/25(月) 01:44:06.00ID:/j2VHiDc
すべてはユダヤの陰謀だあぁぁ!!!
0704デフォルトの名無しさん
垢版 |
2019/03/25(月) 01:47:24.45ID:LV8gdQ4G
陰謀論を唱えるような人は、先入観が強すぎて不具合の原因を見つけ出せずに時間を浪費するタイプの人だから、プログラマをやめるべき。
0706デフォルトの名無しさん
垢版 |
2019/03/25(月) 07:46:27.12ID:mW0SiMKO
MISRA-C 2004 の本は、トヨタなど大企業の50人が書いた本だけど、
ドワンゴ江添の本は、彼1人で書いたから、超人技!

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

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

KADOKAWA が言ってる。
当社はプログラミングの会社ではないけど、
なぜか、プログラマーが多いし、募集もしていますw
0707デフォルトの名無しさん
垢版 |
2019/03/25(月) 11:25:12.65ID:MuEFgcsw
>>686 裁判費用をクラウドファウンディングで捻出する予定はありますか
0709デフォルトの名無しさん
垢版 |
2019/03/25(月) 21:09:33.79ID:DI1df1TX
ファンクタって1回だけ使うならインスタンス生成する分関数より高コストで繰り返し使うなら生成済みのインスタンスを再利用できるから低コストという認識であってます?
0712デフォルトの名無しさん
垢版 |
2019/03/25(月) 22:35:05.39ID:8zmAEr9n
>>701
あの教え方が本当に初心者のためになると思ってんの?
完全に書く側の都合による本にしかなってない。
ああいうメモリ意識の低い本で教えることはc++を使わせる上でマイナスにしかならん。
0713デフォルトの名無しさん
垢版 |
2019/03/26(火) 00:05:13.64ID:Pu4N06vt
>>712
なるだろ?
想定している利用者像が違うだけ
始めにauto使わないように慣らされたら、どうでも良い場面で型指定するバカに育って逆に面倒臭いだろ

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

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

ついでに型&autoとメモリ意識とは違うからな
0716デフォルトの名無しさん
垢版 |
2019/03/26(火) 00:29:37.47ID:otrrnTwO
このスレ住民は、 auto によってコンパイル時には分からない意図せぬ動作で困った経験ってある?
0717デフォルトの名無しさん
垢版 |
2019/03/26(火) 01:09:42.91ID:pnr0HSCh
c++って便利なのは便利なんだが、やっぱ遅いよ
stream,asyncなんか、使い物にならん
0719デフォルトの名無しさん
垢版 |
2019/03/26(火) 01:12:08.10ID:qIOvz7c6
いや、コードを書いてるやつがいつまでも成長しない
だからコードが遅くなる
それがC++wwww
0720KAC
垢版 |
2019/03/26(火) 01:19:01.25ID:E0p6Aumv
>>715
いや、流石にintは生で使うだろ。
intで十分な意味持ってるんだが、
どんなtypedefするんだ?
0723デフォルトの名無しさん
垢版 |
2019/03/26(火) 03:04:08.84ID:5DO30Xtv
Visual Studio使ってたらインテリセンスがautoをコンパイル前に展開して表示してくれるけど
0724デフォルトの名無しさん
垢版 |
2019/03/26(火) 03:05:29.57ID:5DO30Xtv
テンプレート以外で変数がコンパイル前に決まらないことってあるの?
テンプレートならauto使う必要なくね
0725デフォルトの名無しさん
垢版 |
2019/03/26(火) 03:35:14.19ID:D6PYEJQv
テンプレートだからこそ使いたい。
0726デフォルトの名無しさん
垢版 |
2019/03/26(火) 03:48:53.98ID:fe5vrK8S
>>653 >>686
経験豊富なプログラマが沢山参加しているのが事実なら、船頭多くして
船山に登る状態なのかも知れない。
0733デフォルトの名無しさん
垢版 |
2019/03/26(火) 15:10:01.00ID:5W15sMAG
>>727
wとかsとか付いたのが無駄に増えて面倒になったな

int32_t とか uint32_t とか uint64_t とかは賛成
0734デフォルトの名無しさん
垢版 |
2019/03/26(火) 17:06:14.62ID:fe5vrK8S
>>733
そういう名称の問題だけに限った話ではなくて、結論から言えば、仕様を
多数決で決めてしまうと初心者向けの言語になる。スクリプト言語とかに
近いような。

構造的な問題とか、統一感的な問題とかもあるし、そもそも、C/C++の
良さまで失うような標準仕様だとかも、例えば、boost などの、
stl = standard template library なんかも、ここでは信者が多いかの
用に見えるけど、まるでC/C++とは思想の異なる全く別のスクリプト言語の
ような仕様になっている感じがする。
0735デフォルトの名無しさん
垢版 |
2019/03/26(火) 17:40:36.88ID:hIENxLfE
>>734
STL否定している時点で、そもそもC++の想定しているユーザーからは外れているんじゃね
iostreamならともかく
0736デフォルトの名無しさん
垢版 |
2019/03/26(火) 17:46:54.15ID:NEQZ2SJi
>>735
1998年くらいまでのC++はまあまあ良いと思っていたが、それ以後、別の
言語になってきてる気がする。特にここの人はSTL信者が多いが、
実は、98年くらいまでのC++とは似ても似つかないものだよ。
それを使ったコードには、往年の C の片鱗さえも残ってない。
だから、言語名から C という冠を下ろすべきだ。
0737デフォルトの名無しさん
垢版 |
2019/03/26(火) 17:51:58.82ID:hIENxLfE
信者も何も標準コンテナ使わずに何使うんだよ
自前で書くとかそれこそダメな方向だろう
eastlなんかでも使用感をなるべく標準に近づけているのに
0740はちみつ餃子 ◆8X2XSCHEME
垢版 |
2019/03/26(火) 18:10:49.26ID:qKdh3SVz
C++ の仕様に STL などというものは存在しない。
かつて STL と呼ばれていたものは完全に C++ の一部になっているし、
仕様の他の項目と区別する方法はない。
C++ 使いが C++ の機能を使うのは当たり前だ。

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

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

POSIX の fopen()系や printf() 系などは使いやすいと思っていたが、
STLにはそれを感じないし、coutも変だったが STLもそれと同じ轍を踏んでる感じ。
0744デフォルトの名無しさん
垢版 |
2019/03/26(火) 19:17:04.87ID:+JfIlK2p
>>743
お前さんのレスからは、「僕の好みじゃないからヤダヤダ」という程度のことしか見えてこない。
0746デフォルトの名無しさん
垢版 |
2019/03/26(火) 19:23:47.27ID:/YNua4WM
メイヤーズは最高に美しいライブラリと言っている
0747デフォルトの名無しさん
垢版 |
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" があるが、これは「負け惜しみ」を意味する。
0749デフォルトの名無しさん
垢版 |
2019/03/26(火) 19:29:16.09ID:fe5vrK8S
>>747
意味不明だな。誰でも入手できるライブラリで、なおかつ、
昔のC/C++より誰でも出来るスクリプト言語よりだというのに。
言ってることが逆さま。
0750はちみつ餃子 ◆8X2XSCHEME
垢版 |
2019/03/26(火) 19:30:19.23ID:qKdh3SVz
cout よりも printf が相対的に良いという人はたくさんいると思うが、
iostream が特に駄目ってだけで、
C++ 的に見れば printf がセンスいいとはとても言えんぞ……
0751デフォルトの名無しさん
垢版 |
2019/03/26(火) 19:31:00.18ID:eqSsbUbG
昔みたいにドヤ顔してboost使う必要がなくなったのはいいことだと思うよ。標準が充実していってさ。
最初からヌエ的な発展しかありえないのはそういうものだと思うし。
0755デフォルトの名無しさん
垢版 |
2019/03/26(火) 19:48:04.23ID:gp3lODpj
だったら君が最高の言語を作ればいい
設計は君の最高のセンスをふんだんに盛り込んで独裁的にやればいいよ
0758デフォルトの名無しさん
垢版 |
2019/03/26(火) 21:11:51.51ID:ExDeReqX
>>740
C++ の仕様にSTLがないって本当かいな、と思って調べたら
確かに n3337.pdf (C++11のドラフト?) には STL という単語が出てないね。
STLのセンスが良いか悪いか、使うべきか使わざるべきか、
その辺について意見を出せるほど見識はないんで、事実の報告だけ。


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

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

パフォーマンスそこそこでいいならc++なんか使う理由がない
遊び以外
0767デフォルトの名無しさん
垢版 |
2019/03/26(火) 22:05:23.77ID:Pu4N06vt
最大限のパフォーマンスを出すために作ったeastlみたいなのも標準の使用感踏襲するくらいには標準の設計は良くできているよ
0768デフォルトの名無しさん
垢版 |
2019/03/26(火) 22:05:31.83ID:D6PYEJQv
STLはわしが育てた。
0771デフォルトの名無しさん
垢版 |
2019/03/26(火) 22:33:50.26ID:5P0efKyY
>>767
移行が楽になるようにむやみにapi変えないのはソフトウェアの定石
それより変わったところ、拡張されてるところに注目しようか
0772デフォルトの名無しさん
垢版 |
2019/03/26(火) 22:49:38.25ID:D6PYEJQv
C++2zには俺の作ったライブラリが標準搭載されると思う。
0775デフォルトの名無しさん
垢版 |
2019/03/26(火) 23:38:15.00ID:zBAPpXX5
std::tuppleはPythonフリークが無理矢理ねじ込んだのではないか
C++11で追加された可変長テンプレートなくして有り得なかったコンテナやし
std::pairと被っとる
0776デフォルトの名無しさん
垢版 |
2019/03/26(火) 23:43:43.21ID:T41fm+6R
tupleなんかどの言語にもあるだろ
現代の言語の基本的概念の一つで当然サポートされるべき
0780デフォルトの名無しさん
垢版 |
2019/03/27(水) 00:42:46.01ID:bx8pTnoV
なんちゃらラウップは言いにくいからいつも
ビョーーンさん、と呼んでいる
0782デフォルトの名無しさん
垢版 |
2019/03/27(水) 00:56:42.26ID:ZXIZSYy+
タプルはなにが嫌といって get<0> とかいうのがものすごく嫌
要素が4個ぐらいになったら1年後ぐらいにコード書き直そうとして
・・えっとこの値取りだすの get<1> だっけ? get<2> だっけ?とか絶対なるから使わない
0784デフォルトの名無しさん
垢版 |
2019/03/27(水) 01:03:41.91ID:Mw4em8Pz
いい加減enumにメンバ関数定義させろと。
enum classの時にどうにかすべきだった気もするが。
後は静的なリフレクションも
enumと文字列の相互変換とか殆ど定型コードになるのにいちいち書くのが面倒すぎる。
マクロで書くのも微妙だし
0785はちみつ餃子 ◆8X2XSCHEME
垢版 |
2019/03/27(水) 02:16:29.42ID:1nw30Wbv
>>779
センスがあるか無いか知らんけど、
すっぽすっぽ先生が是とした以上は C++ 的ではあるはずだろ。
それが駄目なら C++ が駄目だし、駄目なので君は使わなくていいよ。
0786デフォルトの名無しさん
垢版 |
2019/03/27(水) 02:25:21.92ID:Mw4em8Pz
標準コンテナ使わないらしい人の
抜群のセンスを見てみたいので、コードの一部でも見せて欲しいものだな
0787デフォルトの名無しさん
垢版 |
2019/03/27(水) 02:59:41.39ID:V3NaDuAs
Eigenが絶妙に不便なんだけど行列演算を標準でサポートする予定ってあるの?
0789デフォルトの名無しさん
垢版 |
2019/03/27(水) 06:12:39.11ID:0QkCU47u
センスが悪いというだけで具体的にどこがどう悪いか、どんなだったらセンスが良いのか言わないと、説得力ゼロだな。
0790デフォルトの名無しさん
垢版 |
2019/03/27(水) 06:31:30.44ID:J3LATpLk
>>743
+1
0791デフォルトの名無しさん
垢版 |
2019/03/27(水) 06:40:01.31ID:J3LATpLk
>>780
禿
0793デフォルトの名無しさん
垢版 |
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";
...
}
}
こんな感じのことがしたい
0795デフォルトの名無しさん
垢版 |
2019/03/27(水) 07:44:38.63ID:QPwampGA
>>789
×センスが悪い
○自分の趣味合わない
だから説明する必要なし嫌い嫌い言っておけばおk
ちょうど114514回目のstd:get嫌い民も現れたところだ
0796デフォルトの名無しさん
垢版 |
2019/03/27(水) 07:59:25.35ID:KDFmmUkx
ストラウストラップも例外入れるかどうかあたりまでは
かなり真剣に仕様を考えてた印象だけれどそれ以降はタガが外れた感じだ。
最近はもうどうしようもなくなってる。
0798デフォルトの名無しさん
垢版 |
2019/03/27(水) 08:06:10.74ID:QPwampGA
なお誰もストラウストラップに意見を出せるほどプログラミング言語の勉強をしていないもよう
0799デフォルトの名無しさん
垢版 |
2019/03/27(水) 08:07:01.17ID:Kgbo0Zp4
>>797
逆変換はunordered_mapだな

文字列化の方はswitch使うのが一番コンパイラがいい感じのコードにしてくれる
0800デフォルトの名無しさん
垢版 |
2019/03/27(水) 08:25:16.34ID:HgdvOlrd
関数の引数として vector<int> を参照渡ししたいのですが、これのデフォルト引数を空の vector<int> にする方法ってありますか
0805デフォルトの名無しさん
垢版 |
2019/03/27(水) 09:33:08.23ID:p4oEJ8zd
>>786
センスうんぬんを言ったのはおれじゃないけど、
標準ライブラリ使わないという主張に対して、ソースがエレガントかどうかを問うのは目的がわかってない

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

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

メモリ確保回りはallocator使えばいいし
data使えばただのメモリブロックだよね
0812デフォルトの名無しさん
垢版 |
2019/03/27(水) 10:04:51.88ID:tQ4XPcUj
>>810
要素の追加時に容量の拡張が必要かどうかのチェックが入ったりするから、オーバーヘッドはゼロではないよ
0813デフォルトの名無しさん
垢版 |
2019/03/27(水) 10:08:24.05ID:U9bjaUkC
>>812
それpush_back or emplace_back使っているのが悪いのでは
cの同等コード書いてもチェックは必要だろ
チェック要らんことが分かっているならresizeしておけ
0815デフォルトの名無しさん
垢版 |
2019/03/27(水) 10:22:17.37ID:tQ4XPcUj
>>813
便利なものがあれば人間は使ってしまうもんだ
その積み重ねがパフォーマンスの差に繋がる
俺は一般には便利なものを使って時間を節約することでボトルネック解消にかける時間を確保でき、
結果的にパフォーマンスはより高くなると思うけど、そこはスケジュールの制約次第だな
0816デフォルトの名無しさん
垢版 |
2019/03/27(水) 10:29:47.46ID:9ko5ghKo
Cマスター「C++は配列に追加するときにサイズチェックするから遅い(キリッ」

wwwwwwwwwwwwwwwwwwwwww
こんな雑魚がでかい顔してるからいつまでもセキュリティホールがなくならないんすなあ
0817デフォルトの名無しさん
垢版 |
2019/03/27(水) 10:34:12.90ID:9ko5ghKo
Cマスター「要素追加時にサイズチェックするという便利さの積み重ねがパフォーマンスを落とす(キリッキリッ」
やべえ笑い死にしそう
笑い事じゃないけど
0818デフォルトの名無しさん
垢版 |
2019/03/27(水) 12:49:47.89ID:DY72tOrL
プロファイラで調べて本当に問題あるならどうにかするけど
ただわざわざc的に書いても大抵誤差レベルでしか変わらんよね
どちらかと言うとバッファの確保の仕方を工夫した方が効果が大きい
0820デフォルトの名無しさん
垢版 |
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)の時間がかかり固定長配列より遅くなる
 と思う(よく知らない)。
0821デフォルトの名無しさん
垢版 |
2019/03/27(水) 13:34:58.24ID:tQ4XPcUj
>>817
複数の要素を追加するとき、わざわざ事前にまとめてリサイズするか?ということだよ
1要素ずつ処理するのは生ポならかえって面倒になることが多いし、見た目にいかにも非効率そうなコードに見えるから、大抵の人は自然にそうするだろう
一方vectorだとどうだろうね
心理的な問題なの
0822デフォルトの名無しさん
垢版 |
2019/03/27(水) 13:45:54.22ID:tQ4XPcUj
同じようなことはvectorに限らず一般的に言ええて、
例えばC++はRTTIの便利さ故にCと比較してプログラマが無駄なメモリの確保や破棄を行いやすい傾向がある
逆にCだと無駄に大きなバッファ作りがちだったり、バッファの使いまわしによりスレッドセーフでないコードを書きがちであったりする
0825デフォルトの名無しさん
垢版 |
2019/03/27(水) 14:29:28.16ID:t7f2HshG
VC++2017なんだけど
デストラクタで投げた例外をキャッチできずabortするのはVC++の仕様?
RAIIとラムダを駆使した自作finally内で
例外投げたらキャッチできずabortしてハマったわ
デストラクタ内で例外投げるのが汚いのは知ってたが
そうか、自作finallyもデストラクタ利用してるからダメなのかな
0827デフォルトの名無しさん
垢版 |
2019/03/27(水) 14:54:30.22ID:t7f2HshG
サンクス
デストラクタをnoexcept(false)指定したらcatch出来たわ

てことは自作finallyは念のためnoexcept(false)指定にしたほうが良いのか
それか自作finally内で例外投げるのは完全禁止にするか
悩むわ
0828デフォルトの名無しさん
垢版 |
2019/03/27(水) 14:56:55.41ID:t7f2HshG
まぁでもよく考えたら
例外が発生して自作finallyが実行されてる時に
さらに自作finally内で例外飛ばしたら二重例外になるから危険か
なるほどなるのど
0829デフォルトの名無しさん
垢版 |
2019/03/27(水) 17:38:06.36ID:8XRRZQAn
>>820
意味がわからん
そもそもCでも固定長配列の代入は実データのコピーを伴いO(n)だ
アドレスや参照のやり取りならO(1)
0831デフォルトの名無しさん
垢版 |
2019/03/27(水) 17:55:38.42ID:8XRRZQAn
あーそう言うことか
固定長的に使いたいなら始めにresizeするだけじゃない

便利だからチーム内で使ってしまう人がいることを問題にするより、使わずにいちいち独自コードで処理されて余計遅くなったり、バグ仕込まれたりする方が余程ヤバイだろ
0833デフォルトの名無しさん
垢版 |
2019/03/27(水) 18:00:36.53ID:fzYgEwLp
まぁそれでも範囲チェックは入るし、常にヒープ使われるし
それすら問題になるようなクリティカルな場所なら生配列なりarray使えばいいと思うけど
適材適所じゃないかねぇ
0837デフォルトの名無しさん
垢版 |
2019/03/27(水) 18:20:39.73ID:fzYgEwLp
>>836>>834
まぁ要素数わかってて末尾に入れてくのはナンセンスやね
速度を気にしない場所ならどうでもいいけど
0838デフォルトの名無しさん
垢版 |
2019/03/27(水) 18:39:59.51ID:ZT8Ntgus
よくあの時代にこのような洗練されたライブラリを設計できたものだと思います。
もしかすると宇宙人にもらったのかも。
0839デフォルトの名無しさん
垢版 |
2019/03/27(水) 20:06:12.42ID:KDFmmUkx
配列の長さチェックのオーバーヘッドとかなんかものすごくデジャブ感のある議論だな。
肯定、否定どちらにしてもマウンティングかましたくなる題材なんかね。
0840デフォルトの名無しさん
垢版 |
2019/03/27(水) 21:09:05.61ID:p4oEJ8zd
標準コンテナで問題になるのはやっぱりヒープだよ
境界チェックとか仮に無断だとしても一定時間で終わる処理
ヒープ使われると最悪システムコールで負荷変動大きすぎる

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

でこれらを解決するコンテナがboostにあるのでそれを使う
0841デフォルトの名無しさん
垢版 |
2019/03/27(水) 21:18:02.40ID:p4oEJ8zd
あと標準ライブラリのリンクリストはそもそもの設計が非効率
(クリーンな設計ではあるが)
素朴なcの実装と比べてかなり差がでる
これも代替がboostにある
0843 ◆QZaw55cn4c
垢版 |
2019/03/27(水) 21:31:48.60ID:WdEToVPN
>>820
なんか変じゃないですか?
list や vector のときは要素の「追加」なのに、生配列だけ要素の「代入」と設定するのですか?
list や vector で要素の「追加」を考察するのなら、生配列の場合も要素の「追加」を検討してください
0844デフォルトの名無しさん
垢版 |
2019/03/27(水) 21:38:22.09ID:p4oEJ8zd
>>842
arrayは固定長
欲しいのは最大長を事前に確定しつつ、その範囲で可変長で使えるvector
という話ね
0845デフォルトの名無しさん
垢版 |
2019/03/27(水) 21:45:52.93ID:9ko5ghKo
ここのCマスター様は、現在の配列長と挿入インデックスのチェックしてreallocしてなんていう
パフォーマンスの悪い便利さに甘えた処理などしない
堂々とv[N]に無条件代入を行って超高速O(1)追加を実現するのだ
0849デフォルトの名無しさん
垢版 |
2019/03/27(水) 23:54:55.06ID:QPwampGA
一般的には無いよ
局所的な話を持ち出してああだこうだ言ってるのが今
そして何をするつもりかは誰も知らん
0851デフォルトの名無しさん
垢版 |
2019/03/28(木) 00:47:43.37ID:yLTGLAEP
>>843
4バイト整数のN要素の配列を仮定しているが、Cの単純な固定長配列だと
4バイト整数はコピーするのが当然。
ところが、Listだと、「追加」するしかない。動的配列である
Vectorも、基本的には「追加」が基本。そうでなければ「動的」と言わない。
0852デフォルトの名無しさん
垢版 |
2019/03/28(木) 00:53:54.09ID:AOcR4eqo
vector.data()、basic_string.c_str()はCと同じの配列の連続アドレスを保証する数少ないインターフェースでしょ。
0853デフォルトの名無しさん
垢版 |
2019/03/28(木) 01:07:32.08ID:Csoqrb4z
正直stringがゼロ終端を保証したのはちょっとどうかなと思ってる
いや便利なんだけどさ・・
0855デフォルトの名無しさん
垢版 |
2019/03/28(木) 01:39:16.25ID:AOcR4eqo
アドレスと一緒にバッファサイズを渡せないAPIが世の中に無数にある。ヌル終端は優しさ。
0857デフォルトの名無しさん
垢版 |
2019/03/28(木) 05:04:36.64ID:fRHhg+J8
>>851
なぜかC言語は固定配列でC++だと動的が基本らしい
前提違うのに速度ガーとか言われてもなぁw
0858 ◆QZaw55cn4c
垢版 |
2019/03/28(木) 05:12:10.50ID:3LZYwZb1
>>855
ヌル文字をデータとして扱えない、という決定的なウィークポイントが発生しますね…
昔、ツールがヌル文字を扱えない、という点が後から発覚してとても困った経験があります
0859デフォルトの名無しさん
垢版 |
2019/03/28(木) 07:13:39.49ID:mfvsZ6Gk
>>851
ようゴCマスター様
マスター様は知らなくてビックリするけど、C++ではvectorやlistは要素数が実行時に決まるときに使うんだ
そして驚くべきことに、Cにも要素数が実行時に決まるときに使うための愚かしい機能がなぜか備わってるんだ
reallocっていうらしいんだけどさ
使うときは確保済みのバッファの長さをいちいち調べて、足りなかったら再確保して必要に応じて要素を全部コピーするらしいっすよ
もちろんそんな馬鹿げたオーバーヘッドを払う奴はC++かぶれのド素人だけだけどな
真のCプログラマは一度確保した配列の自由なインデックスにコピーすることでvectorの無意味なオーバーヘッドを回避し超高速O(1)を実現するのだ
0862デフォルトの名無しさん
垢版 |
2019/03/28(木) 11:32:51.21ID:yLTGLAEP
>>859
>そして驚くべきことに、Cにも要素数が実行時に決まるときに使うための愚かしい機能がなぜか備わってるんだ
>reallocっていうらしいんだけどさ

Cでは、realloc は推奨されて無い。
Cで、要素数が実行時に決まるような集合を扱いたい場合は、自前で
ポインタでリンクする、リンクリストを使う。
毎回それをやると間違いやすいので、賢い人は、自前でリストライブラリを作って
それを用いて操作する。
0863デフォルトの名無しさん
垢版 |
2019/03/28(木) 11:39:08.71ID:dMtNAb9A
Linuxのソースなんだけど
close(0) close(1) close(2)って書いてあるの見つけたのだが
これってなんの効果が期待できるの?
ファイルディスクリプタ?だと思っていてオープン等をした値番号だと思ってたけど、0 1 2に該当するのがなんなのかと
0865デフォルトの名無しさん
垢版 |
2019/03/28(木) 12:18:22.29ID:des+yyG9
iteratorでstartとendの中に納まってることが保証されてるのに
各要素にアクセスするときにまた範囲チェックとかあると無駄やん
そりゃ書こうと思えばいくらでも危険なコードは書けるけど
安全なときはそういうの省いて高速化出来るのがCの良いところなのに
(レジスタの値が知らない間に壊れても正常に動くようにとか言ってるなら知らん)
0867デフォルトの名無しさん
垢版 |
2019/03/28(木) 12:34:41.89ID:OvbnMtjj
>>862
で、そのオレオレ車輪の再発明クソライブラリは
std::vectorやstd::listより何が優れてるの?
範囲チェックしないから高速wなの?
0871デフォルトの名無しさん
垢版 |
2019/03/28(木) 13:00:41.99ID:yLTGLAEP
>>869
そもそも、C で出来ないことは、コンピュータのアーキテクチャ上、ほぼ
絶対に出来ない事。
だから、Vectorが、効率面でCを上回ることは絶対に有り得ない。
0874デフォルトの名無しさん
垢版 |
2019/03/28(木) 13:22:32.10ID:des+yyG9
義務教育でプログラミングとか教えたら
もっと変なの増えそう
python界隈に来ないで欲しい
0877デフォルトの名無しさん
垢版 |
2019/03/28(木) 13:51:20.07ID:0CdADxX3
化石じゃないまだドメイン次第で現役Fortranだってこの間新しい仕様出たし!ってつっかかられるぞ
08をちゃんと実装したコンパイラ出してから言ってくれよって気持ちだが
0879デフォルトの名無しさん
垢版 |
2019/03/28(木) 14:03:11.91ID:CwLqpfbs
_____(コボル)

答え COBOL

_____(フォートラン)

答え FORTRAN

これのどこが問題集やねん!
0882デフォルトの名無しさん
垢版 |
2019/03/28(木) 16:17:03.97ID:yLTGLAEP
>>880
その言葉を見る限り、あなたは日本人じゃない気がする。
この文脈で、あなたが言いたかったのは、
「来年度からこれが流通するぞ」ではなく
「来年度からこれが常態化するぞ」
という事だったと思うから。
0883デフォルトの名無しさん
垢版 |
2019/03/28(木) 17:38:04.05ID:ADAikd1k
>>871
それ言い出すなら逆もまたしかりだろ
extern "C"すればCで出来てC++に出来ないことはないぞ。
0885デフォルトの名無しさん
垢版 |
2019/03/28(木) 18:18:56.58ID:JEyrctWP
>>881
おまえらが役人からずれてるんだろ。
日本は公務員のための国やぞ。
0888デフォルトの名無しさん
垢版 |
2019/03/28(木) 18:32:28.62ID:des+yyG9
888
0891デフォルトの名無しさん
垢版 |
2019/03/28(木) 18:45:09.06ID:yLTGLAEP
日本政府は日本人と将来の日本の年金などのための政治を行えばいいのだから、
日本人が作ったものを使うように推進するのは悪いことではない。
余りにも使いにくいもので無い限りは。
だからWordをやめて一太郎を使うようにしたり、Rubyを使うようにしたり
するとすれば、それは英断だよ。
0892デフォルトの名無しさん
垢版 |
2019/03/28(木) 18:45:11.14ID:JEyrctWP
RubyはWindowsでまともに動かないから、Linux採用するのかな。
0894デフォルトの名無しさん
垢版 |
2019/03/28(木) 18:49:56.61ID:JEyrctWP
関数型教えればいいのに。
0897デフォルトの名無しさん
垢版 |
2019/03/28(木) 19:00:37.17ID:des+yyG9
>>891
国産のを応援するのは判るが
それが利権になってただのクズが集まって来たり
金貰うと進歩が止まったりするのが日本の悪いところ
0898デフォルトの名無しさん
垢版 |
2019/03/28(木) 19:04:55.98ID:KoUoPeo+
国産であっても良いものでなければ応援するべきではない
Rubyは滅ぶべき言語トップ10に入る
0899デフォルトの名無しさん
垢版 |
2019/03/28(木) 19:07:54.30ID:OttlZ3Q/
>>896
書き方同じじゃなくても同様の事が出来るだろ
cで出来ないこと無いって話にたいしてなのだから
0900デフォルトの名無しさん
垢版 |
2019/03/28(木) 19:20:56.01ID:pafVG92t
PythonとRubyだったら、Rubyもそんなに悪くは無いと思う。
Pythonは可読性が悪いように感じる。空白インデントだけでブロックや
関数の終わりを決めてしまうので、内部関数が終わってるかどうか分からず、
人の書いたソースが読みにくくて困ったことがある。
0901デフォルトの名無しさん
垢版 |
2019/03/28(木) 19:39:26.72ID:lj2W5NqA
C++er的には
動的型の時点でノーサンキューだろ
そういうのが嫌でC++使ってるんじゃないのか
0902デフォルトの名無しさん
垢版 |
2019/03/28(木) 19:40:51.32ID:lj2W5NqA
特にRubyは教祖様が
絶対に型は書きたくない
って駄々こねてるから

これはもう日本のガラパゴス化が一層激しくなるな
0903デフォルトの名無しさん
垢版 |
2019/03/28(木) 19:43:44.68ID:jnmpmBFr
pyは読みより書きの方が問題
間違えてインデントけずっても気づかないことが多い
0904デフォルトの名無しさん
垢版 |
2019/03/28(木) 19:51:12.67ID:WN0VVTEM
>>901
個人的には型のある言語の方が好きだ。
型があった方が、変な問題にはまる率が下がるので開発が速く進む。
大規模開発には絶対、型が必要。
初心者にも大人気言語だった元祖のBASICも、Aが浮動小数点型、A$が文字列型で、
確か、A% が整数型。配列は DIM A(100) や、DIM B%(10,10) などで、
宣言は省略できる場合が多いが、ちゃんと型はあった。
Rubyなどは、A にあらゆる型が入れられるので、関数呼び出しなどが
かなり怖い。間違っていても問題の切り分けが出来ないので「はまったら」大変。
だから、とても慎重にコードを目で見ないといけなくなる。
0905デフォルトの名無しさん
垢版 |
2019/03/28(木) 19:52:41.47ID:wxB03uV3
>>903
Pythonで、良く分からなかったのが、インデントの空白の個数。
2個でも4個でも好きな量を選べるのだろうか?
0907デフォルトの名無しさん
垢版 |
2019/03/28(木) 19:59:44.37ID:WN0VVTEM
>>906
やはりそうだったんだ。だから余計に解読できなかったんだな。
エディタでカラムを数えたり、上まで戻ったりして、やっと認識していた。
でも不安が残った。ブロックが終わってるのかどうか物凄く分かりにくい。
0908デフォルトの名無しさん
垢版 |
2019/03/28(木) 20:02:46.54ID:eE4sGejC
今のPythonはカオスだからな
見易い文法目指していたはずが
内包表記やらラムダやら見づらくする文法が増えて推奨までされている

フレーム作るか否かもわかりづらいことこの上ない
0909 ◆QZaw55cn4c
垢版 |
2019/03/28(木) 20:22:58.04ID:3LZYwZb1
>>851
「実装A, B, C があり、機能 f について、A.f, B.f C.f のそれぞれに、こんなメリデメがあります!」
なら理解できますが、>>820 は、
「A.g, B.f, C.f のそれぞれにこんなメリデメがあります!」
でしょう?それって変じゃないですか?
A.g とかじゃなくて、A.f で比べて欲しいのですが?
0910デフォルトの名無しさん
垢版 |
2019/03/28(木) 20:33:45.97ID:BoT1RII7
>>908
最近の言語全般に言えることだな。
無駄機能入れすぎなんだよ。
クソみたいなシンタックス入れるくらいならライブラリを充実させるほうが正しい。
0912デフォルトの名無しさん
垢版 |
2019/03/28(木) 20:56:41.12ID:JEyrctWP
ハイクラスの人はなんて言うんだよ。
0913デフォルトの名無しさん
垢版 |
2019/03/28(木) 21:07:04.95ID:siqlJJfC
>>882
お前さんの言い換えた方の日本語もかなり不自然だよ。他人の言葉尻をとらえてどうこう言えるほど、お前さんも日本語が得意な訳ではないだろう。
そもそも、普通の人はそんなことで日本人かどうか気にしたりしない。
0919デフォルトの名無しさん
垢版 |
2019/03/28(木) 23:06:15.20ID:2+cLemOj
標準のコンテナなんて使う理由ある?
遅くて使い物にならん

ストリームなんて実用に耐えれないくらい遅いだろ
0925デフォルトの名無しさん
垢版 |
2019/03/28(木) 23:22:20.86ID:e7Ukr6X3
両方の案を採ってC++14ではstd::floor(a / b + 0.5)にケテーイ?
C99なら丸め関数あるけど…
0929922
垢版 |
2019/03/28(木) 23:36:38.79ID:AOcR4eqo
お恥ずかしい。素で間違えた。括弧の位置が違う。
0930デフォルトの名無しさん
垢版 |
2019/03/28(木) 23:49:56.39ID:JEyrctWP
>>918
それは自分に問いかける言葉だったんじゃ。
0931デフォルトの名無しさん
垢版 |
2019/03/29(金) 00:05:03.99ID:daDbIW6D
>>930
>>918についてはまだ誰も判定精度のベストを尽くしていない件について:
多分
 std::abs((a/b) - ((a/b)の小数以下を丸めた値)) <= std::numeric_limits<double>::min()
あたりがベスト?
0932デフォルトの名無しさん
垢版 |
2019/03/29(金) 00:08:06.95ID:KSfDlte3
>>931
いや、元ネタの話。
0933デフォルトの名無しさん
垢版 |
2019/03/29(金) 00:09:22.47ID:KSfDlte3
上田次郎の言葉。
0934デフォルトの名無しさん
垢版 |
2019/03/29(金) 00:20:10.55ID:0t+U2b3s
一太郎は自滅したからなぁ
どうしているのかと思えば名簿の話であんなことしていたのかと・・・
上手くやればいくらでも出来たのに勿体無い
0936デフォルトの名無しさん
垢版 |
2019/03/29(金) 00:53:41.69ID:e60P0oPD
まだ428万なのに一勝で400くらいしか上がらなくなったんだけど中堅名乗ってええか?
0939デフォルトの名無しさん
垢版 |
2019/03/29(金) 01:45:14.97ID:DyQclHpC
lisp は大昔 emacs のカスタマイズするのにしょっちゅう書いてたけど
なんでこんなクソみたいな古代言語を有り難がるやつがいるのかいつも謎だった
普通に C 風の文法のスクリプトでも搭載してくれたほうがよっぽどありがたい
0940はちみつ餃子 ◆8X2XSCHEME
垢版 |
2019/03/29(金) 02:03:38.50ID:PFvplbFR
>>939
Emacs Lisp は今でも生き残っている LISP 系の言語の中ではクソな方なので、それで判断されてもな……。
AutoLISP よりはマシだが。
0941デフォルトの名無しさん
垢版 |
2019/03/29(金) 02:15:27.46ID:e60P0oPD
どうしてC言語風のスクリプト言語が無いんだ
どいつもこいつも分かりにくいうえにデバッガも無いもん作りやがって
0942デフォルトの名無しさん
垢版 |
2019/03/29(金) 05:41:16.20ID:VktwsX1+
>>931
a = 1e15
b = 1e-15
0943デフォルトの名無しさん
垢版 |
2019/03/29(金) 05:42:05.38ID:VktwsX1+
941
あったけど流行らなかった
pythonの方が役にたつ
0944デフォルトの名無しさん
垢版 |
2019/03/29(金) 06:59:38.46ID:Eeymx9+7
>>916
int型にしてdouble型に戻したのと比較するとか、floor関数使ったのと比較する。
0946デフォルトの名無しさん
垢版 |
2019/03/29(金) 08:07:13.38ID:Ta+0qHqT
>>931
min()以下の非正規化数でも残差があればそれは整数じゃないんだから単純に0との比較でいい。
0950デフォルトの名無しさん
垢版 |
2019/03/29(金) 09:40:31.26ID:e60P0oPD
>>945
あるけど誰も採用してない
何故かみんなオリジナルの言語を作り始める
相当慣れないとautotoolsとか解読困難だし
なんならこれもperlにすればよかったのに
おかげで出回ってるものもコピペを繰り返した秘伝のタレ状態だわ
0953デフォルトの名無しさん
垢版 |
2019/03/29(金) 12:15:03.74ID:QqxpOyVg
python+ctypes最強やで
0954デフォルトの名無しさん
垢版 |
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ギフト券(チャージタイプ)に交換できます(電子マネー払いにて)  
   
数分で出来るので是非ご利用下さい      
0956デフォルトの名無しさん
垢版 |
2019/03/29(金) 18:35:30.88ID:NYOzkE7a
>>954
本当じゃん     
0957 ◆QZaw55cn4c
垢版 |
2019/03/29(金) 18:38:47.41ID:tqWwggkn
>>940
では common lisp 準拠の xyzzy を推奨いたしましょう
0958デフォルトの名無しさん
垢版 |
2019/03/29(金) 18:58:22.81ID:KSfDlte3
パワハラ学んだほうが役に立つのにな。
0959はちみつ餃子 ◆8X2XSCHEME
垢版 |
2019/03/29(金) 19:03:34.54ID:PFvplbFR
>>957
正直言って、 xyzzy とか lem の方が筋がいいわ。
この時代にダイナミックスコープとか正気の沙汰ではない。
(近頃の Emacs Lisp はレキシカルスコープにも出来るけど。)
0960デフォルトの名無しさん
垢版 |
2019/03/29(金) 19:13:35.93ID:SLNwR97S
emacsではdynamicもそれはそれで便利なんだが
エディタだから各関数がコンテキストによって挙動変えるけど、それを引数として渡す訳じゃないからね
dynamicのスタック的な状態変更は便利
0961デフォルトの名無しさん
垢版 |
2019/03/29(金) 21:18:40.18ID:ddIXjKBD
lispってまとめられがちだけれど言語としてのくくりで言えばalgol系くらいの意味合いしかない。
schemeとcommon lispだったらc#とjavaのがよっぽど近い。
0963はちみつ餃子 ◆8X2XSCHEME
垢版 |
2019/03/30(土) 00:58:44.45ID:raLgb94a
>>961
ほんまそれ。
そんでもって現代で LISP って言ったら Common Lisp か Clojure あたりを想定して欲しいって思う。
(俺は Scheme 派だが)
0964デフォルトの名無しさん
垢版 |
2019/03/30(土) 13:00:53.68ID:syvaDn83
Java 8は関数型言語らしい。
0966デフォルトの名無しさん
垢版 |
2019/03/30(土) 17:34:43.10ID:syvaDn83
ほぼ同じってことか。
0967L
垢版 |
2019/03/30(土) 17:36:09.42ID:thjEqqk2
[C++でブラウザアプリ]
田園風景とゆらゆら揺れるアサガオのテスト:
WebAssemblyが使えるブラウザならすぐ見れるよ:
http://nowsmartsoft.atwebpages.com/demo2/index.html

ひここもりなので、ここでしか見てもらえないんだ。
0970デフォルトの名無しさん
垢版 |
2019/03/30(土) 18:17:34.73ID:syvaDn83
でも、この前、住所さらされたからな。
0971はちみつ餃子 ◆8X2XSCHEME
垢版 |
2019/03/30(土) 20:56:32.41ID:raLgb94a
>>967
ところで以前のウェブサイト (NWSA だとか文字コードだとか平衡木の文書があったやつ) は完全に消えたの?
ブログは残ってるみたいだけど、最終更新はだいぶん前だし。
0972デフォルトの名無しさん
垢版 |
2019/03/31(日) 01:36:25.21ID:kdwrDA9x
uint64同士の掛け算でオーバーフローしていないことを確認するには
(long double) a * b <= UINT64_MAX
であってますか?
0973デフォルトの名無しさん
垢版 |
2019/03/31(日) 02:01:02.28ID:XYg5fWSm
> (long double) a * b <= UINT64_MAX

変形してこれでいいのでは?
a <= UINT64_MAX / b; // b!=0
0976デフォルトの名無しさん
垢版 |
2019/03/31(日) 11:42:31.55ID:TSA6EeAl
mul_highみたいなの位標準化してくれればいいのにね
大抵のアーキテクチャでは命令として存在するのだし
0978L
垢版 |
2019/03/31(日) 14:05:02.11ID:vDO0/VaM
>>971
ああ、あれはやめた。
維持費がかかっていたので。
0982デフォルトの名無しさん
垢版 |
2019/03/31(日) 17:20:07.40ID:vDO0/VaM
>>979
気持ちに添えなくてすまないが、残念ながら、今は公開する予定はない。

>>980
そんなに気にする人がいるとは思ってなかったんだけど、今後は晒さない。
0984デフォルトの名無しさん
垢版 |
2019/03/31(日) 19:00:54.99
>>954
覇権争いのおこぼれかな。
一応貰っておいた     
0988デフォルトの名無しさん
垢版 |
2019/04/01(月) 04:25:02.60ID:uqkfEU2b
set<int> を0からnまでの連番でお手軽に初期化する方法ってありますか?

for文でinsertしまくるのが普通ですか?
0991デフォルトの名無しさん
垢版 |
2019/04/01(月) 10:36:34.64ID:0fT1DSaw
array<int,3>={1,1,1};

初期化子より要素が3ケなのはわかるのに
なんで一々3って記述しなきゃいけないの?
0997デフォルトの名無しさん
垢版 |
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);
}
0998 【男の娘】
垢版 |
2019/04/01(月) 13:42:00.26ID:QUlyRw/u
0999デフォルトの名無しさん
垢版 |
2019/04/01(月) 13:53:43.17ID:2cPHsZN4


万葉集巻五 梅花の歌三十二首、并せて序
「初春令月、氣淑風和、梅披鏡前之粉、蘭薫珮後之香」
初春の令月にして氣淑(よ)く風和ぎ梅は鏡前の粉を披き、蘭は珮後(はいご)の香を薫す
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
おみくじ集計(特殊)
【男の娘】 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
レス数が1000を超えています。これ以上書き込みはできません。

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