X



C++相談室 part153
■ このスレッドは過去ログ倉庫に格納されています
0751デフォルトの名無しさん
垢版 |
2020/12/18(金) 18:41:07.57ID:UPU6Cu+L
gccの場合、未実装でもスタブだけ存在する場合があるんですよね。
つまり、コンパイル時やリンク時にはエラーにならない。
悪いことに実行時にもエラーにはならず、静かにスルーされる場合さえあるんです。

ここまでの流れでもお気づきでしょうが、gccの熱烈なファンは、gccが後れを取ることが許せないんですよ。

ですから、gccの熱烈なファンサイトより、GNUのマニュアルを見ることをお勧めします。
マニュアルを見れば、たいていは、きちんと書いてあります。
0753デフォルトの名無しさん
垢版 |
2020/12/18(金) 19:59:32.56ID:A9pQAhpY
>>748
ここ以外に各コンパイラでの実装具合が上手い事まとまってるサイトとかあんの?
0754デフォルトの名無しさん
垢版 |
2020/12/18(金) 20:30:00.87ID:A9pQAhpY
コンパイラのサポート状況 (C++17) - cppreference.com
https://ja.cppreference.com/w/cpp/compiler_support/17

こっちでの表現は「初等文字列変換」になってんのか
分かるワケねーな
0755デフォルトの名無しさん
垢版 |
2020/12/18(金) 20:48:34.81ID:A9pQAhpY
>>746
N4713のpdfとかどこをどう漁れば出てくんだ?
全然見つからないんだけど
0757デフォルトの名無しさん
垢版 |
2020/12/18(金) 20:53:49.00ID:UPU6Cu+L
https://github.com/cplusplus

