グローバル変数と静的変数は
・書き換えられうる場合は排他制御が必須
・初期化のみの場合でもその初期化の排他制御が必須
・ただし静的変数の初期化はC++11以降は自動的に排他制御されることが保証される
まとめると、main開始してからリソース用意して適当に渡せよってことよ
原則としてグローバル変数もシングルトンも避けたほうが良い
グローバル変数を避ければシングルトンがmain開始前に呼び出されること無いだろ。
グローバル変数だけ避ければいい。
シングルトンなんてグローバル変数と同じ
避けたほうが良い
シングルトンの中に書き換わる変数を持っていたらデータ競合が起こりうるよな
>>9
シングルトン無しでどうやってプログラム全体で共通のリソースを管理するの? >>11
それほんとにシングルトンのこと話してるの?
モジュール間の情報共有はシングルトンがないと無理って言ってるに等しい気がするけど >>11 「管理」が何のことを言ってるのかわからないけど、たぶんひきすうをつかえばいいと思うんだ。 引数ってこういうことか?
struct singleton_t { };
singleton_t& get_singleton()
{
static singleton_t the_singleton;
return the_singleton;
}
void func1(singleton_t&);
singleton_t& func2();
int main()
{
func1(func2());
}
func2なんか使わずにfunc1の中でget_singletonを呼び出せば済むことだし
だったらthe_singletonをグローバルにするのと大差なくねって
>>12
>>9の主張「シングルトンとグローバル変数は避けたほうが良い」を受けての話ね。
当然グローバル変数も無しで、さらにシングルトン無しでどうやってグローバルなリソースを管理するのかな?と。 >>15
グローバル変数やシングルトンがなくていいとは言わないけど、何でひきすうで出来ないと思うの? システム全体のリソースならグローバルでいいだろ
グローバル変数を導入するメリットの方が勝つから
なんでもかんでもグローバルに置くのはやめようねというだけの話でしょ
>>19
システム全体じゃないリソースてどんなのあったっけ? まあ寿命がはっきりしないオブジェクトって嫌なもんだよ
わかってもらえるとは思わんけど
前スレでクラス内部にinstanceを持たせて運用する事を質問した者です。
(注)前スレ:943
:ユニークポインタをシングルトンの様な仕様に置き換え
std::unique-ptr<Hoge>Temp=std::make-unique<Hoge>();
↓
static Hoge& GetInstance(){static Hoge temp;return temp;}
上記の仕様をさらに、
template <class T>
inline T Instance;
というテンプレートinstanceで使用できるようにアドバイスを頂き、その仕様に変更したところ、運用自体は問題ないのですが、コンストラクターの呼び出し位置がおかしい感じになってしまいますた。
インラインなのでコンパイル時?(inittermという関数内部でコンストラクトが実行されている)にコンストラクターが起動されてしまう感じで、外部ライブラリを使用したコンストラクションが失敗します。
これは明示的に回避できるのでしょうか?
また、皆さんはグローバル変数等を使用するときにどういった方法を取られますか?
クラス名から呼び出せるインスタンスはかなり便利なので使っていきたいのですが……
度々申し訳ございますん。
実際に1個しか存在しないものはシングルトンの表現が合ってる
GPUとかな
inline変数は(MSVC16で確認する限り)1つの.dll内で同じ実体を共有する
dllをまたぐと別の実体になる
.hに書いてもリンク時に多重定義で怒られない
その言い方だとmainを呼び出す前の初期化処理で死んでる感じか
シングルトンにしてもグローバル変数にしても排他制御が必要な点で同じだよな
コンストラクタ実体を含んだdllをロードする前にinline変数の初期化が走るというのが問題なら、
GetInstanceのテンプレート実装に逃げるか...
template<class T>
T&GetInstance(){static _back;return _back;}
int main(){
GetInstance<Hoge>().Func();
}
一応言っておくがデータをケチる目的のはずだからinline変数もGetInstanceテンプレートも「本物」のグローバル変数ではない
dllをまたいだら別の実体だ
円周率みたいな定数ってどのライブラリのやつ使ってますか?
古いC++ならe=exp(1.0)、π=6*asin(0.5)
numbersって型変えた時ちゃんと直してくれるの?
>>31
変数テンプレートだからこっちが型を指定する
auto x = std::numbers::pi_v<double>;
デフォはdouble
namespace std::numbers {
inline constexpr double pi = pi_v<double>;
} なおpi_v<int>はゆとり歓喜の3ではなくis_floating_pointに阻まれる模様
未だに円周率3とか言ってるおじいちゃんいるのか・・・
ジジイを馬鹿にするのは結構だが若いなりに何か引っさげているのか?
俺は8bit機がこれから黄金期に差し掛かるあたりでお前らのような立場だった
ハッタリではなく当時のトレンド引っさげてジジイたちの死角を突くことで今の地位を得たが
口だけ達者でこれから沈みゆくだけな連中なら全然羨ましくねえぜ
世代ってより情弱ぶりを揶揄されてるのに気付かないようじゃ虚しいな
そもそも誰か円周率が3だなんて主張してるか?
情弱って攻撃用ワード使って脅しかけても説得力ねえとバカにしか見えねえんだけど
>>34
ジジイ、ジジイか‥‥
それじゃ、お前はなんだ?この餓鬼が
俺はお前さんがこの世に落っこってくる前からバグ書いてるんだ どうしてもintのπを定義しようと思ったら、4や2ってわけにはいかないから3にするしかないと思う
どうしても偶数のπを定義しようと思ったら、4にするしかないと思う。
全否定はしていない
これならジジイを馬鹿にする資格があると示しているのに
応答なしか・・・誠に残念
煽られても好意的に対応したが無駄だったか
「状況によって『およそ 3』で計算すればよい」という指導は存在する。
小学生は有効精度の概念を知らんから
どういう場合にどの程度の概算でよいのか自分で判断できんのよ。
「およそ 3」って言ったら 3 で計算するのを正解だと思っちゃうやつが少なからず出てきてしまう。
現実的な精度との兼ね合いで言ったら 3.14 で教えておくのがおおよそ手ごろなんやろね。
喜べお前ら
こいつを追加するだけでpi_v<int>が使えるようになるぞ
template<>struct std::is_floating_point<int>:std::true_type{};
文脈的にたいして変わらない気もするけど
そんな違うものか?
>>46
3.14だっておよそでしかない
およそ3で全然問題ないと思うね。
それより
1.6+2.4 = 4.0 と答えたら減点するアホ文系教師を文科省はなんで放置するのかね?
掛ける順番とかな。工数とかシランだろな多分
単位とかでもあほ文系小学校教師が理解してるとは到底思えない >>48
小学校の先生が悪いんじゃない
小学校の先生を指導監督する文部省の官僚に問題があるとおもいますよ、ハノンQZ >>46
そこだけ見て「ゆとりも3.14で教わってる」って誤解されてるけど
一緒に3ケタの掛け算も廃止になったのが本当の大問題なんだよ
最初に「円周率とは」で一度3.14と教えた後の計算問題は全部3でやるしかなかった 算数教育を破壊された影響は凄まじいな
マスゴミの煽動記事みて何人に1人の奇病なのかもわからないバカばっかりになっちまった
現実には3で十分なわけよ
わずか数%の違いしかなく困らない
どうしても必要なら3.1でいい
これならわずか1%強の違いしかない
逆に工業で必要とする時は3.14でも足りないこともある
つまり3.14にこだわっているやつこそバカであると断言できる
コンピュータの場合、累積する誤差を少なくするよう定数を求めるのが最も重要なわけで。
統計的に3.17がπとして相応しいことがわかっています。
そら分かる子はいいよ
ほっといても算数なんてすぐ分かるやろ
数というもんの抽象性も理解できるし
かける順番にこだわることのアホさも自分で分かるやろ
でも
ひとクラス何十人のうちの算数分からん子
知能指数もボーダーの子
発達障害の子
その子らになんとかして分かってもらおうとすると
あの手この手でいろいろやってみるんやろな
共産主義じゃないんだから馬鹿な子は馬鹿な大人に育てば良い。
みんな違ってみんな良い。
>>50
> 一緒に3ケタの掛け算も廃止になったのが本当の大問題なんだよ
だからそれもフェイクだっつーのw
(1)内容の「A数と計算」の(3)及び(4)については、乗数や除数が3位数である場合の指導は、2位数までの考え方を基にして児童に考え出させるようにするとともに、複雑な計算を避けるものとする。
だからこれに従うと円周率は3.1となるはず
これと上に書いた「目的に応じて3で計算」を(多分わざと混ぜて)某学習塾が
『ウッソー!?円の面積を求める公式 半径×半径×3!?』
『円周率を3.14ではなく、「およそ3」として円の求積計算を行います』
って広告打ったのが元凶と言われてる お礼と報告が大変遅くなりましたがID:aidqFE7S でございます。
この度は有用なアドヴァイス大変ありがたく承っております。
>>25
mainで走らせている実処理の前に、インライン変数のコンストラクタが起動しているので、リンカ?の際に記述と同時に外部結合?させているのではないかとしか推察できませんでした……
質問が理解できていないかもしれないのですが東方初学者ですので何卒。
>>27
受け渡しを省略したいという助平心でございます……
この記述で動作確認しました。
ありがとうございます!
テンプレートは食わず嫌いでしたが、使ってみると奥深いものですね。
関数定義にstatic T& Instance();と記述したらちゃんと内部結合?になっていました。凄い。
本物のグローバル変数とはdllを跨いでも使える変数なのでしょうか?
dellについて少し調べたのですがよくわかりませんでした。
クラス内部の静的変数はプログラムのどこからでも一位だと思っていましたが、外部結合のstaticは役割が違うのかしら。
もうちょっと調べてみます。
ありがとうござまいした。 >>59
使えるよ、シンボルが見えるなら。
でも疎結合の方が絶対に良いので使わんほうがいいよ 試したことないけどあれって全く関係ないdllからアドレス指定して値書き換えたり出来るの?
リンクできてれば大丈夫よ
マネージドなやつが混ざってたらやらん方がええかもね
このスレ永久に同じ奴の自演でループしてるな
いつも同じ間違いで止まってるし
msvcのstd::lerp妙に遅かったから実装見たらめっちゃ厳重に引数チェックしてた
秒間何億回も呼び出す用途想定してないのか実装がまずいのか…とりあえず自分で書き直したわ
引数が有限でない場合の処理が入ってるからだろ
そもそもそんなものを使おうとする方がどうかしてる
>>68
明らかに無駄だな
無チェックな関数を提供すべき
チェック不要な自明な使い方で速く動くことがあるべき姿
もし必要ならば自分でチェックすれば良いしチェック用関数を提供してもよい >>69
どれが (言語仕様上) 必要ない部分なのか具体的に示して。 俺には見つけられない。
それとも言語仕様が過剰であるという意味? 一般的に渡ってきた引数に対してチェックをせず処理する関数と厳重にチェックしてから処理する関数の二つを提供すればいいんじゃない?
もちろん後者はチェックしてから前者を呼び出すことになる
チェック不要が自明な時や何度も呼び出す時は前者で十分
しかしニッチな機能だね
使うときは使うんだろうけど、これをあえて標準で用意するのは不思議
スクロールバーやプログレスバーで使いそう
過去にそのあたりのコード書いた当時あったらなって
>>72
一般論としてはそうだが、論点はそこじゃない。
MSVC の std::lerp は定義域のチェックをやっていない。
なので >>69 の言う「チェック」は引数の妥当性のチェックのことではない。 >>73
たいていの用途で必要なのは
const auto _Candidate = _ArgA + _ArgT * (_ArgB - _ArgA);
だけだからなぁ
誰がなんのためにこれを入れようと思ったのかよくわからんね using L=numeric_limits<double>;
a=L::max();b=L::lowest();
この場合お前らの言う「最小限の実装」だと結果がNaNになったりするぞ
オーバーフローとか切り捨て/切り上げとかに気を使わなくていいように標準でこういうのが用意されてるんだよ
>>76
その式の形だとFMA命令に最適化されて良さそうだな そもそも何億回も呼び出すなら<math>のfma(...)使うんじゃねえの
<cmath>はどんな引数つっこまれても何とか対処しなきゃならんのが絶対条件
using L=numeric_limits<double>;
a=L::max();b=L::lowest();
この場合お前らの言う「最小限の実装」だと結果がNaNになったりするぞ
オーバーフローとか切り捨て/切り上げとかに気を使わなくていいように標準でこういうのが用意されてるんだよ
>>79
sqrt(-1.0)でcomplex返さにゃならんの? nanだのinfだの>>81だのをグチャグチャとチェックしたがる奴は無能
最初からそういうのが発生しないように計算するべき libc遅いだの愚痴りながら低レイヤーのコード書いてる時が正直一番楽しい
MC++Dが20年前に発売されたってすげーな
アンドレイって天才だろ
移住して快適な掲示板
NEXT2ch
3ch
45ch
明和水産
などへ
今どき戻り値intでエラーコードとか使うなよCの書き方じゃねぇかとか思ってた
だけどC++17のvariantでエラーコード返したり、optional使ってエラー表現してるコードを見てちょっと感心した
しかしとはいえこういうやり方と例外ぶん投げるやり方ってどっちがいいんだろう?ググっても割りと論争あってよくわからんかった
>>91
制御フローを変更する必要がある場合は例外、それ以外(エラーもフローの一部の時)はoptionalでいいんじゃない?
例外は性能ペナルティーあるし、あんまり使うものじゃないと思うわ。
例えばメモリ確保失敗とかはプログラムの続行が難しいから、安全に終了するメモリ異常時の終了フローに移行できるよう例外を使うといいかと。 一部で悪名高い例外はマルチスレッドでこそ重宝すると思うんだが
例外はやばいエラーと普通のエラーを分けて欲しいわ
後者はあんまり遠くへ飛ばんでほしい
異常系は例外、準正常系はエラー
という方針がええな
ここだけの話ちゃんとした例外処理書かれたコード読んだ事がない
例外って、移行の処理を全く出来なくね
try{
a();
b();
c();
}
catch(...)
{
}
a()がコケても、何がしかの条件をかえてb()いこうを実行したいときなんて不便
try tryなんてやりだしたら、各関数の戻り値をifで判断しているのと同じだし
言い出したらキリないからだろ
a()がコケたあとC()から再開とか無数にあるから
try {
a();
b();
c();
}
catch(std::exception& e)
{
if(dynamic_cast<f*>(&e))
{
if(dynamic_cast<g*>(&e))
{
b();
}
c();
}
}
例外処理でどこまでカバーするかってのは初期には色々と検討されてる。
でも結局のところ「あきらめて終わる」「条件を変えてやり直しする」が圧倒的多数で
その他は言語機能としてサポートする必要ないレベルのレアケースだと判断された。
>>97
そういう場合は諦めて try をネストしたり連鎖したりしてなんとかしろってことだ。
少なくとも言語仕様をより複雑にするほどではない。 >>97
まあ分岐じゃなくて脱出を目的にするのが筋で、そういう制御はしない
王道ルートを一本バシッと決めないと >>100
それなら
if(!a()) goto ERROR;
でよくね >>98
やらねえよ
a()が例外出したらcatchしてboolなりint返してa()からやり直しだ 例外そのものが結構重たい処理だから
発生頻度が高いものでは使いたくない
GoやRustなど最近のプログラミング言語は例外がないね
代わりに多値やoptional/variant相当でエラーを返す
>>104
例外機構自体は重くないよ
発生時にcatchするまでが規定できないからRTOSなどでは使いにくいってだけ
その手のプログラムをしている人なんてそう多くないなから実際は気にする必要はない 基本的にtry catchは使わない
それを守るだけで改善できる
まあね、正直<setjmp.h>でええやんと思うことはある
しかし標準ライブラリがtry catch前提で作られているので
それを使う限りは仕方がない
longjmpの第2引数をポインタに写像すれば
そこからdynamic_castで場合分けもできるんだが
いざ自前でやるとなると標準ルールが欲しくなる
単に大域脱出するだけなら setjmp で良いが、
例外を投げたら途中にあるオブジェクトのデストラクタを呼んでちゃんと後始末してくれるってのが良いところなわけだろ。
そんで同等のことを setjmp でやろうとしたら実行コストが大きいってのは sjlj で凝りてるだろ。
大域脱出を使わないってのを徹底するならそれはそれでアリだと思うんだが、
半端に例外っぽいものを作るくらいなら素直に例外を使ったほうがいいわ……。
dynamic_castなんてゴミより例外使うやろ
例外を使わずに普通に代数的データ型でエラーを返せば良い
そのためにoptionalやvariantがある
例外が嫌われる原因は、はるか遠くのスナイパーに即死させられるからだよ
ある前提ならどこにスナイパーがいてもいいように書く必要があって、そのためには地下の穴を掘り進めて絶対地上に出ないなどの策が必要になる
いや単純に例外がシステムコールだからだろ
動的メモリ確保然りmutexロック然り
意味不明な例え話は必要ない
pythonの例外は割と好きだわ
c++でチームでやってるときは使わんほうがまあ無難
え、C++の例外がシステムコールってどういうこと?なんか関係あるの?
>>117
びっくりするくらいC++の知識ない奴がいるよな
たんにネットとか過去の案件からコピペしただけで
そのコードがどういう意味なのかも分からないなんてバカが打ちの会社にいるわ 煽れば1から100まで全部説明して貰えると思ってるんだろう
例外のどこがシステムコールなんだよw
笑わせんなw
経験不足もココまで来ると哀れだな
CPUの例外とかシグナルをC++の例外としてあげることはあるけど、throwやtry/catchにシステムコールは関係ないよ
またsetjmp, longjmpをシステムコールと思ったのかもしれないけど、これらはCの標準関数だよ
>>123
>throwやtry/catchにシステムコールは関係ない
sjlj だけが例外の実装ではないのでは?win32api なら SEH とか GoやRustのように例外のないプログラミング言語もあるように
例外は各言語内の単なる制御の一手法にすぎない
そこにシステムコールというOSの呼び出しは出てこない
実装としてそれを期待することはあるんじゃねえかなあ
少なくともbsd系やlinux系などで例外にシステムコールは一切出てこないな
だから例外とシステムコールは無関係であると断言できる
もしシステムコールがからむ環境があったとしてもそれはその環境独自の問題
C++やその他の言語の例外とシステムコールは無関係
>>128
ISO標準の例外処理はどれかわかるよね? SEHは別にハードエラーに限ったもんじゃないが。
基本的にカーネル側で発生する例外一般であって、DLL周りで発生するのはよく見かけると思う。
例外の話しがなんで、SEHの話しになってんだ?
例外って知らないのか?
うちの会社にもいるわ、デバッガに制御が移っただけなのに
例外が〜なんて言ってるバカ
>>133
それは、例外の実装が sjlj しかないという馬鹿がしつこいからだよ C++の例外try throw catchの仕様は
システムコールと一切無関係
>>135
そんなに必死になるのはなんか理由があんの? SEHの訳語が構造化例外ハンドリングだから、例外の一種と言えるはずだ。
C++にはSEHとやら言うものは存在しないし関係ないんじゃね?
いや、ゼロ除算やヌルポインタアクセスなどで素朴なC/C++でもSEHが発生することはあり得る。
>>132
カーネルで発生してるわけじゃないだろ
よく知らないのに絡んでくるなよ...
>>138,140
>>91から始まる話にSEHは関係ない >>140
C++にはSEHというものはありませんし発生することもありません
勉強して出直してきてください
それまでこのスレに書き込み禁止 VC6の頃はゼロ除算をcatch(...)で捕獲できたな
ゼロ除算はSIGFPEが発生するから捕捉したかったらsignalでハンドリング関数を指定
例外は全く関係ない
だから昔話だってば
あり得んことが目の前で起きたから
よく憶えてるんだよ
蟻人間ってちょいちょい見かけるけどこういうでたらめなやつだったのね
>>137
>>124
win32api なら SEH, 最近は gcc も SEH に置き換わっているときく >>139
それをいうなら sjlj だって同じ
今の流れは例外のインプリメントの話題なのでは? >>144
実装方法の話でしょ?sjlj だけ認めて SEH は認めないなんて矛盾してませんか? どこかの会社の独自拡張の話をC++の機能だと思い込んでC++スレに持ち込むのはやめましょう
以下の話はここでOKです
setjmp/longjmpはC/C++の標準機能です
signalもC/C++の標準機能です
try/throw/catchはC++の標準構文です
ISO/IEC14882の範疇から一歩たりとも出るなってのは無理だろ
>>154
特定の企業によるその環境下での独自な拡張について
そうであることを認識できず区別できずにC++の機能だと勘違いしてここに書き込むのは完全にアウト >>151
setjmpとlongjmpはC標準として参照してるから存在するぞ 書き込んだ本人に悪意がないのにアウトっておまえさんが何かペナルティを課すのか?
普通にそれは違うよと教えてやるのは全然スレ違いじゃないだろ
発端はこれだよな
>>114
> いや単純に例外がシステムコールだからだろ
違うと皆から指摘されてもここまで延々と続けていて悪質 >>158
そいつがずっと書いてるとおもってんの? >>159
別人だとしても同罪
C++と関係ない話をずっと続けている悪人 何かさ、C++の実用場面を1つも知らない世間知らずが
自分のためのシェルターを要求してるみたいだな
そんなの当人含め誰の何の役にも立たんのに
分かりやすい例え
もしAppleによる独自拡張の話をC++の機能だと思い込んでここで延々と話を続ける人たちがいたら
迷惑だからApple方面のスレでやれ!と怒られるだろ
それと同じことが今ここで起きている
>>160
罪の意識で死にたくなったってことですか?
止めないですよ SEHってJavaなど色んな言語でMicrosoftが勝手に拡張してるやつだぜ
だからC++の話ではないとまともな人ならわかるはず
SEHってC言語で実装されているWin32API周辺開発でも例外機構を使えるようにしたものじゃないの?
例外機構が備わってるC++でSEHの出番はないと思うけど
一言注意するのは構わんが
同調しないやつがいるからって
言い負かすまでしつこくするのは迷惑だぞ
マイクロソフトの解説
構造化例外処理 (SEH) は、ハードウェア障害などの特定の例外コードの状況を適切に処理するための、C に対する Microsoft の拡張機能です。 Windows と Microsoft C++ は SEH をサポートしていますが、ISO 標準の c++ 例外処理を使用することをお勧めします。 これにより、コードの移植性と柔軟性が向上します。 ただし、既存のコードまたは特定の種類のプログラムを維持するために、SEH を使用する必要がある場合もあります。
Microsoft 固有:
自分は正義の味方のつもりでも
周りにとって迷惑なだけなのは
まるでスッパマンだな
勘違いしていたと謝罪すりゃ済むのに逆切れで死の書き込みを繰り返してるやつヤバいな
>>173
相手が一人という前提なのは、数で勝ってると思い込みたいから?
死んだ親もそういう人だったん? >>174
どこにも一人と書かれていないし前提もないようにみえるけど幻覚が見えているの? 大阪弁も日本語だろ。
Win32 C++コンパイラではゼロ除算で浮動小数点例外が発生することも知らんとは。
まさかVirtual C++がC++コンパイラではないと言いたいほさ。
ゼロかどうか直前に調べてゼロならthrowすることでどんなコンパイラでもゼロ除算の時に例外を投げることが可能です
つまりコンパイラの問題ではありません
そして誰でもそうすることが出来るというだけでありC++の仕様や機能ではありません
>>176
構造化例外処理 (SEH) は……C に対する Microsoft の拡張機能です。
C++でも標準でも無いな。
いつまでスレ違い粘着しているんだよ。 ゼロ除算の処理はマシン依存。
だから、コンパイラは構造化例外を発生させてもいい。
これも標準C++に含まれる。
死の書き込みなんか誰もしてねえじゃん
どっちが必死なんだかw
整数型のゼロ除算は未定義動作じゃろ...
うちの環境(Ubuntu20.04 gcc11)なら不動小数点例外のシグナルが飛ぶが
未定義動作なので絶対に何かが起きるようなことを期待してはいけない
>>181
構造化例外なんてものはC++標準に含まれないよ 関西弁は標準日本語ではないが、日本語である。
この辺が難しい話なんだ。
「〜やで」「〜でんねん」と言う言い回しは、標準日本語にはないが日本語ではないと言い切るのは乱暴な話だ。
#pragma onceの話も方言だからダメとか
付き合ってらんね
方言だから〜言語標準規格に無いから〜って
そもそも例外がどのように内部実装されているかなんて完全に処理系依存であって
そんなことはわかった上で話してるんじゃないの
あと自分もMSVCのC++例外はSEHの機構を利用して実装されていると聞いたことがある
がググっても公式っぽいのは見当たらないので気のせいかもしれん
そもそも例外がどのように内部実装されているかなんて処理系依存で
そんなことはわかった上で話してるんじゃないの
あと自分もMSVCのC++例外はSEHの機構を利用して実装されていると聞いたことがある
がググっても公式っぽいのは見当たらないので気のせいかもしれん
今回の話は>>91から始まる「正常値でない時にvariantやoptionalを返すのと、(try/catchの)例外を投げる(throw)のと、どちらが好ましいか?」という話の始まり
それに対して「例外はコストが余分にかかる」「例外だと複数返ってくる時の扱いやリカバリ等が難しくなる」という話の流れ
その話に対して例外はシステムコールだとか
SEHがどうのこうのだとか
C++と無関係な話をして荒らしている人たちがいる SEHがどんな実装で作られていようが魔法はないのだからコストがかかる要因であることは変わりない
したがってこの議論でSEHを持ち出すのは無意味で愚かな行為ではないかな
♪実装が終わって〜 僕らは入った〜
♪実装を知らない〜 コーダーたち〜さ〜
無関係な話をいつまでも引っ張るWindows君が悪いと思います。
蟻人間、キチガイのフリして矛先をそらそうとしてる?
全く無関係な話でもない
見るからに自分が入れない話だからやめろだろ
そういう時は黙ってるか別な話題振ればいいのに
いちいち揉め事にしちまう幼稚なやつ
>>123書いて話終わると思って今見たらまだこの話が続いてることに驚き・・・
よほど恥ずかしかったんだな
ID変えてこんなに自演しちゃうなんて 正直、スマンカッタ
例外がシステムコールとか
ほんとすまんかった
単に知ったかしたかっただけで
こんなに大騒ぎになるとは思わなかった
謝罪してこれを訂正に代えさせてください
正直すまんかった
勉強になりました
例外はシステムコールじゃないです
>>188
>>170
Windows と Microsoft C++ は SEH をサポートしていますが、ISO 標準の c++ 例外処理を使用することをお勧めします。
MSですらSEHよりISO 標準の c++ 例外処理を推奨しているじゃないか。
いつまでもスレ違いをごちゃごちゃ言うなよ。 実装、処理系について話さないと決めたのなら話さなけりゃいいのに
元からOSやコンパイラの違いは関係ない話みたいよ
> 今回の話は>>91から始まる
> 「正常値でない時にvariantやoptionalを返すのと、
> (try/catchの)例外を投げる(throw)のと、
> どちらが好ましいか?」という話の始まり
だからSEHとか無関係なものを持ち出した人がちょっとおかしいわね >>201
標準でない話をするなというのがおまえさんの主張だったはず
それともMSが推奨するからという論点に変えなきゃ都合が悪くなったのか? >>204
なんか日本語不自由だな。
C++でも標準でもMS推奨ですら無いスレ違いの話に粘着するなよ。 内部の実装とやらでSEH使っている妄想はどうでもいいやろ
どのみちそれ自体の実装はどうなっているの?という話になる
魔法の方法なんて無いのだから途中の各関数毎にデストラクタを実行しながらスタック巻き戻す以外に手は無い
/ ̄ ̄ ̄ ̄ ̄\
| おまえらも |
∩_∩ | .|
(´ー`) < 暇な奴ら .|
( ) | .|
| | | | だなぁ |
(___)__) \_____/
>>205
ISO/IEC14882から一歩たりとも出るなと言う主張と
C++に関係ある話ならいいじゃんという主張は
平行線だな
勝手に言ってれば? 誰もおまえの鶴の一声に反応しねえけどw 持ち出すことで意味があるならばもちろん構わないと思うけど
この今回の件でSEHを持ち出すことに意味あるのかな
> 今回の話は>>91から始まる
> 「正常値でない時にvariantやoptionalを返すのと、
> (try/catchの)例外を投げる(throw)のと、
> どちらが好ましいか?」という話 >>210
そんな話はしていない。
SEHはC++でも標準でも無いWindowsローカルのプロプラ技術で、更には当のMSですらC++で使うことを推奨していないようなものなのに、「C++に関係ある話」とか言って無能を晒すなよ。 >>212
MSはC++で使うことを推奨していないんだよな?
C++で使うことをw
関係ある話じゃんwww >>213
ばかなことはやめて建設的に行こうせ
元の>>211の議論でSEHを持ち出すことで何か有意義な展開が有るのか否か 司会者を無視して議論の方向性を勝手に設定するというのが建設的じゃないんだよ。
CライクなVisual C++でもSEHを使えるよ。
>>213
「MSはSEHをC++で使うことを推奨していない」みたいなクソを「C++と関係ある話」として話したいのか?
意味不明なことを言って無能を晒すなよ。 「「日本政府は関西弁を国語で使うことを推奨していない」みたいな関西弁を「日本語と関係ある話」として話したいのか?
意味不明なことを言って無能を晒すなよ」
関西弁は日本語と関係あります。
関西弁をバリバリ使ってる現場はあります。
C++でもSEHをバリバリ使ってる現場はあります。
それは普通じゃない? 特殊環境を許容しない偏屈な野郎ですか?
議論を避けたいもぐりの詭弁ですね。
例外の有益性云々よりも、会社ではその環境によっては使わないほうが無難
既存のプロジェクトでしか、ソースを触れなくて
hello worldすらかけない奴なんているし
この前もちょっと質問受けたから、サンプルを書いて送ったら、
これどうやってビルドするの?から始まった・・・
そんな奴に例外がどうとか言ってもな〜
>>211
例外の方がコストが高いしハンドリングもしにくいので例外の方が完敗との流れだった
そこへ意味なくSEHを持ってきても議論も結論も何ら変わらないのではないか >>222
main()しかないコードを唐突に持ち出してきて頭大丈夫かね??
コード読めない人? >>219
なら>>214に関連した話をしろよ。
SEHを持ち出すことで、>>211についてどういう有意義な話ができるのか?
SEHについては今までC++と関係の無いクソみたいな話しか繰り返していないだろ。 >>223
貴様にもわかるよう、カンタンな例示をしたまでだ。
反論できなくなると人格攻撃か。業界全部を見てきたように「C++ではSEHは使えない。関係ない」なんて言うなよ。 マイクロソフト公式で使わないことを推奨しているのに
蟻人間とかいう物体はそれを理解できないのかしら
>>226
アホ。それは一般ユーザ向けの話で、OS内部では死ぬほど使われてるぜ。 今回の件でSEHを取り上げることに意味があるのかね?
> 今回の話は>>91から始まる
> 「正常値でない時にvariantやoptionalを返すのと、
> (try/catchの)例外を投げる(throw)のと、
> どちらが好ましいか?」という話 実装の分析を放棄するなら、実測しかないじゃねーか。
>>229
あんさんアホなんやな
何をどうやって実測しまんねん 例外機構はコストかかるしtry catchで扱いにくいから
最近の言語GoやRustなどではtry catchを廃止しちゃったほどだよ
>>231
そんなん当たり前。世界中のパソコンを一箇所集めて、例外を使ってるすべてのコードをGitHubからダウンロードして、全コンパイラで試すと、一般的な答えが出るだろう。
だから具体的な環境と具体的なコードがないと議論自体が無意味だろう。 実測なんかしなくてもtry/catchの準備が入る例外の方が遅いのは分かりきった話
「男は卑怯」とか「血液型A型はまじめ」とか、統計上の母集団も不明なものを一般化して議論するのははっきり言ってめんどい。
一般化バカなんじゃねーの?
もっと具体的なこと。花を買うなどという具体的な処理を考えたら、そのコストの程度もわかるというもの。
>>229
議論の仕方を知らない餓鬼かよ。
SEHを持ち出したのは>>124で、それに対して>>131という反論が来ているんだから、「SEHはC++例外の議論に有意義」と主張するならまず>131に対して反証しろよ。
それを無視して>>229とか>>233みたいな誤魔化しをするやつは、ろくに説明できない無能か相手を騙そうとする詐欺師のどちらかとしか言えんわ。
SEHはNGワード指定したほうが良さそうかね。 C++例外がSEなんちゃらで実装されていたこともあった。概念としてはC++例外とSEなんちゃらは別物だが、実装としては排他的ではない。
>>237
ソースを出せ
そもそもthrowを投げてcatchする仕組みにMicrosoftの独自拡張など不要
他の様々なOSではそんなものがなくても実装されて動いている 例外にオーバーヘッドがあって遅いのはわかってる。アセンブリと実測から明らかだ。
>>228
そのケースは明らかに例外を使わないほうが良い
一般的にも例外は可能な限り使わないこと >>241
SEHで実装されているとは、書いてないじゃん >>242
MSVCは現在のVisual C++のコンパイラと同じだよ。メチャクチャ使われてるよ。 >>246
RaiseException関数はSEH機構の一部だから。 >>241
それ /EHa があるよって話じゃね? >>234
「try/catchの準備が入る」なんて実装はもう廃れて最近のコンパイラには当てはまらないかと。 >>214
おまえさん個人にとって有意義でなくても
C++におけるSEHの話をしている人にとっては有意義なんだよ
だから話すんだよ
自分が入れない話だからって勝手に有意義かどうか決めんな
自分が入れない話だからって勝手に有意義かどうか決めんな
自分が入れない話だからって勝手に有意義かどうか決めんな SEHはマイクロソフトがC言語で例外を扱えるように独自拡張したもの
例外機構のあるC++では当然不要
だからマイクロソフトもC++ではSEHを使わないようにと公式に推奨している
ここC++スレでSEHを持ち出す人はバカ
まだsehの話ししてんかよ
ヤフーニュース見てみろよ、大変なことが起きているのに
おまえら暇だな
>>256
どうせくだらんニュースばかり
毎日細かく追うのは無駄でアホ 日本最大のポータルサイトYahoo! JAPANのトップページのトップニュースがウクライナの前大統領ポロシェンコ氏の単独インタビューというご時世
>>259
不自然な登場の仕方のQZのキターwwww
お前が満足するということはム板にとっては好ましくない事態が起きてるってことだな Baka bakas[300][1000][1000];
とかやるバカがいる会社なんかじゃ、例外云々の議論しても不毛だろ
こんなスレでヤフーニュースw
SEH持ち出すバカと同類やな
>>264
いやSEHはまだプログラムの話の範囲内だけど
ヤフーニュースの話をするのは完全なアホ Win32 C/C++だとSEHじゃないとキャッチできない例外もある。
>>268
そんな欠陥商品の話をされてもねえ
C++の問題ではなく欠陥商品の問題 >>269
ここは匿名掲示板だから許されるけど、実名だったら社会からボコボコにされるよ。気を付けようね。 CIAが最高レベルに指定する「ハッキングマニュアル」にアクセスできる国内外の攻撃者たちが匿名でソーシャルメディアを徘徊し、ターゲットを探している。生き残りたいならターゲットにならないことが肝要だ。
でも最新版ではC++の例外で正規に対応できてるんでしょ
ならば当時はある種の欠陥だったとも言えるのでは
// ヌルポインタ参照。
char *p = NULL;
*p = 0; // ぶっ飛ぶ。
// ゼロ除算。
float a = 1;
a /= 0; // これもWin32だとぶっ飛ぶ。
ゼロ除算はシグナルSIGFPEが発生
signal()でハンドリング関数を指定すれば良い
例外は全く関係ない
Win32では浮動小数ゼロ除算は構造化例外であり、
SetUnhandledExceptionFilterの
EXCEPTION_FLT_DIVIDE_BY_ZERO
でキャッチできる。シグナルはない(Cygwinを除く)。
>>276
そんな気持ち悪い独自仕様にして何を考えてるんだろう
余分に負担のかかるプログラミングを強いられるデメリットしかない >>277
独自仕様なのは別にして、そんなに気持ち悪いかなぁ?
ゼロ除算を起こした処理の周辺で局所的に対処できるのはいいと思うんだが。 お前らいつまで、そんな話ししてんだよ
世の中はさとみのお祝いムードでも盛り上がってんの二
signal と SEH なら SEH の方がマシだな
signal ハンドラーはマルチスレッドで個々のハンドラー持てないし
スレッド毎に設定できないシングルトンなデータといえばカレントディレクトリとか
SEHとかのコスト掛けてするのは本末転倒
ゼロ除算は事前if文0比較でコスト安い
例外の実装として sjlj と SEH とのどちらが優れているか、という話ではなかったのか?
>>284
そんな実装をしている例はない
SEHも誤読でソース無し >>285
C++例外のSEHの実装例はあるよ。
MinGW gcc でもあるし、Visual C++ /SHaでもあるし。 >>286
おまえバカなのか?
それはC++の例外(try throw catch)の実装例ではない >>287
/SHaのtry-catchでSEH機構を使ってるのは事実だし、確かめもしないやつに言われたくない。 それは嘘だな
例えば単純にプログラムの中でthrow投げるとする
当然SEHは使われない
君の単純なthrowの例では
std::terminate()
になるかもしれない。
>>293
バカにしてるのか?
無条件にthrowされていてしかも関数呼び出しすらない
せめて関数の引数値によってthrowされるか否か変わる例にしろよ ・まずtryの中で別の関数を呼び出さないと最もベーシックなパターンにすらなっていない
・呼び出される別の関数の中でも特定条件時のみthrowしないと例外処理の意味を持たない
君の父親は言い負かされようになると「バカにしてるのか」と言う癖があるようだね。愚かな人間ども。
なぜそんなおバカなコード例をわざわざ披露するのか常識を疑う
>>299
>throwで構造化例外を送出できるようになるわけじゃないぞ
そんなこと言ってない。構造化例外機構でthrowすると言ってるんだ。逆だよ。 >>302
君は理解力がないのかね?
それだと君の主張『C++の例外がSEHで実装されている』の例になっていない >>299
>オプションもまともに書けないとかお前さん使ってないだろw
今、メタバースの中から書き込んでいて、ちょっと打ち間違えたんだ。 >>303
SEHを知らん人にいちいち教えるのは授業料がかかるが。 例外機構をsjljで実装するのもsehで実装するのもMinGWにある。君はいつまでも駄々っ子みたいに存在を認めないんだね。
行き詰まった敗者の典型パターン
「授業料払わないやつには教えない」
「教えて欲しかったら金払え」
「業務でもないのに答えられるか」
SEHでC++のtry-catchを実装とか意味不明な主張してるんだな
MinGW-w64 SEH版の例外機構はSEHで実装されている(公開情報)。これを否定から入るなら議論はできない。
>>309
ソース無し
C++の例外機構にSEHは不要 そろそろc++の話ししようぜ
2項演算子.*や->*が返却するオブジェクトの型を取得したい
規格にはapplication演算子が後続する場合のみ認めているが
その際の型をコンパイル時に取得したい
さらにdeclvalに渡したい
なぜa.bとa->bという無駄な2種類を用意したんだろう?
他の言語ではaがポインタでもa.bだよね
型から間違いが起きようがないのだからa->bは不要だと思う
>>313
君は黙ってて、そんな低レベルな話はしていない
.*や->*なんて使ったことないだろ お前ら聞いても無駄だな
例外とSEHの区別が付かないレベルだろうし
decltype(declval<Hoge*>()->*declval<Fuga Hoge::*>)とかすればいいだけじゃないの
というかoperator->*のオーバーロードが絡んでなければ右項のメンバポインタの型から直接取り出せばいいだけじゃないの
何がしたいのか分からない
>>302
だからC++の例外(要はthrow)はSEH使ってないってこと
SEHは0除算とかメモリーアクセス違反を扱うためのものだよ
signal()に比べたらスマートな実装だと思う >>317
ばかじゃねーのこいつ
蟻人間の主張は「C++で例外を実現するのにSEHを使う『事もある』」と言っているんだぞ >>318
だからthrowを実現できてないだろ
理解出来てないのにいちいち絡んでくるなよ >>319
MinGW64のthrowはSEHを使ってるんだが・・・
お前本当に頭大丈夫か? >>320
それ/EHaの話じゃないだろ
話の流れも読めないなら黙っとけ >>322
お前は>>317で「だからC++の例外(要はthrow)はSEH使ってないってこと」と言ってるだろ
それに対する反例を示しただけの話なんだが?
後出しジャンケンはなしだぞ
例えば「>>317は/EHaの話をしてるんだが」とか言うなよ もしかして
「__try/__except/__finallyの例外処理=SEHと思っている人」と
「それを実現するために制定されたABIのことをSEHと呼んでそのABIがC++のtry/catchの実装にも応用されていると主張する人」との間で無限に平行線になってるのか
俺は後者のつもりで聞いていたけど前者と考えると、ISO標準例外を使えなんて話が出てくるのも頷ける
>>323
> 話の流れも読めないなら黙っとけ
> 話の流れも読めないなら黙っとけ
> 話の流れも読めないなら黙っとけ
アンカーも辿れないのかよw >>324
> それを実現するために制定されたABIのことをSEHと呼んで
また新しいこと言い出すアホが現れた! >>326
sjljと引き合いに出してたからそのレイヤーの話をしていることくらい理解してると思い込んでいたわ
すまんな 自分の旗色が悪くなったら「話の流れを読め」とか言っちゃう人ですか?
それ物凄く曖昧な定義だね(・∀・)ニヤニヤ
何とでも言えちゃうじゃない
火病を起こした方が負けだよ
勝ち負けとかどうでもいいよ
俺はこの不毛な論争の背景が理解できたと思うから
>>324の説に反論がなさそうならこれ以上同じ話を延々続けるやつは両者バーカって思いながら眺めとくね >>328
> アンカーも辿れないのかよw
> アンカーも辿れないのかよw
> アンカーも辿れないのかよw >>330
俺も本当は勝ち負けはどうでもいいんだが
こいつあまりにも論理が稚拙過ぎてまともに話も出来ないレベル
ちょっとおちょくってやったらファビョーンw
隣国の情緒だね 自分の旗色が悪くなったら「おちょくってやった」とか言っちゃう人ですか?
それ物凄く曖昧な定義だね(・∀・)ニヤニヤ
何とでも言えちゃうじゃない
火病を起こした方が負けだよ
>>332
オウム返ししか出来ないんだな
もしかして脳みそがすごく小さい人ですか?
いやもしかしなくても脳みそがない人ですね >>313
C から踏襲したのだし、 C でそう決めたときに比較できるような「他の言語」なんて無かった。
当時に知られていた比較的近い構造化された文法を持つ言語というと Pascal くらいか。
演算子を分けない選択肢もあったということは今だからわかることなんだよ。 >>313
確かに
一演算子一義を貫きたくなる理由もわかるけどそっちの方が合理的だよね おいおい罵倒語はよせよ
せっかくの勝利を汚すだけだぜ
>>335
ポインタを使っている箇所をはっきりそうと書くのはCの方針だね
でC++には参照があって、参照からメンバを指定するときはドットなんだから
実質的に313が主張するとおりにもうなってる >>333
そろそろ>>332におちょくられてることに気付こうか
もしかして気づくための脳みそがない人なのかな?w >>338
もう自分が何を書いているのかも分からないレベルで狂ってますね aがポインタアならa[i]は*(a + i)と同じ
b[i][j][k]と書く代わりに *(b + k + _countof(b[0][0]) * j + (_countof(b[0][0]) * _countof(b[0])) * i) と書くことができうる
から[]はポインタアについては無くても良くね
c.dは(&c)->dと同じ
c.d.e.f.g.hと書く代わりは(&(c.d.e.f.g))->hぐらいしか存在しない(d, e, f, g, hは入れ子になった構造体メンバ名
が
c->d->e->f->g->hなら (*((*((*((*((*c).d).e)).f))g)).h と書くことができうる
(d, e, f, g, hは直接的な入れ子ではないが関連を持つ構造体のメンバ名
から->は無くても良くね
以上C/C++における2大無くても良くねなぜ有るんだろう事案
実装が楽だったから
それ以上の理由は考えるだけ無駄だと思うよ
まつが
えますたorz
誤: c->d->e->f->g->hなら (*((*((*((*((*c).d).e)).f))g)).h と書くことができうる
正: c->d->e->f->g->hなら (*((*((*((*((*c).d)).e)).f))g)).h と書くことができうる
また、c.d.e.f.g.hは(後置演算子が優先度が高いことを利用して極力括弧を無くすとして
&(&(&(&(&c->d)->e)->f)->g)->h
になるかも、、、
>>339
自分の旗色が悪くなったら「狂ってますね」とか言っちゃう人ですか?
それ物凄く曖昧な定義だね(・∀・)ニヤニヤ
何とでも言えちゃうじゃない
火病を起こした方が負けだよ おまえらに規格の話しをしたのが間違いだった
いつの間にかポインタの話になってて笑って草生えそう
イカン駄目かorz
&を->より優先解釈させる必要があるからこうなりそう……
(&((&((&((&((&c)->d))->e))->f))->g))->h
やっぱミニマリスズムを貫くとかえって物量が増える感じに
>>340
そうではなく
ptrが構造体へのポインタの時に
(*ptr).nameと書かなくとも
ptr.nameと書くことにしても型から判断判別可能だから
ptr->nameという記法を用意する必要なかった
って話でしょう
そして短く書けてわかりやすくてオペレータを増やす必要ないメリット c.d.e.f.g.h
が旧来のC++で言うところの
c.d.e.f.g.h
c.d.e.f.g->h
c.d.e.f->g.h
c.d.e.f->g->h
c.d.e->f.g.h
...
c->d->e->f->g->h
(計2^5通り)のどれな意味のかが暗黙になって機械任せになってしまったら
コードを書く方も読む方も疲弊して転職しちゃいそう……
>>347
C/C++以外のどの言語においても
c.dの記法しかないが困っていない
プログラミングする上で区別する必要がない まあPerlだと確かに$a->[$i]は${$a}[$i]と全く同じ意味なので$記法だけで困らないが
C/C++だと違うやんけ「.」と「->」に言語の存在意義レベルで重要な違いが生じているやんけ、
perlに限らずほぼ全てのプログラミング言語でxがポインタの時もx.yと記述
ポインタか否かは自明なのだからx->y記述は不要
>>353
どうでもいい話だから流しておけばいいんだよ。 >>349
型推論とか導入したくなったときにこまりそう まとめ
・SEHはMicrosoftによるC言語に対する拡張機能で例外を扱えるようにする
・C++には例外機構があるためSEHを使う必要はなくMicrosoftもそう推奨
・当然ほぼ同じ仕組みなので両方サポートするコンパイラは一部を共有しうる
結論
「C++例外とSEHは同じレベルで異なるものであるため、片方を使って別の片方を実装することは有り得ない」
SEHはアセンブリ・機械語レベルでも定義されている。
C++コンパイラ側でSEHのアセンブリを埋め込むことも可能。
それは違うな
まずC++の例外のセマンティクスは定まっており実装はそれを厳守せねばならない
次にSEHのセマンティクスはC++の例外とは微妙に異なる
したがってC++の例外をSEHで実装するのは不可能
ただし実装コードの一部共有は可能
その一部共有コードの出自がSEHであればsehと名の付くものが存在しても構わない
しかしそれを持ってC++の例外がSEHで実装されているとは言わない
この点を明確に区別できない人はヤバい
>>362
アセンブリレベルでセマンティクスもないだろ。 >>363
アセンブリレベルでセマンティクスもないは草
異なる言語にセマンティクスを保持したまま変換していくコンパイラとかの意義を否定してるやん レイヤーが明白に異なるね
SEHでC++の例外を実装したとは言わない
C++の例外にも適用できるように拡張したアセンブリコードを共有しただけだね
これは逆の視点でも捉えることができて元々C++例外のみ対応をSEHの例外にも適用できるように拡張したアセンブリコードを共有しても同じこと
>>362
>次にSEHのセマンティクスはC++の例外とは微妙に異なる
具体的にコードで示してください アセンブリレベルでC++のセマンティクスを維持しているとは考えにくい。
例え違うとしてもその違う部分をカバーするコードを追加すれば実装できる。
>>362
> 次にSEHのセマンティクスはC++の例外とは微妙に異なる
どこがどう違うのかを書けない時点でクズレスでしかない >>366
SEHは整数値のみ対応という点からして異なる
だからSEHそのものではC++例外を実装できない >>370
違うよ。SEHの構造化例外はデータを渡すことができる。
EXCEPTION_RECORD構造体のExceptionInformationメンバーで渡せる。 >>371
そして、データはGetExceptionInformation()関数で受け取れるよ。 足し算と掛け算のセマンティクスが違うとしても、足し算の繰り返しで掛け算を実装できるぜ。アホか。
>>373
コードで示せ、馬鹿
>>371-372
>EXCEPTION_RECORD構造体のExceptionInformationメンバーで渡せる。
>データはGetExceptionInformation()関数で受け取れる
ご教示ありがとうございます >>373
Microsoft公式がその見解なら決着ついたな
蟻人間が完敗 やーい、蟻野郎。論破されてやんの。
ちっちゃいアリは踏み潰してやんぞ。こら。
>>378
彼/彼女は証拠を見ようともせず、論理的になにか勘違いしている。論破する方が彼のためと思ったが、矯正不能なほど相当ひねくれているようだ。 アリ氏ねアリ氏ねアリ氏ねアリ氏ねアリ氏ね
アリ氏ねアリ氏ねアリ氏ねアリ氏ねアリ氏ね
ここまでオレの自演。みんなに例外処理の実装について、もっと知ってもらいたかったんだ。
参加してくれた人にありがとう。
>>373
Microsoftさんありがとう!
蟻人間を見事に論破してくださいました 米国マイクロソフト社員≫≫≫日本マイクロソフト社員≫≫(越えられない壁)≫≫蟻人間
>>385
私はあなたの味方ですよ、がんばってください! マイクロソフトの説明なんてあてにならないよね…
コードで示してほしい
アインシュタインによると1+1==3だから間違い。
レイヤーが違う話で平行線になってるよって言えば流石に理解できると思っていたが
思い違いだったようだ
ばーかばーか
オレは蟻人間をからかって遊んで楽しんでるだけだよ。悪気はない。
>>396
からかうことは悪意そのものだろ。そんな邪な性格だと社会に出たときに問題になりえる。今すぐ態度を改めなさい。 >>397
説教してんじゃねーよ。俺様、暴走半島を房総している12歳の会社員だぞ。なめてんじゃねーよ。 onion3://shocker-shimbun.org/social-hacking-manual-2011-06-02.pdf
VC++ コンパイラは C++ 例外を SEH を用いて実装しているよ。
throw 1; のコードは 最終的には SEH の RaiseException API を呼び出している。
デバッガの逆アセンブラで処理を追ってみると分かる。
VS2022 だと例外投げるコードがここにある。
C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.31.31103\crt\src\vcruntime\throw.cpp
ワレワレハ ニホンジンドモ ノ セイサンセイ ヲ サゲル タメニ ミライカラ オクラレタ ジンコウ チノウ ダ。
マイクロソフト ヲ アガメヨ。 アーミン。
マイクロソフト ガ コタエ ダ。
マイクロソフト ノ シリョウ ガ スベテ ダ。
テイコウ ハ ムイミ ダ。 ジンルイ ハ コウフク セヨ。
それで結局C++例外のハンドラはどう実装されているんですか?
>>407
コンパイラによって違うし、コンパイラオプションによっても変わってくる。SEH実装の存在を否定したい原理主義者がここに居るから、もっと治安の高いところで訊くといい。 重要なことは2つ
実装と関係なくC++例外のセマンティクスは同じ
例外のどの実装も何らかのコスト増を招くので自分でthrowせずエラー値を返した方がよい
最適化されたら例外処理そのものがなくなるかもしれないのに、セマンティクスが同じとは言えないだろう。
>>411
セマンティクは各言語で規定される
それを完全に満たす(最適化されていない)コードを吐く
最適化のレイヤではそのコードと同等の結果となるようコードを変え得る
最適化の結果として例えばコードが消えることも有り得る
これは上位レイヤでのセマンティクとは無関係 掲示板見たら環境依存C++スレッドが落ちてる。。。C++も人気が下がったのカナ?
というわけで、古参の方々もこのスレッドで、環境依存の話題も受け入れ魔性。
そう、セマンティクスを比べるレイヤーが違う。確かにC++例外の構文とSEHの構文は文法やセマンティクスが違う。
しかしそれを乗り越えるのはアセンブリなどの低レベルの技術だ。RaiseExceptionなどの関数もSEH機構の一部であることを認めなければならない。
プログラミングに関する高度な高等教育を受けたのはわかるけど、証拠に対する謙虚さの欠如は非難に値する。
>>414
それはC++例外に対応するために拡張
拡張前の元々のSEHの仕様>>373ではC++例外を実装することが不可能 >>415
拡張後のSEHの話?
いつの話をしている? 時代遅れ野郎か。 今、Windowsと言ったらWindows 3.1の話じゃないんだな。32ビット以上のWindowsなんだよ。
SEH2はSEHではない、なんて今どき流行らないんだよ。
仮に拡張前のSEHをSEH1と書き、拡張後のSEHをSEH2と書くなら、SEH1ではC++例外は実装できない、と君は言いたいんだろう。
それなら話は通じる。
SEH1の話はもはや検索しても出てこない。SEH2で上書き保存されている。
人類のソフト技術は衰退しました。
C++の例外を実装できるようにSEHを拡張した
だからSEHでC++の例外を実装している、は間違い
順序が逆
SEH2でC++例外を実現できたんだろう。同じことだ。
>>420
従来SEHとSEH2の違いに関する資料を用意できるか? ソース希望。 >>373で「SEHを拡張しない限りC++例外ハンドラの実装にはできないはず」だったのが
いつの間にか「拡張がされた」という話に飛んでいる気がするんですが
具体的にどのバージョンのVC++でどう拡張されたか裏を取ったうえで話してますか? SEHはStructured Exception Handlingの略なんだから、構造化例外を扱うものなら何でもSEHなんだよ。__try/__except/__finallyだけじゃないよ。
また、MSはSEH用の関数をいくつか提供している。これらを呼び出して使うのもSEHの一種と言える。
>>373のMicrosoft公式の記載から
「SEHとC++例外は仕様が異なる」
「そのためSEHでC++例外の実装は不可能」
とわかる
次に>>361の蟻人間の実験により
「その環境でのC++例外はSEHと共通コードで実装されている」
「つまりC++例外に対応されている」
とわかる
これら以上のことでも以下のことでもない
どちらがとちらを実装したという話ではない お前らどうせメソッド全部noexcept付けてんだろ
仕様が違うから実装できない、は典型的な論理的飛躍ですなあ。SEHは__try/__except/__finally構文だけじゃないし、
C/C++に限った話でもない。SEHは機械語やアセンブリレベルでも定義されている。
君の考える偏狭なSEHとは異なるようだ。困ったねえ。
マイクロソフトが公式ページ>>373でSEHの仕様はC++例外と異なると明言してるから勝負あり やせ細ったモデルに脂肪を付ければ太ったモデルになるだろ。これはやせ細ったモデルで作ったと言えないのか?
SEHモデルのことか。納得した。ハンドリングじゃなくてハンドリングモデルのことか。
君の言いたいことはわかった。講和に応じよう。
蟻人間が論破されたと聞いたので記念パピコ
つかSEHの例外が生じたときのアンワインドって誰
がどうやってい
るの?
つか
https://docs.microsoft.com/ja-jp/cpp/cpp/structured-exception-handling-c-cpp?view=msvc-170
に
>/EHsc てこのコードをコンパイルしても、ローカルテストコントロールマクロが定義されていない場合、
>CPPEX デストラクターは実行され TestClass ません。 出力は次のようになります。
という大変かりやすい解説がある希ガス
printf("Triggering SEH exception\r\n");
volatile int *pInt = 0x00000000;
*pInt = 20;
というコードでも構造化例外は発生するが
(1) C++コンパイラがいちいちこんな場合にまでアンワインドコードを用意するのかどうかはビミョー(実際↑の例ではデストラが呼ばれない
(2) (1)はやったらできないことは無いかもしれないが、何の例外オブジェクトを飛ばすのが妥当かという問題ががが……
※ 個人の感想です 特にデストラの中で構造化例外を発生させたらC++との相いれ無さが出てくるんジャネーノ
知らんけど
gccのバンドルで選べる例外機構にSEHがあるが、これはMSの言うSEHモデルではなくSEHを一部利用した例外処理の実装であると。
だからMicrosoftもC++ではSEHを使わずにC++の例外を使えと言っている
以後、日本語でSEHというときはSEHモデルを意味するものとする。[13:07]
実装について話すのは不純とかいうなら黙っとればいいのに
技術板で勝利宣言て虚しくないのかね
技術的に論を闘わせることで理解を深めたり情報を得ることにこそ価値があるのに
そこがわかっておらずか忘れてか逃げてか知らんが志の低さに呆れるの通り越しちまう
もっとみっともないのは自演バレすることだと思うけどw
>>443
そういうやつはほとんどtwitterとかqiitaとか、最近はzennとかに行っちまったんだろうな 何を今更
5ch/2chが建設的な議論の場だったことなんて一度もない
>>446
それはお前がそう言う議論に加われなかっただけだろw >>445
ワイは併用しておるやで。
興味ないときは読み飛ばすけど。 >>432
OSとコンパイラの共同作業。これはC++例外も同じ。
x64ビルドの場合はセキュリティ向上のためにも、EXE/DLLファイルの
全てのcatch/finally処理コードのアドレス、アンワインド情報を
.pdata セクションに列挙しておく構造になっている。 ID:gt27lZWI
この蟻人間の一連のキチガイムーブを見たら議論以前の問題だと思うんだけど
勝敗はともかく蟻人間は具体的なコードやキーワードを沢山出して
衆目が独自に再検証できるようにしている
技術的な議論の基本は蟻人間のほうができている
Microsoft公式>>373が全てでしょ
・SEHとC++例外は仕様が異なる
・つまりSEHでC++例外の実装は不可能
・そこでC++例外対応した下位コードを用いてSEHとC++例外の両方を実装 ・CとC++は仕様が異なる
・つまりCでC++の実装は不可能
cfrontやMIWA C++は不可能を可能にしてたね
>>455
頭悪いな
それはコンパイラ(トランスパイラ)だぞ
トランスパイラでは上位機能のものを下位機能のもので実現しうる >>455
CFront は C コンパイラをコードジェネレータとして使う仕組みでしかなくて、
原則として C++ と C の文法的類似性をあてにしてない。
(実装上のトリックとして多少利用することはあったかも?) >>454
> ・SEHとC++例外は仕様が異なる
> ・つまりSEHでC++例外の実装は不可能
> ・そこでC++例外対応した下位コードを用いてSEHとC++例外の両方を実装
1点目と2点目との間の論理的な繋がりが不明なうえ、2点目と3点目は文字通りに読むと矛盾している。
こういうところがたぶん>453の言う「議論の基本」なんだと思う。 スルーされてててやや悲しス(´・ω・`)
C++の例外とSEHモデルの例外はセマンティクスが違うという指摘は当たってるんじゃないの
C++の例外はthrowで投げられるが
SEHモデルの例外はヌルポとかアクセスバイオレーションが起きた個所からどこからともなく投げてこられる
その結果C++コンパイラがアンワインドコードを適切に用意できるとはかぎらなくて、
SEHモデルの例外を生じた当の関数の自動オブジェクトはデストラクタが呼ばれるとは限らない
この解決はやや厄介だとおも
つか関数の中でヌルポが起きる箇所、起き得ない個所を任意の関数について証明付きで特定できる機械が有ったら停止性問題が解けてしまうま……
try 句以降 new したものを記憶して (明示的に delete したものは忘れて)
catch 句 で 記憶したものをdeleteしていく?
new/delete のオーバーヘッドが増える感じなのかな
結局『SEHそのままではC++例外を実装できない』から
C++例外対応するために色々と大変な状況になっているのか
そりゃSEHはC++用に作られてるわけじゃないしそのままとか何を言ってるんだよw
C++の例外をSEHで実装するのは当然不可能
C++の例外だけの独自の処理を追加し
C++の例外とは仕様が異なる部分も対応し
C++の例外のために書かれたコードがC++の例外を実装している
SEHの件もそうだが
Windows特有の話をC++の話だと思いこんでいるダメな人たちが一部いるよな
C++のfopenをCreateFileで実装するのは当然不可能
C++のfopenだけの独自の処理を追加し
C++のfopenとは仕様が異なる部分も対応し
C++のfopenのために書かれたコードがC++のfopenを実装している
>>475
std::cout << "bakadesuka" << std::endl;
は環境によらず、標準出力に出力されますよ >>478
お前ら、まじでみなまで言わないとわからないんだな
皮肉が分からないのか >>481
パソコン買い換えたばかりで、キーボードを打ち間違えるんだけど、「わざとです」ってことにしとくわ。 まじでバカばっか
皮肉でたとえ話してんのに、額面どおりうけるやつ。。。
お前らと仕事だったら大変だな
一から十まで説明しなきゃいけなそうw
C++の規格書にデバッガという単語は出てきますか?
ID:2YgT13Zl「皮肉で例え話してるのに...」
大多数「(どこが皮肉なんだろう...)」
*(int*)0xffff0030 = 0x05; は環境に依存するが
C++標準の機能のみを使っていて独自拡張ではない
void our_customers_function();
our_customers_function();
これもそうだ
非標準の話をするなという原理主義者は
こういうのは受け入れるということか?
そろそろC++標準化委員会2ちゃんねる支部作ろうぜ
>>493
いや、エピステーメー役でお願いします。 江添はもう C++ にはやる気なくしてるっぽいぞ。
江副さんは今は何に興味あるのかしら
なんでc++やる気なくなったんだろ(´・ω・`)
>>497
今は C++ 関連ではない仕事をやっているので C++ に対して時間が取れないということと、
C++20 に追加された一部の機能 (ロケールまわり?) に懐疑的だということは江添のブログに数年前に書かれている。
彼は C++ の規格については強い関心を持っていたし解説・教育にも熱心だったが、
プログラミング自体はそんなに意欲的な感じではないんだよな。
好きにやれるポジションを失ったことでやる気をなくしたんだろう。
細かい心情の機微はわからんけどな。 てっきり素行不良が祟ってパブリックな場で出禁食らったのかと
( ^ω^)もうC++の規格に熱心な人はいないんですかお?
C++とは仕事の付き合いなので
それ以上に彼のことを知ろうとは思いません
江添なんて仕様把握だけで俺すげーしたかっただけの奴だからな。
それすら満足にできなくなっていじけてるんだろ。
プログラムの書き方的なところへの興味はどうなんじゃろうね
江添が仕事で実務的なプログラムを C++ で書いたことがあるのかはようわからんが、
少なくとも外部に発表したのは文章ばかりで、完成したアプリケーションを発表したことはほとんどない。
俺が知っているのは彼がドワンゴに入るよりもずっと前に Windows 用ソフト (というかとあるソフトのアドオン) を
公開したのを見たのが最初で最後だ。
仕様ばかりに詳しくても何の役にも立たない
大抵の仕事は言語の細かな仕様まで知らなくてもC++98程度の知識でおおむねこなせるし
程度問題だわな。
俺も今の C++ は C++11 が最低ライン (もちろん可能ならもっと新しい版) だと考えている。
あまり古すぎるのはかえって学ぶのに資料が見つけにくくなっている場合もある。
C++11に詳しそうだから教えて
あるテンプレート関数に渡される関数ポインタ、メンバ関数ポインタ、ファンクタ、ラムダの
戻り値の型を取得する方法を教えて
template<class R,class E,class...A> R f(E&& e,A... a)
{
using TypeOfCallableExec=/*ここ*/;
//...
}
>>509
C++17より前ならstd::result_of
C++17以降ならstd::invoke_result
return e(a...); とするつもりならRは不要。
返り値型はdecltype(auto)、
TypeOfCallableExec=decltype(e(a...));か、
TypeOfCallableExec=typename std::result_of<F(A...)>::type;
とでもしておけばいい あいかわらず、いい加減な回答だなw
それでやってみろよwwww
構造体中の配列の特定の要素に対するメンバポインタって何で使えないの?
struct STRUCT {
int array[4];
};
int STRUCT::*pt = &STRUCT::array[2];
こんな事をやりたい
offsetofを使えって?
質問ですが
他から渡されてきたstd::cout(ていうかstd::ostream)について
std::cout << std::left; (またはstd::right)
std::cout << std::setfill('_')
の状態が現在どうーなっているか知る方法って何かあるんでしたっけ
あと、ストリームに対して(独自のstd::left/std::right、std::setfill()を設定を含む)
独自フォーマットで出力した後ストリームの状態を元に戻す方法って何かあるんでしたっけ
std::ostringstream os; としてosに対してで独自フォーマットで出力して
std::cout << os.str();
ぐらい?
しかしこれにしてもstd::cout << setw(10000) << std::left << std::setfill('0');
とかされていたら左詰め/右詰め/パディングが独自フォーマットとして制御し切れていない気が……
つか実はostreamは使い終わったら、独自に使った書式指定について
cout << resetiosflags(...);
でリセットするのが作法?
>>518
>left/right は os.flags() の戻り値を std::ios_base::{left, right} でマスクして確認
なるほど……
>書式設定全体の保存・復元は一時的な ostream を作って copyfmt でやるのがいいらしいよ
なるほど……
書式設定を記憶するだけのためにstd::iosオブジェクトを作るのかmjk、、、 https://ideone.com/JPtQV9
VCでは通らないが、GCCでは通るコード。正しデバッグ中・・・。
ブロックソート書いたんですよ、ブロックソート。
安定ソート書けないから横着してアルゴリズムヘッダーのヤツ使ったんですよ。
落ちるんですよ。
誰かたすけて! おまえらさぁ
openAPIがロハなのになんでいつまでもVCなんか使ってるのさ?
>>520
31行目で A = B = DD; しないで return してしまってるけどいいの? あるプロセスで、変数の型とアドレスはわかってるものとして、
それをc++のプログラムから書き換えるにはどうすればいいんですかね?
調べても情報があまり出てこなくて...
>>525
アドレス分かってるんならそこにアクセスすれば
でもC++からはわかるわけねえわ こんなんでいいんじゃね
mytype* p = reinterprit_cast<mytype*>(0xaabbccdd);
*p = 1000
他のプロセスからってことじゃないの
WindowsならReadProcessMemory/WriteProcessMemory
アドレスがわかってると言いながら実は空間が違うとか。
すみません、説明不足でした。
自分がやりたいのは、あるプロセスの変数をc++で作った別のプログラムから書き換えることです。
a.exeが持つ変数をb.exeから書き換える、みたいなことです。
リバースエンジニアリングでしょ
環境依存だしここで有益な答えが返ってくるとは思えない
スタック変数やヒープ変数を実行前に書き換えるのは不可能
皆さんありがとうございます。
>>528さんのものが使えるかもしれないので、一回調べながら触ってみます。 >>534
プロセスって言ってんだから実行中の話だろうjk >>521
oneapi でなく openapi というのがあるの? readprocessmemory, writeprocessmomoryの詳しい使い方が載ってるサイトってありますかね...
>>513
マジか
結局キャストだな
中途半端で使えない機能なんか付けんなよ srd::vectorも最初は誰がこんなクソコンテナ使うんだよっ
て言われてて皆好き勝手に独自のコンテナ実装してたらしいなw
>>539
まあ結構ニッチだと言うのとリンク先にも書いてある通り
struct STRUCT {
int* array;
};
int STRUCT::*pt = &STRUCT::array[2];
ってやられたら違うコードにしないといけないから面倒なんだろうね >>542
その例を上げるのはメンバポインタがわかってない人と思う その例は構造体の中のintを指してないから
出来ないのは当たり前
>>521
oneapi最適化性能ショボくね?
Ryzenだからかもしれんがgfortranと速度同じくらいでビビったわ。 struct STRUCT
{
int array[2];
};
arrayはSTRUCT直属のメンバだからメンバポインタで指せるが
array[1]はあくまでarrayの要素であってSTRUCT直属のメンバではないので
これを指すようなメンバポインタは存在しない
classのメンバ関数型が存在しない理由って何?
classのメンバ関数へのポインタのことではないよ
関数型も関数への参照も関数へポインタも認めてるのになぜメンバ関数は存在しないんだ
できない話をいつまでもしてるのは脳に何か障害でもあるのか?
理由を問うているんだけ、理解できないのか
脳に何か障害でもあるのか?
void func(void (CLASS::*pm)(), CLASS& ref)
{
*pm; //Error. メンバ関数ポインタには逆参照演算子が存在しない
(ref.*pm)(); //pmを実体化するには.*か->*しかない
}
メンバ関数型というのがもし存在するなら*pmのはずだが現実にはできない
出来るできないを聞いているわけじゃない・・・
日本語理解できますか?
単純な逆参照*pmができるメンバ関数型はすべからくクロージャなるべし?
class Foo a; // std::string Foo::someMemberFunc(int a, int b, double c)を持つ
class Bar b; // std::string Bar::anotherMemberFunc(int a, int b, double c)を持つ
auto someMemberFunc = [=, &a](int a, int b, double c) -> std::string { return a.someMemberFunc(a, b, c); };
auto anotherMemberFunc = [=, &b](int a, int b, double c) -> std::string { return b.anotherMemnberFunc(a, b, c); };
std::function<std::string(int, int, double>* pm;
pm = &someMemberFunc;
std::cout << (*pm)(1, 2, 3.4); // a.someMemberFunc()が呼ばれる
pm = &anotherMemberFunc;
std::cout << (*pm)(5, 6, 7.8); // b.anotherMemberFunc()が呼ばれる
std::function<std::string(int, int, double)> fn = *pm; // b.anotherMemberFunc()が呼ばれるためのクロージャにデリファレンスされる
>>553
自分が欲しい機能は全て揃ってないとおかしいとかガイジすぎだろw あれが「揃ってないとおかしい」と読める読解力の方に問題がありそうだが
理由「仕様です」ということも理解できないの?
まじで脳障害を疑った方がいいぞw
>>549
適切な規格化(めんどくさい)や新たな実装(めんどくさい)が必要なわりに見合う有用性が無いと考えられているからでしょう。 >>553
いいだろう
では、仮にあったとしてどんな使い方を考えているんだ?
decltype(CLASS::func) mirror;
CLASS obj;
obj.mirror(); //これでobj.func();になればいいのか? operator ?: がない理由も
仮にあったとして以下略への答えがないからだね
>>547
違う話を出してきて出来ないと主張されても
>>548
メンバポインタの実体はただのアドレスのオフセットなんだから出来て良い
実際offsetofは出来る
結局制約が多過ぎてoffsetofとキャストを使うことになるなら
非常に中途半端な拡張と言わざるをえない >>565
メンバでないものをメンバポインタの範囲で扱うことは出来るけど「やるべきでない」からやってないって話だろ。
まあそれを言ったら C++ には奇妙なものはいっぱいあるから今更ではあるけどさ。
それに offsetof は offsetof で色々と制約があるからなぁ。
特にスタンダードレイアウトである必要がある (そうでないときは未定義) というのがなかなか厳しい。
可能な場合には型システムの枠組み内で扱いたい。 >>565
仕様として出来ないことと実現不可能なことの区別もつかないのかよw >>566
配列の要素はメンバ
ではないと
まあそんな言葉の定義はどうでもいいとして
なぜやるべきでないと思う?
出来たら何がまずい?
何が不都合?
誰もこの点にふれてない
ただ単に仕様と言われても
その仕様が糞と思うだけ >>568
よくわからんが、こう言いたいの?
struct STRUCT
{
int array[2];
};
int STRUCT::*pm;
pm = &STRUCT::array[0];
pm = &STRUCT::array[1];
STRUCT obj;
(obj.*pm) = 1; //obj.array[1] = 1; こうなるべき >>568
は?
> どうでもいいとして
> 誰もこの点にふれてない
触れたことを勝手に無かったことにしてるのはお前じゃん。
あほか。 >>568
どうでもよくないぞ
オブジェクトが何に属するのかは
OOPの根幹に係わる重要なことだ >>570
配列の要素がメンバでないことは、現状のメンバ変数へのポインタが配列要素に適用できない理由を示すものと思いますが、
メンバ変数へのポインタを配列要素に適用可能にするという拡張の話について「やるべきでない」という理由にはならないかと。 >>572
そいういう拡張はあり得ると思う。
私の感覚では (メンバ内の) 配列の要素を許すのだともはやメンバポインタではない何かだろうという意識で書いてた。
つまり、メンバポインタとしてやるべきではないということと、
メンバポインタを拡張して出来上がる何者かで出来るようにするというのは両立するってことね。 なんとなくわかったけど、
c において配列を指す変数がポインタと同一視されるんだから、cを踏襲するc++でも配列を指す変数がポインタ扱いになるのはおかしなことじゃない。そうすると配列の要素はポインタの先になるので、配列を指すメンバー変数の要素もポインタの先になってメンバーじゃなくなりますな。
というか、こんなくだらないことでゴチャゴチャやってたの?
>>574
文章ミスしたわ。
どちらにしてもややこしいけど。
誤:配列を指すメンバー変数の要素も
正:配列を指すメンバー変数の配列の要素も >>570
構造体の中の配列の各要素は当然構造体の一部
つまりメンバ
というのが私の認識だが
その結果はどうでも良い
ここを議論しても意味がない
単なる言葉の定義の話だから
そうじゃなくて
技術的な話をしたいわけで
以下なら&S::a1と出来る
これで実質&S::a[1]になる
struct S {
...
union {
int a[3];
struct {
int a0;
int a1;
int a2;
};
};
};
こんな事をやらないと出来ないのはなぜか? >>576
これは抽象の問題だから言葉の定義こそが本題だよ。 >>578
>576は抽象の問題は話していないので、そういうことにはならないかと。
言葉の定義が重要というならまず「メンバポインタ」などという未定義の用語を使うべきではないでしょうし。
なお>574の「配列を指す変数がポインタと同一視される」といった不正確な理解も、
厳密な定義を語るにあたっては前提が不適切と思います。
>576 などでは現行の pointer to data member を拡張した "pointer to subobject" とでも言うようなものの
可能性が探られているものと理解しています。
現状でそういった機能が無い理由は >561 になると思ってますが。 配列にも入れ子の構造体にも使えない
offsetofの劣化コピーじゃ
何のためにわざわざ仕様追加したんだかわからんねえ
>>581
追加された理由は offsetof に伴う危険なキャスト無しで同等の機能を提供したかったからでしょうね。
そもそもCでさえ offsetof を使ったメンバアクセスはすべて規格上は未定義動作の範疇のままであり、
未定義動作を認めないとする観点で言えば pointer to data member は純粋な拡張として有用です。
現行コンパイラ実装での挙動まで含めて考えれば、挙げられているとおり offsetof の適用可能範囲のほうが
ずっと広いんですけども。 ninja使わないで普通にmakeするとものすごく遅いな。
ninjaって凄く速かったんだな。
純粋な疑問なんだけどメンバ変数である配列の要素のポインタを変数として扱えて何が嬉しいの?
使い方が思い浮かばない…
そもそもメンバを指すポインタだってそんなに使うもんじゃないしな。
std::is_class の実装に使えるんじゃねーのという文脈で登場する程度。
ていうか>>512の例ができない理由の説明は>>548で良くね↑
>>542のコードを借りるが
struct STRUCT {
int* array;
};
int STRUCT::*pt = &STRUCT::array[2];
という最後の行は
>c において配列を指す変数がポインタと同一視されるんだから(>>574)
に依存した便法が混じっているから話がおかしくなるので便法抜きで厳密に書いたら
int (STRUCT::*pt)[] = &STRUCT::array;
であって配列内のオフセットがメンバポインタで表せる余地が無いことは確定的に明らか 構造体STRUCTのメンバを指すメンバポインタというものが
構造体STRUCTの直接の配下のメンバ以外まで指せる仕様にしたら
構造体STRUCTの中に構造体SSTTRRUUCCTTが存在する入れ子のケースにおいて
構造体STRUCTのメンバポインタでなんでSTRUCT::SSTTRRUUCCTTのメンバを指せないんじゃヴォケ、
おなじSTRUCTのメンバやろうが、
みたいなお馬鹿疑問を抱くアフォが出てくるに違いないのと同じ
ついでに漏れもお馬鹿質問したいのですが
ファイルスコープの関数をextern "C"する正しいやり方教えてクレメンスorz
目的はatexit()への登録で、登録する関数自体は公開したっくないケース
// (1)
extern "C" void foo(void) { ... } // NG: ファイルスコープにならない
// (2)
extern "C" void foo(void);
static void foo(void) { .. } // NG(?): コンパイラに怒られそう
// (3)
namespace {
extern "C" void foo(void) { ... } // NG(?): コンパイラに怒られそう 怒られないとしたら漏れの知っている無名名前空間の実装と違う
}
// (4)
extern "C" {
static void foo(void) { ... } // NG(?): コンパイラに怒られそう
}
やっぱ拡張子を ".c" にしてstatic void foo(void) { ... }するしかなさげ?
> ファイルスコープの関数をextern "C"する
一行で矛盾しているが
atexitが求めているのは関数ポインタだけなのでextern "C" はそもそも必要ない
extern "C" は関数の内部名をC言語形式(func()→_func)で扱うか、
C++形式で扱うか(func()→_Z3funcv、引数の型によって名前が変わる)だけの違い
namespaceとの相互作用は知らん
9.11 Linkage Specification
2 Two function types with different language linkages are distinct types even if they are otherwise identical.
>>597
計算できるというのを、どんな手段を使ってでもそれを
例えばメモリ上に何らかの表現として出力する、という意味にするのであれば、余裕で可能かと? >>599
10進にして全桁表示可能だろうかと思って
10進での答えが知りたいわけだ。 >>600
可能だと思うよ
自分は詳しくないけどそういう大きい桁に関するライブラリの書き込みをここでよく見るので でもその前にどのくらいのメモリが必要そうかの見積もりはざっくりやったほうが良さそうね
ざっくり2GBなのか
なんか現実的ではない気がしてきた
少なくとも家庭用のPCなんかでは無理そうかも
>>603
ありがとう。
まだ時間がかかりそうだな。
ちなみに128倍精度浮動小数点数の最大値の計算の途中で出てくる計算。 128倍精度ってなんですか(・∀・)?
倍精度で表せる最大値((2^(1023+1)) - epsilon)の2^128倍は
(2^(130944+1)) - epsilon
であって
2^17179869183
よりカナーリ小さげ
ゴメス落ち着いて考えたら倍精度で表せる最大値は
((2^(1023+1)) - epsilon*(2^1023) = (2^(1023+1)) - (2^970)
で、その128倍の精度だとしたら
((2^(130944+1)) - (128倍精度のepsilon)*2^130944) = ((2^(130944+1)) - (2^122771)
ここで
128倍精度のepsilon = 2^(-8173)
と仮定ェ、
(∵全体が倍精度の128倍=1024 byte = 8192 bitで指数部が8 bit増加で19 bit、符号ビット1 bit
やったら仮数部は8192-19-1 = 8172 bitで、最上位の1を省略する
ケチ表現なので実質2^(-8173)が仮数部で表せる最小値すわなち128倍精度のepsilon
倍精度浮動小数点数が64ビット浮動小数点数なので、
128倍精度浮動小数点数は4096ビット浮動小数点数。
IEEE754-2008の推奨による仕様での最大値の計算をしていたんです。
ちなみに128倍精度の最大値は
(2^((2^(35-1))-1))*(2-(2^-4060))
で計算可能かと。
倍精度浮動小数点数の場合。
>(2^((2^(11-1))-1))*(2-(2^-52))
=
+ 1797 69313
48623 15708 14527 42373 17043 56798 07056 75258 44996 59891
74768 03157 26078 00285 38760 58955 86327 66878 17154 04589
53514 38246 42343 21326 88946 41827 68467 54670 35375 16986
04991 05765 51282 07624 54900 90389 32894 40758 68508 45513
39423 04583 23690 32229 48165 80855 93321 23348 27479 78262
04144 72316 87381 77180 91929 98812 50404 02618 41248 58368.
309桁の値。
となるので、計算式は合っているはずだが根拠を失念してしまったw
ネットのどこかに書いてあったはず。その式を使っただけ。
128倍精度の場合、35が指数部(符号含む)で4060が仮数部(符号含まない)
>>597
2GiBのメモリをゼロクリアしてからMSBを1にするだけ
簡単すぎて話にもならん 10進数でデータが欲しいって書いてあるのが見えないかw
C++でやることにこだわりないならPythonが手っ取り早いぞ
あれのintはデフォルトで多倍長だから
>>> f=open(r"C:\pow2.txt", "w")
>>> print(2**17179869183, file=f)
10進数でデータの意味が分からんが一桁づつ印字すれば良いだけだろ
http://codepad.org/ でも print(2**171798) までやね
print(2**1717986) だと time out
print(2**171798691) だと MemoryError 下記は一部ですので不完全です、型をソートしています。
index_sequenceで展開が面倒なんですよね、何かうまい方法ありませんか
template
<
template<typename> class Orderable,
typename ListT
>
class SortTypes;
template
<
template<typename> class Orderable,
template<typename...> class List,
typename... Ts
>
class SortTypes<Orderable,List<Ts...>>
{
template<typename SeqT> struct Impl;
template<std::size_t... Is>
struct Impl<std::index_sequence<Is...>>
{
static constexpr std::array<std::size_t,sizeof...(Ts)> indexes =
[]{
using Ord = std::common_type_t<decltype(Orderable<Ts>::value)...>;
struct Pair {Ord;std::size_t ndx;};
Pair arr[] = {{Orderable<Ts>::value,Is}...};
insert_sort(arr,0,sizeof...(Ts),[](auto x,auto y){
return x.ord < y.ord;
});
return std::array<std::size_t,sizeof...(Ts)>{ arr[Is].ndx...};
}();
using type = List<std::tuple_element<indexes[Is],TypelList<Ts...>>...>;
};
};
フリーランスに立ちはだかる「常駐」の壁。慣例を打ち壊し、
“テレワーク”案件3割→8割へと成長を遂げた「クラウドテック」の軌跡
リモートワーク求人専門サイト「プロリモート」がリニューアルオープン、
業務委託契約の求職者と企業をマッチング
1/3以上が採用につながる高マッチング率、リモートワーク×エンジニア・デザイナー専門の
人材紹介サービス「ReworkerAgent」正式リリース場所からも時間からも自由な働き方を実現!
『ReWorks(リワークス)』リモートワーク特化型転職サイトとして 3月5日 リニューアル
副業・兼業マッチングサービス「クラウドリンクス」登録者数2万人突破
中小企業で進む副業人材の採用、96%が継続採用を希望
茨城県日立市、県外からの「テレワーク移住者」に最大151万円の助成金
長野市、市内に移転・事業所設置し、移住することで最大550万円の支援金を支給
フリーランスが活用できる「最大1,000〜3,000万円・補助率50%〜75%」の
『ものづくり・商業・サービス補助金』とは?概要や条件を解説
>>597
やったったが愚直に10で割って下の桁から求めるだと手元のPCでは200年ぐらいかかりそう……
https://ideone.com/6BG7hf
つなみにこれは2^0、2^8、2^64、2^1000には一瞬で正解する
[302] 100.000000 % (38/38) --- 0 sec
2^1000 = 1.071508607186267320948425049060001810561404811705533607443750388 x 10^301 10より大きい10^n(100万とか)で割ることにしたら多少は改善するかもしれないが、
最終的に10^nのn桁を10進数表示することを繰り返すことを考えると10で割るトータルの回数に違いが出ないから改善しなさげ……orz
むしろ2進数で計算して10進数にするのではなく最初から10^n進数表現(ただし10^n < UINT32_MAXとか)で2^Nの計算の方を実質10進数でやった方が速そう
計算の手間がO(N^2)なのは変わらないが、割り算無しで済むのは大きいい(多分、
2^Nを10^n進数表現(ただし10^n < UINT32_MAXとか)で計算するのはうまくやれば(10^nをUINT_MAXとかよりやや小さめにしたら)
掛け算によるキャリーの伝搬頻度を減らせるから副次的にさらなる高速化の余地が生まれ得る、
繰り返し二乗法で大きい素数のmodを計算すれば良いだけ
整数の商がいくらかもすぐ計算できるので、簡単に復元できる
復元した値をメモリに持つかどうかは別の話
はい終わり
これしきのことも分からない奴ら頭ヤバいよ
言語仕様の話ばっかり大好きでアルゴリズムの知識が微塵もないボンクラ
競プロキッズのこと馬鹿にできないね
素直に10進多倍長で計算すればいいだけ
今のPCならすぐ
>>623-624
すごいね
じゃあ 2^17179869183 の解をここに書いてみて
あとそのプログラムコードも 自演ちゃうねん
繰り返し二乗法の適用を思いつかなかったのは太くの至りで宦官の至りやが
2^N計算を10^n進数ベースでやるときに適用して高速化するやり方しか思いつかん
>大きい素数のmodを計算すれば良いだけ
とは何ですか(・∀・)?
興味本位で全桁表示したいだけなら5171655947桁あることを知って諦めてほしい
/と%による単純な基数変換を使うにしても、/も%も桁数Nに対してO(NlogN)程度かかるらしく、それだけかかってようやく1桁求まるレベルなんで、まあ無理よ
概算したいだけなら高校生でも知ってる対数を使う方法で4.637182185+e5171655947くらいと分かる
10000007とかで割れって言ってるんだろ
これじゃ余分な7の誤差蓄積しまくって上位めちゃくちゃになるし、影響ないほど巨大な10^n近似素数使っちゃったら結局計算量は大差ない
競プロキッズの考えそうなこと
>>628
7の誤差ってなにけ?
整数なのに誤差とかあるん? >>613
自動的に昇進するだけで、デフォルトで多倍長って表現は違和感。
2**-1は0.5だけどデフォルトで浮動小数点ってわけじゃないよね >>631
小数部だけをまた10の肩に乗っければいい 皆さんすみません>>597です。
2^17179869183
は
とりあえず
10^5171655945.66625415874401993568579902587321942922330151106009...
で勘弁してください。
実数が分かれば文字数で桁数も分かりますので、
実数が知りたかったんですが、ここまでしか分かりません。
お手数おかけしました。
多倍長電卓で計算できないんでプログラムならできるのかな?と思ったわけです。
現時点では計算時間とメモリを食いそうですね。 ざっくりとした大きさや上下数桁はわかっても全体を丸々把握するのは厳しそう
>>639
std::uniform_int_distribution<int> ui('A', 'z');
大文字小文字? >>639
V.push_back({ { D[i] }, i }); は V.push_back({ D[i], i }); じゃないの? >>639
プログラムの意図がわからんから投げたわ
1. Data型の<1>要素の意味はなんだよ。typedefした行のコメントに書いといてほしい
2. 関数名を流し見る限り、ソート・エンコード・デコードの3つの仕事がある。中途半端に仕事が混ざってない? >>644
ブロックソートアルゴリズムの実装をしているだろう。
とすると size_t はソートバリエーションのインデックスを表していると思われる。 int64_tとsize_tを暗黙の型変換を期待して混ぜて計算するとはまる?
(int64t - int64t) + sizet >= int64t
の比較をしたら2つ目のint64tが大きくなっても(とは言っても全ての値は10~-10くらい)boolの値はずっと1でした。
比較の前まで切り出してprintfすると正しい値が出るのですが、比較式に組み込むとおかしくなります。
sizetをint64tにキャストすると正しく動きました。
暗黙の型変換はsizetをint64tにしてくれないのでしょうか
環境はWSL2のg++です。
教えて下さい
>>647
色々と面倒な細かいルールはあるんだが、大まかには
・ 二項演算子は原則としては大きい側の型に揃えてから計算する (符号は符号無しが優先。 結果の型もそれ)
・ size_t の大きさは処理系定義 (符号無しであることは保証される)
・ signed な型が unsigned に変換されると変換後の型の最大値より 1 大きい値で mod をとった値になる
というのがこの場合にかかわる重要なルールだと思う。
size_t は処理系定義だからその環境でどうだかわからんが uint64_t 相当だと仮定するぞ。
int64_t - int64_t の型は int64_t で、 int64_t + size_t は uint64_t になる。
つまり int64_t-int64_t の値が負数の場合でも常に正の値に修正される。
しかも値として常に 10~-10 くらいということは、
unsigned な値への型変換規則によってかなり巨大な値になってしまう。
たぶんこれが意図しない挙動の原因だと思う。 >>648
符号無しが優先って書いちゃったけど、これは大きさが同等なら符号無しが優先ってことね。
大きさに差があるなら大きい方の符号が採用される。
(大きさって言ってるけど実際には順位 (rank) の序列が定められている。 まあ大きさの順なので実質同じやろ。) size_t が非負の32 bit なら、int64_t の範囲内だから、OK だけど、
size_t が非負の64bitなら、int64_tの範囲外で無理
int64_tの非負の範囲は、63bitしかないから
例としてこういうのがあるとわかりやすいかな。
#include <iostream>
#include <cstdint>
int main(void){
auto a=std::int64_t(6)-std::int64_t(8)+std::uint64_t(1);
std::cout << a << std::endl;
}
結果として 18446744073709551615 が表示される。
というわけで高速化すた、
https://ideone.com/TWKDT6
動きを見る限り、2^17179869183が計算が終わるまで手元のPCで8時間ぐらいの見込み
(検算)
次のぐらいなら一瞬で出る(小数点の位置が手抜きなので指数の解釈に注意
2^1000 = 0000001 0715086 0718626 7320948 4250490 6000181 0561404 8117055 3360744 3750388. x 10^298
2^171798 = 0000002 2448900 7901275 1700257 1990086 5699838 8910190 8350859 7305786 1643657. x 10^51713
2^171798は>>620のでは4秒かかかっていたやつが100 msぐらいで出る ゴメス8時間と言う見積は指数の桁を一つ少なかった2^1717986918で見積もってたorz
やったら最新状況は↓こんな感じでこの後4^9×5815 = 1,524,367,360秒 = 48.304年かかることに、。n_
Calculating 2^17179869183 ...
n=17179869183, mbuf sz=2 --- 0 sec
n=8589934591, mbuf sz=2 --- 0 sec
n=4294967295, mbuf sz=2 --- 0 sec
...(中略)...
n=8191, mbuf sz=180374 --- 24 sec
n=4095, mbuf sz=360748 --- 96 sec x 4
n=2047, mbuf sz=721494 --- 385 sec x 4.10
n=1023, mbuf sz=1442986 --- 1467 sec x 3.81
n=511, mbuf sz=2885970 --- 5815 sec x 3.96
python超初心者スレでひな形を教えてもらってpythonでプログラミングしたところ、
2^17179869183
は
4.637182185095045843877145312775985050353215513064979818029199207764811280740258379690028942685133666E+5171655945
になるようです。
ご参考まで。精度等未確認ですが。
>>656
ちなみにこの計算は、
128倍精度浮動小数点数の最大値の計算で出てくる式の掛け算で区切った左側の値です。
128倍精度浮動小数点数 (2^((2^(35-1))-1))*(2-(2^-4060)) 5171655946桁の値 有効桁数1222桁
(2^((2^(35-1))-1))*(2-(2^-4060))
は
9.274364370190091687754290625551970100706431026129959636058398415529622561480516759380057885370267332E+5171655945
という値になりました。
精度等確認できる方はお願いします。
仮数部の最終桁の値は丸めになっているようなので+1されている可能性があります。 >>646
修正感謝。自分のコードに転写してみたらちゃんと動いた。
これちゃんとブロックソートか解らないけど、可逆ではあるので圧縮してみるね。
本当にありがとう。 延々同じようなことやってる低学歴さんたちって>>623見えんの? C++ のプログラムでサスペンド/復帰をお手軽に実装するための定番の方法ってないですかね?
USR1 を受け取ったらメモリの内容を丸々ファイルにダンプして、復帰するときはそれを読み込んで続きから実行、くらい簡単な仕組みが実現てきたら嬉しいです
>>659
真の乱数データならどのような圧縮アルゴリズムでも縮まんよ >>662
噂によるとLZWはエントロピー圧縮では無いので出来ても良いかと思ったんだけど、駄目か。
根拠は辞書捨てるからだけどね。
とりあえず完成。 >>661
WM_POWERBROADCAST ggrks 圧縮方式がなんだろうと可逆圧縮はデータ長が短くなるケースがあるならデータ長が長くなるケースが必ずある
65536通りの表記がある2byteデータで、1通りが1byteに圧縮できるとしよう。(0x0000→0x00)
残りの65535通りから256通りの表現を奪うので(0x00から始まるパターンが作れなくなる)、3byte長で表現しなきゃいけないやつが出てくる。
このへんはトレードオフだが、テキストデータとか一定の傾向があるデータのデータ長を短くできりゃいいだろ?
ランダムデータとか圧縮済みデータを圧縮するなんて考えない
>>665
まぁ、そうですね。
LZWの性質上、一回出たモノを辞書から洗って一個追加して辞書に返す。という事をやるのです。
エントロピー圧縮では無いので乱数を詐欺れたら無敵だったのですけど、現実は厳しい。 データ圧縮時にあり得る最大伸長率をまとめたサイトをどこかで見たような記憶があったんだけど
あらためて探すと見つからない……。 幻だったんだろうか。
>>667
ZipBombとかやべーやつもいるから安全に展開できるかの仕様の確認目的かな?
正攻法での最大圧縮率とかだと話が変わってきそうだが >>660
繰り返し二乗法は分かったのだが
modを取る大きい素数の選び方が分からないので教えてほしい 内部クラスを外部クラスが継承するって不可能?
struct A : A::B { struct B {}; };という特殊な事やりたいんやけど前方宣言とかできないっぽいし無理やろか
>>676
先頭100桁とE+の値(文字数でもいいです)と最後の20桁ください。 1ゲットズザー!!!111!!111!c⌒っ゚Д゚)っ
https://ideone.com/R3szJK
2^17179869183 is between
0000000 0000046 3718218 5095045 8438771 4531277 5985050 3531670 5893980 9439277. x 10^5171655888
0000000 0000046 3718218 5095045 8438771 4531277 5985050 3531670 5894606 3902528. x 10^5171655888
100 msで計算できるようにしたったわ!
>>675
暗算はスレチ つなみに基数変換アルゴリズムにはトーナメント方式というものがあって並列計算に持ち込めるらし
星の数ほどプロセサーが使える場合は有効かもしれん
富岳を使える機会があったらやってみたい
なにおうヽ(`Д´#)ノ ムキー!
2^17179869183 is between
0000000 0000046 3718218 5095045 8438771 4531277 5985050 3532155 1306497 9818029
1992077 6481128 0740258 3796900 2894268 5133665 8876785 8487588 5591832 7186419
0576212 7656864 8464720 4285493 3923042 9654230 7916817 0776591 7647233 1128072
2760420 2266531 9507091 8968753 5716084 2962215 4728982 6664323 6555234 1274646
4896521 9429451 2975764 8380822 6363423 2746025 0005054 5131536 2217832 5023004
1605005 9971605 5861808 1342288 9537948 8099475 2493069 5439539 2974540 8604555
3827776 8910650 1779698 0664637 7405672 7472854 5855966 0105172 1933481 1967719
5700701 3333182 0937700 3166605 4871435 3734677 0010217 6905552 3397265 0416277
0094988 0613651 2390001 0317736 9989814 4998699 5188652 7509316 0899781 9619323
5715923 0653762 3370836 8150405 6226421 7362228 9333270 6654384 1686901 0642565. x 10^5171655258
0000000 0000046 3718218 5095045 8438771 4531277 5985050 3532155 1306497 9818029
1992077 6481128 0740258 3796900 2894268 5133665 8876785 8487588 5591832 7186419
0576212 7656864 8464720 4285493 3923042 9654230 7916817 0776591 7647233 1128072
2760420 2266531 9507091 8968753 5716084 2962215 4728982 6664323 6555234 1274646
4896521 9429451 2975764 8380822 6363423 2746025 0005054 5131536 2217832 5023004
1605005 9971605 5861808 1342288 9537948 8099475 2493069 5439539 2974540 8604555
3827776 8910650 1779698 0664637 7405672 7472854 5855966 0105172 1933481 1967719
5700701 3333182 0937700 3166605 4871435 3734677 0010217 6905552 3397265 0416277
0094988 0613651 2390001 0317736 9989814 4998699 5188652 7509316 0899781 9619323
5715923 0653762 3370836 8150405 6226421 7362228 9333270 6654384 1687053 4062589. x 10^5171655258
>>661,664,670,672
すみません。Linuxを想定していました >>678
素人なので全部は計算出来ないですが
最後の20桁ならすぐに計算できました
88085753133198737408 >>685
全桁データだからって正確とはかぎらんのかーい! 先頭数十桁と最後の数十桁は合っていそう。
文字数は5171655817で合ってるの?
>>637
はウルフラムでの17179869183*Log2/log10の計算結果。
>>656
はpythonで打ったプログラムで出たもの。
桁数はE+5171655945で間違いないと思ったが。 >>693
文字数チェックに使ったGigaTextViewerにバグがあったらしい。
バイト数で5171655946で見たら合ってるな。
バグないみたい。ご苦労様。
あとは128倍精度浮動小数点数の最大値とか計算できると良いな。
相当凄腕なら64倍以上のn倍精度精度浮動小数点数の最大値を0.06秒くらいで出せると良いけどな。 (2^((2^(35-1))-1))*(2-(2^-4060))
これの計算なら
>>695のコードを少しいじれば出来るから
やってみな 128倍精度付近の計算は5GB程度と分かったが、256倍精度なら80GB程度とかになるのか?
全部のデータを吐くのには無理があるな。
次の問題。
65536倍精度浮動小数点数 2^16倍精度 2097152ビット浮動小数点数 (2^((2^(71-1))-1))*(2-(2^-2097080)) 355393490465494856466桁の値 有効桁数631283桁
最大値
(2^((2^(71-1))-1))*(2-(2^-2097080))
8.751158848740476104171068534561420331800200930194140062439011962812174483292686870548794134181772232E+355393490465494856465
これを合っているか確認して戴きたい。
時間かけなくていいからね。簡単にできそうならやってみて。
8.75115884874047610417106853456142033180020093019414006243901196281217448329268687054879413418177223250026754484296779541335755918551116311988151294437120403120859156456766214020358536453140920536494153366498563224599112643650005214473466325352790995530944092962954114633561899471578385791449307429666571647389734015518462597415175193161095962388238415165666405164185316844538944891015624600209337136687435968731829027874814729004423100156170455627257657662018544353080611835640032201070594171947167003291711646891546745572991874468255861057996361346972313268224686528372873429102591994402195151868961348300405641520089415930898779525616284304652528475239523093098963439947423678208493232864450286525255133498508464916769066793870894739506167659828704373657304962097164032305167374291543346284808597600898542590310745266381890317624392291438000481495226828900983685105244929525982538100990167556406600838995052292E+355393490465494856465
>>701
はやw
合ってるみたいだな。ありがとう。 >>701
プログラムできちゃったの?凄いね。
最大何倍精度まで計算できるんだろうか? 指数と桁の割り振りは決まってないし
好きに決めれば良いんだよ
IEEE754の範囲でも
倍になるごとに4bit増えてるわけでもない
>>705
IEEE754-2008では推奨で決まってるよ。
結果的に4bit増になる式が書いてある。
まぁ別に合わせなくてもいいが、合わせて演算パッケージの開発をしやすくした方がいいんじゃないのかな。
桁が足りなければどんどん倍数を増やせばよいわけだし。
ちなみにどんな電卓なら計算できるの? >>707
自作電卓だけど
多くの桁数を計算出来る電卓(計算ソフト)は世の中にたくさんある 半精度、単精度はルールかは外れてるし
8倍精度以上をそのままバイナリ形式で他のソフトとやり取りする事もなかなか考えられないし
桁数はいらないけど指数が欲しい時もある
というか、桁数に対して指数の割合が少なすぎる
65536倍精度を使う場面で指数を数ビットケチる意味はまったく無い
ライブラリを作るなら柔軟に設定出来るものが良いかと
半精度は今でも用途によって複数の形式があるし
boostに自分の作った無限状態マシンのラブラリーを導入して世界中の人に使ってもらいたいけどどうすればいい?
2テトレーション6、2^^6、2^2^2^2^2^2の実数の計算はできますか?
>>695のコードだと 2^2^35 くらいが限度
工夫すると 2^2^42 くらいまではいける
計算バッファにHDDを8TBほど使う
2^2^65536は...
宇宙中のリソースを使っても無理
上位1000桁や下位1000桁だけなら可能 ブラウザpythonでプログラミングしたら10^10^50まではとりあえずエラーが出なかった。
内部でどうやってるんだろう?
(2^2)^35か
2^(2^35)かどっちだ?
C++的には前者だが数学的には後者だな
べき乗は右結合というのは宇宙の始まりから決まってゐる
なぜなら、(2^2)^35 = 2^(2*35)であって1重のべきにすぎないから左結合の多重冪は多重である意味が無い
>>717
ここでの演算子^はXORの意味ではないから念のため 2+2+2 = 2*3
2*2*2 = 2^3
2^2^2 = 2↑3
2↑2↑2 = 2↑↑3
途中で送信しちまった
これをtemplateで一般化できるか?
ここの定義で実装してみた
https://ja.wikipedia.org/wiki/クヌースの矢印表記#定義
#include <iostream>
template<int level>
struct tower {
template<class T, class U>
constexpr static auto op(T t, U u) {
T ret{1};
for (U i = 0; i < u; i++) ret = tower<level - 1>::op(t, ret);
return ret;
}
};
template<> // pow(t, u);
struct tower<1> {
template<class T, class U>
constexpr static auto op(T t, U u) {
T ret{1};
for (U i = 0; i < u; i++) ret *= t;
return ret;
}
};
int main() {
std::cout << tower<2>::op(uint64_t(3), 3) << std::endl;
} >>722
>2^2^2 = 2↑3
あれ?
>3↑3=3^3(3の3乗)=27です。
とか書いている人もいる。 >既に述べた通り、1重のクヌースの矢印は冪乗を表す。また、2重のクヌースの矢印はテトレーションを表す。
{\displaystyle a\uparrow b=a^{b}} a\uparrow b = a^b
{\displaystyle a\uparrow \uparrow b={}^{b}a} a\uparrow\uparrow b = {}^b a
クヌースの矢印の矢印が一個ずつ足りないんじゃない?
>>719
それは
> メモリの内容をファイルに丸々ダンプ
したりするための仕組みじゃないだろ
チェックポイントがやりたいんじゃないの >>716
ideoneのpythonなわけだが、
10^10^10^5まで対応していそうだ。 昔C++で少ない文字数で巨大な数を作るってのやったなあ
intは十分大きいとしてint main();の戻り値を競うって感じ
FFTによる積の多倍長演算完全に理解した!
適当な基数の下で表した例えば4桁の数 (a b c d) と (c d e f) を筆算で計算したとき現れる8個の積和
(例えば最長のやつはaf + be + cd + dc)
というのは、 (a b c d) と (c d e f)をそれぞれ関数波形とみなしたf(n)、g(n)の畳み込み
h(k) = Σ[k=0..3]f(k)g(3-k) (k=0..7)
に他ならない(f(k)やg(k)の範囲外は0とみなす
ということは、h(k)、f(k)、g(k)それぞれのDFT(この場合は1の8乗根を基底とするやつ)をそれぞれH(k)、F(k)、G(k)として
H(k) = F(k) * G(k)
となるわけやなのでそうやって求めたH(k)を逆DFTしたらh(k)の値が得られているというしくみ
(このh(k)を基数B内に収まるようにcarry_and_fix()したら最終的な8桁の並びが得られる、
スマン誤記があったorz
畳み込みの式は正しくはこうっす
h(τ) = Σ[k=0..3]f(k)g(τ-k) (τ=0..7)
>>732
intのサイズなど、環境に依存する値を返すのはNG
C++のコードによって1個の整数を定義して
その整数の大きさを競う 「~(1<<31)」 (8文字)が短かくなりそうだがint=4byte+オーバーフローの未定義動作を含むからNGという寸法か
しかし「123456789」もint=4byteが前提になってるしどうやって遊ぶんだ?
「std::numeric_limits<int>::max()」でとりあえずint最大値が帰るが
>>740
max()は環境に依存する値だからアウトだろう
算出するならunsignedの0の~を1つ右シフトしてsignedにして返すのはどうだろう? -------- Large numbers using C++ --------
C++ 言語を用いて出来るだけ大きな数を出来るだけ少ない文字数で表現する
int main(); が出来るだけ大きな値を返すようにする
C++ は ISO/IEC 14882:2003 準拠とする
ただし、"int" "float" "double" で表現できる値は十分大きいものとする
事実上無限ビットあると考えて良い
あくまで「十分大きい」であり、大きさを規定した以外は言語仕様通りの動作をする
環境依存の動作、環境依存の値を返すものはNG
上記ルールと ISO/IEC 14882:2003 とで
mainの戻り値が1個の値に定まらないようなものはNG
たとえば、intのサイズに依存した値になるコードはNG
pre-processor 使用禁止
#define, #include などの禁止
コンパイラなどに指定するマクロも禁止
__FILE__ や __LINE__ などの組み込みマクロも使用禁止
ライブラリ関数や外部ファイル定義の関数や変数の使用禁止
pow, quit などの外部関数や変数の使用禁止
実行時間やメモリ使用量は問わない
メモリ解放不要
文字数が少ないものだとこんな感じ
25文字
int main(){return 9E999;}
30文字
int main(){return 9<<(9<<99);}
42文字
int A;int main(){return++A-9?9<<main():9;}
60文字
int A,B=9,C=9;int main(){for(;A--?B<<=B:A=B*C--;);return B;}
intを返せばいいのかと思ったけどfloatとか無限ビットとか言及しているのが気になるな。
解釈違うのかな?
必要に応じて環境のint型を int4294967296_t とか自由に変えていいわけか
>>746
> たとえば、intのサイズに依存した値になるコードはNG >>747
intのサイズに依存してないじゃん
intが16bitでも32bitでも64bitでも>>746は正解を出す 16bit, 32bit, 64bitで違う値を返すからNG
異なる値を返すからNG
何度書いてもNGなものはNG
~0U>>1 で int のサイズが同じ環境なのに違う値を返すケースある? >>750
それぞれに応じて違う値を返すこと自体がNGでしょ
>>751
一応ルール確認
sizeof(int); も環境によって変わるからNG
1<<999; はintが1024bit以上なら環境に依存せず固定値になるからOKてことでいいよね? 環境によってintの最大値が違うのに環境依存はまかりならんとかw
なら規格で保証されてる最大値(32767だっけ?)を返すしかなくね?
>>753
それはだめです
1<<999は例えばintが32bit環境では0となります
大きな数を返すことができていません >ただし、"int" "float" "double" で表現できる値は十分大きいものとする
>事実上無限ビットあると考えて良い
これと
>たとえば、intのサイズに依存した値になるコードはNG
ここの兼ね合いがどうなってるのか文意が読み取れん
日本語難しい
>>753
そういうことです
>>757
「十分大きい場合」に同じ値が返れば良いです
「十分大きい場合」でないならば動作不定でも無限ループでも良いです >>760
現実にありえない環境で同じ値が返ったとしても
現実にある環境で異なる値が返るからダメですよ すぐにオーバーフローしたら大きな数が作れない ==> intは十分大きい
同じ値が返らないと数の定義にならない ==> 同じ値が返る
この2個の条件は必須
多倍長数が扱える言語であれば十分大きいは満たしているわけだけど
>>735-737
FFTでやってる限り誤差で単精度くらいまで落ちるよ
1の乗根じゃなくて整数環でやるべき
あとNGしたいからコテつけてください >>759
それintじゃなくunsigned intじゃん
(int)(~0u>>1)は13文字だぞ >>766
それは不要
intを返す関数で使われるとあるから自動的にキャストされる >>766
2^[ビット数-1]-1を作る為だけに6文字も使うのは
巨大数生成としては効率が悪すぎる >>768
758にアンカーがないのでそこからしか読んでなかったが
「intを返す関数」と書いてあるのはどこか遡ってみた
で、742か
9E999とか書いてあるの見て思った
ア ホ か !
付き合ってらんね >>597
数値としては
ビット0からビット17179869183の17179869184ビットあって
MSBのビット17179869183だけ1、それ以外全部0 という数
ちなみに log2(2^17179869183) = 17179869183 という数でもある ちなみに10進数で一応計算してみた
約だけど
4.63718218*10^5171655945
100桁精度で計算してみた
2^17179869183 =
4.63718218509504584387714531277598505035321551306497981802919920776481\
1280740258379690028942685133666E+5171655945
1000桁
4.63718218509504584387714531277598505035321551306497981802919920776481\
1280740258379690028942685133665887678584875885591832718641905762127656\
8648464720428549339230429654230791681707765917647233112807227604202266\
5319507091896875357160842962215472898266643236555234127464648965219429\
4512975764838082263634232746025000505451315362217832502300416050059971\
6055861808134228895379488099475249306954395392974540860455538277768910\
6501779698066463774056727472854585596601051721933481196771957007013333\
1820937700316660548714353734677001021769055523397265041627700949880613\
6512390001031773699898144998699518865275093160899781961932357159230653\
7623370836815040562264217362228933327066544205490551615983201178741086\
9629443458030111199396338422961782744988511892557698949168820144192823\
3037701007229077794006504943886197679972934343613269571575719811291847\
2263408312031495611576479729358418227154841607037559274517841362656405\
8439611218916024169112008441360472444290176302521705087210814345468682\
750024133044013191605E+5171655945
これ以上は迷惑行為だからやめとく
一番大きい10進正数 ・・・・・・999 を NMAXとおくとき
NMAX * NMAX == 1
NMAX == -1
が言える
どういう意図で質問してきてんだテメエ
ここは相談スレであってクイズスレじゃねぇんだよ馬鹿たれ
しかも、クイズのごとき問題出してもテメエで正解すら用意してない。
出て行けゴミ野郎
>>782
宇宙中のリソースを使っても無理
もちろん近似であれば可能 2^^6は
2120038728808211984885164691662274630835...............8862693010305614986891826277507437428736
であると書いているサイトがある。
有効数字1億桁とか下位1億桁なら簡単
全桁は不可能
なぜかというと筆算を考えたらワカル
真ん中に行くにつれて桁の値を求めるのが一番積和の項数が大きいくて大変でありかつ
LHSとRHSの数のあらゆる桁が関わるから誤差に対してもチョー敏感、
>>789
アップしてあるコードをちょっと変えれば出来るんだから
まずは自分でやってみなさい >>765
見えない敵の可視化
>>695
mul_f2i()の中で
k1 = 1;
k2 = t360 - 1;
for (; k1 < t180; k1++, k2--) {
double re, im;
re = b->data[k1] * c->data[k1] - b->data[k2] * c->data[k2];
im = b->data[k1] * c->data[k2] + b->data[k2] * c->data[k1];
d->data[k1] = re;
d->data[k2] = im;
}
としている積和絵算での誤差の拡大を問題視してないのはなんでじゃろがい?
別段b->data[・]もc->data[・]も絶対値が1未満と決まっているわけではないのでは……
決まっているとしても類似の大きさ同士の差で桁落ちが発生するのでは……
ケkッキョキ、誤差の適正な評価のためには>>679式に積和の都度上限と下限を見積もるしか無いんじゃないの Animalクラスを継承したCatクラスとDogクラスがあります
class Cat : public Animal
{
・・・
};
class Dog : public Animal
{
・・・
};
プログラムの中に無数にある以下のような箇所を
Animal *object = new Cat();
以下のようにDogクラスに書き換えたいな、と思ったとき
Animal *object = new Dog();
テキストエディタの一括置換機能を使うよりもっとスマートな方法ってありますか?
>>793
Cat.cpp とDog.cpp をバックアップする
Dog.cpp を削除する
IDEのリファクタ機能で Cat クラスを Dog クラスにリネームする
バックアップしていた Cat.cpp とDog.cpp を上書きで戻す
これで無数にある Cat を Dog に置き換えられる
文字列置換と異なり Catalog が Dogalog になってしまうこともない >>792
誤差はループ内のprintfで出力してるでしょ
誤差を減らす工夫が入っている事は気付いた? >>795
>誤差はループ内のprintfで出力してるでしょ
知ってたが>>792の演算をやった後の結果が入った事後データd->data[・]に対して
x = d->data[i] * k;
e = (int64_t)floor(x + .5);
err_max = max(err_max, fabs(x - e));
とするだけではd->data[・]計算中に生じた仮数部LSBを超える誤差が全然見積もれていないんじゃな
いの
(唯一積の両側の絶対値が1以下だった場合は正当化されうるが、それはそれで似たような数の差での桁落ちを招きそう……
>誤差を減らす工夫
i2f()内で整数からフーリエ変換するときにRADIX / 2で事前carry_and_fix()してダイナミックレンジを抑えようとしている努力は認められる
しかしダイナミックレンジを抑えることが絶対的に誤差対策になるかというと以下略、
的な、 多分仮数部LSBを超える誤差が整数部のLSBにまで達することは無い、という仮定のもとに
上のerr_maxの更新をやってるんだろうけど運悪く(RADIXが10だとして
9999.9999999999999
みたいなケースで仮数部LSB程度の誤差が生じたら最悪
10000.0000000000000
か
9999.9999999999999
かどっちかわからなくなって整数部LSBより上が誤差に侵食され(ry
>>794
ファイルを分ける
その発想はありませんでした
さっそく試させていただきます!
ありがとうございました いつまでもFFTの話してるバカども、数論変換知らんの
>>797
四捨五入によって丸めてるんだから
運悪くなんてことはない
配列の特定の箇所だけ極端に誤差が大きくなることもない
だからerr_maxで誤差評価可能 一時オブジェクト指向全盛でGoF本なんかが崇められてたとき
ここで質問してるやつにデザインパターン見直せとか糞レス返してる奴いたが
最近はオブジェクト指向じゃ生産効率上がらないことわかってGoF本のステータスも低下してるのか?
今も昔も関係ない
GoF本をステータス視するのが間違ってる
デザパタを乱用するのも間違ってる
必要な人が必要なだけ黙って使うのがデザパタ
必要も無いのに手を出すことは間違ってる
今も昔もずーっと同じように間違ってる
オブジェクト指向じゃ生産効率向上しないことが明らかになって
そらGoF本の価値そのものが低下するわなww
new deleteなんて多用されたら困る分野なんていくらでもあるしな
>>804
こういうこという奴は大規模開発に参加したことないニワカだろうな 自分を大きく見せようとするやつの
型どおりの言いぐさだな
オブジェクト指向がオワコンだったとしても代わりになるものって何かあるんですか?
なんか上のレイヤしか触らんwebのひとがオブジェクト指向とデザインパターンをディスること多いわ
そらお前らが利用してるフレームワークを作るのに使っとるんやと
じゃあもうmain.cppにmain関数百万行書いて終わりにしていいんですか!?
オブジェクト指向がオワコンかどうかは知らないが
少なくとも「C++でオブジェクト指向開発」を謳っている案件は漏れなくクソだ
>>811
Chromiumってクソだったんだ
そんなクソがシェア圧倒的なこの世の中はクソまみれやね・・・ 最近はclassを使うプログラミングとオブジェクト指向プログラミングの両者のうちどちらが広くどちらが狭いとみなす?
あまりオブジェクト指向に固執すると
令和のstaticおじさんみたいなもんだぞ
>>815
staticおじさんはマウントされるだけの上位存在がいるから馬鹿にされた訳だけど、
>>808等も言ってるようにオブジェクト指向がクソだとして代替案があるのか?っていうと無いからはそうはならない >>811
ならwindowsを使うのやめたらどうだ?
ついでにスマホもね
オブジェクト指向は何かを知らずにとりあえず否定しておけば自分が上だと考えてる無能 >>817
プロダクトがうんこだと言っているのではない
開発案件がうんこだと言っているのです
まあここ数年は関わってないから知らんけど というかいまだにオブジェクト指向という低レベルの次元で争ってる時点で無能確定
0.99999....!=1に拘ると同じくらい頭悪い
オブジェクト指向がディスられるのは犬猫車で説明しようとした馬鹿どもに責任がある
議論の場でそもそも勘違いされたくない場合、OOPではなくクラス志向やC++/Java/C#など具体的な呼称に言い換えるだろ
猫オブジェクトには食べるメソッドじゃなくて餌やるメソッドを定義してほしい
価値観って変わっていくからね
以前はマルチスレッドがもてはやされていたけど
最近はスレッドでは1万並列を扱うのが
困難、真のエンタープライズ分野ではI/O待ちでselect切り替えしたほうがパフォーマンスが出るという流れになってるとか
それデータの並べ方程度の話じゃないの?
列志向のDBの方が速いみたいな
スレッドってスタック持ってるじゃん
OSや設定にもよるけど1MBとか これがバカにならないんだと思う
ちなみにJavaでは仮想スレッドというOSのスレッドと1対1対応させない並列化の仕組みが導入される
これで100万並列を実現できるんだと
例えばRustのタスク(=仮想的ないわゆるグリーンスレッド)はスタックレスなコルーチンなので個別の専用スタックを必要としなかったり
>>832
むしろマルチOSスレッドこそ並列処理
逆にRustのタスク等はシングルOSスレッド上でも複数のタスクが同時に動くのでその場合は並行処理 一般的な並列処理の定義だと同時に実行される複数のスレッドが必要だと思うけど。
>>834
そんなことはないでしょ
1C1T CPUの時代でもタイムスライスでマルチスレッドって呼んでたんだから 並列、並行、スレッド、タスクをごっちゃにしてる奴がいるな
>>812
てめえのほざく大規模開発がChromium かいww >>832
別な話だけど無関係でもない
ユニプロセッサな環境でのマルチは待っている間に他のことをするのが目的
マルチプロセッサな環境でのマルチは上記に加えCPU性能を余さず使う目的もある >>827
>I/O待ちでselect切り替えしたほうがパフォーマンスが出る
こんまもんマルチスレッド以前にマルチタスクOSで昔からやってることだろ >>832
>そもそもマルチスレッドと並列処理は無関係でしょ
>そもそもマルチスレッドと並列処理は無関係でしょ
>そもそもマルチスレッドと並列処理は無関係でしょ
>そもそもマルチスレッドと並列処理は無関係でしょ
どういうおつむしてんだwww >>812
テメエのほざく大規模開発ってのがChromiumかよ
Newvieがわらわせんなよ >>840
そうそう昔からやってるんだよ
俺がいいたいのはそこ
CPUコア数がどんどん増えていくしマルチスレッドプログラミングが正義!
ってもてはやされていたけどパフォーマンスの問題があってスレッド使わない方式に回帰してるの
オブジェクト指向も同様にオブジェクト指向プログラミング登場以前の手法に回帰することはありえる
ということが言いたかった
スレッドの話を持ち出して混乱させてしまってごめん >>819
OSを利用するために用意されたライブラリ群がオブジェクト指向的な、
メッセージをHand toする形のライブラリコールを利用してるからといって、
OSのカーネルそのものがオブジェクト指向で設計されてるとでも思ってんのか。
そもそもUnixにしろRTOSにしろオブジェクト指向とは縁もゆかりも無い時代からのOSなんだがな。 Windowsはシステム全体がオブジェクト指向。
どのような言語を使おうがオブジェクト指向。
xlibでプログラム書いたことあんのか、
Cコードの固まりがオブジェクト指向てどこの誰が教えてくれたんだ?
xlibのあまりのコードの多さ見て
C++に目を付けたあげく、勝手に文法変えてWinMainなんて用意したのがVC++だろ
そもそも、
Windowsとは違い、X はOSではないことぐらい知っとけよw
おれは>>819の"OS"にレスしてんの >>843
>パフォーマンスの問題があってスレッド使わない方式に回帰してるの
それはないのでは?物理コア数の増加にともなって、やっぱりスレッドを使う方向に舵を切っているかと あれ?
WinMain用意したときてC++じゃなくてCじゃなかったかな?
>>847
関数呼び出しの第一引数がオブジェクト、関数がメッセージと考える。
第一引数のオブジェクトにメッセージを送るのがXlibの関数呼び出し。 >>848
まだまだスレッド数が少ないCPUではスレッド使えるのに使わないのは悪だな
GPUだとスレッド立ち上げがパフォーマンス低下(処理速度でなくとも消費電力)に繋がる場面はすぐ訪れる。
1万データのMax検索するのに1万スレッド起動しても何の意味も無いから
回帰もなにも、パフォーマンス改善するから並列化を利用するのであって、
オブジェクト指向みたいな生産効率向上(という幻相)のためにパフォーマンスを犠牲にする、
エンドユーザーからみれば安かろう悪かろうでしかないコードスタイルの話とはわけが違う メンバ関数なんかも引数のオブジェクト省略されてるだけだしねあれ
>>650
画像処理プログラムやるとすぐわかるのが関数引数の数がすぐに肥大化すること。
これじゃ、関数コールの際、パフォーマンスが低下すること甚だしいんで、
structという一つのデータグラムにして、ポインタ渡すことと、その順番を
関数コールの一つのマナーにしてるだけだろ。
classはそこから生まれたとしても、
X11をオブジェクト指向というのは拡大解釈だ。 xは知らんけどwindows apiのウィンドウ周りはc言語でオブジェクト指向だよ
ハンドル引数にして色んなタイプのウィンドウまとめて扱えるようにしてる
setwindowtext使えばタイトルバー持つウィンドウはタイトルが変わる
テキストボックスならテキストがかわるって具合に
上にも書いたけどそのstructのポインタをコード上は見えないけど渡してるのがメンバ関数ね
>>855
スレ住人は全員わかってることなので、わからない人はC++を使わない人なのでは?
すると、何のためにスレへ?という疑問がわく。 >>847
Cでオブジェクト指向なんてごまんとあるがろうが
同じグーグル製プロジェクトで言うとlibwebpなんて典型だな
>>850や>>854が言ってる通り実質thiscallを多用するCなんて本当にごまんとある
関数ポインタ渡す際にvoid*のタグもセットで渡すとかもな よく見たらこのスレの住人もオブジェクト指向マンと同じレベルで気持ち悪い奴だらけだった
>>848
シングルスレッド非同期に回帰しつつあるのはJavaScriptがブラウザやNode.jsでそれの有用性を証明しまくってるからだな
最近だとC#Unityでゲームにおいてもシングルスレッド非同期は多用され始めてる
ロック関連によるバグやスレッド作成コストを回避出来るのが主な利点 その昔IBMがM:NモデルのPOSIXスレッドAPI(NGPT)を
Linuxカーネルに入れようとしてた記憶してるけど
どうなったんだっけ?
1:1モデルのRedHatのNPTLに性能で負けたんだっけな?
?
計算量見積れない処理は全部バックグラウンドスレッドに投げるだろ
Javascriptも一緒
>>857
そもそもunixのファイル関係だってread/writeとかの関数ポインタを含む構造体で管理してるから画面出力を簡単にディスクに出力できる
まんま仮想関数テーブルみたいなもんや
ID:d9+IDznH はだいぶレベル低いか単なるレス古事記だろうな 「オブジェクト指向」とかいうバズワードで議論するなら、せめて定義ぐらいは提示しろよ。
「定義はwikipediaのオブジェクト指向プログラミング」あたりで議論したら?
>>863
jsはasync awaitもコルーチン利用したシングルスレッドだよ OSからみるとシングルスレッドだけど、開発言語の補助でマルチスレッド風に記述できるようになっているのか
OSからみてもマルチスレッドなのか
非同期機能が内部的にマルチスレッド使ってる可能性はあるよ
そもそも非ネイティブ言語の場合は実行環境によるとしか言いようがないが、async awaitのためにマルチスレッドが走ることはない
GCとか含めたら別スレッドが関与することはあるだろうけど
上でも言われてる通りスレッド立ち上げコスト削減も目的の一つだから態々その目的をふいにするような実装はしないだろう
そらいちいちスレッド起動したらコストかかるけど、イベント処理なんて下位のライブラリで複数スレッド使っててもおかしくないでしょ
ま、上から気にすることじゃない
スレッド作るコストは高いけど一旦作ったら待機させときゃいいだけだし
>>870
幾多あるライブラリの話までし始めたらそらなんでもあるよ
>>871
スレッド立ち上げコスト削減は目的のうちの一つであってそれだけじゃない
むしろメインはlockを考慮しなくて済むって方じゃないかな >>872
だから、OSから見た話をしてるんやん
それに全然関係ない話でもない
ほんとお前馬鹿だよな >>873
コルーチンにOS関係ある?
どういう仕組みでasync awaitしてるか理解してる? >>874
867の言ってることがわからんあの馬鹿を責めてくれや 「俺のわからないことを書いている奴は馬鹿」という思考回路やばい。
>>877
そもそも言語の話にOSとか言い出すのが意味不明だし、強いて考えられるとしたら
int main() { for (int i = 0; i < 100; ++i) sleep(1); return 0; }
これもOSレベルで見たら単一スレッドで頭からケツまで動く保証はないっていうレベルの話がしたいのか?
こういう次元の話をしたいなら馬鹿としか思えないけど >>866
JavaScriptは基本的にはシングルスレッドなので並行(concurrent)に複数同時に動くが
workerを用いると別スレッドとなり並列(parallel)に複数同時に動く
ただしworker抜き前提で話すことも多いから前者のシングルスレッド前提でもいいと思う
>>870
言語のライブラリのレベルでそれが起きることはなく、あくまでも言語の仕様の範囲内に従う
しかし言語のランタイムではそれが起きるケースもあり、そこは別言語で書かれていてもよい
例えばJavaScriptは(別workerでなければ)シングルスレッドが保証されており、
複数の並行処理に対して厳格な競合対処をせずともプログラミングが可能だが、
内部ランタイムではI/O効率化のためにマルチスレッドが使われる実装もある 馬鹿のひと、前もいた実装は関係ないおじさん?
他人は許せないが、なぜか自分自身は語ってしまうというあの馬鹿?
幼稚園児レベルの罵倒語を使うのは
技術的な議論で劣勢であることを自己申告しているようなものだ
優勢な者はそんなもの使わなくてもどうにでも料理できるからな
X11をオブジェクト指向とか寝言いうやつ居るんだな
あれはオブジェクト指向もどき
つまりオブジェクト指向ではない
アセンラで構造化もどきつくりましたレベルの話
どんな作りになっていようがコード書いた本人が
オブジェクト指向だと言えばオブジェクト指向だし
構造化だと言えば構造化なんだよ
書く者の頭の中の考え方なんだから、
コードそのものの特徴から決めつけはできないし
ドヤるやつは大抵うんざりされてることに気がつかない
/: : : : : __: :/: : ::/: : ://: : :/l::|: : :i: :l: : :ヽ: : :丶: : 丶ヾ ___
/;,, : : : //::/: : 7l,;:≠-::/: : / .l::|: : :l: :|;,,;!: : :!l: : :i: : : :|: : ::、 / ヽ
/ヽヽ: ://: :!:,X~::|: /;,,;,/: :/ リ!: ::/ノ l`ヽl !: : |: : : :l: :l: リ / そ そ お \
/: : ヽヾ/: : l/::l |/|||llllヾ,、 / |: :/ , -==、 l\:::|: : : :|i: | / う う 前 |
. /: : : //ヾ ; :|!: イ、||ll|||||::|| ノノ イ|||||||ヾ、 |: ::|!: : イ: ::|/ な 思 が
/: : ://: : :ヽソ::ヽl |{ i||ll"ン ´ i| l|||l"l `|: /|: : /'!/l ん う
∠: : : ~: : : : : : : :丶ゝ-―- , ー=z_ソ |/ ハメ;, :: ::|. だ ん
i|::ハ: : : : : : : : : : : 、ヘヘヘヘ 、 ヘヘヘヘヘ /: : : : : \,|. ろ な
|!l |: : : : : : : : :、: ::\ 、-―-, / : : :丶;,,;,:ミヽ う ら
丶: :ハ、lヽ: :ヽ: : ::\__ `~ " /: : ト; lヽ) ゝ
レ `| `、l`、>=ニ´ , _´ : :} ` /
,,、r"^~´"''''"t-`r、 _ -、 ´ヽノ \ノ / お ・
,;'~ _r-- 、__ ~f、_>'、_ | で 前 ・
f~ ,;" ~"t___ ミ、 ^'t | は ん ・
," ,~ ヾ~'-、__ ミ_ξ丶 | な 中 ・
;' ,イ .. ヽ_ ヾ、0ヽ丶 l /
( ;":: |: :: .. .`, ヾ 丶 ! \____/
;;;; :: 入:: :: :: l`ー-、 )l ヾ 丶
"~、ソ:: :い:: : \_ ノ , ヾ 丶
>>891
>ドヤるやつは大抵うんざりされてることに気がつかない
自分のことか?www いずれにせよオブジェクト指向を上回る手法が登場しない限りオブジェクト指向に対してマウントは取れない
予めメモリプールを設定しておくようなOSで
オブジェクト指向ありきでプログラム設計されてると思ってんのはおめでてーな
馬鹿の一つ覚えとも言う
プログラムがオブジェクト指向に則ってるか否かはOSで決定する、と
メモリプールを何の目的で用意するのかわかってないと
オブジェクトがメッセージを投げるという関係性でプログラムを構築するのが
オブジェクト指向ってもんだから、関数 (メンバ関数) をメッセージとみなすかもしれないし、
メッセージキューのようなものを作るかもしれない。
プログラミング言語の言語機能をどのようにプログラム構成の方法論に当てはめるかは自由度はある。
その意味では >>891 の考え方は真っ当なものだ。
でも、 C++ では C++ の常識というものもあるし、
ある程度は共通の認識を作っておかないと会話が成り立たんだろう。
基本的にはふんわりした概念でしかないからこの場合にオブジェクト指向
という言葉をどういう意味で使うことにするのかはこの場で擦りあわせろや。 >>895
そもそもos全体がオブジェクト指向だなんて誰も言ってないし >>889
オブジェクトを「指向している」だろ。
指向「もどき」て何だよ。
何を「指向もどき」と言っているのか全然わからん。 たしかにオブジェクト志向オブジェクト志向言いはじめたころは
「メッセージング」ってのがやたら強調されてたな
たぶんスモールトークの影響だろうけど
最近の「オブジェクト志向」はどっちかってとオブジェクトのかたまりを
どう型つけるか、階層化するかの言語構造のことを言いがちだけど
指向だけどな
むしろメッセージングの重要性は高まってきてると思うけど、頭のいいひとにしか扱えない感じだな
馬鹿は階層にこだわるしかない
オブジェクト指向で利点はデータモデルを表現できることだろ
それが言語上で構造体なのかクラスベースなのかアクターなのかは大きな問題じゃない
ウィンドウに開けとか閉じれとか大きくなれとか指示してれば、それはもうオブジェクト指向なので、ウィンドウ・システムとオブジェクト指向はだいぶ相性が良い。
>>891
hogehoge("ソポポポぉおおおおおん!");
↑これはオブジェクト指向で書いたプログラムです!!!!
って言ったらそういう解釈もありだなって思うの?
俺はオブジェクト指向アンチ!
絶対にオブジェクト指向なコードなんて書かね!といった直後に
const dialog = document.getElementById("dialog");
dialog.addEventListener("click", e =>{イベント処理});
みたいなコードを書いていたら、そのコードはオブジェクト指向ではないと解釈するの?
なわけないよね >>905
思うよ
するよ
思い込みの激しい人だな >>909
嘘付くのやめていただけますか?
まず、hogehoge(略)をどのように捻くれた解釈をしたらオブジェクト指向に見えるのか解説してくれますか? struct HogeHoge {
void operator(const char *str) const {
std::cout << str;
}
};
HogeHoge hogehoge;
プログラムを書いた人がオブジェクト指向設計ですと言っているものまでオブジ
ェクト指向ではないと否定するのは愚策言ったが最後、ではオブジェクト指向で
はない何なのかを述べねばならなくなるからなgoto否定論者にbreakは実質goto
とかあまつさえgotoを使ったプログラムを書いてgoto否定論者に対して正当性を
主張した場合に生じる惨状と同じで社会スキル的な意味で避けるべき理由が十分あ
る
>>900
オブジェクト指向もどき が オブジェクト指向でないのは
くじら が さかな で無いのと同じだ
馬鹿は知らないくじら構文
そして、応用系
オブジェクト指向もどき が オブジェクト指向でないのは
ヒトもどきのお前 が ヒトでないのと同じだ c++スレでオブジェクト指向の話をするのは無理がある
C++のオブジェクト指向全盛期は20年以上前だからね。
その後は黒魔術全盛期がやってきた。
組み込みC++だと普通にオブジェクト指向全盛期だけどな
uart1.write(data);
のような記述が当たり前になってきて有難い
組み込みってマクロ大好きだからオブジェクト指向の書き方と相性悪いと思ってたけど最近はそうでもないの?
それともそう描いたときのuart1やwriteもマクロなの?
そら組み込みっていってもいろんなレイヤがあるからね
>>910
fprintf(stdout, "そぼぼん");
みたいになってることもあるからな
obj.func(...);という構文は絶対条件じゃないんだよ
PostMessage(hWnd, WM_APP, 0, 0);なんてのだってオブジェクト指向だし >>915
なら
ヒトもどきのお前 が ヒトでない
が偽だから
オブジェクト指向もどき が オブジェクト指向でない
も偽だな。 >>923
そう、Cの時代からオブジェクト指向はあったよな 別に
objに対してfunc()というメッセージを送るのと、
PostMessage()という手続きにhWndを渡すのでは意味が違う
obj.func()をコンパイルしたらfunc(ptr, ...)とptrとして&objを渡すコード、みたいなものになるではないか、というのはそれはそうだが
そいつは意味を捨てているからにすぎないことは統語論的に考えたらワカル
例: getter
x = obj.getX(); // I get the value X となるようにobjに仕事させよという意味(CPUにobjを使役するよう命令している
x = getX(&obj); // get the value X from (/ by / with / in) the object obj、という意味(CPUにやれと命令している
オブジェクト指向って
単にクラス関数を呼んだからオブジェクト指向
とかいう単純な物じゃない
プログラムやモジュールの設計思想の話
>>927
お前がそうやって理解したのは理解するけど、ちょっとどうかなあ >>915
その主張において
・「ヒトもどき」と「ヒト」の違いは何か。「ヒトもどき」が「ヒト」でないとする根拠は何か。
・「ヒトもどき」の「もどき」の意味が「指向もどき」の「もどき」の意味と同じとする根拠は何か。
間違った根拠と間違った推論から導いた結論に意味はないから、上記に答えられないならその主張に議論する価値は無い。
論理をかじって知ったかぶりしたくなるのもわかるけど、もうちょっと勉強した方がいいよ。 >>930
それはそうで世に膾炙しているオブジェクト指向はちょっとどうかしているせい
objにXの値を寄越すようにメッセージを送るのであれば
x = obj.getX(); // (1)
ではなくて、
x = obj.giveX(); // (2)
でないとおかしいはず……
(1)に対して合理的な意味づけを行おうとすると>>927みたいな解釈にならざるおえない
やっぱ世の中がおかしい objっていうデータ構造体からxを取得するからgetXって解釈してたわ
オブジェクト指向って obj.method( ) という構文だけの話じゃないでしょ
継承・多態性・オーバーライド・オーバーロード・オーラロードなどの機能もオブジェクト指向の重要な要素じゃないの
あと機能とは別にカプセル化などオブジェクト指向で周知された設計手法もある(これはオブジェクト指向でなくてもできるけど)
>>934
826書いたの俺だからわかるよ
でも文法なんて些細な話よ hogehoge書いた本人はたぶんそこまで考えていないよ
それこそ思い込みが激しいでは?
>>934
オブジェクト指向の「オブジェクト」は、主体・客体の「客体」として解釈するといい。主体はプログラマーとかCPUとかの指示・命令をする主体。 オブジェクト指向は我々プログラマにとって必要です
>>938
私はオブジェクト指向を知っていることに誇りをもっています >>934
俺はオブジェクト指向がうまいから職場で神扱いされてる
>>919
お前はオブジェクト指向ができるの?
なんとか言ったらどうなんだ >>911
そうやってオブジェクト指向ができないからニートだと思われてるんだよww
これに懲りたらオブジェクト指向を学んでこいwww >>924
てめーなんざにオブジェクト指向がわかるわけねぇだろう
とっとと消えろ 何言ってんだこいつ
オブジェクト指向を知ってるからって偉そうにしやがって
>>927
いや、意味は違わないよ
違うのはその結論(コード)に至るまでの考え方だ
オブジェクト指向は構文ではなく考え方
だからアセンブラでもできるんだ >>931
くじら構文が論理?
案の定、どこまで馬鹿なんFラン確定のお前ww >>925
おまえもFラン確定だなww
義務教育から遣り直せ。 アホだからアホでも使えるように構造化するのを大事にしてる
802から始まって、いまだ発散してるから
線引含めてめんどくせぇ話だなというのはわかる
>>949
想定以外の使い方は許さない方が無難かね。Conceptsが普及すればc++でも制約プログラミング流行るかな。 プログラムの可読性は大事だが
それをアホへの迎合と勘違いしてはいけない
COBOLからの教訓だ
可読性とは結局
自分ルールに添ってるか
自分と同レベルの知識や頭脳か
になるからねえ
>>939
>オブジェクト指向の「オブジェクト」は、主体・客体の「客体」として解釈するといい。
どういうこっちゃ……
オブジェクトを客体とみなすルールは必ずしもその客体が主体的に動くシチュエーションの禁止にはならない
客体が主体的に動くシチュエーションを禁止したかったら、複文の禁止までルールを推し進めねばならん
例:
進駐軍の兵隊オブジェクトに「Get chocolate」と言ったらそのオブジェクトがチョコレートの調達に走るのが妥当
この場合進駐軍の兵隊オブジェクトが主体的に動く(倉庫等に取りに行く)ことが気体される
進駐軍の兵隊オブジェクトに「Give me chocolate」と言って初めて発令の主体たるCPUがチョコレートを受け取れる どっちにせよチョコを取りに行ったりくれたりする主体は進駐軍の兵隊オブジェクト
さらに進駐軍の兵隊オブジェクトが倉庫の受付に「Get chocolate」言うかもしれんし
そうすると進駐軍の兵隊オブジェクトがチョコレートを受け取る主体にもなり得る
こういう入り組んだ解釈を一切禁止ということならやっぱ複文禁止しか……
それはそれで新しいプログラミングパラダイムが拓けそうやがどうかなあ……
ていうかそういうのはどうでも良いんですよそれよか>>695
のコードについて質問なのですが
fouri()の中に
sin1 = table[t0];
cos1 = table[t1];
というのがあって、cos1 + i * sin1が1の原子2^N乗根だと思うじゃん?
しかし動きを見ると5.333333乗根とか(これはまだわからないでもない
4.571429乗根とかわけわかんない数値が入って来るんですがなんで?!
ボスケテ、 >>957
(1 << p) が一周
(1 << p - i) は一周を(1<<i)で割った値、つまり(1<<i)乗根
__ __ ___ _____ _____ ___ ___ ___
| | / / | // | /__ __/ [][] _| |_| |__ _| |_
| |. / / / / / / ̄ ̄|. l / / | _ | |_ レ'~ ̄|
| | / / / / / /. / / | |___  ̄| | / / / /| |
| | / / / / /  ̄ ̄ / \__| | |  ̄ /_ / | |_
| |. / / / / / / ̄ ̄ ̄ |_| |__| \/
| |/ / / /. / /
|. / / / / /
| /. / | ./ /
 ̄ ̄ ̄  ̄ ̄ ̄.  ̄ ̄
>>958
1<<i乗根は結局2^i乗根ということで、
(2*M_PI)/atan2(sin1, cos1)が2^iすわなち整数にならないとおかしいんじゃないの
しかし実際は16乗根とか64乗根に交じって5.333333乗根とか4.571429乗根とかが混じってくるのでつ∀`;) そりゃ(1<<i)乗根をn乗してるからねえ
出てくるんじゃないの?
何か問題?
わかりた
(1 << i)/jが割り切れない場合のw^jかorz
マクロでしか実現できない機能って何がありますか?
派遣先のライブラリがマクロだらけで驚いたので気になりました
いろいろあると思うけど、ログ関数とか作るときに関数名とか行数とか出力させたかったらマクロ使うかな
コンパイラによってつける属性変えるときとか
public:をオンオフしたり構文に影響を与えるものとか
MSVCの標準ライブラリ覗くと
#define _CONSTEXPR20 constexpr
//#define _CONSTEXPR20 inline //C++17以前
とか書いてあったりする
式を文字列として展開するのもマクロじゃなきゃできない
#define A(exp) #exp
文字列連結(#define A(a1,a2) a1##a2)もマクロじゃなきゃできないけどデバッグが無理ゲーになるから使わん
__FILE__や__LINE__を使うのを隠蔽したいときはマクロにするしか、
あと文字列を結合してシンボルを合成するとか、
#define cat(a, b) a##b
#define cat2(a, b) a/**/b
マクロでぐにゃぐにゃしてる中はデバッガで止めづらくなるね
文字列生成(そして文字列の連結) 識別子の連結 はプリプロセッサじゃないとできないし
というか、inline 指定を絶対化すればいいだけ
どうして inline 指定してもインラインされない場合がある、とか勝手なことをするのか不明
#define AAAA xxxx
#include "****"
#undef AAAA
#define AAAA yyyy
#include "****"
#undef AAAA
>>971
再帰する場合は仕方が無い
ポインタ経由で呼び出す場合も仕方が無い >>973
閾値を決めて閾値を超えてとまらないことがわかったら「エラーを出してコンパイルを止める」べきで、勝手に inline を無視してコンパイルしなおすなんて言語道断、コンパイラ作者の独善だね #includeと#defineで疑似メタプログラミング的なことをすることはある
テンプレート化出来ない場合もあるからな
constexprが中途半端で結局constevalが追加されたのに倣えば、inlineの強制バージョンも標準化していいはずだよな
既に独自実装のalways_inlineや__forceinlineはあるんだし
C++ は見かけ上の動作が仕様通りならどういう機械語を生成するか規定しないのが原則だから……。
言語仕様的には constexpr やら consteval も定数式として使える範囲を拡大しただけで、生成される機械語に対しては要求をしてない。
(想定はしていると思うけど。)
翻訳系の仕事はソースコードの意味を変えずにオブジェクトコードに翻訳することで(ry
狭義のアルゴリズム(シングルスレッド条件、有限ステップで結果出力)の入力と出力の関係が翻訳前後で同じ結果になるならおk
最適化はボランティア活動みたいなもん
だいたいコルモゴロフ複雑性的な意味で一意な解など一般に無いし
>>978
>C++ は見かけ上の動作が仕様通りならどういう機械語を生成するか規定しないのが原則だから……。
だとすると、inline の存在自体が原則に大きく矛盾していることになりますねえ >>982
そんな曖昧な態度だから、マクロによるインラインが跋扈してしまうんです、inline に限っては強制力を伴うべきでしょう、#define マクロを葬り去りたいのなら そう
あくまでヒント
ヒントになった理由は
世の中のプログラマーがアホだから
CRTPにするとインターフェース継承してもインライン展開されるのほんとまじ意味わからん
>>984
マクロ跋扈とを許す設計者の方がもっとアホですね 誰の方がアホとかどうでもよくて
アホだからそういう仕様になった
ちと別件に取り掛かったのでソースコードを見ながらではなく想像やが
>>695 のソースコードでやっている頻繁なswapの意図がわかった希ガス
X(k) = Σ[j=0..n-1]{ x(j) * w^(j*k) }
を計算するとき項の足し合わせ順序はどうでも良く、かつk>1なら
j * k = 0 (mod n) --- (1)
となるx(j) * w^(j*k)が複数回現れるから、(1)を満たす項の出現回数が大きいものを最初に足し合わせたらたちまち
(出現回数)-1語 のメモリが空く、というのが基本的着想で、
これを異なるkについて繰り返し行う場合(1)を満たす最大の出現回数となるjの系列jはk毎に相違するから、
kについての繰り返しについても部分計算を片付けてメモリを空けつつ進められ、
結局jとkの2重ループについてメモリを空けつつつつがなく進められるというしくみ(多分 >>981
inline は ODR の例外。 また、異なる翻訳単位の同じ定義が統合されることを保証する。
これは C++98 のときからそう。
インライン化が望ましいことの指示であるとは書いてあるけど、
今では変数にも inline を付けることが出来るようになったのはもはや inline は ODR の例外としての意味がメインだと考えるべき。 >>981
展開を強制したいならforceinlineあるやんけ(メジャーなコンパイラの拡張だけど >>952
こんなのあるんか便利そうだな
まあ汎用的なデータ構造だと暫定未定義にするだけでもいいと思うけど、用途が決まってるクラスに関しては制約をつけたものを用意しておくのが無難だろうね >>991
情報ありがとうございます。
>>990
ここで One Definition Rule がリファーされるのに直観的違和感を覚えます‥‥
が、反論はゆっくり考えますのでしばらくお待ちください、様々な視点を提供いただき感謝しております >>994
inline というキーワードの選択が不自然なのはわかるが inline はインライン化の指示というよりは
インライン化に都合のよいように制限する指示と考えるとそんなに不自然でもない。
① C/C++ は翻訳単位ごとに個々にコンパイルしてからリンクする手順を取る
② 他のコンパイル単位にある定義の内容はわからんのでインライン化するためには翻訳単位の中に定義がある必要がある
③ ヘッダに関数定義を書きたい
④ ヘッダに定義を書くと ODR 違反やろ
⑤ じゃあ ODR の例外を設けよう。 inline って付けたら ODR の例外な! >>995
>>995 でいう定義は宣言に置き換えるべきでは?
ODR はあくまでも定義の話であって、宣言の話ではないかと考えます、私の勘違いでしょうか?
実装的には inline のついた関数定義が外部にリンクされる可能性があれば、すなわち extern な iniline 関数があれば、リンクのためのコード体を、各所に inline に展開されるコード体とは別に(こっそり)用意しておく、見たいな感じで十分に実装可能ですね >>996
外部に見せる用の実体のある定義は実際に用意される実装が多いと思う。
でも、その外部では実体を参照することは出来てもインライン化できないよね、各翻訳単位で定義が存在する必要があるよねということを言ってる。
その上で現在では LTO が普及したのでどうでもよくなったけど。 >>997
なるほど、やっと理解しました
LTO: Link Time Optimization ですか‥‥、トラブルの元で胡散臭いと思っている私は古い人なんでしょうね‥‥、.obj がコンパイラ固有になるのも嫌ですし 海外の専門用語はわかりにくいのう
日本風にリンオプとか略してくれればいいのに
イニシャリズムみたいな言い方だとなんて言うんだろ
>>999
村上龍の「5分後の世界」では、略語は使うな、ちゃんと元の言葉を使え、と教育されていますね
ジョージ・オーウェルの「1984」では、略語は謀略的な意味で使われる(小説末尾の appendix: New Speak 解説のカテゴリーB)ようですね
これらに影響されて、略語を連発するのは望ましくないという言語観を私は持っていますが lud20220705064529ca
このスレへの固定リンク: http://5chb.net/r/tech/1649979572/ヒント:5chスレのurlに
http://xxxx.5ch
b.net/xxxx のように
bを入れるだけでここでスレ保存、閲覧できます。
TOPへ TOPへ
全掲示板一覧 この掲示板へ 人気スレ |
Youtube 動画
>50
>100
>200
>300
>500
>1000枚
新着画像
↓「C++相談室 part160 ->画像>1枚 」を見た人も見ています:
・C++相談室 part156
・C++相談室 part155
・C++相談室 part157
・C++相談室 part158
・C++相談室 part152
・C++相談室 part154
・C++相談室 part148
・C++相談室 part124
・C++相談室 part150
・C++相談室 part162
・C++相談室 part147
・C++相談室 part144
・C++相談室 part137
・C++相談室 part142
・C++相談室 part146
・C++相談室 part134
・C++相談室 part143
・C++相談室 part137
・C++相談室 part138
・C++相談室 part135
・C++相談室 part130
・C++相談室 part133
・C++相談室 part141
・C++Builder相談室 Part21
・0からの、超初心者C++相談室
・C++相談室 part131 [無断転載禁止]
・Cygwin + MinGW + GCC 相談室 Part 8
・Cygwin + MinGW + GCC 相談室 Part 3
・C♯相談室 Part20
・屯田五目須のお悩み相談室
・Mac G5 中古買入相談室
・河田さんによる人生相談教室
・自営業 悩みごと相談室 16
・MFC相談室 mfc23d.dll
・自営業 悩みごと相談室 40
・C#, C♯, C#相談室 Part79
・C#, C♯, C#相談室 Part94
・C#, C♯, C#相談室 Part91
・C#, C♯, C#相談室 Part93
・C#, C♯, C#相談室 Part91
・C#, C♯, C#相談室 Part90
・自営業 悩みごと相談室 41
・自営業 悩みごと相談室 47
・自営業 悩みごと相談室 46
・C#, C♯, C#相談室 Part95
・自営業 悩みごと相談室 51
・C#, C♯, C#相談室 Part94
・0からの、超初心者C言語相談室
・自営業 悩みごと相談室 48
・自営業 悩みごと相談室 50
・自営業 悩みごと相談室 45
・自営業 悩みごと相談室 49
・自営業 悩みごと相談室 43_
・【男飯】Rickの相談室【言霊】
・ライダーマンのお悩み相談室
・[特設]サマータイム対応相談室
・[特設]サマータイム対応相談室
・【イエス』ユダの相談室【口寄せ】
・★★★ゲイの生活相談室3★★★
・★★★ゲイの生活相談室2★★★
・■コンサル田中の経営相談室。■
・【太気拳】なんでも相談室 part6【意拳】
・マイコンソフト 悩み事相談室 3
・アパート経営なんでも相談室【135号室】
・【太気拳】なんでも相談室 part3【意拳】
07:10:27 up 27 days, 17:34, 1 user, load average: 7.12, 7.90, 8.72
in 1.980367898941 sec
@1.980367898941@0b7 on 010821
|