ここで検索すればドラフトならみられますよ。
向こうも見てるだろうけど。
0758◆QZaw55cn4c
垢版 |
2020/12/18(金) 21:01:49.42ID:ivKQNPRV
>>751
関係ないけれども、gcc って今は C++ で記述されているんですよね
長い間私はそれをとても残念に思っています
オプティマイズは苦手であってもいいから C で記述されている C++ 処理系って存在するのでしょうか?
0760デフォルトの名無しさん
垢版 |
2020/12/18(金) 21:20:36.71ID:UPU6Cu+L
おーけーぐーぐるえぬよんなないちさん、と言いました。
0761デフォルトの名無しさん
垢版 |
2020/12/18(金) 21:37:45.97ID:A9pQAhpY
行き着いた、ってのは>>746の彼がだよ
どういう経緯で彼が「これこそが勉強すべきドラフトである」と結論したんだ?
0762デフォルトの名無しさん
垢版 |
2020/12/18(金) 22:07:42.21ID:TZi3wQJw
俺がN4713を見ていたことが、えらい気に入らない人がいるようだね
知らんがな
仮にwebページ見られなかったとして、どうやってN4713を落とせたのかとか
いちいち開陳せにゃならんの?
0763デフォルトの名無しさん
垢版 |
2020/12/18(金) 22:09:31.45ID:XdXLiWO3
>>722 >>725
差分プログラミングとかいう腐りきったプログラミングパラダイムでは
ハイディング上等なんだ、
そう思っていた時期が(ry
0764デフォルトの名無しさん
垢版 |
2020/12/18(金) 22:11:14.08ID:UPU6Cu+L
こちらから見えるということは、向こうからも見えてるということです。
気を付けなされよ。
0765デフォルトの名無しさん
垢版 |
2020/12/18(金) 23:08:30.12ID:A9pQAhpY
>>762
「ドラフトはこれを見ましょう」と大々的に紹介されてるわけでもなし、
落としたDLしたじゃなくて、どうしてそれを『選んだ』のかが不思議なんだよ
普通の経路じゃまず選べない
0766デフォルトの名無しさん
垢版 |
2020/12/18(金) 23:26:57.29ID:yxlBLqeq
c++ってやたうんちくばっか言う人多いよね
そんな人に限って仕事ができない
やたら得意げに説明してるけど、細かいことばっか気にしてて結局納期遅れwww
それなら、ある程度チャランポランでも納期通り出荷して、最悪現地デバッグの方がまだ救いようがある
0768デフォルトの名無しさん
垢版 |
2020/12/18(金) 23:48:52.19ID:A9pQAhpY
これの話の続きなのか
なら不思議は解消だ
謎は全部解けた


C++相談室 part151
https://mevius.5ch.net/test/read.cgi/tech/1589424805/20

20 名前:デフォルトの名無しさん[sage] 投稿日:2020/05/14(木) 18:32:35.87 ID:jF4/VTtK
>>17
ggrks
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4713.pdf

あとcppreferenceはある意味ファンサイトみたいなものなので、何らかの標準化組織の公式サイトというわけじゃないよ
0769デフォルトの名無しさん
垢版 |
2020/12/19(土) 00:02:31.33ID:yZxXMpJa
そんな昔のスレは関係ないのでは?
0770デフォルトの名無しさん
垢版 |
2020/12/19(土) 00:20:03.02ID:0cb9HLXb
>>766
こういうとこでの情報提供や議論はともかく、うんちくでマウント取りたがるのは自信の無さの裏返しだからねぇ
0771デフォルトの名無しさん
垢版 |
2020/12/19(土) 00:23:06.73ID:sq702jvD
うんちくがうっとおしくて、仕事なら自分が勝ってる!って思い込みたいだけなんじゃないの
0772デフォルトの名無しさん
垢版 |
2020/12/19(土) 00:26:01.61ID:yZxXMpJa
図星つかれたからうんちくと言ってるのでは?
0775デフォルトの名無しさん
垢版 |
2020/12/19(土) 03:34:46.64ID:yZxXMpJa
この野郎。
ウンチクンめ。
0776デフォルトの名無しさん
垢版 |
2020/12/19(土) 06:01:48.82ID:u3YcA1fK
>>765
だから何?
俺がどのドラフトをDLするかを
いちいちあんたの承認とらにゃいかんの?
こっちゃ不思議がられても関係ないんで
いちいち申告してもらわなくていい
0782デフォルトの名無しさん
垢版 |
2020/12/19(土) 13:26:14.15ID:biviwPkb
正式版は有料だがドラフトはタダで手に入るからヒジョーに得がたいが、
やっぱドラフトの内容は随時変わるから、
居丈高に相手を論破してなじり倒すにはやっぱ最新のドラフトでないとイマイチ、
0783デフォルトの名無しさん
垢版 |
2020/12/19(土) 13:50:09.89ID:B7wez7Ce
よくわかりませんが、Chromeで実装されてるお試し機能がSafariで実装されてないからSafariはクソというのと似た話ですか?
0784デフォルトの名無しさん
垢版 |
2020/12/19(土) 14:02:30.06ID:biviwPkb
Chromeで実装されてるお試し機能がSafariで実装されてないからSafariはクソとなじったら
ドラフトの版が変わったらChromeの方がクソだった、みたいな
0786デフォルトの名無しさん
垢版 |
2020/12/19(土) 18:35:13.01ID:dM4VNuuI
C++のプロジェクトに始めて関わって既存コード眺めてたんだけど、関数やメソッドを呼び出す時って、呼び出す側が結果を格納する箱となる変数とかポインタを渡して、
メソッドや関数は成功失敗のint値をreturnする書き方しているんだけど、
これってC++の書き方なの?
0790デフォルトの名無しさん
垢版 |
2020/12/19(土) 18:47:02.46ID:5blMWj9s
>>788
スマートポインタが実用になったから、それでメモリ管理する方が文字通りスマートになった
だから、必要なら関数内部でメモリ確保する方法でもメモリ管理ミスが起こりにくい
0791デフォルトの名無しさん
垢版 |
2020/12/19(土) 19:25:11.20ID:p4OhEmVF
>>786
c++というかcの伝統だわな。
オブジェクトをヒープに置かなくていいという性能的なメリットもある。
0792デフォルトの名無しさん
垢版 |
2020/12/19(土) 19:59:05.03ID:HGWooSzm
Cだと不定長の配列やら文字列やら返す関数ひとつ作るだけで大事件だからなぁ
「いいですかー!この関数が返す配列はヒープ確保したものですよー!使い終わったらXXX__free()で解放してくださいよー!
解放忘れたらリークしますよー!!!絶対に最後に解放してくださいよー!忘れないでねー!絶っっっっっっ対に忘れないでねー!!!」
ってコメントやドキュメントやサンプルコードにしつこくしつこくしつこく書いて書いて書いて徹底的に注意喚起しないといけない
そして当然のように忘れられて「分かりにくい関数作りやがって」って叩かれる所までがお約束

vectorやstringをゴロッと返せば済む今はいい時代になったと思う
0794デフォルトの名無しさん
垢版 |
2020/12/19(土) 20:19:43.48ID:yZxXMpJa
右辺値参照のおかげですよ。
0795デフォルトの名無しさん
垢版 |
2020/12/19(土) 21:06:02.20ID:ISt3uDJM
質問@:
例えば…std::vectorで配列を確保したとします…push_backで追加した時に…アロケーター??が…
アドレスの再割当てをしたとします…この時…vectorは要素のアドレスは連続である事は保証されますが…
この時のアドレスの再割当てって…同期?非同期?どうなるの?
つまり…push_back時に同期で行うのか…非同期でロジック流れて行っちゃうか…って所…。
非同期だと怖いんだけど…。

質問A:
std::vector<char>とやった場合…data()でchar*を取れますが…std::vector<char>に'\0'の概念って
あります?どうなんでしょうねぇ…。'\0'のために+1多めに確保するなんて事はしないと思いますが…
どうなん?内部でどうなってるのかは…解りません…。
0797デフォルトの名無しさん
垢版 |
2020/12/19(土) 22:28:27.67ID:yZxXMpJa
>>795
アロケータの内部実装がどうなっていようとも、push_back()から戻った時にはデータは追加されているので、問題ないのでは?

std::vectorは末尾に0を追加したりしません。
0799デフォルトの名無しさん
垢版 |
2020/12/19(土) 22:59:41.56ID:vl/1bKki
確かにCだと必要メモリの問い合わせの為に二度呼び出したり面倒でしたわ…
0801デフォルトの名無しさん
垢版 |
2020/12/19(土) 23:20:05.98ID:biviwPkb
>std::vectorは末尾に0を追加したりしません。
左様いまだにstd::string::c_str()が内部で何をやっているのかわからん…
0804デフォルトの名無しさん
垢版 |
2020/12/20(日) 09:47:23.01ID:C7ljP8CG
>>799
でも「直接メモリいじってる」て感覚があって好みだったなぁ
まあ自己満足でしかないのだけれど
0805デフォルトの名無しさん
垢版 |
2020/12/20(日) 10:51:49.27ID:KSHt8d36
今どきのC++(C++11以降)だと基本的にスコープ抜けたら開放される方式で実装するものなの?
なるべくnewせずにスタック変数にする or ヒープ確保するにしてもスマートポインタ使う
とかで
0808デフォルトの名無しさん
垢版 |
2020/12/20(日) 11:27:39.08ID:KSHt8d36
そうかな?
ライブラリとかでわざわざInitialize/Finalizeとか明示的に呼ばなきゃいけないの
結構ある気がするけど
0809デフォルトの名無しさん
垢版 |
2020/12/20(日) 11:52:43.58ID:mkiVvOjR
Finalizeが失敗する可能性があってエラーハンドリングしないといけない場合はあえてそうしているかもね
0810デフォルトの名無しさん
垢版 |
2020/12/20(日) 13:25:24.04ID:8M1CEzDz
あえてね!
0811デフォルトの名無しさん
垢版 |
2020/12/20(日) 13:31:53.40ID:1w6q/2mK
というかスコープ内で完結しない、グローバルな状態を持つものならそうするやろ
0813デフォルトの名無しさん
垢版 |
2020/12/20(日) 13:52:50.85ID:BqPIIXKk
お前が挙げてたそういうライブラリがInitialize/Finalizeの中で何やってるか考えれば自ずと答えはでるだろ
0814デフォルトの名無しさん
垢版 |
2020/12/20(日) 14:05:47.98ID:S1Ae4PMu
グローバルな初期化と後始末ならInitialize/Finalizeとか明示的に呼ぶ設計のが一番闇が少ない
ファクトリメソッドでオブジェクトを作ることにして、ファクトリ元オブジェクトの
コンストラクタとデストラクタでそれぞれInitializeとFinalizeでも良いが(呼び忘れ対策は完璧になるが
InitializeやFinalize自体のエラーハンドリングを考えるとやっぱビミョー
0815デフォルトの名無しさん
垢版 |
2020/12/20(日) 21:00:32.48ID:POdM0+je
変数名で対象変数のポインタを取得してくる実装(リフレクション?)をしたいんですけど
対象変数をポインタテーブルとかに書き下すことなくコンパイル時に変数名リテラルと対応するポインタを自動生成することってできますか?
0821デフォルトの名無しさん
垢版 |
2020/12/21(月) 02:47:40.73ID:HVkDagg+
数値計算に興味がある方に聞きたいのですが、ベクトル演算はどのように実行していますか?
valarrayかeigenなのか、vectorでforを回すのか…C++の常識ではどうやるのか伺いたいです
0822デフォルトの名無しさん
垢版 |
2020/12/21(月) 03:43:19.44ID:tQs5NvLs
>>821
blasやlapackにルーチンがあるならそれを使う(ラッパーを作る)
要素の持ち方はvectorでもvalarrayでもその他クラスでも、一次元的にメモリに格納されるなら何でも良い
二次元以上の配列が行優先か列優先かさえ固定しておけば何でも良い
0826デフォルトの名無しさん
垢版 |
2020/12/21(月) 19:14:50.06ID:5SN4/ItM
みなさんありがとうございます
主に多次元の常微分方程式を解く目的でFortranからc++へ移行しようと考えていたのですが、ベクトル和やスカラーベクトル積等の計算がFortranほど簡単ではなさそうに感じて質問しました
eigen等を活用しつつ頑張ってみます
0827デフォルトの名無しさん
垢版 |
2020/12/21(月) 20:22:43.20ID:94n2fENi
そりゃそうだろな
汎用機の時点で科学計算と銀行計算の両方ができる
だから科学専用に作られているFortranと汎用のC言語は根本的に用途が違う

そもそもFortranの後に作られたのがC言語だし、時期も近いし、
だからFortranで出来ることをわざわざC言語でやったりはしない、
用途での住み分けがそのころからある

後発の方が簡単に出来るというのは幻想
0828デフォルトの名無しさん
垢版 |
2020/12/21(月) 21:07:13.89ID:HyYYfsZ0
簡単なことは簡単に言え

既成のソフトを使い慣れているならそれを使え
不満があるときに自分の理想との違いを埋めるのに
打って出る手段の1つにプログラミングがある
それはC++に限らない
たまたまC++を選んだのなら自らの名誉に恥じぬ努力をせいや
これまたC++に限ったことではないがな

あれ使えばいいやー、これ使えばいいやー
自分なんか物事を考えるだけ無駄なんだー

こういうスタンスのやつ、俺は反吐が出るほど大大大大大嫌い
0829デフォルトの名無しさん
垢版 |
2020/12/21(月) 23:35:19.34ID:5SN4/ItM
ヘッダファイルに
double hoge = 1.0/3.0;
みたいに書いてた場合、除算はどのタイミングで行われるんですか?初回呼び出し時のみですよね?
0830デフォルトの名無しさん
垢版 |
2020/12/21(月) 23:51:47.03ID:3sOyVj6l
大昔(40年ぐらい前?)とかもんのすごい特殊な環境用のコンパイラはしらんが
今の普通のコンパイラではそれはコンパイル時に計算される
0833デフォルトの名無しさん
垢版 |
2020/12/22(火) 02:07:17.74ID:bzbnZ90n
>>826
Fortranでも基本的にblasとかlapackに投げるだけじゃないの?
しかもC/C++からFortranルーチン呼べるし

「FortranではやりやすかったがC/C++ではやりにくかったこと」って非常に興味あるから具体的にどういうものか教えてほしい
0834デフォルトの名無しさん
垢版 |
2020/12/22(火) 06:36:52.20ID:GAvzsgv/
blasとかlapackがfortanで記述されてるからね
中身いじるような人がどれほどいるかはわからんけど
0839デフォルトの名無しさん
垢版 |
2020/12/22(火) 10:18:51.71ID:hq0fof4K
Cコンパイラ作ったよね。
0841デフォルトの名無しさん
垢版 |
2020/12/22(火) 16:28:31.76ID:cQdMNR1v
>>834
中身いじるような人がいないからこそ、fortranで(blasやlapack)でできる線形代数計算はC/C++でもできるだろうと思うのだが
0842デフォルトの名無しさん
垢版 |
2020/12/22(火) 23:28:55.02ID:cWduRySe
constexprともなるとどこまでコンパイル時計算してくれるかは
処理系依存と聞く…!
関数が絡んだ場合だけかもしれんが
0843デフォルトの名無しさん
垢版 |
2020/12/22(火) 23:41:36.57ID:Yt10VcGs
>>842
constexpr にまつわるルールはコンパイル時計算してくれる最低ラインを定めるもの。
どこまでコンパイル時計算してくれるかが処理系依存なのは初期のC言語から変わりないよ。
0846はちみつ餃子 ◆8X2XSCHEME
垢版 |
2020/12/23(水) 02:19:42.25ID:wEQUKH0P
>>844
constexpr 指定が付いた関数は定数式が要求される文脈において
与えられる引数も定数 (定数式) である場合に限りその関数呼出しは
定数式という扱いになる。

定数式が要求される文脈で入力が定数でないならエラーになるし、
定数式が要求されていない文脈であれば実行時計算だよ。

実行時計算にはならない (実行時計算が必要な文脈だとエラーにする) 指定として consteval が導入されたのは、
constexpr の文脈依存な挙動が面倒だと思ったやつがいたからだと思うよ。
0850はちみつ餃子 ◆8X2XSCHEME
垢版 |
2020/12/23(水) 09:20:18.63ID:wEQUKH0P
自動で呼び分けて欲しいと思うこともあれば
コンパイル時に限って欲しいことだってあるだろう。
■ このスレッドは過去ログ倉庫に格納されています

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