探検
C++相談室 part152
レス数が1000を超えています。これ以上書き込みはできません。
1デフォルトの名無しさん
2020/07/12(日) 13:42:20.13ID:TX1mpKr62020/07/12(日) 13:42:53.37ID:TX1mpKr6
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。
前スレ
C++相談室 part151
https://mevius.5ch.net/test/read.cgi/tech/1589424805/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.105【環境依存OK】
http://mevius.5ch.net/test/read.cgi/tech/1556142878/
■長いソースを貼るときはここへ。■
http://codepad.org/
https://ideone.com/
[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
テンプレここまで
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。
前スレ
C++相談室 part151
https://mevius.5ch.net/test/read.cgi/tech/1589424805/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.105【環境依存OK】
http://mevius.5ch.net/test/read.cgi/tech/1556142878/
■長いソースを貼るときはここへ。■
http://codepad.org/
https://ideone.com/
[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
テンプレここまで
2020/07/12(日) 13:47:57.74ID:CSJoJ4mx
STLつかうと一気に実行ファイルサイズが10倍に?!
環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?
#include <stdafx.h>
後死ね。
言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。
環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?
#include <stdafx.h>
後死ね。
言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。
2020/07/12(日) 14:06:26.23ID:tkU6cDNN
>>3
void君まだ生きてたの?
void君まだ生きてたの?
2020/07/12(日) 19:59:20.10ID:7bgQZ4MZ
-Wl,--start-groupって-Wl,--end-groupで閉じなくてもいいの?
2020/07/12(日) 22:51:08.59ID:CSJoJ4mx
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします!
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします!
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします!
2020/07/13(月) 04:14:20.50ID:3a05UOb2
ある整数nが他の整数の4乗数であることも確かめられない奴らが常駐してるC++スレに何の意味があるのだろうか、、、
素直にsqrtなりpowなり使えば良いのに無意味に二分探索とか言い出す奴まで現れる始末
素直にsqrtなりpowなり使えば良いのに無意味に二分探索とか言い出す奴まで現れる始末
8デフォルトの名無しさん
2020/07/13(月) 10:33:53.39ID:WBkWHxcT #include <stdafx.h> が入ってると消したくなる
9デフォルトの名無しさん
2020/07/13(月) 10:35:47.94ID:WBkWHxcT2020/07/13(月) 12:07:41.92ID:a0LpYw/5
>>8
VS2019だと入らないぞ
VS2019だと入らないぞ
2020/07/13(月) 12:09:59.97ID:WBkWHxcT
それ5ちゃんは2ちゃんじゃない5ちゃんだってのと同じ匂いがする
2020/07/13(月) 17:47:10.79ID:17o/9bhC
2020/07/13(月) 18:28:35.47ID:fGz9l1yv
4乗数は例えばmod5で必ず0か1なので234だったら弾ける
他にもいろんなmod使ってアーリーリジェクトするのが速い
まあそれだけで判定はできないから最後は真面目に確かめるんだけど
他にもいろんなmod使ってアーリーリジェクトするのが速い
まあそれだけで判定はできないから最後は真面目に確かめるんだけど
2020/07/13(月) 19:32:08.80ID:5XlUrV9a
整数の4乗だろ?
どのレンジの値までサポートする必要があるのか
この辺に意識行かないやつは初級者
どのレンジの値までサポートする必要があるのか
この辺に意識行かないやつは初級者
2020/07/13(月) 22:49:46.38ID:vn0aaIQL
>>12
知ってた
知ってた
2020/07/13(月) 23:35:03.61ID:hjMalhfu
template <class R>
R hoge(std::function<R(int)> func, int val) {
return func(val);
}
みたいな、std::functionの戻り値の型がテンプレートな関数があったときに、第一引数のfuncに渡す引数を
「std::function<int(int)> f = [](auto a) {return 10 * a; }」
と明示的に「std::function」にすると、Rも型推論が効いて「hoge(f, 10)」と呼べますが
ラムダ式を直接渡すと、Rの型推論が働かず「hoge<int>([](auto a){...}, 10);」と
テンプレートの型を明示しない限り、MSVC2019(std:c++latest)ではコンパイルエラーになります。
こういう場合にラムダ式から型を推論できる関数を作る方法ってないですかね?
ラムダ式がいければ、std::functionは渡せなくなってもいいのですが。
R hoge(std::function<R(int)> func, int val) {
return func(val);
}
みたいな、std::functionの戻り値の型がテンプレートな関数があったときに、第一引数のfuncに渡す引数を
「std::function<int(int)> f = [](auto a) {return 10 * a; }」
と明示的に「std::function」にすると、Rも型推論が効いて「hoge(f, 10)」と呼べますが
ラムダ式を直接渡すと、Rの型推論が働かず「hoge<int>([](auto a){...}, 10);」と
テンプレートの型を明示しない限り、MSVC2019(std:c++latest)ではコンパイルエラーになります。
こういう場合にラムダ式から型を推論できる関数を作る方法ってないですかね?
ラムダ式がいければ、std::functionは渡せなくなってもいいのですが。
2020/07/14(火) 00:18:40.13ID:zGM7yt58
aがintであることはどこから推定するの?
2020/07/14(火) 01:20:42.44ID:BX6Ieja2
難しく考えすぎ
template <class F>
auto hoge(F func, int val) { return func(val); }
template <class F>
auto hoge(F func, int val) { return func(val); }
2020/07/14(火) 07:41:56.85ID:XNlphOJb
[](auto a) -> int {return 10 * a; }
[](auto a) -> std::common_type_t<int, decltype(a)> {return 10 * a; }
[](auto a) -> std::common_type_t<int, decltype(a)> {return 10 * a; }
2020/07/14(火) 19:51:39.83ID:XydZfji4
>>17-19
ありがとうございます。やりたかったことができました。
ラムダだからって変にstd::functionとか入れずに、関数まるごとテンプレートに委ねればよかったんですね。
どうも関数を特別視してしまっていたようです。
ありがとうございます。やりたかったことができました。
ラムダだからって変にstd::functionとか入れずに、関数まるごとテンプレートに委ねればよかったんですね。
どうも関数を特別視してしまっていたようです。
2020/07/20(月) 23:03:27.73ID:6gjYUAkG
保守
2020/07/22(水) 21:14:41.10ID:KUJQPOij
std::list<int> l = {0, 1, 2};
auto it = l.begin();
// auto x = move(*it);
l.erase(it);
// この後 x にムーブしてればいいけど it を参照するのは未定義動作?
// pop が削除した要素を返してくれればいいのに
auto it = l.begin();
// auto x = move(*it);
l.erase(it);
// この後 x にムーブしてればいいけど it を参照するのは未定義動作?
// pop が削除した要素を返してくれればいいのに
2020/07/22(水) 21:27:49.98ID:ZfR2rpjD
>>22
まるで正常
まるで正常
2020/07/22(水) 23:12:53.61ID:tg3nt/Qu
コマンドライン引数でブーリアン渡したいときってどうするん
2020/07/22(水) 23:46:58.46ID:xb0kAqoI
コマンドライン引数は文字列
boolとかintとか渡せない
「"1000"を1000と解釈してintを渡せる」って言うなら、
同様に"true","false"を解釈すればいい
boolとかintとか渡せない
「"1000"を1000と解釈してintを渡せる」って言うなら、
同様に"true","false"を解釈すればいい
26デフォルトの名無しさん
2020/07/23(木) 00:41:36.09ID:4rdlbzE6 getopt
2020/07/23(木) 06:09:28.37ID:fF4wk4d/
オプション文字列を渡す作法のような話なら
-f1, -f0 や --flag, --no-flag の形で渡すかな。
簡易的には -f と指定すれば有効、指定しなければ無効、って感じ。
-f1, -f0 や --flag, --no-flag の形で渡すかな。
簡易的には -f と指定すれば有効、指定しなければ無効、って感じ。
28デフォルトの名無しさん
2020/07/23(木) 08:45:05.41ID:SrgI206W 結局はORマッパーのような問題に行きつく
2020/07/25(土) 02:54:53.84ID:hso1irDO
お前らってマゾだよね
2020/07/27(月) 02:23:48.14ID:kndJPXCH
ある変数に対してプロセスAからは書き込みしかしないで別プロセスBは読み込みしかしない場合
この変数に対してstd::atomic<>する必要ありますか?
この変数に対してstd::atomic<>する必要ありますか?
2020/07/27(月) 02:50:40.88ID:OPuipBq/
あります
2020/07/27(月) 03:16:39.82ID:iDNWe3mh
>>30
プロセスとスレッドの違いは理解している?
プロセスとスレッドの違いは理解している?
2020/07/27(月) 05:33:26.23ID:EghVn5lV
「プロセス」は「スレッド」と読み替えるとして
自前で排他してもいいし
「ある変数」が例えばintで今のPCのCPUなら元々アトミック
そういう意味では「std::atomic<>する必要」はないよ
自前で排他してもいいし
「ある変数」が例えばintで今のPCのCPUなら元々アトミック
そういう意味では「std::atomic<>する必要」はないよ
2020/07/27(月) 07:02:13.52ID:QTF0cexn
すstd::atomic<>なら型に応じた特殊化がなされていることが気体できるのでは知らんけど
ていうかTによらずアクセスの度に馬鹿正直にcritical sectionに出入りされる実装だったら嫌すぐる、、、
アーキテクチャーに応じて確実に作動するDouble-Checked LockingとかTripple-Checked Lockingとかになって
最適なパフォーマンスが出るコードにしていただける処理系であってホスイ
ていうかTによらずアクセスの度に馬鹿正直にcritical sectionに出入りされる実装だったら嫌すぐる、、、
アーキテクチャーに応じて確実に作動するDouble-Checked LockingとかTripple-Checked Lockingとかになって
最適なパフォーマンスが出るコードにしていただける処理系であってホスイ
2020/07/27(月) 07:31:29.47ID:9eU73XOZ
>>30
別途排他制御をしていないなら、コンパイル時や実行時に勝手に実行順序並び替えて誤動作する可能性があるから、atomicにしておいたほうがええよ
別途排他制御をしていないなら、コンパイル時や実行時に勝手に実行順序並び替えて誤動作する可能性があるから、atomicにしておいたほうがええよ
2020/07/27(月) 08:17:24.84ID:7+Lkkq8+
読み込む側が壊れた値でも構わないなら要らない
2020/07/27(月) 08:47:53.90ID:eo3eOCcP
>>36 未定義動作の結果はそれだけでは済まないかもしれない。
2020/07/27(月) 11:14:28.62ID:vNtx9fDh
DRAMがリフレッシュされなくなるとかか
2020/07/27(月) 11:45:04.43ID:HTI8upPJ
プロセスならOS提供の共有メモリ使うから、未定義動作の範疇外じゃね
2020/07/27(月) 12:06:22.37ID:arCdAL0/
2020/07/27(月) 20:51:46.94ID:EghVn5lV
2020/07/27(月) 22:29:41.65ID:SfaUTK+M
2020/07/27(月) 23:14:45.53ID:OPuipBq/
コンパイラが独自仕様で明示的に保証してるなら別にいいよ
特に何も書いてないなら保証されてないと思うべき
特に何も書いてないなら保証されてないと思うべき
2020/07/27(月) 23:30:43.14ID:arCdAL0/
>>42
x86だと即値の場合16bit x2のコードが吐かれる場合があるらしいよ
x86だと即値の場合16bit x2のコードが吐かれる場合があるらしいよ
45デフォルトの名無しさん
2020/07/28(火) 15:19:44.89ID:XpAjM/1U46デフォルトの名無しさん
2020/07/28(火) 15:58:37.01ID:2ZofU2zv forで少しの(255以下)ループ回すときにint i=0;i<10;++iとかするけどなんで
2バイトのintでとって1バイトのunsigned charじゃあまり取らないんだろ?
(typedefで宣言すればタイプ数少なくできるし・・・)
2バイトのintでとって1バイトのunsigned charじゃあまり取らないんだろ?
(typedefで宣言すればタイプ数少なくできるし・・・)
47デフォルトの名無しさん
2020/07/28(火) 16:02:12.30ID:0Pr5T/O4 unsigned char でループしても良いけど
結局 int にされるでしょ
それより int が 2byte っていつの話よ
結局 int にされるでしょ
それより int が 2byte っていつの話よ
48デフォルトの名無しさん
2020/07/28(火) 16:05:58.50ID:2ZofU2zv2020/07/28(火) 16:12:26.94ID:JnUAmZD/
>>48
charは算術式の中ではintに拡張されるって話だ
char a, b;
printf("%u", sizeof(a)); //1, これは左辺値で算術式ではない
printf("%u", sizeof(a - b)); //2, 減算の算術式
printf("%u", sizeof(+a)); //2, 単項プラスの算術式
charは算術式の中ではintに拡張されるって話だ
char a, b;
printf("%u", sizeof(a)); //1, これは左辺値で算術式ではない
printf("%u", sizeof(a - b)); //2, 減算の算術式
printf("%u", sizeof(+a)); //2, 単項プラスの算術式
50デフォルトの名無しさん
2020/07/28(火) 16:16:35.96ID:2ZofU2zv2020/07/28(火) 16:18:26.72ID:JnUAmZD/
>>46
charの拡張はcpu内部のレジスタで行われるだけで
メモリにはその痕跡が残らない
だからintをunsigned charにすればメモリを節約する効果は
期待できる(ただし保証はされない)
俺も実はforの制御変数は[0, 256)の範囲内でもintを使うが
正直に本音を言うと長い長いtypedef unsigned charをタイプせずに
短くintで済むからだ
普段建前ではintは自然なサイズの整数だからとか言い訳してるけどね
charの拡張はcpu内部のレジスタで行われるだけで
メモリにはその痕跡が残らない
だからintをunsigned charにすればメモリを節約する効果は
期待できる(ただし保証はされない)
俺も実はforの制御変数は[0, 256)の範囲内でもintを使うが
正直に本音を言うと長い長いtypedef unsigned charをタイプせずに
短くintで済むからだ
普段建前ではintは自然なサイズの整数だからとか言い訳してるけどね
52デフォルトの名無しさん
2020/07/28(火) 16:20:24.69ID:2ZofU2zv53デフォルトの名無しさん
2020/07/28(火) 16:23:12.92ID:tckSAZy52020/07/28(火) 16:23:36.08ID:JnUAmZD/
>>50
されるよ
たとえば、こういう場合
char c = 0;
c = c | 1;
部分式 c | 1 は ((int)c) | 1 で計算され結果はint
c = (char)結果; という具合にcharに戻して書き込む
c は00000000
c | 1 は0000000000000001
=は00000001にしてからを書き込む
一旦intにされたものをcharに戻して書き込んでいるが
普段はこのことを忘れていても正しいコードが書けてしまう
されるよ
たとえば、こういう場合
char c = 0;
c = c | 1;
部分式 c | 1 は ((int)c) | 1 で計算され結果はint
c = (char)結果; という具合にcharに戻して書き込む
c は00000000
c | 1 は0000000000000001
=は00000001にしてからを書き込む
一旦intにされたものをcharに戻して書き込んでいるが
普段はこのことを忘れていても正しいコードが書けてしまう
2020/07/28(火) 16:27:57.80ID:JnUAmZD/
おっと、ここC++スレやん
Cスレのつもりだったw
C++の場合はここ気をつけて
void func(char); //#1
void func(int); //#2
char c = 0;
func(c | 1); //#2
Cスレのつもりだったw
C++の場合はここ気をつけて
void func(char); //#1
void func(int); //#2
char c = 0;
func(c | 1); //#2
56デフォルトの名無しさん
2020/07/28(火) 16:28:23.54ID:2ZofU2zv57デフォルトの名無しさん
2020/07/28(火) 16:29:57.66ID:2ZofU2zv2020/07/28(火) 16:36:03.22ID:Vr5x1U6Z
>>51-52
「メモリを節約する効果は期待できる(ただし保証はされない)」っていうより
「メモリを節約する効果は期待できない(ただし可能性はゼロではない)」でしょ。
ほんとうにメモリ節約のためにやるなら実測のうえ結果をコメントで添えてたのむ。
「メモリを節約する効果は期待できる(ただし保証はされない)」っていうより
「メモリを節約する効果は期待できない(ただし可能性はゼロではない)」でしょ。
ほんとうにメモリ節約のためにやるなら実測のうえ結果をコメントで添えてたのむ。
2020/07/28(火) 16:41:14.06ID:JnUAmZD/
60デフォルトの名無しさん
2020/07/28(火) 16:43:35.65ID:XpAjM/1U (ただし可能性はゼロではない)
2020/07/28(火) 16:51:19.06ID:FdPQCZeu
>>56
char使ってメモリ節約ってのは基本的にクラス・構造体のメンバとか配列、かつそれらが多用される場合ね
単発の一時変数をcharにしたところでそれがスタックに置かれたとしてもアライメントで何も節約できてないどころか
整数拡張のオーバヘッドで逆に非効率になる
引数にchar使うのも性能上は意味がない
組み込みマイコンなら特に逆アセは読めるようになった方がいいよ
char使ってメモリ節約ってのは基本的にクラス・構造体のメンバとか配列、かつそれらが多用される場合ね
単発の一時変数をcharにしたところでそれがスタックに置かれたとしてもアライメントで何も節約できてないどころか
整数拡張のオーバヘッドで逆に非効率になる
引数にchar使うのも性能上は意味がない
組み込みマイコンなら特に逆アセは読めるようになった方がいいよ
62デフォルトの名無しさん
2020/07/28(火) 17:03:52.96ID:2ZofU2zv ちょっと追加で調べて納得したのはcharを扱うメリットとしては
int ポインタ型に +1 した際、何バイト進むのかは処理系に依存するけど
char ポインタ型なら必ず1バイトだけ進むから
その場合においてメリットがあるからchar使えってことですかね?
int ポインタ型に +1 した際、何バイト進むのかは処理系に依存するけど
char ポインタ型なら必ず1バイトだけ進むから
その場合においてメリットがあるからchar使えってことですかね?
63デフォルトの名無しさん
2020/07/28(火) 17:08:44.62ID:XpAjM/1U >>62
それ最初の質問と何か関係あるか?
それ最初の質問と何か関係あるか?
2020/07/28(火) 17:15:03.80ID:JnUAmZD/
2020/07/29(水) 00:51:49.61ID:YVVFldw+
デバッガでトレースしながら読むから逆アセだな
アセンブラ吐かせるってそれ用にビルド設定用意するのか?
アセンブラ吐かせるってそれ用にビルド設定用意するのか?
2020/07/29(水) 04:47:56.76ID:8sSsdFab
泥縄で設定変えるのイヤだから
端っからアセンブラ経由にしてる
端っからアセンブラ経由にしてる
2020/07/30(木) 06:46:58.19ID:82YOHtIh
C++でUnicodeを扱いたいんですがライブラリを探したほうが良いですか?
なにか定番のライブラリありませんか?
なにか定番のライブラリありませんか?
2020/07/30(木) 07:59:44.22ID:h+N/x6i+
ICU一択でしょ
2020/07/30(木) 21:53:30.81ID:82YOHtIh
70デフォルトの名無しさん
2020/07/31(金) 10:43:54.52ID:N0eufbNj 逼迫中
71デフォルトの名無しさん
2020/07/31(金) 13:57:05.58ID:RNPOl6hd 学術の巨大掲示板群 - アルファ・ラボ ttp://x0000.net
数学 物理学 化学 生物学 天文学 地理地学
IT 電子 工学 言語学 国語 方言 など
simulationライブラリで純粋な関数式プログラミングをする
UIライブラリ (C#, 2D) を作ったよ
連続と離散を統一した!
4Dエンジン
matrixのライブラリ
ある強力なFor関数
SQLライブラリ
☆ VM + ASM を書いた (C#, DX) * x86 ではない!
ttp://up.x0000.net/files/TSimulang.zip
☆ malloc / free を実装してみた (C#)
ttp://up.x0000.net/files/TMallocTest.zip
数学 物理学 化学 生物学 天文学 地理地学
IT 電子 工学 言語学 国語 方言 など
simulationライブラリで純粋な関数式プログラミングをする
UIライブラリ (C#, 2D) を作ったよ
連続と離散を統一した!
4Dエンジン
matrixのライブラリ
ある強力なFor関数
SQLライブラリ
☆ VM + ASM を書いた (C#, DX) * x86 ではない!
ttp://up.x0000.net/files/TSimulang.zip
☆ malloc / free を実装してみた (C#)
ttp://up.x0000.net/files/TMallocTest.zip
2020/08/08(土) 00:45:58.56ID:0OMeneB5
保守
2020/08/10(月) 15:43:27.57ID:fh5hS3eV
UDPで、メッセージをブロードキャストすると該当するコンピューターがユニキャストで応答するんですが、
このとき、シングルスレッドで、ブロッキングでsendでブロードキャストしてすぐにrecvで受信待ちするのは素敵ではないですよね?
このとき、シングルスレッドで、ブロッキングでsendでブロードキャストしてすぐにrecvで受信待ちするのは素敵ではないですよね?
2020/08/10(月) 15:45:49.73ID:fh5hS3eV
UDP でもともとreliableでないですがsendとrecvの間にネットワークスタックが受信したりすると、recvで受信できない?
2020/08/10(月) 15:48:15.44ID:fh5hS3eV
UDPはじめてなんですが、受信を先に立ち上げてから、sendすべきでしょうか?
2020/08/10(月) 16:28:51.88ID:bhDIRnmP
UDPスレで聞け
2020/08/10(月) 18:44:21.00ID:94dKV070
一文で「で」使いすぎ
2020/08/10(月) 21:36:29.55ID:DdNEnUy+
○○で××で△△な□□ってオタクが好む文語でしょww
2020/08/10(月) 22:39:58.88ID:miZfIOtK
それオタクていうか、ラノベ勢やん
80デフォルトの名無しさん
2020/08/12(水) 21:03:47.89ID:CtzJaQ9q std::unordered_mapのキーをstd::stringにして
findで検索する時にstd::string_viewを使って検索したいんだけど、
error C2664 : 'std::string_view' から 'const _Kty &' へ変換できません。
と出てしまいます。
std::unordered_mapの場合ではどうすればいいでしょうか?(´・ω・`)
以下仮コード
std::unordered_map<std::string, int> a;
a.insert_or_assign("AAA", 10);
std::string_view b = "AAA";
std::unordered_map<std::string, int>::iterator it = a.find(b);
findで検索する時にstd::string_viewを使って検索したいんだけど、
error C2664 : 'std::string_view' から 'const _Kty &' へ変換できません。
と出てしまいます。
std::unordered_mapの場合ではどうすればいいでしょうか?(´・ω・`)
以下仮コード
std::unordered_map<std::string, int> a;
a.insert_or_assign("AAA", 10);
std::string_view b = "AAA";
std::unordered_map<std::string, int>::iterator it = a.find(b);
2020/08/12(水) 21:20:56.14ID:3e1Z4brU
>>80 a.find(std::string(b));
82デフォルトの名無しさん
2020/08/12(水) 21:37:06.56ID:CtzJaQ9q >>81
あ・・・・・・(´・ω・`)
できました。ありがとうございます。
ついでに聞きたいのですが、
std::stringに変換することなくfind関数を使用するにはどうすればいいんでしょうか?
std::mapであれば、std::less<>を用いることでfind関数を使用した時std::string_viewでも検索できるようになりますが、
std::unordered_mapの場合はどのようにすればいいんでしょうか?
あ・・・・・・(´・ω・`)
できました。ありがとうございます。
ついでに聞きたいのですが、
std::stringに変換することなくfind関数を使用するにはどうすればいいんでしょうか?
std::mapであれば、std::less<>を用いることでfind関数を使用した時std::string_viewでも検索できるようになりますが、
std::unordered_mapの場合はどのようにすればいいんでしょうか?
2020/08/12(水) 21:43:02.63ID:3e1Z4brU
>>82
https://wg21.link/P0919
https://cpprefjp.github.io/lang/cpp20.html
> 順序付き連想コンテナと同様に、非順序連想コンテナの検索処理で、一時オブジェクトが生成されるコストを抑える拡張を追加。...
https://wg21.link/P0919
https://cpprefjp.github.io/lang/cpp20.html
> 順序付き連想コンテナと同様に、非順序連想コンテナの検索処理で、一時オブジェクトが生成されるコストを抑える拡張を追加。...
84デフォルトの名無しさん
2020/08/12(水) 21:49:15.10ID:CtzJaQ9q85デフォルトの名無しさん
2020/08/13(木) 10:37:08.60ID:m1xh97jB std::unordered_map<const std::string, int> a;
86デフォルトの名無しさん
2020/08/13(木) 11:17:58.00ID:hnCcHlo387デフォルトの名無しさん
2020/08/16(日) 03:35:19.99ID:Qk/OMLZN 今年学生でコロナ下でオンラインばかりなので合間を縫って独学に勤しんでます。
優しいc++を読み終えました
現在atcoderのabcやオライリーから出てるmodern c++ チャレンジ等をやっていますが、何をもってプログラミングが出来ると言うのでしょうか?
テトリス等もサイトを参考に書いたりしてみました。
自分はlinux上で動作する音楽プレイヤーソフトを作成したいと思うのですが、文法等はある程度理解していてもいざ自分で一から作れと言われると出来ません。c/c++で書かれているgithubのソースコード等は読めるんです
読めると言うのは、知らない文法やライブラリ等検索出来るためなんとなく実装内容がわかるって意味です
しかし自分で一からとなると何から始めればいいのか…
皆さんはこの壁をどう超えましたか?それとも壁に出会いませんでしたか?もしそれなりの規模の開発をする際止まった経験があるならばアドバイスを欲しいです
長文すみません
優しいc++を読み終えました
現在atcoderのabcやオライリーから出てるmodern c++ チャレンジ等をやっていますが、何をもってプログラミングが出来ると言うのでしょうか?
テトリス等もサイトを参考に書いたりしてみました。
自分はlinux上で動作する音楽プレイヤーソフトを作成したいと思うのですが、文法等はある程度理解していてもいざ自分で一から作れと言われると出来ません。c/c++で書かれているgithubのソースコード等は読めるんです
読めると言うのは、知らない文法やライブラリ等検索出来るためなんとなく実装内容がわかるって意味です
しかし自分で一からとなると何から始めればいいのか…
皆さんはこの壁をどう超えましたか?それとも壁に出会いませんでしたか?もしそれなりの規模の開発をする際止まった経験があるならばアドバイスを欲しいです
長文すみません
2020/08/16(日) 03:47:01.77ID:Degs0Zl8
初心者は、Ruby on Rails で、web アプリのポートフォリオを作る
むしろ、コーディング・テストよりも、
アプリの設計・構築運用など、Linux の勉強の方が多い
文法・コーディングだけだと、ちょっとしたコマンドぐらいしか作れない
Rails みたいなフレームワークを使わないと、
データベースを含んだ、webアプリなどは作れない
むしろ、コーディング・テストよりも、
アプリの設計・構築運用など、Linux の勉強の方が多い
文法・コーディングだけだと、ちょっとしたコマンドぐらいしか作れない
Rails みたいなフレームワークを使わないと、
データベースを含んだ、webアプリなどは作れない
2020/08/16(日) 05:51:14.48ID:1OSQgfCu
2020/08/16(日) 06:33:25.81ID:wVZFHsSL
>>87
> 何をもってプログラミングが出来ると言うのでしょうか?
何かを作るぞ! と頑張って、目標を達成できること
「何か」はゲームでもいいしドローンの自動運転でもいいから
自分の好みで勝手に決めればいい
87は音楽プレイヤーだろ?
いきなり市販のプレイヤーに匹敵しなくてもいい
こんなことできないかな〜とアイディア先行で実験してみて
うまくいったら見栄えも気にして仕上げにかかる
てなことを小刻みに繰り返すとアジャイルっぽくなる
> 何をもってプログラミングが出来ると言うのでしょうか?
何かを作るぞ! と頑張って、目標を達成できること
「何か」はゲームでもいいしドローンの自動運転でもいいから
自分の好みで勝手に決めればいい
87は音楽プレイヤーだろ?
いきなり市販のプレイヤーに匹敵しなくてもいい
こんなことできないかな〜とアイディア先行で実験してみて
うまくいったら見栄えも気にして仕上げにかかる
てなことを小刻みに繰り返すとアジャイルっぽくなる
2020/08/16(日) 07:20:43.69ID:5tP8nVqa
第二不完全性定理の制約を受けず、
停止性問題を解けること、
って無理ゲーじゃん?!?
なんで人間ってプログラミングできるの?!!?!
停止性問題を解けること、
って無理ゲーじゃん?!?
なんで人間ってプログラミングできるの?!!?!
92デフォルトの名無しさん
2020/08/16(日) 09:23:07.48ID:ng3yYkoc ユニバーサル文法があるから
その辺りは余り深く考えても意味が無い
出来るから出来る
出来ない奴は出来ない
その辺りは余り深く考えても意味が無い
出来るから出来る
出来ない奴は出来ない
2020/08/16(日) 10:39:09.01ID:5tP8nVqa
ユニバーサル文法を操るメンタルオーガンが実在したとしても
そいつがたんなる機械なら解決にならないんじゃ…
そいつがたんなる機械なら解決にならないんじゃ…
2020/08/16(日) 12:13:35.40ID:INgchOov
95デフォルトの名無しさん
2020/08/16(日) 14:54:00.65ID:43uVw8aV2020/08/16(日) 15:36:41.55ID:1Qmt1HH2
>>87
アプリ作り上げるのに言語の詳しい知識って実はあんまり要らないんだよね
c++だとtemplateにはまって一日つぶすとかざらにあるんだけど、
これってただの自己満だよな〜って思う
愚直なコードでとりあえず解決しておいて、その分
アプリとして作り込むのに時間かけた方がよかったんだろなーと
まぁそれはさておき、音楽プレーヤなら
- GUIフレームワーク
- CODECライブラリ
- linuxシステムコール、libc
あたりの知識がないと進められないでしょう
GUIフレームのお作法の理解とか、
CODECもフォーマット特有の制約が上位まで波及したりするから結構知識いるよね
まず何を使うかの選定からでしょう
あと、たぶんお前さんの作りたいものは既に世の中にごまんとあるはず
それを承知で勉強と割り切って作るのはいいんだけど、
あんまり大きいものは最初の目標にしないように
すぐに情熱失ってやめてしまうのがオチ
アプリ作り上げるのに言語の詳しい知識って実はあんまり要らないんだよね
c++だとtemplateにはまって一日つぶすとかざらにあるんだけど、
これってただの自己満だよな〜って思う
愚直なコードでとりあえず解決しておいて、その分
アプリとして作り込むのに時間かけた方がよかったんだろなーと
まぁそれはさておき、音楽プレーヤなら
- GUIフレームワーク
- CODECライブラリ
- linuxシステムコール、libc
あたりの知識がないと進められないでしょう
GUIフレームのお作法の理解とか、
CODECもフォーマット特有の制約が上位まで波及したりするから結構知識いるよね
まず何を使うかの選定からでしょう
あと、たぶんお前さんの作りたいものは既に世の中にごまんとあるはず
それを承知で勉強と割り切って作るのはいいんだけど、
あんまり大きいものは最初の目標にしないように
すぐに情熱失ってやめてしまうのがオチ
97デフォルトの名無しさん
2020/08/16(日) 16:32:23.69ID:Qk/OMLZN 87のものです 皆さん有難うございます
再生させる機能やタグの取得等の割りかし簡単そうなものから実装していき
あわよくばイコライザーやスペクトラム等の機能も追加していこうと思います
あと、linuxだとuiや機能が優れた音楽プレイヤーって実は少ないんですよね…GitHub等でも探したのですが…foobar2000とかしかなくて正直ダサくて…
ないから自分で勉強がてら書いてみたいなと思った次第でした
再生させる機能やタグの取得等の割りかし簡単そうなものから実装していき
あわよくばイコライザーやスペクトラム等の機能も追加していこうと思います
あと、linuxだとuiや機能が優れた音楽プレイヤーって実は少ないんですよね…GitHub等でも探したのですが…foobar2000とかしかなくて正直ダサくて…
ないから自分で勉強がてら書いてみたいなと思った次第でした
2020/08/16(日) 17:31:00.86ID:PN3bHl0Q
>>87
〉何をもってプログラミングが出来ると言うのでしょうか?
他の人も似たようなこと言ってるけど、「ソフトを完成させる段取りを知っていること」が一つの目安。
実現機能を明確化して、実装する機能に分解して、必要なリソース・ライブラリを集めて、全部の機能を実装して、誤動作しないようにバグ取りをする。
これができれば言えるんじゃない?
少なくとも「プログラムするためには何が必要か」がわかるようになる。
〉何をもってプログラミングが出来ると言うのでしょうか?
他の人も似たようなこと言ってるけど、「ソフトを完成させる段取りを知っていること」が一つの目安。
実現機能を明確化して、実装する機能に分解して、必要なリソース・ライブラリを集めて、全部の機能を実装して、誤動作しないようにバグ取りをする。
これができれば言えるんじゃない?
少なくとも「プログラムするためには何が必要か」がわかるようになる。
99デフォルトの名無しさん
2020/08/16(日) 18:12:46.45ID:8WlfPd5U100デフォルトの名無しさん
2020/08/16(日) 18:35:06.05ID:wVZFHsSL >>96
ダウト
「こうしたい」と、せっかく閃いたアイディアを
表現力が足りないばかりに諦めたり
誰かさんみたいにtemplateがロクに使えなくて一日つぶすとかってのは
言語の詳しい知識が足りないことに他ならない
それを何やかんやと言い訳考えることこそ自己満以外の何物でもない
言語の基本をしっかり固めるのを軽視するとこうなるという典型だ
ダウト
「こうしたい」と、せっかく閃いたアイディアを
表現力が足りないばかりに諦めたり
誰かさんみたいにtemplateがロクに使えなくて一日つぶすとかってのは
言語の詳しい知識が足りないことに他ならない
それを何やかんやと言い訳考えることこそ自己満以外の何物でもない
言語の基本をしっかり固めるのを軽視するとこうなるという典型だ
101デフォルトの名無しさん
2020/08/16(日) 19:20:29.73ID:x8ZjthFZ progress_displayいつになったら規格に取り込まれるんだ
102デフォルトの名無しさん
2020/08/17(月) 02:08:49.38ID:u6ES7f8s >誰かさんみたいにtemplateがロクに使えなくて一日つぶす
そんなこと一言も言ってなかったと思うが(俺96じゃないよ)
いつものアホが沸いたのかな?
そんなこと一言も言ってなかったと思うが(俺96じゃないよ)
いつものアホが沸いたのかな?
103デフォルトの名無しさん
2020/08/17(月) 02:55:30.59ID:vOFQCRbE というか他人が思ったことに対してダウト〜っていうセンスに痺れるわ
104デフォルトの名無しさん
2020/08/17(月) 05:56:47.89ID:TQifZMS/ >>102
strcmp的なやつとは話にならねえ
strcmp的なやつとは話にならねえ
105デフォルトの名無しさん
2020/08/17(月) 07:50:57.12ID:p3n8cAbg strcmp的なやつって笑える表現だな
a="templateにはまって一日つぶす";
b="templateがロクに使えなくて一日つぶす";
ここでstrcmp(a,b)が偽になる以上どういう意図のなのか説明が必要だろ
>言語の基本をしっかり固める
とはまったく逆の事をしてることに気づけ
a="templateにはまって一日つぶす";
b="templateがロクに使えなくて一日つぶす";
ここでstrcmp(a,b)が偽になる以上どういう意図のなのか説明が必要だろ
>言語の基本をしっかり固める
とはまったく逆の事をしてることに気づけ
106デフォルトの名無しさん
2020/08/17(月) 08:11:11.90ID:TQifZMS/ へーえ、おまえさんとこではstrcmp(a, b)がint(0)を返すのか
ユーザーがあまりにも馬鹿過ぎると標準ライブラリまでバグるとは知らんかったわ
ユーザーがあまりにも馬鹿過ぎると標準ライブラリまでバグるとは知らんかったわ
107デフォルトの名無しさん
2020/08/17(月) 16:39:05.57ID:p3n8cAbg strcmpてのは三値を返すんだから0が真で非0が偽
>>107
普通は零が偽、非零であればなんでも真、なんですけど
普通は零が偽、非零であればなんでも真、なんですけど
109デフォルトの名無しさん
2020/08/17(月) 19:41:49.25ID:aDjhg6Zt >>107
無茶苦茶言わないで、そこは「strcmp(a,b)==0が偽」の書き間違いだと認めるぐらいしようぜ。
無茶苦茶言わないで、そこは「strcmp(a,b)==0が偽」の書き間違いだと認めるぐらいしようぜ。
110デフォルトの名無しさん
2020/08/17(月) 19:49:37.18ID:I0An2PUB 揚げ足とりこそC++erの本懐よ
111はちみつ餃子 ◆8X2XSCHEME
2020/08/17(月) 20:13:14.96ID:Km1hLS23 strcmp を定義するのは言語仕様なんやから
あえて言語仕様と異なる用語を使うんなら
その適用範囲 (プロジェクト単位?) と共に定義を明文化するのは最低限の要求やろ。
当事者が合意した範囲内でなら一見して変な用語でも使うのは好きにすりゃええ。
たとえばハードウェアに近い部分なら負論理がソースコード上に露骨に現れることだって無いとは言いきれん。
ただそれは特殊な例を総合的に見てあえて奇妙な用語を使った方が良くなる場合にとる選択肢であって、
「三値を返すんだから」というようわからん理屈では正当化でけへんし、
言語のスレとしては許容でけへんわ。
あえて言語仕様と異なる用語を使うんなら
その適用範囲 (プロジェクト単位?) と共に定義を明文化するのは最低限の要求やろ。
当事者が合意した範囲内でなら一見して変な用語でも使うのは好きにすりゃええ。
たとえばハードウェアに近い部分なら負論理がソースコード上に露骨に現れることだって無いとは言いきれん。
ただそれは特殊な例を総合的に見てあえて奇妙な用語を使った方が良くなる場合にとる選択肢であって、
「三値を返すんだから」というようわからん理屈では正当化でけへんし、
言語のスレとしては許容でけへんわ。
112デフォルトの名無しさん
2020/08/17(月) 20:18:38.27ID:vrG6zXoN 急にバリバリの関西弁でどないしたんや
113デフォルトの名無しさん
2020/08/17(月) 20:25:51.22ID:ltcLkjuo 個人的には整数のサイズにこだわるときは
#include <cstdint>
してint8_tとか使ってるなぁ
#include <cstdint>
してint8_tとか使ってるなぁ
114デフォルトの名無しさん
2020/08/17(月) 21:37:15.36ID:S/xJ/Voo そもそも3値な時点でbooleanの真偽かどうか議論すること自体無意味
115デフォルトの名無しさん
2020/08/17(月) 22:07:28.50ID:cXN7EgSQ 真偽値じゃないものを真偽値扱いしてもエラーとして検出されない、根が深い問題なんだよな。
型が無いB言語に末代まで祟られているとも。
型が無いB言語に末代まで祟られているとも。
116はちみつ餃子 ◆8X2XSCHEME
2020/08/17(月) 23:56:15.69ID:Km1hLS23 整数の暗黙の型変換はそれなりに上手くいってると思うけど
bool が整数型扱いってのがいきすぎた一般化だったのかもな。
bool が整数型扱いってのがいきすぎた一般化だったのかもな。
117デフォルトの名無しさん
2020/08/18(火) 00:15:03.69ID:6UORXKST 学術の巨大掲示板群 - アルファ・ラボ ttp://x0000.net
数学 物理学 化学 生物学 天文学 地理地学
IT 電子 工学 言語学 国語 方言 など
VM + ASM を書いた (C#, DX) * x86 ではない!
simulationライブラリで純粋な関数式プログラミングをする
UIライブラリ (C#, 2D) を作ったよ
連続と離散を統一した!
4Dエンジン
matrixのライブラリ
ある強力なFor関数
SQLライブラリ
VM + ASM のダウンロード
ttp://up.x0000.net/files/TSimulang.zip
数学 物理学 化学 生物学 天文学 地理地学
IT 電子 工学 言語学 国語 方言 など
VM + ASM を書いた (C#, DX) * x86 ではない!
simulationライブラリで純粋な関数式プログラミングをする
UIライブラリ (C#, 2D) を作ったよ
連続と離散を統一した!
4Dエンジン
matrixのライブラリ
ある強力なFor関数
SQLライブラリ
VM + ASM のダウンロード
ttp://up.x0000.net/files/TSimulang.zip
118デフォルトの名無しさん
2020/08/19(水) 03:53:13.32ID:itvjYGVQ 45歳こどおじ高卒無職歴約10年
10年以上前にIT系業界にいたが主にPC保守やユーザサポートをトータルしても10年くらい
コード開発の実務は30代の頃VB約3ヶ月でばっくれ
30代の頃エクセルVBA約3ヶ月でばっくれ
両方超ブラックだった
なんか疲れて実家帰ったらいつの間にか10年経ってた
暇なんで趣味で勉強してみた
2年前くらいに3ヶ月ほどjavaとpythonとc++
各言語のpaizaでC問題全部回答B問題10問くらい解けたからもうやってない
ガチで就職探したけど当然無くて諦めて勉強もやめてた
んでまた競プロサイトで練習始めたんだけど結局アルゴリズム意味不明で詰んだ感じ
暇なんで暇つぶしの惰性で練習してる感じ
こんなレベルで就職あるかな?
無職10年は適当にバイトしてたとかでごまかすコミュ力はあると自負してるつもり
こんな新人来られてもやっぱ迷惑だよね
てか俺が採用担当だったら絶対に採用しない
死んだほうが良いかな?
転生してやりなおしたい
10年以上前にIT系業界にいたが主にPC保守やユーザサポートをトータルしても10年くらい
コード開発の実務は30代の頃VB約3ヶ月でばっくれ
30代の頃エクセルVBA約3ヶ月でばっくれ
両方超ブラックだった
なんか疲れて実家帰ったらいつの間にか10年経ってた
暇なんで趣味で勉強してみた
2年前くらいに3ヶ月ほどjavaとpythonとc++
各言語のpaizaでC問題全部回答B問題10問くらい解けたからもうやってない
ガチで就職探したけど当然無くて諦めて勉強もやめてた
んでまた競プロサイトで練習始めたんだけど結局アルゴリズム意味不明で詰んだ感じ
暇なんで暇つぶしの惰性で練習してる感じ
こんなレベルで就職あるかな?
無職10年は適当にバイトしてたとかでごまかすコミュ力はあると自負してるつもり
こんな新人来られてもやっぱ迷惑だよね
てか俺が採用担当だったら絶対に採用しない
死んだほうが良いかな?
転生してやりなおしたい
119デフォルトの名無しさん
2020/08/19(水) 06:19:51.21ID:AaZqqXX6 マ板でどうぞ
120デフォルトの名無しさん
2020/08/20(木) 05:04:54.05ID:DqyqYTXG if (!strcmp(a, b)) goto hell;
121デフォルトの名無しさん
2020/08/20(木) 11:16:03.05ID:RX/3qqm6 hell終わるど
122デフォルトの名無しさん
2020/08/23(日) 16:03:07.43ID:SVuEjc7r 例えば、
x<1 || y>3
と書いた場合、人間なら、この < や > は、大小比較をする比較演算子だと
思うでしょうが、コンパイラにとっては、1 || y を実引数とするところの
template展開だと勘違いする可能性があります。
どうやってこれを区別しているのでしょうか?
x<1 || y>3
と書いた場合、人間なら、この < や > は、大小比較をする比較演算子だと
思うでしょうが、コンパイラにとっては、1 || y を実引数とするところの
template展開だと勘違いする可能性があります。
どうやってこれを区別しているのでしょうか?
123デフォルトの名無しさん
2020/08/23(日) 16:05:12.45ID:Exm+Pt+Z どちらかというと
< <>, <> >
みたいなときに
<<>, <>>
って書くと期待通りに動かないのが面倒だと思う
< <>, <> >
みたいなときに
<<>, <>>
って書くと期待通りに動かないのが面倒だと思う
124デフォルトの名無しさん
2020/08/23(日) 16:08:14.77ID:SVuEjc7r x がtemplate名であるかどうかを検査するのでしょうか?
125デフォルトの名無しさん
2020/08/23(日) 16:18:37.58ID:SVuEjc7r pure C で、構文ツリーを作りたいとき、出現してきた名前トークンがどう宣言されて
いるかを知らなくても、構文ツリーを作れてしまいます。
ところが、もし、xがtemplateの名前として宣言されているかどうかを知らなければ、
< が、比較演算なのが、template引き数の始まりを示す括弧なのかの区別が
付かないのであれば、そうはいかなくなります。
pure C の場合:
構文ツリーを作る ---> ツリーの中にある中の名前の宣言を調べ、種類を見る。
で済んだところが、C++の場合、下手すれば、
構文ツリーを作る際に、出現した名前の宣言も逐次、調べる。
ということになります。
いるかを知らなくても、構文ツリーを作れてしまいます。
ところが、もし、xがtemplateの名前として宣言されているかどうかを知らなければ、
< が、比較演算なのが、template引き数の始まりを示す括弧なのかの区別が
付かないのであれば、そうはいかなくなります。
pure C の場合:
構文ツリーを作る ---> ツリーの中にある中の名前の宣言を調べ、種類を見る。
で済んだところが、C++の場合、下手すれば、
構文ツリーを作る際に、出現した名前の宣言も逐次、調べる。
ということになります。
126デフォルトの名無しさん
2020/08/23(日) 16:40:37.67ID:VT3zweO2 その場合、トークンとしての'<'が比較演算子なのかテンプレートの括弧なのかは区別しないで
構文解釈の結果として文脈によって決定するのが常套手段だろうね。
https://github.com/antlr/grammars-v4/blob/master/cpp/CPP14.g4
>ところが、もし、xがtemplateの名前として宣言されているかどうかを知らなければ、
>< が、比較演算なのが、template引き数の始まりを示す括弧なのかの区別が
>付かないのであれば、そうはいかなくなります。
そうならない仕様にはしているはず。
どうしても区別がつかない部分は前にtemplateキーワードを置く必要があるとか。
構文解釈の結果として文脈によって決定するのが常套手段だろうね。
https://github.com/antlr/grammars-v4/blob/master/cpp/CPP14.g4
>ところが、もし、xがtemplateの名前として宣言されているかどうかを知らなければ、
>< が、比較演算なのが、template引き数の始まりを示す括弧なのかの区別が
>付かないのであれば、そうはいかなくなります。
そうならない仕様にはしているはず。
どうしても区別がつかない部分は前にtemplateキーワードを置く必要があるとか。
127デフォルトの名無しさん
2020/08/23(日) 17:11:53.76ID:SVuEjc7r >>126
>その場合、トークンとしての'<'が比較演算子なのかテンプレートの括弧なのかは区別しないで
>構文解釈の結果として文脈によって決定するのが常套手段だろうね。
ここは、x<・・・> の x がtemplate名かどうかを区別できるところの
意味解析の段階ではなく、本当に構文解析の段階ですか?
>その場合、トークンとしての'<'が比較演算子なのかテンプレートの括弧なのかは区別しないで
>構文解釈の結果として文脈によって決定するのが常套手段だろうね。
ここは、x<・・・> の x がtemplate名かどうかを区別できるところの
意味解析の段階ではなく、本当に構文解析の段階ですか?
128デフォルトの名無しさん
2020/08/23(日) 17:21:37.10ID:PNDTq65a xがtemplate名かどうかは識別子の辞書を見たらワカル
辞書の中身はその時点までのソースコードの内容と
言語規格上の定義(形式言語ではなく、自然言語で書かれた仕様)に依存するから
言語の「意味」に依存するところがあるからこれを意味解析に含めるかどうかは議論の余地があるが、
普通のコンパイラ屋のマインドとしては
識別子の辞書を見てxが(例えば)template名であると判明したら
xがtemplate名xという「字句」であるという前提の下に字句解析した結果を文法パーサに入力するので
構文解析の範疇だと思われ
辞書の中身はその時点までのソースコードの内容と
言語規格上の定義(形式言語ではなく、自然言語で書かれた仕様)に依存するから
言語の「意味」に依存するところがあるからこれを意味解析に含めるかどうかは議論の余地があるが、
普通のコンパイラ屋のマインドとしては
識別子の辞書を見てxが(例えば)template名であると判明したら
xがtemplate名xという「字句」であるという前提の下に字句解析した結果を文法パーサに入力するので
構文解析の範疇だと思われ
129デフォルトの名無しさん
2020/08/23(日) 17:23:59.45ID:SVuEjc7r >>128
昔読んだコンパイラの本には、これまでに行われた宣言の情報を参照するのは、
意味解析だ、とあったと記憶しています。
逆に、それが意味解析でないのなら、何が意味解析になるのでしょうか。
「解析」ですから、コード生成では有りませんし。
昔読んだコンパイラの本には、これまでに行われた宣言の情報を参照するのは、
意味解析だ、とあったと記憶しています。
逆に、それが意味解析でないのなら、何が意味解析になるのでしょうか。
「解析」ですから、コード生成では有りませんし。
130デフォルトの名無しさん
2020/08/23(日) 17:26:01.74ID:PNDTq65a それよか
std::vector<std::string>> x("Hello");
と書いたら
std::vector<std::string> > x("Hello");
とコンパイラに解釈させるという方がよっぽど凶悪
これこそ構文の意味を知らねば「>>」という単一の字句なのか、「>」という字句2個なのか
定まらないという意味で字句解析→文法解析の流れをぶち壊しにしてくれる
std::vector<std::string>> x("Hello");
と書いたら
std::vector<std::string> > x("Hello");
とコンパイラに解釈させるという方がよっぽど凶悪
これこそ構文の意味を知らねば「>>」という単一の字句なのか、「>」という字句2個なのか
定まらないという意味で字句解析→文法解析の流れをぶち壊しにしてくれる
131デフォルトの名無しさん
2020/08/23(日) 17:28:17.74ID:PNDTq65a132デフォルトの名無しさん
2020/08/23(日) 17:29:06.23ID:PNDTq65a133デフォルトの名無しさん
2020/08/23(日) 17:31:18.68ID:PNDTq65a 訂正2、。n_
>>130 正:
std::vector<std::vector<std::string>> x("Hello");
と書いたら
std::vector<std::vector<std::string> > x("Hello");
とコンパイラに解釈させる方がよっぽど凶悪
>>130 正:
std::vector<std::vector<std::string>> x("Hello");
と書いたら
std::vector<std::vector<std::string> > x("Hello");
とコンパイラに解釈させる方がよっぽど凶悪
134デフォルトの名無しさん
2020/08/23(日) 17:39:05.76ID:SVuEjc7r >>131
C++の場合、辞書の参照も簡単では有りません。
namespaceや、クラススコープの名前などが複雑に絡み、
スコープ演算子を使った、修飾名などがあり、
Q1::Q2::Q3::name<xxx>
のような場合がありますが、
ややこしいのは、実際に template を展開してみないことには、nameがどういう識別子
なのかも分からない事があることです。例えば、
aaa<xxx>::bbb<yyyy>::name < 5, 5 > y
と有った場合、name が変数名なのか、template 名なのかによって、
< が template 引き数の始まりなのか、比較演算子なのかが決まる可能性があります。
ただ、この場合、> の後に名前トークン y が来ていますが、template展開だと
すると、この並びは恐らく、必ず間違いであるはずで、比較演算子でしか
合法にはならないと思います。
C++の場合、辞書の参照も簡単では有りません。
namespaceや、クラススコープの名前などが複雑に絡み、
スコープ演算子を使った、修飾名などがあり、
Q1::Q2::Q3::name<xxx>
のような場合がありますが、
ややこしいのは、実際に template を展開してみないことには、nameがどういう識別子
なのかも分からない事があることです。例えば、
aaa<xxx>::bbb<yyyy>::name < 5, 5 > y
と有った場合、name が変数名なのか、template 名なのかによって、
< が template 引き数の始まりなのか、比較演算子なのかが決まる可能性があります。
ただ、この場合、> の後に名前トークン y が来ていますが、template展開だと
すると、この並びは恐らく、必ず間違いであるはずで、比較演算子でしか
合法にはならないと思います。
135デフォルトの名無しさん
2020/08/23(日) 17:40:50.98ID:08jUbd/H いつもの人か
136デフォルトの名無しさん
2020/08/23(日) 17:49:20.95ID:VT3zweO2 >>127
どのテンプレートが使われるかの判断は意味解析だろうけど、テンプレートの使用か
比較式かの区別は構文解析段階で確定するはずだがね。
で、両方に解釈できるケースは基本的に非templateとみなすことになっていて、そこで
テンプレートを使用したいならばtenplateキーワードを追加する。
どのテンプレートが使われるかの判断は意味解析だろうけど、テンプレートの使用か
比較式かの区別は構文解析段階で確定するはずだがね。
で、両方に解釈できるケースは基本的に非templateとみなすことになっていて、そこで
テンプレートを使用したいならばtenplateキーワードを追加する。
137デフォルトの名無しさん
2020/08/23(日) 18:14:03.07ID:PNDTq65a >>136
>両方に解釈できるケースは基本的に非templateとみなすことになっていて、
それだと構文解析時のBNFの当てはめ時点でバックトラックしているように読めてしまうま、
そのような方式は、テンプレート定義が入れ子になったときバックトラック回数が指数関数的になりかねないから近畿
実際はそんなことはせずに、「name」というテンプレートの定義が辞書にあれば、「name」とかかれたソースコードの部分が
<テンプレート名>という字句として文法パーサに入力される、という方式で実現しており、
字句解析→文法解析、の一本道が保たれているはず(つまりは>>128のやり方
>>134
辞書の参照が難しい、と仰せなのですが
識別子のスコープを辞書の階層化で表現するのは常套手段であってコンパイラの教科書にも書いてある
(と思う)のでそんなに難しい話とはみなすことはできない(希ガス
>両方に解釈できるケースは基本的に非templateとみなすことになっていて、
それだと構文解析時のBNFの当てはめ時点でバックトラックしているように読めてしまうま、
そのような方式は、テンプレート定義が入れ子になったときバックトラック回数が指数関数的になりかねないから近畿
実際はそんなことはせずに、「name」というテンプレートの定義が辞書にあれば、「name」とかかれたソースコードの部分が
<テンプレート名>という字句として文法パーサに入力される、という方式で実現しており、
字句解析→文法解析、の一本道が保たれているはず(つまりは>>128のやり方
>>134
辞書の参照が難しい、と仰せなのですが
識別子のスコープを辞書の階層化で表現するのは常套手段であってコンパイラの教科書にも書いてある
(と思う)のでそんなに難しい話とはみなすことはできない(希ガス
138デフォルトの名無しさん
2020/08/23(日) 18:17:01.07ID:PNDTq65a ※ 個人の感想です
139デフォルトの名無しさん
2020/08/23(日) 19:31:26.00ID:OrwVzT4b <=>演算子はどうなん
140デフォルトの名無しさん
2020/08/23(日) 20:00:57.91ID:L0YhmUmF 面白そうな議論だけど忙しくて参加できない(泣
141デフォルトの名無しさん
2020/08/23(日) 21:32:54.31ID:MKE8ZoLo C++の文法は複雑すぎて構文解析と意味解析を分離できないのは有名な話
例によってBoostさんがそれを最大限に悪用してるのも有名な話
https://dechimal.hatenadiary.com/entry/20090216/1234793122
例によってBoostさんがそれを最大限に悪用してるのも有名な話
https://dechimal.hatenadiary.com/entry/20090216/1234793122
142デフォルトの名無しさん
2020/08/24(月) 09:07:54.59ID:2j0RwZQH 構造体へのファイル読み込みについて、悩んでいます。
今まで#pragma pack(x)を使用して、構造体にパディングが入らないようにしていたのですが、これ以外にパディングが入らないようにする方法はあるのでしょうか?
移植性の面からpragma禁止、かつ暗黙アラインメント禁止(自分でパディングを入れる)という指示がありました。
今まで#pragma pack(x)を使用して、構造体にパディングが入らないようにしていたのですが、これ以外にパディングが入らないようにする方法はあるのでしょうか?
移植性の面からpragma禁止、かつ暗黙アラインメント禁止(自分でパディングを入れる)という指示がありました。
143デフォルトの名無しさん
2020/08/24(月) 09:12:28.05ID:hO98kfNk メンバ1つずつ個別に入出力
C++はそれがしやすい
C++はそれがしやすい
144デフォルトの名無しさん
2020/08/24(月) 09:14:54.89ID:hO98kfNk エンディアン問題は1バイトずつ入出力することで解決できる
145デフォルトの名無しさん
2020/08/24(月) 10:43:50.34ID:seWRIuQk 自分でパディングを入れる方が、明確。
解釈の余地がなくなるから
構造体へのファイル読み込みって、
構造体には、文字列のポインターがあるだけだろ
可変サイズの文字列の実メモリは、構造体内には確保しないだろ
解釈の余地がなくなるから
構造体へのファイル読み込みって、
構造体には、文字列のポインターがあるだけだろ
可変サイズの文字列の実メモリは、構造体内には確保しないだろ
146デフォルトの名無しさん
2020/08/24(月) 10:50:48.29ID:3u4r+xiS そもそもの話の流れの趣旨とは無関係
struct hoge {
char mojiretsu[0];
} hage;
で malloc するときに
struct hoge *p = (struct hoge *)malloc(sizeof(struct hoge) + length + 1);
struct hoge {
char mojiretsu[0];
} hage;
で malloc するときに
struct hoge *p = (struct hoge *)malloc(sizeof(struct hoge) + length + 1);
147デフォルトの名無しさん
2020/08/24(月) 11:20:42.08ID:RW1y5ZfB148デフォルトの名無しさん
2020/08/24(月) 11:25:15.19ID:hO98kfNk C++的には構造体の中の物理的な配置に依存しない設計をするのが本筋
ostream& operator << (ostream&, your_struct const&);
istream& operator >> (istream&, your_struct&);
ostream& operator << (ostream&, your_struct const&);
istream& operator >> (istream&, your_struct&);
149デフォルトの名無しさん
2020/08/24(月) 11:51:04.72ID:2j0RwZQH ありがとうございます。とても参考になります。
パッと見て理解できないこともありますが、一つ一つ勉強します。
「入出力部分を切り出し」については、知識不足でイメージもできない状態なのですが、入社したらそうなっているのかも?と心構えというか、理解しておきたいと思います。
パッと見て理解できないこともありますが、一つ一つ勉強します。
「入出力部分を切り出し」については、知識不足でイメージもできない状態なのですが、入社したらそうなっているのかも?と心構えというか、理解しておきたいと思います。
150デフォルトの名無しさん
2020/08/24(月) 12:08:08.35ID:5d5vIMqX >>142
自分でパディングいれろ、という指示なんだから自分パディング入れればいいんでしょ?
方法は明確じゃん
まぁお前の質問の仕方が悪いってことね
まずやることはコンパイラのパディングのルールを確認してどういう条件で暗黙パディングが入るか理解すること
理解できたら自分でダミーのメンバ追加して暗黙パディングが入らないようにする
gcc/clangだったら-wpaddedで暗黙パディングが検出できるはず
念のためstatic_assertとoffsetofを使ってすべてのメンバーで期待通りのオフセットであること保証しておくといい
おまけでstatic_assertとsizeofで期待通りの構造体のサイズであることも
こういうのが多数あるんだったら、別途ツール使って構造体のソースは自動生成するようにすべき
あとpragma packは(レイアウトによって)実行時にオーバーヘッドが生じるってことも勉強しとくといい
自分でパディングいれろ、という指示なんだから自分パディング入れればいいんでしょ?
方法は明確じゃん
まぁお前の質問の仕方が悪いってことね
まずやることはコンパイラのパディングのルールを確認してどういう条件で暗黙パディングが入るか理解すること
理解できたら自分でダミーのメンバ追加して暗黙パディングが入らないようにする
gcc/clangだったら-wpaddedで暗黙パディングが検出できるはず
念のためstatic_assertとoffsetofを使ってすべてのメンバーで期待通りのオフセットであること保証しておくといい
おまけでstatic_assertとsizeofで期待通りの構造体のサイズであることも
こういうのが多数あるんだったら、別途ツール使って構造体のソースは自動生成するようにすべき
あとpragma packは(レイアウトによって)実行時にオーバーヘッドが生じるってことも勉強しとくといい
151デフォルトの名無しさん
2020/08/24(月) 12:32:35.65ID:2j0RwZQH すみません。質問を正しく説明できるように気をつけます。
私が質問したかったのは、「パディングの入れ方」ではなく、「そもそもパディングが入らないようにする方法はないだろうか」ということでした。
パディングの入れ方については既に理解しているのですが、入るとやや都合が悪い状況です。
「暗黙アラインメント禁止(自分でパディングを入れる)」と書いてしまったことで質問内容がブレてしまい、良くなかったと反省しております。
また、詳しくアドバイスをしていただきありがとうございます。
私が質問したかったのは、「パディングの入れ方」ではなく、「そもそもパディングが入らないようにする方法はないだろうか」ということでした。
パディングの入れ方については既に理解しているのですが、入るとやや都合が悪い状況です。
「暗黙アラインメント禁止(自分でパディングを入れる)」と書いてしまったことで質問内容がブレてしまい、良くなかったと反省しております。
また、詳しくアドバイスをしていただきありがとうございます。
152デフォルトの名無しさん
2020/08/24(月) 13:32:36.10ID:3u4r+xiS #pragma pack(1)
も禁止?
も禁止?
153デフォルトの名無しさん
2020/08/24(月) 14:16:40.36ID:5d5vIMqX >>151
「そもそもパディングが入らない方法」がpragma packであって、それが禁止されてんでしょ?
言われた通りに明示的にパディング入れな
何か方法があったとしてもチーム開発しているときに、妙な小細工は嫌われる
「そもそもパディングが入らない方法」がpragma packであって、それが禁止されてんでしょ?
言われた通りに明示的にパディング入れな
何か方法があったとしてもチーム開発しているときに、妙な小細工は嫌われる
154デフォルトの名無しさん
2020/08/24(月) 14:23:21.21ID:2j0RwZQH 「#pragmaは禁止」とあったので、そうだと判断しています。
もしこれが必ずしも#pragma pack(1)も禁止というわけではないなら、一度担当者に確認してみようと思います。
もしこれが必ずしも#pragma pack(1)も禁止というわけではないなら、一度担当者に確認してみようと思います。
155デフォルトの名無しさん
2020/08/24(月) 14:33:52.11ID:2j0RwZQH >>153
ありがとうございます。
そのようにしようと思います。
様々なアドバイスをいただき、私の考え方や疑問に思う部分が誤っていたと感じました。
これからはもっと広い視野で考えられるように頑張ります。
ありがとうございます。
そのようにしようと思います。
様々なアドバイスをいただき、私の考え方や疑問に思う部分が誤っていたと感じました。
これからはもっと広い視野で考えられるように頑張ります。
156蟻人間 ◆T6xkBnTXz7B0
2020/08/24(月) 14:38:21.49ID:lUUB+Gis #include <pshpack1.h>
157デフォルトの名無しさん
2020/08/24(月) 20:32:07.30ID:0b6x/pxR 環境依存しない方法なんてないよ
int, short, longのバイト数すら環境依存なんだから
環境依存が嫌ならC++使うこと自体が間違い
int, short, longのバイト数すら環境依存なんだから
環境依存が嫌ならC++使うこと自体が間違い
158デフォルトの名無しさん
2020/08/24(月) 20:39:16.80ID:hO98kfNk #include <cstdint>知らなさそうだね
159デフォルトの名無しさん
2020/08/25(火) 00:20:38.83ID:GVKOVEUV 明示的にパディング入れる方がかえって小細工になったりして…
パディング前:
struct Foo {
int16_t m_someWord;
// ここに明示的にパディングを入れる
int32_t m_someDoubleWord;
int16_t GetSomeWord() const { return m_someWord; }
};
明示的パディング後(1):
struct Foo {
int32_t m_someWordInDWord; // 32 bit境界に隙間無くパディング入ったやたー!
int32_t m_someDoubleWord;
int16_t GetSomeWord() const { return (m_someWordInDoubleWord >> 16); } // OOPS! 欲しい16 bitの位置がホストのエンディアン次第で変わるorz
};
明示的パディング後(2):
struct Foo {
uint8_t m_someWordInBytes[4]; // 32 bit境界に隙間無くパディング入ったやたー!今度はしくじらないのですよ
int32_t m_someDoubleWord;
int16_t GetSomeWord() const { return ((uint16_t)m_someWordInBytes[1] << 16) | (uint16_t)m_someWordInBytes[0]; } // |||OTL
};
パディング前:
struct Foo {
int16_t m_someWord;
// ここに明示的にパディングを入れる
int32_t m_someDoubleWord;
int16_t GetSomeWord() const { return m_someWord; }
};
明示的パディング後(1):
struct Foo {
int32_t m_someWordInDWord; // 32 bit境界に隙間無くパディング入ったやたー!
int32_t m_someDoubleWord;
int16_t GetSomeWord() const { return (m_someWordInDoubleWord >> 16); } // OOPS! 欲しい16 bitの位置がホストのエンディアン次第で変わるorz
};
明示的パディング後(2):
struct Foo {
uint8_t m_someWordInBytes[4]; // 32 bit境界に隙間無くパディング入ったやたー!今度はしくじらないのですよ
int32_t m_someDoubleWord;
int16_t GetSomeWord() const { return ((uint16_t)m_someWordInBytes[1] << 16) | (uint16_t)m_someWordInBytes[0]; } // |||OTL
};
160デフォルトの名無しさん
2020/08/25(火) 07:35:37.57ID:IvfDNlgu int16_tが欲しいのに他の型使ったらそりゃ。
161デフォルトの名無しさん
2020/08/25(火) 09:32:18.95ID:ILy/WoQ4 逆だな。
C言語を使うといくらでも環境依存のものを作れそうな気持ちにさせる
C言語を使うといくらでも環境依存のものを作れそうな気持ちにさせる
162デフォルトの名無しさん
2020/08/25(火) 09:50:55.63ID:DOmxfygr 環境非依存て聞こえはいいけど色んな機種の機能の積集合でできることだかんな
163デフォルトの名無しさん
2020/08/25(火) 10:21:10.89ID:z55E+4lG Unix文化とWindows文化の違いがあって、
Unixでは、OSよりもC言語によって、ハードウェアの違いを吸収する思想だった。
この思想では、バイナリ互換ではなく、ソース互換を目指し、
異なるOSやCPUに対しても、Cのソースを再コンパイルして対応しようとした。
一方、Windows文化では、最初から互換性のあるCPUを使うことが前提であり、
OSがCPU以外のハードウェアの違いを吸収することで、バイナリレベルで互換性を
維持する思想であった。
この思想では、異なるOSやCPUをターゲットにすることは想定されていない変わりに、
ハードウェアの違いは、互換性のある(単一の)OSをハードウェアに乗せることに
よって吸収しようとした。
なので、GNUやgccなど、Unix文化からきたプログラムでは、徹底的に#ifなどで
場合分けして互換性を維持しようとしているのに対し、Windowsから来たプログラム
ではそのような場合分けはしていない。
また、Unix文化でも、#if によってソースを場合分けすることで対応していることが
ほとんどで、何の場合分けも無いソースで対応できている訳ではない。
Unixでは、OSよりもC言語によって、ハードウェアの違いを吸収する思想だった。
この思想では、バイナリ互換ではなく、ソース互換を目指し、
異なるOSやCPUに対しても、Cのソースを再コンパイルして対応しようとした。
一方、Windows文化では、最初から互換性のあるCPUを使うことが前提であり、
OSがCPU以外のハードウェアの違いを吸収することで、バイナリレベルで互換性を
維持する思想であった。
この思想では、異なるOSやCPUをターゲットにすることは想定されていない変わりに、
ハードウェアの違いは、互換性のある(単一の)OSをハードウェアに乗せることに
よって吸収しようとした。
なので、GNUやgccなど、Unix文化からきたプログラムでは、徹底的に#ifなどで
場合分けして互換性を維持しようとしているのに対し、Windowsから来たプログラム
ではそのような場合分けはしていない。
また、Unix文化でも、#if によってソースを場合分けすることで対応していることが
ほとんどで、何の場合分けも無いソースで対応できている訳ではない。
164デフォルトの名無しさん
2020/08/25(火) 11:00:39.10ID:8PaZBEwq [要出典]
165デフォルトの名無しさん
2020/08/25(火) 11:11:45.82ID:Zt9gBA2M htons とか ntohl とか最強
166デフォルトの名無しさん
2020/08/25(火) 12:41:01.28ID:72rzjRbk C++を検索するときの技で上手い方法ありますか?
ググる、アマゾン、図書館での検索など
勉強しようとしても検索できないです
ググる、アマゾン、図書館での検索など
勉強しようとしても検索できないです
167デフォルトの名無しさん
2020/08/25(火) 12:45:40.95ID:KRGfI1UY コンパイラーのエラー文で投げたら大抵その言語で釣れると思うけどなぁ
168デフォルトの名無しさん
2020/08/25(火) 12:56:51.05ID:qQcORjN3 ぐぐるときは
hoge -ruby -java -javascript -php -sejuku -techacademy -teratail
hoge -ruby -java -javascript -php -sejuku -techacademy -teratail
169デフォルトの名無しさん
2020/08/25(火) 13:08:39.95ID:3B5pz6IO −ヤフーゴミ袋
170デフォルトの名無しさん
2020/08/25(火) 13:10:33.24ID:V6jdFuMQ >>166
検索して出てきた情報を理解するための基礎的な力が無いんじゃね?
ググれば何でも即解決できるわけではないよ
愚直にC++の入門書を買って順を追って系統立てて、C++の基本的な概念や用語を理解していく必要がありそう
もしかすると、C++より前に他の言語でそれをやってプログラミングの基本的なところから土台を踏み固めておかないとダメかも
検索して出てきた情報を理解するための基礎的な力が無いんじゃね?
ググれば何でも即解決できるわけではないよ
愚直にC++の入門書を買って順を追って系統立てて、C++の基本的な概念や用語を理解していく必要がありそう
もしかすると、C++より前に他の言語でそれをやってプログラミングの基本的なところから土台を踏み固めておかないとダメかも
171デフォルトの名無しさん
2020/08/25(火) 13:25:38.78ID:YCpmFLs5 「勉強」がどのレベルなのか分からないとなんとも言えない
直感で言うとC++の入門書なんでもいいから一冊買ってやりなさい
直感で言うとC++の入門書なんでもいいから一冊買ってやりなさい
172はちみつ餃子 ◆8X2XSCHEME
2020/08/25(火) 13:56:10.27ID:xuORV4zd173デフォルトの名無しさん
2020/08/25(火) 14:26:43.50ID:72rzjRbk 「C++」で検索ができないんだが
PCの設定がダメなのかな
これから情報を得るために検索くらいしたいんだけど
本買いたくても出てこない
図書館へは行ったけどC++は貸出中で予約も数件入ってるらしい
+のフォントが変なのか?
PCの設定がダメなのかな
これから情報を得るために検索くらいしたいんだけど
本買いたくても出てこない
図書館へは行ったけどC++は貸出中で予約も数件入ってるらしい
+のフォントが変なのか?
174デフォルトの名無しさん
2020/08/25(火) 14:29:17.40ID:y+wyfPxz >>168
-qiitaが抜けてる
-qiitaが抜けてる
175はちみつ餃子 ◆8X2XSCHEME
2020/08/25(火) 14:32:45.54ID:xuORV4zd176デフォルトの名無しさん
2020/08/25(火) 14:43:38.93ID:z55E+4lG twitter は、C++ や C# を検索できない。"C++" や "C#" としても駄目。
なので、cpp OR cplusplus とすると良いと言われているが、
個人的には、これは、twitter を作った人の C++ や C# を弱まらせるための策略
だと思っている。
なので、cpp OR cplusplus とすると良いと言われているが、
個人的には、これは、twitter を作った人の C++ や C# を弱まらせるための策略
だと思っている。
177デフォルトの名無しさん
2020/08/25(火) 14:49:20.21ID:8QbTjnzx なんか流れにしれっとキチガイ混じっとるな
178デフォルトの名無しさん
2020/08/25(火) 14:50:58.98ID:H1PjAHfj アメリカはそういう国で、
彼らは、自分のためなら何をやっても文句は言わせない的な心持でいる。
彼らは、自分のためなら何をやっても文句は言わせない的な心持でいる。
179デフォルトの名無しさん
2020/08/25(火) 14:57:06.54ID:72rzjRbk180デフォルトの名無しさん
2020/08/25(火) 15:16:32.29ID:YCpmFLs5 勘違いで御高説垂れてた奴wwww
181デフォルトの名無しさん
2020/08/25(火) 20:28:52.64ID:Ascep3nh 何故かyahooでリアルタイム検索ではC++で検索できる
182デフォルトの名無しさん
2020/08/25(火) 23:48:37.58ID:zCjig7ks シープラプラとか
チンチンブラブラみたいな名前付けやがって
たぬき砲でいいよなもう
チンチンブラブラみたいな名前付けやがって
たぬき砲でいいよなもう
183デフォルトの名無しさん
2020/08/25(火) 23:56:18.23ID:zCjig7ks Cよりもちょっと背伸びした意識高い系狙ってみましたみたいなキモいネーミングセンス
184デフォルトの名無しさん
2020/08/26(水) 00:15:37.56ID:DrItK79l185デフォルトの名無しさん
2020/08/26(水) 00:16:50.63ID:1Tu0I/K+ あーキモい(゚〇゚)キモい
186はちみつ餃子 ◆8X2XSCHEME
2020/08/26(水) 01:00:49.72ID:Yn/rXsvn キーッ! もういい! (駄洒落)
187デフォルトの名無しさん
2020/08/26(水) 01:32:11.23ID:NYX2/iU2 CRTP(奇妙に再帰したテンプレートパターン)ってどんなときに使うの?
template <class Derived>
struct Base {
static void interface() {
...
Derived::static_interface();
...
}
};
struct Hoge : Base<Hoge> {
static void static_interface() { ... }
};
通常の継承とは依存関係が逆になってるというのはわかるけど
具体的にどんなケースで便利なのかいまいちピンとこない...
template <class Derived>
struct Base {
static void interface() {
...
Derived::static_interface();
...
}
};
struct Hoge : Base<Hoge> {
static void static_interface() { ... }
};
通常の継承とは依存関係が逆になってるというのはわかるけど
具体的にどんなケースで便利なのかいまいちピンとこない...
188デフォルトの名無しさん
2020/08/26(水) 02:37:52.45ID:oEB3gdtA 速度重視のときじゃないかな。
ATL/WTLがCRTP使ってると思ったけど。
メリットとデメリットを比べるとデメリットが上回ってるような気がするな。
ぼくは構文解析器の合成にCRTPを使いましたが、合成の頻度が非常に少ないので、使った感じです。
ATL/WTLがCRTP使ってると思ったけど。
メリットとデメリットを比べるとデメリットが上回ってるような気がするな。
ぼくは構文解析器の合成にCRTPを使いましたが、合成の頻度が非常に少ないので、使った感じです。
189デフォルトの名無しさん
2020/08/26(水) 02:49:00.89ID:oEB3gdtA 仮想関数の代わりにCRTPを使うと呼び出しコストが無くなる・・・的な使い方で、便利にはならないと思う。
というより、めんどくさくなるだけ。
というより、めんどくさくなるだけ。
190デフォルトの名無しさん
2020/08/26(水) 07:05:25.59ID:NYX2/iU2 なるほどどうしてもパフォーマンスが気になるときに使うものって感じですかね
191デフォルトの名無しさん
2020/08/26(水) 10:20:21.13ID:2Yv7E1bU というより、動的な多態は不要だが静的な多態が必要で、
かつ派生クラスの型情報がどうしても必要なときに使うもんだと思う
クラステンプレートであれこれやってるうちに必要な場面が出てくるかと
かつ派生クラスの型情報がどうしても必要なときに使うもんだと思う
クラステンプレートであれこれやってるうちに必要な場面が出てくるかと
192デフォルトの名無しさん
2020/08/26(水) 11:43:55.11ID:KrF5vX4s 学術の巨大掲示板群 - アルファ・ラボ ttp://x0000.net
数学 物理学 化学 生物学 天文学 地理地学
IT 電子 工学 言語学 国語 方言 など
VM + ASM を書いた (C#, DX) * x86 ではない!
simulationライブラリで純粋な関数式プログラミングをする
UIライブラリ (C#, 2D) を作ったよ
連続と離散を統一した!
4Dエンジン
matrixのライブラリ
ある強力なFor関数
SQLライブラリ
VM + ASM のダウンロード
ttp://up.x0000.net/files/TSimulang.zip
数学 物理学 化学 生物学 天文学 地理地学
IT 電子 工学 言語学 国語 方言 など
VM + ASM を書いた (C#, DX) * x86 ではない!
simulationライブラリで純粋な関数式プログラミングをする
UIライブラリ (C#, 2D) を作ったよ
連続と離散を統一した!
4Dエンジン
matrixのライブラリ
ある強力なFor関数
SQLライブラリ
VM + ASM のダウンロード
ttp://up.x0000.net/files/TSimulang.zip
193デフォルトの名無しさん
2020/08/26(水) 13:51:37.26ID:CU/Sbvp9 派生クラスの型情報を静的に使うというのはstatic_castでのダウンキャストだな
194デフォルトの名無しさん
2020/08/26(水) 18:43:05.84ID:UQhlb7Hi Derivedを引数にとる比較演算子を生成するみたいなことは継承だと無理そう。
195デフォルトの名無しさん
2020/08/26(水) 19:52:17.80ID:IvFDW58Y 基底と言いつつテンプレートでガッツリ派生型の名前が入ってるわけで
他の派生型を持つ基底を一括してコンテナに入れるとかできないしあまり意味を感じないな
他の派生型を持つ基底を一括してコンテナに入れるとかできないしあまり意味を感じないな
196デフォルトの名無しさん
2020/08/26(水) 23:36:52.30ID:BTqRZu5v そもそもポリモ目的でやるもんじゃないでしょ
基底クラスは結局全部別モンになるわけだし
ボイラープレートコードをまとめたクラスをミックスインするときに使うもの
基底クラスは結局全部別モンになるわけだし
ボイラープレートコードをまとめたクラスをミックスインするときに使うもの
197デフォルトの名無しさん
2020/08/27(木) 06:37:57.11ID:7Sruawh3 >>195
basic_iosとios_baseみたいにテンプレート化する必要のある部分と不要な部分に分けるとか
basic_iosとios_baseみたいにテンプレート化する必要のある部分と不要な部分に分けるとか
198デフォルトの名無しさん
2020/08/28(金) 17:02:52.88ID:BFWbiW8H 関数へのポインタが、メンバ変数に有る場合、例えば、
class CXxx {
public:
void (*pfn)(int a);
void (*pfn)(float b);
};
の様な場合、
pXxx->pfn(5);
pXxx->pfn(10.0f);
とした場合に、関数呼び出しに使われる関数ポインタが自動的に選択されるでしょうか?
つまり、関数ポインタについても、関数と同様な「オーバーロード解決」が行われますか?
そもそも、上の様なクラスは、定義時にエラーになるでしょうか?
class CXxx {
public:
void (*pfn)(int a);
void (*pfn)(float b);
};
の様な場合、
pXxx->pfn(5);
pXxx->pfn(10.0f);
とした場合に、関数呼び出しに使われる関数ポインタが自動的に選択されるでしょうか?
つまり、関数ポインタについても、関数と同様な「オーバーロード解決」が行われますか?
そもそも、上の様なクラスは、定義時にエラーになるでしょうか?
199デフォルトの名無しさん
2020/08/28(金) 17:09:28.47ID:47MLab1u 自分で動かしてから質問しろよ
200デフォルトの名無しさん
2020/08/28(金) 17:09:34.31ID:namGYget 同じ名前のデータメンバーをふたつ定義してるからアウト
201デフォルトの名無しさん
2020/08/28(金) 17:26:26.84ID:bCpDWR5V >>198
それコンパイル通るかやってみ
それコンパイル通るかやってみ
202デフォルトの名無しさん
2020/08/28(金) 17:41:13.83ID:AJ/VhFe8 ここに質問するより少ない手数で試せるだろうに何やってんだろうね
203デフォルトの名無しさん
2020/08/28(金) 17:44:35.89ID:TvC7lNeF204デフォルトの名無しさん
2020/08/28(金) 17:48:03.23ID:TvC7lNeF ちかっとエスパーすると
class CXxx_base {
public:
virtual void fn(int) = 0;
virtual void fn(float) = 0;
};
class CXxx : public CXxx_base {
public:
void fn(int) override { }
void fn(float) override { }
};
pXxx->fn(5);
pXxx->fn(1.0.f);
これでおまえさんの考えてることはできるんじゃないか?
class CXxx_base {
public:
virtual void fn(int) = 0;
virtual void fn(float) = 0;
};
class CXxx : public CXxx_base {
public:
void fn(int) override { }
void fn(float) override { }
};
pXxx->fn(5);
pXxx->fn(1.0.f);
これでおまえさんの考えてることはできるんじゃないか?
205デフォルトの名無しさん
2020/08/28(金) 19:11:25.34ID:KPVk+Ml/206デフォルトの名無しさん
2020/08/29(土) 11:57:26.58ID:HmjSn9P9 関数へのポインタって関数じゃなくてただのメンバ変数だからな
207デフォルトの名無しさん
2020/08/29(土) 14:38:37.69ID:EjjA84a9208デフォルトの名無しさん
2020/08/30(日) 13:47:11.43ID:6dVOYYO/ 構造体を使った配列の記憶にて
配列に順に入力しても出力が上手くいきません助けて偉い人
配列に順に入力しても出力が上手くいきません助けて偉い人
209デフォルトの名無しさん
2020/08/30(日) 13:49:26.97ID:KF/F+MKa スルーで
210デフォルトの名無しさん
2020/08/30(日) 13:51:20.52ID:GgAZZaQa 100歩譲っておま環
211デフォルトの名無しさん
2020/08/30(日) 14:21:16.52ID:6dVOYYO/ void dataInput(Student& st){
string ans;
for(int i=1, i<=n;i++){
cin>>st.id;
pN[i]=st.id;
cin>>st.ans;
pA[i]=st.ans;
}
};
void showData(Student& st);
int main(){
cin>>n;
pN = new int[n];
pA = new int[n];
Student st;
dataInput(st);
showData(st);
return 0;
}
void showData(Student& st){
for(int j=0; j<=n; j++){
cout << pN[j] << pA[j] << "\n";
}
}
定義はファイル別にしてある
正直すまんかった
string ans;
for(int i=1, i<=n;i++){
cin>>st.id;
pN[i]=st.id;
cin>>st.ans;
pA[i]=st.ans;
}
};
void showData(Student& st);
int main(){
cin>>n;
pN = new int[n];
pA = new int[n];
Student st;
dataInput(st);
showData(st);
return 0;
}
void showData(Student& st){
for(int j=0; j<=n; j++){
cout << pN[j] << pA[j] << "\n";
}
}
定義はファイル別にしてある
正直すまんかった
212デフォルトの名無しさん
2020/08/30(日) 14:23:30.40ID:KF/F+MKa デバッガで自分でトレースしろ
213デフォルトの名無しさん
2020/08/30(日) 14:28:47.09ID:GgAZZaQa 死ね
214デフォルトの名無しさん
2020/08/30(日) 14:54:19.28ID:6dVOYYO/ hファイルの方
struct Student{
int id;
char ans;
};
int n;
int* pN;
char* pA;
cppファイル冒頭
#include <iostream>
#include <string>
#include "funk.h"
using namespace std;
struct Student{
int id;
char ans;
};
int n;
int* pN;
char* pA;
cppファイル冒頭
#include <iostream>
#include <string>
#include "funk.h"
using namespace std;
215デフォルトの名無しさん
2020/08/30(日) 15:13:34.04ID:6dVOYYO/ デバッグしたけど問題は見つかりませんでしたと出た。出力に問題があるっぽい
216デフォルトの名無しさん
2020/08/30(日) 15:22:13.56ID:6dVOYYO/ 自己解決しました!iとjの初期値を1から0にしたら解決できました。
217デフォルトの名無しさん
2020/08/30(日) 15:22:13.70ID:6dVOYYO/ 自己解決しました!iとjの初期値を1から0にしたら解決できました。
218デフォルトの名無しさん
2020/08/30(日) 15:57:12.85ID:HKGZh04b きちんと検証しろ
ソレができないなら初心者スレか日記帳にでも書いとけ
ソレができないなら初心者スレか日記帳にでも書いとけ
219デフォルトの名無しさん
2020/08/30(日) 17:44:09.91ID:oWP9MzfY これはひどい
220デフォルトの名無しさん
2020/09/04(金) 17:01:57.31ID:8b49PodW hage
221デフォルトの名無しさん
2020/09/04(金) 17:03:42.03ID:LCYaN/vD どっちのだよ
222デフォルトの名無しさん
2020/09/04(金) 17:11:42.93ID:ML6iv+hM223デフォルトの名無しさん
2020/09/07(月) 16:37:42.90ID:AmzB5PF6 githubなりに落ちてるc++で書かれたアプリなりを読んで勉強しているんだけど、
include無限ループに陥って萎えてしまうのですが、どうしてますか?
mainのinclude沢山→その指定先にもinclude沢山→stlなりのライブラリ(ここは読まずネットでドキュメント読む)
で相当時間食ってしまうまのですけど、コツとかありますか?
include無限ループに陥って萎えてしまうのですが、どうしてますか?
mainのinclude沢山→その指定先にもinclude沢山→stlなりのライブラリ(ここは読まずネットでドキュメント読む)
で相当時間食ってしまうまのですけど、コツとかありますか?
224デフォルトの名無しさん
2020/09/07(月) 16:42:08.11ID:bjXgxZkO includeガードしろ
225デフォルトの名無しさん
2020/09/07(月) 16:54:18.66ID:4QMtZq9v ていうかなぜ初学者なのにいきなりそんな重厚長大なアプリからチャレンジしようとするのか
自分の力量を過大評価しているのではないか
まずヘローワールドとかそういう簡単なとこからはじめなさい
自分の力量を過大評価しているのではないか
まずヘローワールドとかそういう簡単なとこからはじめなさい
226デフォルトの名無しさん
2020/09/07(月) 16:57:38.12ID:x8yvSFtj コンパイル時にg++とかなら-Eオプションつければ
実際のプリプロセッサの処理の結果が確認できる
実際のプリプロセッサの処理の結果が確認できる
227デフォルトの名無しさん
2020/09/07(月) 16:58:04.33ID:3Ozv9Uf+ 読まなきゃいいじゃん
何のために全部読もうとしているのか自問自答したら?
何のために全部読もうとしているのか自問自答したら?
228デフォルトの名無しさん
2020/09/07(月) 17:02:08.59ID:qk/9c7gK >>223
身の丈に合わない巨大なプロジェクトを読もうとしてるか、または愚直に頭から全部読もうとしてないか?
お前さん自身がコンパイラじゃないんだから、頭からすべて把握して読んでいく必要はないぞ。
まともなソースならオブジェクト指向で書かれてるのだから、上位層で大筋を把握しながら必要に応じて深いところに入っていって、有用そうな所や興味があるところだけ詳しく読めば?
ヘッダファイルは使ってるライブラリとかの当たりをつける程度でざっと読み飛ばして、定義を調べたくなったときにIDEの機能で見に行けばいいだろう。
身の丈に合わない巨大なプロジェクトを読もうとしてるか、または愚直に頭から全部読もうとしてないか?
お前さん自身がコンパイラじゃないんだから、頭からすべて把握して読んでいく必要はないぞ。
まともなソースならオブジェクト指向で書かれてるのだから、上位層で大筋を把握しながら必要に応じて深いところに入っていって、有用そうな所や興味があるところだけ詳しく読めば?
ヘッダファイルは使ってるライブラリとかの当たりをつける程度でざっと読み飛ばして、定義を調べたくなったときにIDEの機能で見に行けばいいだろう。
229デフォルトの名無しさん
2020/09/07(月) 17:05:02.17ID:Egt+Qwmp 吊りかも知れないが勉強中とのことなので
マジレスすると
#include の行を一つづつ消してみて(mainに近い方だけ)
消したらどんなコンパイルエラー出るかを観察する
マジレスすると
#include の行を一つづつ消してみて(mainに近い方だけ)
消したらどんなコンパイルエラー出るかを観察する
230デフォルトの名無しさん
2020/09/07(月) 17:07:22.95ID:6+huFxV7 >>228
sshのソース読んでも全くオブジェクト指向じゃないぞ。
sshのソース読んでも全くオブジェクト指向じゃないぞ。
231デフォルトの名無しさん
2020/09/07(月) 17:13:56.93ID:x8yvSFtj あらゆるところで参照したいヘッダファイル↓があるとして
./include/common/hoge.hpp
詳細な実装(深い階層にいるやつ)
./include/hage/chibi/debu/unko.hpp
からそれを読み込むときって
#include "../../../../common/hoge.hpp"
みたいにしてしまっているのですが、もっとまともなやり方はありますか?
./include/common/hoge.hpp
詳細な実装(深い階層にいるやつ)
./include/hage/chibi/debu/unko.hpp
からそれを読み込むときって
#include "../../../../common/hoge.hpp"
みたいにしてしまっているのですが、もっとまともなやり方はありますか?
232デフォルトの名無しさん
2020/09/07(月) 17:18:55.68ID:x8yvSFtj ちなみにCMakeを使っています
233デフォルトの名無しさん
2020/09/07(月) 17:21:09.32ID:ualItUCM なぜSTLは
#include <vector>
などで読み込めるのでしょうか
不思議ですねぇ
#include <vector>
などで読み込めるのでしょうか
不思議ですねぇ
234デフォルトの名無しさん
2020/09/07(月) 17:27:17.02ID:x8yvSFtj ./include/common
をインクルードパスに含めるのは思いついた上で微妙な気がしたから
聞いてます
をインクルードパスに含めるのは思いついた上で微妙な気がしたから
聞いてます
235デフォルトの名無しさん
2020/09/07(月) 17:43:09.75ID:3Ozv9Uf+ まとも〜とか微妙〜とか
そういう表現どう思う?
そういう表現どう思う?
236デフォルトの名無しさん
2020/09/07(月) 17:44:59.68ID:x8yvSFtj ./include/hage/chibi/
配下ではどこからでも見れるようにするとかしたいときはそこの
CMakeLists.txtにインクルードパス指定する
とかしかないんですかね
配下ではどこからでも見れるようにするとかしたいときはそこの
CMakeLists.txtにインクルードパス指定する
とかしかないんですかね
237デフォルトの名無しさん
2020/09/07(月) 19:33:13.69ID:u0REhpNo インクルードガード標準搭載の言語多いのに
ほんと無駄な時間使わせてる言語なんだなって再確認できて辛い
ほんと無駄な時間使わせてる言語なんだなって再確認できて辛い
>>237
マクロによるインクルードガードなんて決まりきった定型文だし、正直 #pragma に載せる必要もないかと…
マクロによるインクルードガードなんて決まりきった定型文だし、正直 #pragma に載せる必要もないかと…
239デフォルトの名無しさん
2020/09/07(月) 20:19:27.09ID:h3kjQIhT まあね、GUIDなら衝突の確率340澗分の1だかんな
それすらも衝突したらどうすんだと・・・ほとんど病気だねw
それすらも衝突したらどうすんだと・・・ほとんど病気だねw
240デフォルトの名無しさん
2020/09/07(月) 20:40:39.15ID:x8yvSFtj >まとも〜とか微妙〜とか
なんとも思わねえよばあか
なんとも思わねえよばあか
241デフォルトの名無しさん
2020/09/07(月) 21:32:21.88ID:kH2Fy/8z そっか君プログラマ向いてないね
知らなくて驚くかもしれないけどコンピュータには感覚じゃなくて理屈しか通じないんだよ
知らなくて驚くかもしれないけどコンピュータには感覚じゃなくて理屈しか通じないんだよ
243デフォルトの名無しさん
2020/09/08(火) 00:30:42.07ID:h4K4tlm9 誰がプログラマって言ったよ?
理屈しか通じないんだろ?
頭悪そう
理屈しか通じないんだろ?
頭悪そう
244デフォルトの名無しさん
2020/09/08(火) 00:32:32.14ID:h4K4tlm9 自分で言ってることに矛盾してる時点で才能ないよ君
245デフォルトの名無しさん
2020/09/08(火) 16:47:11.08ID:FxZYRSTV is_integralみたいな型判定をメタ関数に渡すとこを書いてて思ったんだが
変数テンプレートをテンプレート・テンプレートパラメータとして渡せるようにはなってないんだよなぁ
ということは、と思ってコンセプトの予定されてる内容調べたら、コンセプトも同様なんだな・・残念
変数テンプレートをテンプレート・テンプレートパラメータとして渡せるようにはなってないんだよなぁ
ということは、と思ってコンセプトの予定されてる内容調べたら、コンセプトも同様なんだな・・残念
246デフォルトの名無しさん
2020/09/10(木) 08:49:56.48ID:ke8OXyHN C++でもNPMみたいなパッケージマネージャ使いたい
ヘッダと実装別で書かなきゃいけないのも無駄
このへん解決したAlterC++みたいなの作って
ヘッダと実装別で書かなきゃいけないのも無駄
このへん解決したAlterC++みたいなの作って
247デフォルトの名無しさん
2020/09/10(木) 09:32:44.42ID:xgcscVfX248はちみつ餃子 ◆8X2XSCHEME
2020/09/10(木) 09:34:27.99ID:LwYTdpan >>246
ヘッダファイルを実装とは別に用意する仕組みは効率よく差分ビルドするための仕組みとして機能していたんだけど、
テンプレートが登場してからは足を引っ張るようになってるとは思う。
まあ単純に面倒くさいってのもわかる。
パッケージマネージャはディストリビューションに乗ってるものを使いたまえよ。
実行環境の管理と開発環境の管理は要求されるものが本来は違うのだけど、
C/C++ は特権階級的な立場だから実行環境を開発環境として使えるようになってることが多い。
あえて分離したいなら CONAN が有名かなぁ……。 使ったことないけど。
https://conan.io/
ヘッダファイルを実装とは別に用意する仕組みは効率よく差分ビルドするための仕組みとして機能していたんだけど、
テンプレートが登場してからは足を引っ張るようになってるとは思う。
まあ単純に面倒くさいってのもわかる。
パッケージマネージャはディストリビューションに乗ってるものを使いたまえよ。
実行環境の管理と開発環境の管理は要求されるものが本来は違うのだけど、
C/C++ は特権階級的な立場だから実行環境を開発環境として使えるようになってることが多い。
あえて分離したいなら CONAN が有名かなぁ……。 使ったことないけど。
https://conan.io/
249デフォルトの名無しさん
2020/09/10(木) 13:27:37.52ID:ke8OXyHN >実行環境を開発環境として使えるようになってることが多い
これは古い慣習でそうなってるだけで実は分けたほうが便利な気がする
システム汚さないし、依存関係の解決も楽
そもそも実行環境に不要なはずのものがいることがおかしい
ConanもC++20のModuleも良さそうだけど結局バベルの塔だからなぁ
これは古い慣習でそうなってるだけで実は分けたほうが便利な気がする
システム汚さないし、依存関係の解決も楽
そもそも実行環境に不要なはずのものがいることがおかしい
ConanもC++20のModuleも良さそうだけど結局バベルの塔だからなぁ
250デフォルトの名無しさん
2020/09/10(木) 13:37:57.10ID:wdhKSMlq251デフォルトの名無しさん
2020/09/10(木) 13:58:43.59ID:h1ZKqHov >>246
VCPKGがあるじゃないか。
VCPKGがあるじゃないか。
252はちみつ餃子 ◆8X2XSCHEME
2020/09/10(木) 15:13:20.95ID:LwYTdpan253デフォルトの名無しさん
2020/09/10(木) 16:03:33.34ID:wdhKSMlq 変になるって、具体的に何?
254デフォルトの名無しさん
2020/09/10(木) 18:50:19.73ID:6Z343NeL255デフォルトの名無しさん
2020/09/10(木) 18:55:15.35ID:h1ZKqHov VSがクロス一番楽。
256デフォルトの名無しさん
2020/09/10(木) 18:56:59.66ID:h1ZKqHov C/C++はコンパイラメーカーがローダーを用意していない。
これに尽きる。
これに尽きる。
257デフォルトの名無しさん
2020/09/10(木) 19:04:13.58ID:wOYL1pS0 最近は何でもdockerに突っ込んでいる。
vscode + remote containerで開発環境の構築も楽になったし。
vscode + remote containerで開発環境の構築も楽になったし。
258デフォルトの名無しさん
2020/09/10(木) 19:05:01.58ID:ke8OXyHN C++ moduleってテンプレート使ったクラスをモジュール化したとき
プリコンパイルヘッダと原理的に同じで機械語じゃなくて中間表現に
変換されるらしいんだけど、これってコンパイル速度が大幅に改善することはない
ってことだよね?
プリコンパイルヘッダと原理的に同じで機械語じゃなくて中間表現に
変換されるらしいんだけど、これってコンパイル速度が大幅に改善することはない
ってことだよね?
259デフォルトの名無しさん
2020/09/10(木) 19:13:48.12ID:6Z343NeL よく考えたインクルードでpch併用してるプロジェクトなら、普段のビルド大して変わらんかもだけど
pchが依存するヘッダを書き換えた場合のフルビルドみたいなのは避けやすくなるぽい??
pchが依存するヘッダを書き換えた場合のフルビルドみたいなのは避けやすくなるぽい??
260デフォルトの名無しさん
2020/09/10(木) 19:13:59.29ID:ke8OXyHN プリコンパイルヘッダを試しに生成するのと
普通にコンパイルするのと試したら2割程度しか時間短縮できなかった
普通にコンパイルするのと試したら2割程度しか時間短縮できなかった
261はちみつ餃子 ◆8X2XSCHEME
2020/09/10(木) 21:58:54.33ID:LwYTdpan262デフォルトの名無しさん
2020/09/10(木) 22:37:36.67ID:ke8OXyHN うーん まぁチリツモと考えるとでかいか
夢見過ぎだったか
夢見過ぎだったか
263はちみつ餃子 ◆8X2XSCHEME
2020/09/10(木) 23:28:14.82ID:LwYTdpan264デフォルトの名無しさん
2020/09/10(木) 23:45:25.82ID:EIogAYj0 質問ですが
double x = 0.3333;
printf("x=%f\n", x); // 期待する表示: x=0.3333
みたいなBCD風表記→IEEE 754→再びBCD風表記
としたときに、元の表記と結果の表記が一致することは
保証されてますん?
double x = 0.3333;
printf("x=%f\n", x); // 期待する表示: x=0.3333
みたいなBCD風表記→IEEE 754→再びBCD風表記
としたときに、元の表記と結果の表記が一致することは
保証されてますん?
265はちみつ餃子 ◆8X2XSCHEME
2020/09/11(金) 00:13:13.30ID:iGbGHAE2266デフォルトの名無しさん
2020/09/11(金) 00:15:27.86ID:ajBE7peV されてない
267デフォルトの名無しさん
2020/09/11(金) 00:22:49.83ID:WOjxtKnw 不可逆変換
268デフォルトの名無しさん
2020/09/11(金) 00:27:13.22ID:1mBomO61 何がしたいんだろな。
269デフォルトの名無しさん
2020/09/11(金) 00:31:20.53ID:hb2JlHSF ちょっソ───スコ───ドに0.3333と書いたのに
0.33331とかに解釈になったらスゲーまずくね??
0.33331とかに解釈になったらスゲーまずくね??
270デフォルトの名無しさん
2020/09/11(金) 00:38:43.10ID:ajBE7peV 初心者スレは別にあるだろ
271デフォルトの名無しさん
2020/09/11(金) 00:40:37.59ID:OVJtRCSC さすがにもう少し精度が高くて、doubleなら
0.3333000000000001 くらいの誤差じゃない?(適当)
0.3333000000000001 くらいの誤差じゃない?(適当)
272デフォルトの名無しさん
2020/09/11(金) 00:41:20.87ID:hb2JlHSF 何がしたいのかというと実行時計算ができる有理数クラスを書いたんじゃが
ソース値がソースコードに浮動小数点で書かれていた場合は当たり障りのない有理数にしたいわけで、
たとえば
Rational x = 0.11;
と書けば済むところはそのまんま
x.m_num == 11LL // 分子
x.m_den == 100LL // 分母
とかになってホスイ
(必ずいちいちRational x = Rational(11, 100);と書かなければならないことはユーザー(≒漏れ自身)に強制したくない
ソース値がソースコードに浮動小数点で書かれていた場合は当たり障りのない有理数にしたいわけで、
たとえば
Rational x = 0.11;
と書けば済むところはそのまんま
x.m_num == 11LL // 分子
x.m_den == 100LL // 分母
とかになってホスイ
(必ずいちいちRational x = Rational(11, 100);と書かなければならないことはユーザー(≒漏れ自身)に強制したくない
273デフォルトの名無しさん
2020/09/11(金) 00:43:42.19ID:hb2JlHSF つかソースコードに書かれた浮動小数点数を文字列化して元に戻せることの重要性を
書いたコンパイラの教科書はマイナーかもしれんが実在したで(記憶モード
そのやり方こそ今思い出すべきなのだが手元に無いから質問すた、
書いたコンパイラの教科書はマイナーかもしれんが実在したで(記憶モード
そのやり方こそ今思い出すべきなのだが手元に無いから質問すた、
274デフォルトの名無しさん
2020/09/11(金) 00:44:51.33ID:ajBE7peV >>272
ユーザ定義リテラルでも作れば?
ユーザ定義リテラルでも作れば?
275デフォルトの名無しさん
2020/09/11(金) 00:45:17.34ID:OVJtRCSC 固定小数点?
276デフォルトの名無しさん
2020/09/11(金) 00:50:39.51ID:hb2JlHSF >>274
やだ
数値的にやるとしたらここ↓のalmost_equal<T>()でも使ってゴニョれば良いんかのう…
https://en.cppreference.com/w/cpp/types/numeric_limits/epsilon
しかし件の本にはこれと似たような演算を書いてあったような気がしないOTL
やだ
数値的にやるとしたらここ↓のalmost_equal<T>()でも使ってゴニョれば良いんかのう…
https://en.cppreference.com/w/cpp/types/numeric_limits/epsilon
しかし件の本にはこれと似たような演算を書いてあったような気がしないOTL
277デフォルトの名無しさん
2020/09/11(金) 00:54:13.41ID:ajBE7peV278デフォルトの名無しさん
2020/09/11(金) 00:59:52.73ID:ajBE7peV279デフォルトの名無しさん
2020/09/11(金) 01:08:43.17ID:hb2JlHSF >>278
しらそん
桁の十分不十分は応用にもよるし
足りないとわかったらRationalの方を多数桁対応させるは
とにかくRationalは見かけをdouble型と同様に扱えるように仕上げ鯛、
なぜなら真に走らせたいアルゴリズムはdoubleをtypedefして作ってあって、
それをRationalに差し替えるだけ!と思ってたら
単体テストが10億行ぐらい浮動小数点で書いてあったので…
しらそん
桁の十分不十分は応用にもよるし
足りないとわかったらRationalの方を多数桁対応させるは
とにかくRationalは見かけをdouble型と同様に扱えるように仕上げ鯛、
なぜなら真に走らせたいアルゴリズムはdoubleをtypedefして作ってあって、
それをRationalに差し替えるだけ!と思ってたら
単体テストが10億行ぐらい浮動小数点で書いてあったので…
280デフォルトの名無しさん
2020/09/11(金) 01:27:41.74ID:ajBE7peV281デフォルトの名無しさん
2020/09/11(金) 01:52:30.29ID:tAPrmVM5 文字列受け取るコンストラクタ書くだけだろ
282デフォルトの名無しさん
2020/09/11(金) 03:35:25.76ID:iBiKDQ69 char配列に変換して8バイト読み書きするだけのこと
文字列に変換することは忘れろ
文字列に変換することは忘れろ
283デフォルトの名無しさん
2020/09/11(金) 12:52:59.43ID:WJYUzgW7 そもそも0と0.0を区別する方法がないのにどこまで意味のある事なのか
284デフォルトの名無しさん
2020/09/11(金) 15:59:42.05ID:Cxw4gZ+X > (必ずいちいちRational x = Rational(11, 100);と書かなければならないことはユーザー(≒漏れ自身)に強制したくない
無理だろ
Rational x = 0.1;
こんなの、どうすんだよ?
double型の0.1は1/10じゃねえぞ
無理だろ
Rational x = 0.1;
こんなの、どうすんだよ?
double型の0.1は1/10じゃねえぞ
285デフォルトの名無しさん
2020/09/11(金) 16:00:39.94ID:Cxw4gZ+X denが必ず10のべき、みたいなことにして
誤差が最小になるように頑張るならともかく
誤差が最小になるように頑張るならともかく
286デフォルトの名無しさん
2020/09/11(金) 16:17:57.96ID:FpD9K4HS >>272
Rational x = "0.11"; を許せばいい
Rational x = "0.11"; を許せばいい
287デフォルトの名無しさん
2020/09/11(金) 16:29:19.36ID:6r5prnWG >>279
仮にテストコードに 0.333333333333333 って書いてあったとしても
それは 0.3333333333333329818 のことだから、
0.333333333333333として受け取ってしまうと逆にテストに失敗するのでは?
仮にテストコードに 0.333333333333333 って書いてあったとしても
それは 0.3333333333333329818 のことだから、
0.333333333333333として受け取ってしまうと逆にテストに失敗するのでは?
288デフォルトの名無しさん
2020/09/11(金) 16:36:45.19ID:G2VX17rJ 10億行ぐらい既存テストコードがあるとのことなので文字列とか全面書き換えになる案はNGなんでしょう
でもいい案はなさげ
一旦浮動小数になったら元のリテラルの復元はできないだろうな
でもいい案はなさげ
一旦浮動小数になったら元のリテラルの復元はできないだろうな
289デフォルトの名無しさん
2020/09/11(金) 16:39:43.52ID:su+TWEMf >文字列とか全面書き換え
Rational にする書き換えはOKなんだろ
Rational にする書き換えはOKなんだろ
290デフォルトの名無しさん
2020/09/11(金) 16:43:40.92ID:G2VX17rJ そりゃクラスの差し替えは局所的な置き換えで済むんじゃないの
浮動小数のリテラルを全部文字列に置き換えることに比べたら楽でしょ
まぁ本人が答えるべきだが状況はなんとなく推測できる
浮動小数のリテラルを全部文字列に置き換えることに比べたら楽でしょ
まぁ本人が答えるべきだが状況はなんとなく推測できる
291デフォルトの名無しさん
2020/09/11(金) 20:04:14.01ID:ua52u3Jr そのくらい正規表現で置換すればいいだろ。
だいたい10億行のテストコードが仮に本当なら100%手書きじゃないから一つずつ確認しながら置換するなんてアホなことはしない。
有理数クラスなんて普通は枯れたライブラリ拾って来るけどな
だいたい10億行のテストコードが仮に本当なら100%手書きじゃないから一つずつ確認しながら置換するなんてアホなことはしない。
有理数クラスなんて普通は枯れたライブラリ拾って来るけどな
292デフォルトの名無しさん
2020/09/11(金) 20:18:44.50ID:G2VX17rJ だからさ、そこは本人の希望なんだからあれこれ言ってもしかたないじゃん
正規表現で機械的に置き換えたらまずいものもあるかもしれないし
浮動小数と有理数で切り替えたいって言ってるからそのメンテコストもあるだろ
正規表現で機械的に置き換えたらまずいものもあるかもしれないし
浮動小数と有理数で切り替えたいって言ってるからそのメンテコストもあるだろ
293デフォルトの名無しさん
2020/09/11(金) 21:28:10.16ID:opulvzCM ユーザー定義リテラルとか使ってboost::rationalでも生成したら?
やったことないからできるか知らんが。
やったことないからできるか知らんが。
294デフォルトの名無しさん
2020/09/11(金) 21:35:23.73ID:em6XQ5sn 何にせよdoubleになった時点でリテラル表記の情報は失われるんだから、何がしかの書き換えをするしかない
それがイヤだ絶対やらんと言うなら、じゃあ不可能だよという答えにしかならない
それがイヤだ絶対やらんと言うなら、じゃあ不可能だよという答えにしかならない
295デフォルトの名無しさん
2020/09/11(金) 21:51:53.86ID:aT3N5bZo プリプロセッサを書けばどうだろう
296デフォルトの名無しさん
2020/09/11(金) 22:53:08.79ID:3mrNom4D Rational に double の数値が直代入されてるところだけ文字列代入にするための
プリプロセッサ描けば良い話
プリプロセッサ描けば良い話
297デフォルトの名無しさん
2020/09/12(土) 05:53:05.89ID:2ljmp3qW 結論から言うと、
IEEE 754の値x → 10進数文字列 s→ IEEE 754の値x'
という変換を行った場合、x == x'となるかどうかはx次第であって一般に保証されないが、
10進数文字列s → IEEE 754の値x → 10進数文字列s'
という変換は、sが非正規化数だったりIEEE 754の仮数部で表現可能な桁数を超えない限り -- (1)
s == s'を保証可能
なぜなら、(1)の条件を満たすsとそのIEEE 754への変換結果xの食い違う条件は
sを2進数に変換したとき循環小数になる場合に限られるが(もとの10進数のsはもちろん循環小数ではない
この食い違いは±DBL_MINを超えないから以下略
(結局x→s'変換はalmost_equal<T>()的な処理が必要にはなるが、適切にやれば
sの整数部の文字列化 ==> x -= (xの整数部) ==> x *= 10、
の反復を何時やめればよいか確定する
IEEE 754の値x → 10進数文字列 s→ IEEE 754の値x'
という変換を行った場合、x == x'となるかどうかはx次第であって一般に保証されないが、
10進数文字列s → IEEE 754の値x → 10進数文字列s'
という変換は、sが非正規化数だったりIEEE 754の仮数部で表現可能な桁数を超えない限り -- (1)
s == s'を保証可能
なぜなら、(1)の条件を満たすsとそのIEEE 754への変換結果xの食い違う条件は
sを2進数に変換したとき循環小数になる場合に限られるが(もとの10進数のsはもちろん循環小数ではない
この食い違いは±DBL_MINを超えないから以下略
(結局x→s'変換はalmost_equal<T>()的な処理が必要にはなるが、適切にやれば
sの整数部の文字列化 ==> x -= (xの整数部) ==> x *= 10、
の反復を何時やめればよいか確定する
298デフォルトの名無しさん
2020/09/12(土) 05:55:29.22ID:2ljmp3qW299デフォルトの名無しさん
2020/09/12(土) 08:39:01.67ID:U5yMllJ4 sagemathで
a=0.11
QQ(a)
とすると
11/100
が得られる
aの実体はMPFRのオブジェクト
まーsagemathのソースでも見とけば
a=0.11
QQ(a)
とすると
11/100
が得られる
aの実体はMPFRのオブジェクト
まーsagemathのソースでも見とけば
300デフォルトの名無しさん
2020/09/12(土) 15:38:22.68ID:cDX1Q2rT >>297
的外れ
的外れ
301デフォルトの名無しさん
2020/09/12(土) 15:47:40.14ID:JdE/Bv85 >>297
その前にリテラル表現→double値(お前が言うところのIEEE754の値)
という変換が入って、それが不可逆だから書き換えなしじゃ無理だっつってんだよ
Hoge(0.0)とHoge(0.00)に表現に応じた別の処理させるのはC++の範囲では不可能だ
その前にリテラル表現→double値(お前が言うところのIEEE754の値)
という変換が入って、それが不可逆だから書き換えなしじゃ無理だっつってんだよ
Hoge(0.0)とHoge(0.00)に表現に応じた別の処理させるのはC++の範囲では不可能だ
302デフォルトの名無しさん
2020/09/12(土) 15:50:40.29ID:cDX1Q2rT プリプロセッサなら可能
Cの仕様
Cの仕様
303デフォルトの名無しさん
2020/09/12(土) 15:54:45.19ID:JdE/Bv85 ああ、#で文字列化できるからこの場合はできるのか忘れてた
まあ対象の浮動小数を全部マクロで括らないといけないからどっちみち書き換えは発生するけどな
まあ対象の浮動小数を全部マクロで括らないといけないからどっちみち書き換えは発生するけどな
304デフォルトの名無しさん
2020/09/12(土) 15:56:41.81ID:cDX1Q2rT おまえプリプロセッサが何か判ってないだろ
305デフォルトの名無しさん
2020/09/12(土) 15:59:56.68ID:JdE/Bv85 ん?シンボルを文字列化する#演算子はプリプロセッサディレクティブの一つだぞ
何か間違ってるか?
何か間違ってるか?
306デフォルトの名無しさん
2020/09/12(土) 16:08:00.10ID:idwadC/M 問題はそこじゃない
307デフォルトの名無しさん
2020/09/12(土) 16:17:43.12ID:JdE/Bv85 絡んでくるだけで具体的な問題を指摘できないカスは置いといて
プリプロセッサフェーズの後で0.0と0.00を区別する方法はないから279君の望みは叶わないでFA
プリプロでもdouble x = 0.00;とかを自動で書き換えるの無理でしょ
プリプロセッサフェーズの後で0.0と0.00を区別する方法はないから279君の望みは叶わないでFA
プリプロでもdouble x = 0.00;とかを自動で書き換えるの無理でしょ
308デフォルトの名無しさん
2020/09/12(土) 16:19:33.34ID:idwadC/M プリプロセッサを書けと言っている
309デフォルトの名無しさん
2020/09/12(土) 16:28:52.93ID:erdZI+Jx >>299
有理数の分母が10の冪という前提ならある程度の精度で出来そうだな。
有理数の分母が10の冪という前提ならある程度の精度で出来そうだな。
310デフォルトの名無しさん
2020/09/12(土) 17:27:31.95ID:JdE/Bv85 分母仮定せずに普通にディオファントス近似した方が誤差小さくなると思うんだけど
311デフォルトの名無しさん
2020/09/12(土) 17:57:13.06ID:erdZI+Jx 10進リテラルで渡す前提なら分母が10の冪になってしまったら逆に誤差が大きいことになると思うが。
#約分とかは別として。
まぁ、1.0/3.0みたいなものも渡せるようにということなら確かにそうかも。
#約分とかは別として。
まぁ、1.0/3.0みたいなものも渡せるようにということなら確かにそうかも。
312デフォルトの名無しさん
2020/09/12(土) 20:28:37.72ID:2ljmp3qW とりあえずここまではできた;;
x=0.1: rt=1/10
x=0.11: rt=11/100
x=0.111: rt=111/1000
x=0.1111: rt=1111/10000
x=0.9: rt=9/10
x=0.99: rt=99/100
x=0.999: rt=999/1000
x=0.9999: rt=9999/10000
x=0.33333: rt=33333/100000
x=123.34567: rt=1233456699999999/10000000000000 // NG
x=123.345678: rt=123345678/1000000
x=123.3456789: rt=1233456788999999/10000000000000 // NG
x=12.34567: rt=1234567/100000
x=12: rt=12/1
x=123E-5: rt=123/100000
x=0.1: rt=1/10
x=0.11: rt=11/100
x=0.111: rt=111/1000
x=0.1111: rt=1111/10000
x=0.9: rt=9/10
x=0.99: rt=99/100
x=0.999: rt=999/1000
x=0.9999: rt=9999/10000
x=0.33333: rt=33333/100000
x=123.34567: rt=1233456699999999/10000000000000 // NG
x=123.345678: rt=123345678/1000000
x=123.3456789: rt=1233456788999999/10000000000000 // NG
x=12.34567: rt=1234567/100000
x=12: rt=12/1
x=123E-5: rt=123/100000
313デフォルトの名無しさん
2020/09/12(土) 20:35:15.16ID:2ljmp3qW わかったことは、
10進数文字列s → IEEE 754の値x → 10進数文字列s'
において、s→xのところで仮数部最小桁で丸めがおきたのかどうかの情報が無いと
xからsの復元が難しいケースがあるというこっちゃorz
コンパイラならs→xをやるのは自分自身なので、x→s'を行うライブラリと手を握ってうまいことやれる可能性があるが
xを与えられるだけのユーザープログラムではこれは対処が難しい
Ad-hocに.999999 = 1とみなす系のAd-hocな処置が必要かも試練、
10進数文字列s → IEEE 754の値x → 10進数文字列s'
において、s→xのところで仮数部最小桁で丸めがおきたのかどうかの情報が無いと
xからsの復元が難しいケースがあるというこっちゃorz
コンパイラならs→xをやるのは自分自身なので、x→s'を行うライブラリと手を握ってうまいことやれる可能性があるが
xを与えられるだけのユーザープログラムではこれは対処が難しい
Ad-hocに.999999 = 1とみなす系のAd-hocな処置が必要かも試練、
314デフォルトの名無しさん
2020/09/12(土) 20:45:44.57ID:JdE/Bv85 だからさ
例えばそれでrt=1233456699999999/10000000000000になったとして
どうやって元の表現が123.34567だったって判断するのさ
本当に123.345699999999って書かれてた場合と区別できるわけないんだけどどうするの?
123.34567を123.345699999999に間違えるのはダメだけど逆は許されるの?どうして?どういう仮定置いてるの?
その辺を何一つハッキリさせないまま勝手にやられても
何がしたいのか全くわからない
例えばそれでrt=1233456699999999/10000000000000になったとして
どうやって元の表現が123.34567だったって判断するのさ
本当に123.345699999999って書かれてた場合と区別できるわけないんだけどどうするの?
123.34567を123.345699999999に間違えるのはダメだけど逆は許されるの?どうして?どういう仮定置いてるの?
その辺を何一つハッキリさせないまま勝手にやられても
何がしたいのか全くわからない
315デフォルトの名無しさん
2020/09/12(土) 20:52:26.12ID:EJqlmNG1 まぁそんな追い込まんでも
自分で手を動かしてダメっぽいことい気づいたのは立派だよ
自分で手を動かしてダメっぽいことい気づいたのは立派だよ
316デフォルトの名無しさん
2020/09/12(土) 20:53:34.39ID:U5yMllJ4317デフォルトの名無しさん
2020/09/12(土) 20:54:09.24ID:2ljmp3qW >>314
>本当に123.345699999999って書かれてた場合と区別できるわけない
思い込みが激しいお人じゃ…
123.345699999999はギリ仮数部で表現可能な桁数に収まっているから
これは123.34569とは明確に区別可能
ていうか実際のところできたわ;;
x=0.1: rt=1/10
x=0.11: rt=11/100
x=0.111: rt=111/1000
x=0.1111: rt=1111/10000
x=0.9: rt=9/10
x=0.99: rt=99/100
x=0.999: rt=999/1000
x=0.9999: rt=9999/10000
x=0.33333: rt=33333/100000
x=123.34567: rt=12334567/100000
x=123.345678: rt=123345678/1000000
x=123.3456789: rt=1233456789/10000000
x=123.345699999999: rt=123345699999999/1000000000000
x=12.34567: rt=1234567/100000
x=12: rt=12/1
x=123E-5: rt=123/100000
>本当に123.345699999999って書かれてた場合と区別できるわけない
思い込みが激しいお人じゃ…
123.345699999999はギリ仮数部で表現可能な桁数に収まっているから
これは123.34569とは明確に区別可能
ていうか実際のところできたわ;;
x=0.1: rt=1/10
x=0.11: rt=11/100
x=0.111: rt=111/1000
x=0.1111: rt=1111/10000
x=0.9: rt=9/10
x=0.99: rt=99/100
x=0.999: rt=999/1000
x=0.9999: rt=9999/10000
x=0.33333: rt=33333/100000
x=123.34567: rt=12334567/100000
x=123.345678: rt=123345678/1000000
x=123.3456789: rt=1233456789/10000000
x=123.345699999999: rt=123345699999999/1000000000000
x=12.34567: rt=1234567/100000
x=12: rt=12/1
x=123E-5: rt=123/100000
318デフォルトの名無しさん
2020/09/12(土) 20:59:43.51ID:JdE/Bv85 そりゃ0.00002も差があれば区別できるに決まってるわな
いやまあ自分が書き間違えたのが悪いんだけど結局何が問題だか全く理解してないのね
いやまあ自分が書き間違えたのが悪いんだけど結局何が問題だか全く理解してないのね
319デフォルトの名無しさん
2020/09/12(土) 21:00:56.75ID:2ljmp3qW320デフォルトの名無しさん
2020/09/12(土) 21:08:30.19ID:EJqlmNG1 0.500000000000000166533453693773481063544750213623046875
これできる?
これできる?
321デフォルトの名無しさん
2020/09/12(土) 21:09:20.40ID:JdE/Bv85 別のリテラル表現が同じdouble値(IEEE754の値)を示す時に何をもって正しいとするかという
お前の勝手な俺様基準を何も説明しないまま公衆の面前でガチャガチャやってることが問題なんだよ
わかれ
お前の勝手な俺様基準を何も説明しないまま公衆の面前でガチャガチャやってることが問題なんだよ
わかれ
322デフォルトの名無しさん
2020/09/12(土) 21:18:05.26ID:2ljmp3qW323デフォルトの名無しさん
2020/09/12(土) 21:22:42.84ID:EJqlmNG1 いやいやそれでどやられてもw
> 10進数文字列s → IEEE 754の値x → 10進数文字列s'
> という変換は、sが非正規化数だったりIEEE 754の仮数部で表現可能な桁数を超えない限り -- (1)
> s == s'を保証可能
仮数部で表現可能かどうかってどうやって判定するわけ?
> 10進数文字列s → IEEE 754の値x → 10進数文字列s'
> という変換は、sが非正規化数だったりIEEE 754の仮数部で表現可能な桁数を超えない限り -- (1)
> s == s'を保証可能
仮数部で表現可能かどうかってどうやって判定するわけ?
324デフォルトの名無しさん
2020/09/12(土) 21:30:02.39ID:2ljmp3qW うれしげにコード貼る、
https://ideone.com/EKHKWG
実行結果は>>317と同じ
>>313の問題があるから
0.999999(9の循環小数)を1.0と見なす処置を入れた結果、考えていたテストケースは全部通った。
結局、
10進数文字列s → IEEE 754の値x → 10進数文字列s'
でs'が厳密なsの復元にならないケースがあるはずだがまだ見つかっていない。
ま、あったとしても有理数として解釈する上では数値としての大差は無いので問題ないはず、、、
https://ideone.com/EKHKWG
実行結果は>>317と同じ
>>313の問題があるから
0.999999(9の循環小数)を1.0と見なす処置を入れた結果、考えていたテストケースは全部通った。
結局、
10進数文字列s → IEEE 754の値x → 10進数文字列s'
でs'が厳密なsの復元にならないケースがあるはずだがまだ見つかっていない。
ま、あったとしても有理数として解釈する上では数値としての大差は無いので問題ないはず、、、
325デフォルトの名無しさん
2020/09/12(土) 21:33:35.13ID:2ljmp3qW >>323
入力となる浮動小数点数を文字列として書いた時点でワカル
52 bitでまったく表現しきれない桁数なら(1)を満たさない
そうでなく、かつ(xE+s表記で与えたとして)指数sが極端に小さくなければ(xの桁数+sが-1022以上なら)(1)を満たす
入力となる浮動小数点数を文字列として書いた時点でワカル
52 bitでまったく表現しきれない桁数なら(1)を満たさない
そうでなく、かつ(xE+s表記で与えたとして)指数sが極端に小さくなければ(xの桁数+sが-1022以上なら)(1)を満たす
326デフォルトの名無しさん
2020/09/12(土) 21:40:34.66ID:JdE/Bv85 >>325
なんだ、仮数部で表現可能かのチェックのために結局20億行テストコードを文字列として解析する必要があるわけね
じゃあその時に文字列として扱うようにコード直せよ
どうせそういうスクリプトが必要なんだからついでにやればいいね、よかったこれで解決だ
あほくさ
なんだ、仮数部で表現可能かのチェックのために結局20億行テストコードを文字列として解析する必要があるわけね
じゃあその時に文字列として扱うようにコード直せよ
どうせそういうスクリプトが必要なんだからついでにやればいいね、よかったこれで解決だ
あほくさ
327デフォルトの名無しさん
2020/09/12(土) 21:43:09.42ID:EJqlmNG1 >>325
は?書く?
10億行のテストコードあんだろ?
それが(1)を満たすかどうか確認する必要があるんだろ?
だいたい仮数におさまってたら大丈夫ってそりゃそうだろよ
誤差が問題なのにそれを考えなくていいケースなんだもの
は?書く?
10億行のテストコードあんだろ?
それが(1)を満たすかどうか確認する必要があるんだろ?
だいたい仮数におさまってたら大丈夫ってそりゃそうだろよ
誤差が問題なのにそれを考えなくていいケースなんだもの
328デフォルトの名無しさん
2020/09/12(土) 21:47:15.04ID:2ljmp3qW329デフォルトの名無しさん
2020/09/12(土) 21:52:28.75ID:GweMiOHC >ま、あったとしても有理数として解釈する上では数値としての大差は無いので問題ないはず、、、
ならRationalなんていらないね(´・ω・`)
ならRationalなんていらないね(´・ω・`)
330デフォルトの名無しさん
2020/09/12(土) 21:58:02.93ID:JdE/Bv85331デフォルトの名無しさん
2020/09/12(土) 22:03:02.47ID:2ljmp3qW332デフォルトの名無しさん
2020/09/12(土) 22:04:39.19ID:JdE/Bv85 あっはいどうでもいいです
(仮数部)/2^52に一番近い10^nを分母とする分数を探す簡単なさんすうの問題を解くだけの話だったんですね
がんばって
(仮数部)/2^52に一番近い10^nを分母とする分数を探す簡単なさんすうの問題を解くだけの話だったんですね
がんばって
333デフォルトの名無しさん
2020/09/12(土) 22:17:12.69ID:EJqlmNG1 手入力だから大丈夫ってのはお前しか判断できないよね?
成り立たない数字あげてもそれは手入力しないと言われるわけでしょ?
おれもあほくさくなった
成り立たない数字あげてもそれは手入力しないと言われるわけでしょ?
おれもあほくさくなった
334デフォルトの名無しさん
2020/09/12(土) 22:28:23.42ID:MEMmSzVD 俺ぐらいの達人になると、もう初期段階で
「あ、これさわったらアカン人や・・」って雰囲気でわかるようになる
「あ、これさわったらアカン人や・・」って雰囲気でわかるようになる
335デフォルトの名無しさん
2020/09/12(土) 22:31:11.00ID:GweMiOHC 10億行手入力したとか言い放つキチガイ相手にするの馬鹿らしくない?
1行/秒でも1700人月よ
1行/秒でも1700人月よ
336デフォルトの名無しさん
2020/09/12(土) 22:45:00.53ID:SzTm78BI 浮動小数点型としてメモリに載せた時点でアウト
文字列とかでやるしかなくね
文字列とかでやるしかなくね
337285
2020/09/13(日) 06:06:47.90ID:2wZmRDXk 俺の予言当たってやんのw
338デフォルトの名無しさん
2020/09/13(日) 08:25:17.62ID:Xp7zp8nz 単に誤差最小のものを選ぶだけだと>>314みたいになるから、1ULPか2ULPの誤差範囲内で
冪数が最小になるものを選ぶのがいいかな。
冪数が最小になるものを選ぶのがいいかな。
339デフォルトの名無しさん
2020/09/13(日) 12:55:10.97ID:P44KoBmR 連分数展開でディオファントス近似する方法なんてその辺にいくらでも転がってるのに
340デフォルトの名無しさん
2020/09/13(日) 18:33:50.24ID:LIu3OWuw ./hello > hello.txt
ってやったときhelloのprintfが無限ループだったら無限にhello.txtを上書きし続けますか?
ってやったときhelloのprintfが無限ループだったら無限にhello.txtを上書きし続けますか?
341デフォルトの名無しさん
2020/09/13(日) 19:12:18.99ID:eePcELKn >>340
上書きしません、追記し続けます。
上書きしません、追記し続けます。
342デフォルトの名無しさん
2020/09/13(日) 19:39:02.91ID:cE5a2Csh343デフォルトの名無しさん
2020/09/13(日) 23:14:53.91ID:n2e2K14L ./hello < hello.txt > hello.txt
344デフォルトの名無しさん
2020/09/14(月) 03:25:56.23ID:13FXnr3U Pythonで書いたGUIアプリをC++で書き直す日々が始まるお(*´ω`*)
345デフォルトの名無しさん
2020/09/14(月) 03:28:48.08ID:p1+vn7b/ イテレータを i 個分進める (戻す) のって i 回インクリメント (デクリメント) するしかないの?
一気に進める方法があったら教えて下さい
一気に進める方法があったら教えて下さい
346デフォルトの名無しさん
2020/09/14(月) 03:32:02.02ID:p1+vn7b/ ああvectorならできてsetなら無理ってことか
ググったらわかりました
すみませんでした
ググったらわかりました
すみませんでした
347デフォルトの名無しさん
2020/09/14(月) 08:44:25.84ID:NtiDKVVf >>340
わざとやってみたことあるけど
途中で飽きてきてCtrl+C
うすらでかいファイルができていた
ずーっと放置するとHDDの空き容量がなくなって
stdoutへの書き込みが失敗するようになるはず
それがOSのファイルにも使うドライブだとシステムダウンして
親ガメこけたら皆こけただね
わざとやってみたことあるけど
途中で飽きてきてCtrl+C
うすらでかいファイルができていた
ずーっと放置するとHDDの空き容量がなくなって
stdoutへの書き込みが失敗するようになるはず
それがOSのファイルにも使うドライブだとシステムダウンして
親ガメこけたら皆こけただね
348デフォルトの名無しさん
2020/09/14(月) 09:06:31.69ID:dr1ZmQsx349デフォルトの名無しさん
2020/09/14(月) 09:54:42.26ID:gMM3Z1ji350デフォルトの名無しさん
2020/09/14(月) 10:42:29.67ID:/vUb6N4m >>346
advance
advance
351デフォルトの名無しさん
2020/09/15(火) 15:20:33.02ID:WaVlZlwn typedef struct HOGE
{
int x;
int y;
HOGE(int x, int y)
{
this->x = x;
this->y = y;
}
} hoge_t;
class TEST {
hoge_t h(1, 2); // expected identifier before numeric constant
}
で、// のとおりエラーが出てしまいます。
typedef struct と class の違いが理解できていないのが悪いのですが
メンバ変数として利用するとき初期化は出来ないのでしょうか。
{
int x;
int y;
HOGE(int x, int y)
{
this->x = x;
this->y = y;
}
} hoge_t;
class TEST {
hoge_t h(1, 2); // expected identifier before numeric constant
}
で、// のとおりエラーが出てしまいます。
typedef struct と class の違いが理解できていないのが悪いのですが
メンバ変数として利用するとき初期化は出来ないのでしょうか。
352デフォルトの名無しさん
2020/09/15(火) 15:26:43.04ID:YjwP830M353デフォルトの名無しさん
2020/09/15(火) 15:40:39.25ID:rFxeOmKr354デフォルトの名無しさん
2020/09/15(火) 15:42:47.32ID:YjwP830M ブーメラン投げてんなよ
C++11からokになったの知らねえとか
勉強不足にも程があるだろうが
C++11からokになったの知らねえとか
勉強不足にも程があるだろうが
355デフォルトの名無しさん
2020/09/15(火) 15:53:03.02ID:rFxeOmKr あっそっか
コレ、メンバの初期化してんのか
てっきり文かいてんのかとおもたわ
スマンスマン
コレ、メンバの初期化してんのか
てっきり文かいてんのかとおもたわ
スマンスマン
356デフォルトの名無しさん
2020/09/15(火) 15:53:08.92ID:8CWM1WbO そもそもプロセスなんてどこから出てきたんだ?
357デフォルトの名無しさん
2020/09/15(火) 16:58:31.38ID:3HBrgqD1 >>351
それは、恐らく昔のC++では動かなかったような非常にきわどい書き方をしている。
1. まず、クラス名をtypedef宣言しても、それをどの場所でもクラス名の変わりに
使えるかどうかは、微妙。余り行われていないことで、よく調べてみないと分からない。
特に、この例の様なコンストラクタによる初期化を伴う変数の宣言の場合には、
当たり前のように出来るように見えて、コンパイラ作者目線では解析に負担がかかること。
2. static以外のメンバ変数(インスタンス変数)を、クラス宣言の中で直接初期化する
書き方は、あるバージョン以降のC++でのみできるようになってきたはずで、
その書き方に対応していないコンパイラだとエラーになる。
それは、恐らく昔のC++では動かなかったような非常にきわどい書き方をしている。
1. まず、クラス名をtypedef宣言しても、それをどの場所でもクラス名の変わりに
使えるかどうかは、微妙。余り行われていないことで、よく調べてみないと分からない。
特に、この例の様なコンストラクタによる初期化を伴う変数の宣言の場合には、
当たり前のように出来るように見えて、コンパイラ作者目線では解析に負担がかかること。
2. static以外のメンバ変数(インスタンス変数)を、クラス宣言の中で直接初期化する
書き方は、あるバージョン以降のC++でのみできるようになってきたはずで、
その書き方に対応していないコンパイラだとエラーになる。
358デフォルトの名無しさん
2020/09/15(火) 17:03:32.49ID:3HBrgqD1 >>357
1に関して。
まず、typedef宣言自体が、ポインタや配列や関数型などが複雑に絡んだ
「組み立て型」を簡単に表すためと、
C言語では、構造体型をそのまま型名として使うことができず、typedefを
使わなければ、「struct タグ名」とstructを省略できなかったので、
typedefが好んで使われた。
ところが、C++では、structやclassキーワードを書かなくても、いきなり
タグ名を書いても型名として扱われる。だから、class名/struct名を敢えて
typedef宣言する人は非常に少なくなった。なので、そのような書き方に
滅多に遭遇しないので、テスト不十分でコンパイラにバグが残っている可能性がある。
1に関して。
まず、typedef宣言自体が、ポインタや配列や関数型などが複雑に絡んだ
「組み立て型」を簡単に表すためと、
C言語では、構造体型をそのまま型名として使うことができず、typedefを
使わなければ、「struct タグ名」とstructを省略できなかったので、
typedefが好んで使われた。
ところが、C++では、structやclassキーワードを書かなくても、いきなり
タグ名を書いても型名として扱われる。だから、class名/struct名を敢えて
typedef宣言する人は非常に少なくなった。なので、そのような書き方に
滅多に遭遇しないので、テスト不十分でコンパイラにバグが残っている可能性がある。
359はちみつ餃子 ◆8X2XSCHEME
2020/09/15(火) 17:21:18.89ID:Gxy/396Z >>358
メンバ関数を含まない struct (つまりは POD) なら、
C のヘッダファイルとしても使えるように書く場合は珍しくもないと思うよ。
コンパイラのバグを心配し始めたらなんもできなくない?
主要なコンパイラでよほど長く改善できてないバグだったり、
(特殊な開発環境などで) 実際に使わざるを得ない特定のバージョンにバグがある
ことが分かっているときなら配慮もするけど、
普段の習慣として気にするほどのことじゃないでしょ。
メンバ関数を含まない struct (つまりは POD) なら、
C のヘッダファイルとしても使えるように書く場合は珍しくもないと思うよ。
コンパイラのバグを心配し始めたらなんもできなくない?
主要なコンパイラでよほど長く改善できてないバグだったり、
(特殊な開発環境などで) 実際に使わざるを得ない特定のバージョンにバグがある
ことが分かっているときなら配慮もするけど、
普段の習慣として気にするほどのことじゃないでしょ。
360デフォルトの名無しさん
2020/09/15(火) 17:22:04.43ID:GPrkorqi hoge_t h = {1, 2};
で普通にコンパイル通るんだが
class TEST のインスタンスが造られる度に実行されるのか
それともあるインスタンスで変更されたら
次に造られるインスタンスは後者の値になるのか
で普通にコンパイル通るんだが
class TEST のインスタンスが造られる度に実行されるのか
それともあるインスタンスで変更されたら
次に造られるインスタンスは後者の値になるのか
361はちみつ餃子 ◆8X2XSCHEME
2020/09/15(火) 17:33:54.20ID:Gxy/396Z362デフォルトの名無しさん
2020/09/15(火) 17:49:15.00ID:3HBrgqD1 実は、
z x(a,b);
の形式は、コンパイラが関数xのプロトタイプ宣言と、引数付きのコンストラクタ
呼び出しによる変数xの初期化の区別を付けるのが難しい例として知られている。
その区別は、基本的にはaの部分が型名なのか、型名でないのかで区別される。
それに加えて、zの部分にtypedef名を書くと、コンパイラはいろいろなことを配慮
しなくてはならなくなる。
関数のプロトタイプ宣言と、メンバ変数の定義では、コンパイルの流れが大きく変わるので、
なるべく早い段階でそれらを区別しなければならない。
余り深く解析しすぎてはコンパイル時間が増大してしまう。
だから、適度にヒューリスティックな方法で判別していることがある。
ヒューリスティックな方法なので、滅多に書かない特殊な書き方をした場合、間違えてしまう可能性があるかもしれない。
z x(a,b);
の形式は、コンパイラが関数xのプロトタイプ宣言と、引数付きのコンストラクタ
呼び出しによる変数xの初期化の区別を付けるのが難しい例として知られている。
その区別は、基本的にはaの部分が型名なのか、型名でないのかで区別される。
それに加えて、zの部分にtypedef名を書くと、コンパイラはいろいろなことを配慮
しなくてはならなくなる。
関数のプロトタイプ宣言と、メンバ変数の定義では、コンパイルの流れが大きく変わるので、
なるべく早い段階でそれらを区別しなければならない。
余り深く解析しすぎてはコンパイル時間が増大してしまう。
だから、適度にヒューリスティックな方法で判別していることがある。
ヒューリスティックな方法なので、滅多に書かない特殊な書き方をした場合、間違えてしまう可能性があるかもしれない。
363デフォルトの名無しさん
2020/09/15(火) 19:13:25.13ID:glwHIVnw なんでここってそんな殺伐と喧嘩腰みたいなやつ多いの?
もっと柔らかくさ切磋琢磨してこうよ
もっと柔らかくさ切磋琢磨してこうよ
364デフォルトの名無しさん
2020/09/15(火) 19:25:55.43ID:cZkGG5+C class TEST {
hoge_t h;
TEST() : h{1, 2} {}
};
のほうがわかりやすくね
hoge_t h;
TEST() : h{1, 2} {}
};
のほうがわかりやすくね
365デフォルトの名無しさん
2020/09/15(火) 19:25:55.43ID:cZkGG5+C class TEST {
hoge_t h;
TEST() : h{1, 2} {}
};
のほうがわかりやすくね
hoge_t h;
TEST() : h{1, 2} {}
};
のほうがわかりやすくね
366デフォルトの名無しさん
2020/09/15(火) 19:26:49.33ID:cZkGG5+C うおダブルクリックしちゃった
てかJavaScriptで防止しとけよw
てかJavaScriptで防止しとけよw
367デフォルトの名無しさん
2020/09/15(火) 19:28:11.48ID:cZkGG5+C コンストラクタにpublicつけ忘れた
368デフォルトの名無しさん
2020/09/15(火) 20:39:52.74ID:Zw0qp59Z コードを書くとききは、最低限簡単なテストコードで
コンパイルが通るかどうか確認してから書きなさい
技術系ブログですらそのルール守ってない事があり
そういうブログはたいてい読むに値しない
コンパイルが通るかどうか確認してから書きなさい
技術系ブログですらそのルール守ってない事があり
そういうブログはたいてい読むに値しない
369デフォルトの名無しさん
2020/09/15(火) 20:59:22.26ID:eg5KpnfE >>351
#include <iostream>
using namespace std;
struct Hoge{
int x;
int y;
Hoge(int x, int y){
this->x = x;
this->y = y;
}
};
int main() {
Hoge h(1, 2);
cout << h.x << endl;
return 0;
}
GVkKul - Online C++0x Compiler & Debugging Tool - Ideone.com
https://ideone.com/GVkKul
余り深く考えないならこんなんでいいんじゃなかろうか
#include <iostream>
using namespace std;
struct Hoge{
int x;
int y;
Hoge(int x, int y){
this->x = x;
this->y = y;
}
};
int main() {
Hoge h(1, 2);
cout << h.x << endl;
return 0;
}
GVkKul - Online C++0x Compiler & Debugging Tool - Ideone.com
https://ideone.com/GVkKul
余り深く考えないならこんなんでいいんじゃなかろうか
370デフォルトの名無しさん
2020/09/15(火) 21:01:17.48ID:cZkGG5+C explicit Hoge(int x, int y)
にしろと言う派もいそう
にしろと言う派もいそう
371デフォルトの名無しさん
2020/09/15(火) 21:07:56.21ID:YjwP830M アホ人口が過密すぎ
372デフォルトの名無しさん
2020/09/15(火) 21:43:29.84ID:sNNyLA9G こうですか?
わかりません><;
■ 小数を含む10進数の表記の再現に関する定理
有限桁の10進数で表記された非負の数x0をIEEE 754形式(2進数版)に変換して
xを得たとして、x0の最小の桁が10^mの位、xの仮数部のLSBが2^pの位ならば、
m > p * log10(2)
を満たす限り、xからx0の最小の桁まで正確に再現できる。
■ 証明
x0の最小の桁が10^mの位(10^mより小さい位が無い)ということは、
x0は周期10^mの格子点上にある。(kを適当な整数として、x0=k*10^mと表すことができる。)
一方、x0をxに変換する際、仮数部のLSBが丸めで繰り上がらなかったとすると、
x ≦ x0 ≦ x + 2^(p-1)
が成り立ち、仮数部のLSBが丸めで繰り上がった場合は
x - 2^(p-1) ≦ x0 ≦ x
が成り立つ。(全ての不等号が等号付きなのは、偶数丸めの可能性を考慮している。)
合わせると、どっちにせよ以下の式が成り立つ:
x - 2^(p-1) ≦ x0 ≦ x + 2^(p-1) -- (1)
x0が周期10^mの格子点上であることから、式(1)より
(2^(p-1) - (- 2^(p-1))) < 10^m ∴ m > 2 * log10(2)
であれば、xから式(1)を満たすx0が一意に定まり、
周期10^mの格子点上に位置する他の数と区別できる。
□
わかりません><;
■ 小数を含む10進数の表記の再現に関する定理
有限桁の10進数で表記された非負の数x0をIEEE 754形式(2進数版)に変換して
xを得たとして、x0の最小の桁が10^mの位、xの仮数部のLSBが2^pの位ならば、
m > p * log10(2)
を満たす限り、xからx0の最小の桁まで正確に再現できる。
■ 証明
x0の最小の桁が10^mの位(10^mより小さい位が無い)ということは、
x0は周期10^mの格子点上にある。(kを適当な整数として、x0=k*10^mと表すことができる。)
一方、x0をxに変換する際、仮数部のLSBが丸めで繰り上がらなかったとすると、
x ≦ x0 ≦ x + 2^(p-1)
が成り立ち、仮数部のLSBが丸めで繰り上がった場合は
x - 2^(p-1) ≦ x0 ≦ x
が成り立つ。(全ての不等号が等号付きなのは、偶数丸めの可能性を考慮している。)
合わせると、どっちにせよ以下の式が成り立つ:
x - 2^(p-1) ≦ x0 ≦ x + 2^(p-1) -- (1)
x0が周期10^mの格子点上であることから、式(1)より
(2^(p-1) - (- 2^(p-1))) < 10^m ∴ m > 2 * log10(2)
であれば、xから式(1)を満たすx0が一意に定まり、
周期10^mの格子点上に位置する他の数と区別できる。
□
373はちみつ餃子 ◆8X2XSCHEME
2020/09/15(火) 22:07:33.21ID:Gxy/396Z >>364
それはどうだろう。 慣れという面は大きいと思うよ。
普通のローカル変数は変数の宣言と初期化は一体なわけだし、
その記法と一致させた方がよくない? ってのは有るでしょ。
でも初期化のタイミングが (ある程度は) 見かけ通りになって欲しいという感覚からは
コンストラクタの方で初期化した方が自然だよなってのも有る。
それはどうだろう。 慣れという面は大きいと思うよ。
普通のローカル変数は変数の宣言と初期化は一体なわけだし、
その記法と一致させた方がよくない? ってのは有るでしょ。
でも初期化のタイミングが (ある程度は) 見かけ通りになって欲しいという感覚からは
コンストラクタの方で初期化した方が自然だよなってのも有る。
374デフォルトの名無しさん
2020/09/15(火) 22:07:55.51ID:y4mQo5lg それもういいから
375はちみつ餃子 ◆8X2XSCHEME
2020/09/15(火) 22:08:53.69ID:Gxy/396Z そういう感覚的な部分は置いてちょっと便利な使い方としては、
コンストラクタが複数あってそれぞれが初期化したい対象が違う場合に
共通する部分は宣言と同時に初期化するように書くという方法。
こんな感じね。
struct foo {
int mem_i = 1;
double mem_d = 2;
char mem_c = 3;
foo(int i) : mem_i(i) {}
foo(double d) : mem_d(d) {}
foo(char c) : mem_c(c) {}
};
以下のように書くよりはマシでしょ。
struct foo {
int mem_i;
double mem_d;
char mem_c;
foo(int i) : mem_i(i), mem_d(2), mem_c(3) {}
foo(double d) : mem_i(1), mem_d(d), mem_c(3) {}
foo(char c) : mem_i(1), mem_d(2), mem_c(c) {}
};
宣言と同時の初期化が書かれていてコンストラクタでも初期化が書かれているときは
コンストラクタでの初期化のみが有効になる。
コンストラクタが複数あってそれぞれが初期化したい対象が違う場合に
共通する部分は宣言と同時に初期化するように書くという方法。
こんな感じね。
struct foo {
int mem_i = 1;
double mem_d = 2;
char mem_c = 3;
foo(int i) : mem_i(i) {}
foo(double d) : mem_d(d) {}
foo(char c) : mem_c(c) {}
};
以下のように書くよりはマシでしょ。
struct foo {
int mem_i;
double mem_d;
char mem_c;
foo(int i) : mem_i(i), mem_d(2), mem_c(3) {}
foo(double d) : mem_i(1), mem_d(d), mem_c(3) {}
foo(char c) : mem_i(1), mem_d(2), mem_c(c) {}
};
宣言と同時の初期化が書かれていてコンストラクタでも初期化が書かれているときは
コンストラクタでの初期化のみが有効になる。
376デフォルトの名無しさん
2020/09/15(火) 22:17:19.74ID:cZkGG5+C 今まで全部下の方法で書いてたわ
そしてやめる気もない
そしてやめる気もない
377はちみつ餃子 ◆8X2XSCHEME
2020/09/15(火) 22:33:53.09ID:Gxy/396Z ただ、 >>375 にも良くない面はあって、
ヘッダファイルでクラス定義をして
コンストラクタの実装は .c に書いた場合、
// foo.h
struct foo {
int mem_i = 1;
double mem_d = 2;
char mem_c = 3;
foo(int i);
foo(double d);
foo(char c);
};
// foo.c
foo::foo(int i) : mem_i(i) {}
foo::foo(double d) : mem_d(d) {}
foo::foo(char c) : mem_c(c) {}
ヘッダファイルからは 1, 2, 3 で初期化するかのように見えて実際にはそう初期化しないことがある
ってのは混乱の元になるかもしれないと思う。
ワイとしてはどう運用 (使い分け) すればいいのかはっきりした見解を確立できてない。
どうすればいいんやろね?
ヘッダファイルでクラス定義をして
コンストラクタの実装は .c に書いた場合、
// foo.h
struct foo {
int mem_i = 1;
double mem_d = 2;
char mem_c = 3;
foo(int i);
foo(double d);
foo(char c);
};
// foo.c
foo::foo(int i) : mem_i(i) {}
foo::foo(double d) : mem_d(d) {}
foo::foo(char c) : mem_c(c) {}
ヘッダファイルからは 1, 2, 3 で初期化するかのように見えて実際にはそう初期化しないことがある
ってのは混乱の元になるかもしれないと思う。
ワイとしてはどう運用 (使い分け) すればいいのかはっきりした見解を確立できてない。
どうすればいいんやろね?
378デフォルトの名無しさん
2020/09/15(火) 22:40:25.54ID:cZkGG5+C struct foo {
int mem_i = 1;
double mem_d = 2;
char mem_c = 3;
foo(int i);
foo(double d);
foo(char c);
};
こういうことするとfooは文脈依存で意味が違う紛らわしい存在になる
このfoo自体存在しないでほしい
int mem_i = 1;
double mem_d = 2;
char mem_c = 3;
foo(int i);
foo(double d);
foo(char c);
};
こういうことするとfooは文脈依存で意味が違う紛らわしい存在になる
このfoo自体存在しないでほしい
379デフォルトの名無しさん
2020/09/15(火) 22:49:45.29ID:h5acecX0 class foo {
foo(int i);
foo(double d);
foo(char c);
private:
int mem_i = 1;
double mem_d = 2;
char mem_c = 3;
};
これなら別にいいでしょ
全データメンバー丸出しの単純structに中途半端なコンストラクタ付けてるのが問題の本質に見える
foo(int i);
foo(double d);
foo(char c);
private:
int mem_i = 1;
double mem_d = 2;
char mem_c = 3;
};
これなら別にいいでしょ
全データメンバー丸出しの単純structに中途半端なコンストラクタ付けてるのが問題の本質に見える
380デフォルトの名無しさん
2020/09/15(火) 23:18:01.40ID:cZkGG5+C381デフォルトの名無しさん
2020/09/16(水) 01:22:34.43ID:g8ss57Sd382デフォルトの名無しさん
2020/09/16(水) 06:20:12.78ID:y7ydVkjJ カリー化して畳み込む。
383デフォルトの名無しさん
2020/09/16(水) 07:41:27.27ID:h+KbCdxN385デフォルトの名無しさん
2020/09/16(水) 20:55:15.73ID:hkK/AQSl >>341,342,347
へえありがとう
へえありがとう
386デフォルトの名無しさん
2020/09/17(木) 00:12:18.70ID:yBGxmNW2 というわけで自己解決しますた!
https://ideone.com/Zz21oH
仕様としては15桁以内の10進数で、IEEE 754で表せる範囲で、
なおかつ最小桁の位が10^0以下だったら何でもおk
(原理上は最小桁の位は10^0より上でも逝けるやつは作れるが今回はパス
https://ideone.com/Zz21oH
仕様としては15桁以内の10進数で、IEEE 754で表せる範囲で、
なおかつ最小桁の位が10^0以下だったら何でもおk
(原理上は最小桁の位は10^0より上でも逝けるやつは作れるが今回はパス
387デフォルトの名無しさん
2020/09/17(木) 16:47:32.96ID:9/9M+ZB2 いまいち、つまらんかった
388デフォルトの名無しさん
2020/09/17(木) 17:47:56.72ID:cSYZrhyC まぁ証明自体はいいと思うよ
あってるか知らんけど
あとはがんばって
>>279 の10億行の手入力のテストデータが確実に
15桁以内の10進数であるか確認しないとな
そこをスクリプトにするぐらいなら最初から書き換え案でよかったよな
あってるか知らんけど
あとはがんばって
>>279 の10億行の手入力のテストデータが確実に
15桁以内の10進数であるか確認しないとな
そこをスクリプトにするぐらいなら最初から書き換え案でよかったよな
389デフォルトの名無しさん
2020/09/17(木) 22:51:21.16ID:vYrubRbh 彼の手入力は完璧だから確認とか必要ないらしいぞ
390デフォルトの名無しさん
2020/09/17(木) 23:19:34.76ID:NGdGxMy6 それはbionicだな
391351
2020/09/20(日) 10:14:33.56ID:YAin65a3 色々とありがとうございました。
class TEST {
hoge_t h(1, 2); // expected identifier before numeric constant
};
の部分を
class TEST {
HOGE h(1, 2);
};
にしたら大丈夫になりました。(hoge_t を使わないで HOGE のほうを)
ここで疑問が出ました。
typedef struct HOGE
{
...
} hoge_t;
の HOGE と hoge_t の違いはなんでしょうか。
片方がなくても動くようですが、先ほどの話のように HOGE を使ったほうが間違いがないような気がします。
そこで、
typedef struct HOGE
{
...
};
という風にしてしまいつつあるのですが、どういう副作用があるのでしょうか。
class TEST {
hoge_t h(1, 2); // expected identifier before numeric constant
};
の部分を
class TEST {
HOGE h(1, 2);
};
にしたら大丈夫になりました。(hoge_t を使わないで HOGE のほうを)
ここで疑問が出ました。
typedef struct HOGE
{
...
} hoge_t;
の HOGE と hoge_t の違いはなんでしょうか。
片方がなくても動くようですが、先ほどの話のように HOGE を使ったほうが間違いがないような気がします。
そこで、
typedef struct HOGE
{
...
};
という風にしてしまいつつあるのですが、どういう副作用があるのでしょうか。
392デフォルトの名無しさん
2020/09/20(日) 10:24:48.86ID:gADwnK29 >>391
そこに書かれた範囲だと HOGE と hoge_t とは同じものを指すことになるから、
そこを置き換えて大丈夫になるなんてことは無いはず。
たぶん書いてないところに問題があったんだろうと思う。
それはそれとして、その typedef には意味がないので単に struct HOGE で済ませておけばいい
という結論は問題ないと思うよ。
C で struct 省略のための typedef を変に覚えただけでしょ。
そこに書かれた範囲だと HOGE と hoge_t とは同じものを指すことになるから、
そこを置き換えて大丈夫になるなんてことは無いはず。
たぶん書いてないところに問題があったんだろうと思う。
それはそれとして、その typedef には意味がないので単に struct HOGE で済ませておけばいい
という結論は問題ないと思うよ。
C で struct 省略のための typedef を変に覚えただけでしょ。
393デフォルトの名無しさん
2020/09/20(日) 11:36:33.24ID:YAin65a3 HOGE が型名で、hoge_t が変数名、という認識は合ってますか?
394デフォルトの名無しさん
2020/09/20(日) 11:43:51.29ID:gADwnK29 >>393 合ってませんね。
395デフォルトの名無しさん
2020/09/20(日) 11:53:42.36ID:YAin65a3 「struct HOGE ・・・」 を hoge_t 型 と定義する、みたいなやつですか。
C++ 使ってる限り、忘れていい過去の遺物と思っていいんですね。
C++ 使ってる限り、忘れていい過去の遺物と思っていいんですね。
396デフォルトの名無しさん
2020/09/20(日) 12:05:47.95ID:dGmNK3yI struct Hoge{...};とtypedef stuct Hoge hoge_t;をまとめて書いてるだけ
古のCマスター様のイキリ構文だから忘れなさい
古のCマスター様のイキリ構文だから忘れなさい
397はちみつ餃子 ◆8X2XSCHEME
2020/09/20(日) 12:39:45.45ID:7quNJlhN >>395
C++ のことだけを考えるなら typedef を使う理由はもう無くなった。
少なくとも C++11 以降は型の別名を付けるにしても using で全ての状況をまかなえる。
C では構造体タグと型名は別物として管理されていたけど
C++ ではそうではないのでわざわざふたつの名前付ける必要もあまりない。
C++ のことだけを考えるなら typedef を使う理由はもう無くなった。
少なくとも C++11 以降は型の別名を付けるにしても using で全ての状況をまかなえる。
C では構造体タグと型名は別物として管理されていたけど
C++ ではそうではないのでわざわざふたつの名前付ける必要もあまりない。
398デフォルトの名無しさん
2020/09/20(日) 14:03:58.31ID:rXNNPQAl399デフォルトの名無しさん
2020/09/20(日) 15:44:00.22ID:0QrwQpRm #define も使用禁止ですね判ります
401デフォルトの名無しさん
2020/09/20(日) 15:52:26.96ID:ujAaBpzc 気に入らなければお前が説明しなおせばいいんじゃない?
402デフォルトの名無しさん
2020/09/20(日) 15:53:19.29ID:ujAaBpzc あ、本人がレス返してた
余計だったなすまん
余計だったなすまん
403デフォルトの名無しさん
2020/09/20(日) 18:56:35.09ID:HMivgeXQ _から始まって次の文字が大文字はCでも禁止?
404デフォルトの名無しさん
2020/09/20(日) 19:00:51.76ID:dGmNK3yI C89の頃から禁止だったはず
405蟻人間 ◆T6xkBnTXz7B0
2020/09/20(日) 19:07:53.10ID:JknVjK4K406デフォルトの名無しさん
2020/09/20(日) 19:24:22.31ID:PidwIaps Cでもタグ名とtypedef識別子は衝突しないんだから
typedef hoge_t HOGE;なんてしなくていい
C++14みたいに_tと_vにするなら意味あるけどね
typedef hoge_t HOGE;なんてしなくていい
C++14みたいに_tと_vにするなら意味あるけどね
407デフォルトの名無しさん
2020/09/21(月) 01:11:32.44ID:YHO9o1ct408はちみつ餃子 ◆8X2XSCHEME
2020/09/21(月) 08:40:38.86ID:sulqQktu409デフォルトの名無しさん
2020/09/21(月) 09:07:56.01ID:apXLM6YN さすがにそれは国語力を疑う
410デフォルトの名無しさん
2020/09/21(月) 09:08:40.94ID:apXLM6YN411デフォルトの名無しさん
2020/09/21(月) 09:29:06.87ID:uGOMtfu/412はちみつ餃子 ◆8X2XSCHEME
2020/09/21(月) 09:54:25.81ID:sulqQktu >>411
むしろ using を使えという方が俺の言いたかったことなんだ。
しいて言えば typedef は「構造体の宣言と同時に」別名の定義もできるという点が
using ではできないけどそうする意味が失われている (ので特に優位性ではない) という意味で後半の補足を入れた。
むしろ using を使えという方が俺の言いたかったことなんだ。
しいて言えば typedef は「構造体の宣言と同時に」別名の定義もできるという点が
using ではできないけどそうする意味が失われている (ので特に優位性ではない) という意味で後半の補足を入れた。
413デフォルトの名無しさん
2020/09/21(月) 10:26:30.49ID:YHO9o1ct あー、まぁ実質typedefは忘れた方がいい、というのは同意するけどね(初心者に教えるという意味では
414デフォルトの名無しさん
2020/09/21(月) 17:14:51.54ID:zhVYtERB C++ではstructをtypedefする必要は無くなった
ただ、typedef(やusing)は
typedef vector<Coord> Path;
typedef vector<Path> Pathes;
みたいな時に使っている
ただ、typedef(やusing)は
typedef vector<Coord> Path;
typedef vector<Path> Pathes;
みたいな時に使っている
415デフォルトの名無しさん
2020/09/21(月) 17:16:28.09ID:Y5gLvI08 >>414
using使おうぜ
using使おうぜ
416デフォルトの名無しさん
2020/09/21(月) 17:28:58.81ID:5fzDdes6 しかし、typedefに不満が無い人に対して、書き方が違っているだけのusingを
推進しようとするC++勢の姿勢は嫌い。
Cが好きで延長線上で使っていたのに、いつのまにかCとはまるっきり別言語に
強制されていっている。
推進しようとするC++勢の姿勢は嫌い。
Cが好きで延長線上で使っていたのに、いつのまにかCとはまるっきり別言語に
強制されていっている。
417デフォルトの名無しさん
2020/09/21(月) 17:54:21.89ID:PNFNM3Vd >>416
typedefは文法的に非合理的なところがあるんだけど気付いてる?
typedef std::basic_string<char, std::type_traits<char>, std::allocator<char>> string;
typedef std::mersenne_twister_engine<std::uint_fast32_t, 32, 624, 397, 31, 0x9908b0df, 11, 0xffffffff, 7, 0x9d2c5680, 15, 0xefc60000, 18, 1812433253> mt19937;
↓
using string = std::basic_string<char, std::type_traits<char>, std::allocator<char>>;
using mt19937 = std::mersenne_twister_engine<std::uint_fast32_t, 32, 624, 397, 31, 0x9908b0df, 11, 0xffffffff, 7, 0x9d2c5680, 15, 0xefc60000, 18, 1812433253>;
typedefは文法的に非合理的なところがあるんだけど気付いてる?
typedef std::basic_string<char, std::type_traits<char>, std::allocator<char>> string;
typedef std::mersenne_twister_engine<std::uint_fast32_t, 32, 624, 397, 31, 0x9908b0df, 11, 0xffffffff, 7, 0x9d2c5680, 15, 0xefc60000, 18, 1812433253> mt19937;
↓
using string = std::basic_string<char, std::type_traits<char>, std::allocator<char>>;
using mt19937 = std::mersenne_twister_engine<std::uint_fast32_t, 32, 624, 397, 31, 0x9908b0df, 11, 0xffffffff, 7, 0x9d2c5680, 15, 0xefc60000, 18, 1812433253>;
418デフォルトの名無しさん
2020/09/21(月) 19:06:32.78ID:IzAwgxqY using使うとtemplateも使える
template <class T>
using vec = std::vector<T>;
vec<int> vi;
template <class T>
using vec = std::vector<T>;
vec<int> vi;
419デフォルトの名無しさん
2020/09/21(月) 19:11:20.08ID:BKUa/6+Z usingはこういうのが嬉しいと思う。
// C++11
using func = void(*)(int);
// C++03 equivalent:
// typedef void (*func)(int);
>>417
文法的に非合理的?
// C++11
using func = void(*)(int);
// C++03 equivalent:
// typedef void (*func)(int);
>>417
文法的に非合理的?
420デフォルトの名無しさん
2020/09/21(月) 19:15:17.99ID:IzAwgxqY C/C++みたいな低レイヤーの言語を触る時代はいつまで続くのかね
421デフォルトの名無しさん
2020/09/21(月) 19:15:52.15ID:J2iLBa+b typedefだと本体がわかりにくいのだ
422デフォルトの名無しさん
2020/09/21(月) 19:33:47.96ID:zhVYtERB 10年後でも100年後でも一番下のところは必ず存在する
アーキテクチャが変わってもC言語のような低水準言語は必ず出てくる
つまり世の中から『一番下』が無くなるとは思えない
アーキテクチャが変わってもC言語のような低水準言語は必ず出てくる
つまり世の中から『一番下』が無くなるとは思えない
423デフォルトの名無しさん
2020/09/21(月) 19:40:50.05ID:IzAwgxqY AIによる最適化技術がコンパイラに積まれたら
C/C++みたいなのは不要になる気がする
アーキテクチャの一番下のアセンブラとかは残るとしてもね
C/C++みたいなのは不要になる気がする
アーキテクチャの一番下のアセンブラとかは残るとしてもね
424デフォルトの名無しさん
2020/09/21(月) 19:49:44.87ID:NkrhQtlS >>423
AIによる最適化技術って具体的になぁに?
AIによる最適化技術って具体的になぁに?
425デフォルトの名無しさん
2020/09/21(月) 19:58:28.08ID:IzAwgxqY コンパイラの最適化もしらないの???
426デフォルトの名無しさん
2020/09/21(月) 20:04:55.13ID:NkrhQtlS >>425
現行のLLVMとかによる最適化なら知ってるけど、まだ実現されてないAIによる最適化ってなにかなぁと思って。
現行のLLVMとかによる最適化なら知ってるけど、まだ実現されてないAIによる最適化ってなにかなぁと思って。
427デフォルトの名無しさん
2020/09/21(月) 20:11:19.83ID:I28tUppa typedefがわかりにくいのではなくてC言語以来のポインタ定義構文がおかしいんである
これは聖典『プログラミング言語C』でも「批判を浴びることがある」みたいに書かれている
これはどうせCベースの言語なら乗り越えねばならない関門なのでノーカンとして、
単に型のエイリアスが欲しいときはtypedefで十分やし、
定義型をテンプレートにしたいとか別の型にしたいときはクラスにしたら宜しい
かと
これは聖典『プログラミング言語C』でも「批判を浴びることがある」みたいに書かれている
これはどうせCベースの言語なら乗り越えねばならない関門なのでノーカンとして、
単に型のエイリアスが欲しいときはtypedefで十分やし、
定義型をテンプレートにしたいとか別の型にしたいときはクラスにしたら宜しい
かと
428デフォルトの名無しさん
2020/09/21(月) 20:12:23.44ID:IzAwgxqY 普通に考えて
機械語を入力としてそれと等価で高速に動作する機械語を出力する
作業をAIに任せるってことなんじゃないの(たぶん)
機械語を入力としてそれと等価で高速に動作する機械語を出力する
作業をAIに任せるってことなんじゃないの(たぶん)
429デフォルトの名無しさん
2020/09/21(月) 20:13:49.74ID:I28tUppa 同じことをするのにいくつも書き方があるようだと
C++はますますプログラミング言語界のPerlになってしまうま、
C++はますますプログラミング言語界のPerlになってしまうま、
430デフォルトの名無しさん
2020/09/21(月) 20:19:15.08ID:I28tUppa AIによる最適化はそもそも最適な最適化が何なのかは計算不能(コルモゴロフ複雑性
というのはどうすんじゃ………
というのはどうすんじゃ………
431デフォルトの名無しさん
2020/09/21(月) 20:20:24.50ID:NkrhQtlS >>428
ごめんね、喧嘩売ってるつもりじゃないんだ。
コンパイル最適化技術は興味あるんだけど俺の知識が数年前で止まってるので新しい知識として取り入れたかっただけ。
>機械語を入力としてそれと等価で高速に動作する機械語を出力する
それってAIと関係なく何十年も前からあるなんの変哲もない最適化だと思うの。
ごめんね、喧嘩売ってるつもりじゃないんだ。
コンパイル最適化技術は興味あるんだけど俺の知識が数年前で止まってるので新しい知識として取り入れたかっただけ。
>機械語を入力としてそれと等価で高速に動作する機械語を出力する
それってAIと関係なく何十年も前からあるなんの変哲もない最適化だと思うの。
432デフォルトの名無しさん
2020/09/21(月) 20:27:18.34ID:WONfy98d433デフォルトの名無しさん
2020/09/21(月) 20:29:32.74ID:WONfy98d >>428
AIなら何でも解決するとか思ってそうw
AIなら何でも解決するとか思ってそうw
434デフォルトの名無しさん
2020/09/21(月) 20:32:17.31ID:IzAwgxqY >AIによる最適化はそもそも最適な最適化が何なのかは計算不能
AIって解析的に解くわけじゃないから計算不能でもいい感じに動いてくれるんじゃないの
>それってAIと関係なく何十年も前からあるなんの変哲もない最適化だと思うの。
最適化技術は素人だから知らないけど現状が割と決まった最適化ルールに当てはめてる
だけだとしたら改善の余地はあるんじゃないのかな
想像だけど
AIって解析的に解くわけじゃないから計算不能でもいい感じに動いてくれるんじゃないの
>それってAIと関係なく何十年も前からあるなんの変哲もない最適化だと思うの。
最適化技術は素人だから知らないけど現状が割と決まった最適化ルールに当てはめてる
だけだとしたら改善の余地はあるんじゃないのかな
想像だけど
435デフォルトの名無しさん
2020/09/21(月) 20:33:13.25ID:IzAwgxqY >>433
わりとまじでそう思ってるけど
わりとまじでそう思ってるけど
436デフォルトの名無しさん
2020/09/21(月) 20:39:34.82ID:NkrhQtlS もちろん、LLVMのようにJITの結果をAOTしてくれるような俺の脳味噌で考えられる最大限の最適化より、もっと進んだ技術が将来的に出てくるとは思うんだよ。
最近そういう技術から離れてたので、俺の知らないうちに新しいブレークスルーがあったのかと思って純粋な興味で質問しました。
最近そういう技術から離れてたので、俺の知らないうちに新しいブレークスルーがあったのかと思って純粋な興味で質問しました。
437デフォルトの名無しさん
2020/09/21(月) 21:20:09.92ID:PNFNM3Vd >>419
それを言うならこっちでしょ
template <typename T>
auto func(T&&) -> enable_if_t<is_integral_v<T>, void> {}
これとどっちが合理的だと思う?
template <typename T>
enable_if_t<is_integral_v<T>, void> func(T&&) {}
typedefとusingの話ではないけど
合理性という論点では同じことだよ
それを言うならこっちでしょ
template <typename T>
auto func(T&&) -> enable_if_t<is_integral_v<T>, void> {}
これとどっちが合理的だと思う?
template <typename T>
enable_if_t<is_integral_v<T>, void> func(T&&) {}
typedefとusingの話ではないけど
合理性という論点では同じことだよ
438デフォルトの名無しさん
2020/09/21(月) 21:21:22.91ID:PNFNM3Vd >>418
そう、だからtypedefはもういじるのやめてtemplate化はできないまま放置されてるんだよな
そう、だからtypedefはもういじるのやめてtemplate化はできないまま放置されてるんだよな
439デフォルトの名無しさん
2020/09/21(月) 21:22:17.03ID:WONfy98d440デフォルトの名無しさん
2020/09/21(月) 21:25:30.85ID:I4V/hlGb 深層学習、機械学習のことをざっくりAIと呼ぶ人は
まぁおおよそ技術わかってない人だろうね
まぁおおよそ技術わかってない人だろうね
441デフォルトの名無しさん
2020/09/21(月) 21:36:38.22ID:REl65Gaj プログラミングを知らない人が「こんぴゅーたって何でも出来るんでしょ」って言ってるのと似てる
442デフォルトの名無しさん
2020/09/21(月) 21:39:42.46ID:PNFNM3Vd >>441
そう聞こえちまう発言を見かける頻度が高すぎてやだよな
そう聞こえちまう発言を見かける頻度が高すぎてやだよな
443デフォルトの名無しさん
2020/09/21(月) 21:40:29.70ID:BKUa/6+Z444デフォルトの名無しさん
2020/09/21(月) 21:55:50.30ID:PNFNM3Vd >>443
では言い方を変えようか
関数識別子でも型識別子でもそれを一覧しやすいところに集めやすいことを合理性と言っている
概要と詳細はどっちを先に書くべきかってことだよ
typedefは右端に宣言対象の識別子
usingは左端から7文字目という決まった位置に宣言対象の識別子
trailing-return-typeも5文字目という決まった位置に宣言対象の識別子がある
可読性という観点からどう思う?
では言い方を変えようか
関数識別子でも型識別子でもそれを一覧しやすいところに集めやすいことを合理性と言っている
概要と詳細はどっちを先に書くべきかってことだよ
typedefは右端に宣言対象の識別子
usingは左端から7文字目という決まった位置に宣言対象の識別子
trailing-return-typeも5文字目という決まった位置に宣言対象の識別子がある
可読性という観点からどう思う?
445デフォルトの名無しさん
2020/09/21(月) 22:03:23.74ID:REl65Gaj typedefは変数宣言を流用した手抜きだからこんな糞みたいなのも書けてしまう
typedef int are, kore, sore, dore, *hare, **yore, (*more)(float, long), (*ore)[42];
typedef int are, kore, sore, dore, *hare, **yore, (*more)(float, long), (*ore)[42];
446デフォルトの名無しさん
2020/09/21(月) 22:18:42.28ID:PNFNM3Vd typedef int (*more)(float, long); //この書き方に抵抗は全くないが
using more = int (*)(float, long); //それでも俺はこっちが好き
using more = int (*)(float, long); //それでも俺はこっちが好き
447デフォルトの名無しさん
2020/09/21(月) 22:19:03.41ID:BKUa/6+Z >>445
その点については統一感あってむしろ美しいと思うけどw
typedef int are, kore, sore, dore, *hare, **yore, (*more)(float, long), (*ore)[42];
sore g(float, long) {}
int main() {
are a = (int)0;
kore b = a;
hare c = &b;
yore d = &c;
dore e[42];
more f = g;
ore h = &e;
return 0;
}
その点については統一感あってむしろ美しいと思うけどw
typedef int are, kore, sore, dore, *hare, **yore, (*more)(float, long), (*ore)[42];
sore g(float, long) {}
int main() {
are a = (int)0;
kore b = a;
hare c = &b;
yore d = &c;
dore e[42];
more f = g;
ore h = &e;
return 0;
}
448デフォルトの名無しさん
2020/09/21(月) 22:21:35.15ID:PNFNM3Vd int are, kore;
変数のareとkoreが本質的に同じ型であることが重要なときに統一できるのはいいけどね
intの同義語をそんなに量産してどうするんだと
変数のareとkoreが本質的に同じ型であることが重要なときに統一できるのはいいけどね
intの同義語をそんなに量産してどうするんだと
449デフォルトの名無しさん
2020/09/21(月) 22:22:41.71ID:I4V/hlGb usingとtypedefでいうと関数ポインタ、配列の扱い違うよね
あのあたりよくわかってない
誰か解説して
あのあたりよくわかってない
誰か解説して
450デフォルトの名無しさん
2020/09/21(月) 22:34:38.79ID:IzAwgxqY >>440
まるでさも自分がわかってるみたいな言い方
まるでさも自分がわかってるみたいな言い方
451はちみつ餃子 ◆8X2XSCHEME
2020/09/21(月) 22:58:02.34ID:VM5g8L/y 別のスレでちょっと書いたことがあるが……。
人工知能 (AI) ってのは人間の知能を代行するものという意味合いで私は考えてる。
昔はコンパイラそのものが人工知能の枠内で扱われていたこともある。
それ以前にルールベース、つまり if 文の羅列のようなものまで人工知能の一種だった。
でもそれらが分野として確立されたら人工知能とは呼ばれなくなっていた。
機械でやるのが当たり前のものになったから。
普通の道具になったから「知能」ではなくなったんだ。
人工知能を実用化するってのは人工知能を人工知能でなくすること。
逆に言えば人工知能と呼ばれている間は曖昧模糊としてよくわからんのが当たり前なんだと思う。
これはいろんな使い方をされる「人工知能」という言葉について私なりの解釈であって
正しさを主張するつもりはないが、それなりに実態に合った解釈ではあると思う。
人工知能 (AI) ってのは人間の知能を代行するものという意味合いで私は考えてる。
昔はコンパイラそのものが人工知能の枠内で扱われていたこともある。
それ以前にルールベース、つまり if 文の羅列のようなものまで人工知能の一種だった。
でもそれらが分野として確立されたら人工知能とは呼ばれなくなっていた。
機械でやるのが当たり前のものになったから。
普通の道具になったから「知能」ではなくなったんだ。
人工知能を実用化するってのは人工知能を人工知能でなくすること。
逆に言えば人工知能と呼ばれている間は曖昧模糊としてよくわからんのが当たり前なんだと思う。
これはいろんな使い方をされる「人工知能」という言葉について私なりの解釈であって
正しさを主張するつもりはないが、それなりに実態に合った解釈ではあると思う。
452デフォルトの名無しさん
2020/09/21(月) 23:08:20.77ID:PNFNM3Vd かなり酔ってるな
ビール? 今日何本目?
ビール? 今日何本目?
453デフォルトの名無しさん
2020/09/21(月) 23:08:24.99ID:I4V/hlGb そんなこねくり回した理解いる?
たんなる学術分野を指すだけの言葉じゃん
意味が広いだけ
たんなる学術分野を指すだけの言葉じゃん
意味が広いだけ
454はちみつ餃子 ◆8X2XSCHEME
2020/09/21(月) 23:13:49.84ID:VM5g8L/y455デフォルトの名無しさん
2020/09/21(月) 23:33:11.93ID:I28tUppa 最適化方面へのAIの適用というと、
高度なルールベース(80年代のAI)までいったん後退したものに
収束が必ずしも保障されない最適化処理(有限ステップで終わる保証がないからもはやアルゴリズムと呼ぶのは抵抗があるがGAとか
を組み合わせたものになりそうなヨカン
FPGAの論理合成エンジンみたいなやつを考えたら宜しいかと、
もはや冪等性は気体できない
ビルドをやるたびに結果が変わるorz
高度なルールベース(80年代のAI)までいったん後退したものに
収束が必ずしも保障されない最適化処理(有限ステップで終わる保証がないからもはやアルゴリズムと呼ぶのは抵抗があるがGAとか
を組み合わせたものになりそうなヨカン
FPGAの論理合成エンジンみたいなやつを考えたら宜しいかと、
もはや冪等性は気体できない
ビルドをやるたびに結果が変わるorz
456デフォルトの名無しさん
2020/09/21(月) 23:38:03.83ID:I28tUppa この場合LPはAIに含めて良いものかどうか、
457デフォルトの名無しさん
2020/09/22(火) 01:59:39.72ID:ZtayyY2i458デフォルトの名無しさん
2020/09/22(火) 02:02:23.48ID:xLdkMK4R >>447
やめてくり〜
やめてくり〜
459デフォルトの名無しさん
2020/09/22(火) 03:43:14.70ID:sfaT76Ga 文字列の内容を1行毎に配列に入れたいのですが
以下のプログラムだと一部の文字しか抽出できていませんでした
完全が必要な点を教えてください
for (unsigned int i = 0; ; i++) {
for (unsigned int j = 0; ; j++) {
if (*str == '\0')
return;
if (*str == '\n')
break;
datalist[j][i] = *str;
str++;
}
str++;
}
以下のプログラムだと一部の文字しか抽出できていませんでした
完全が必要な点を教えてください
for (unsigned int i = 0; ; i++) {
for (unsigned int j = 0; ; j++) {
if (*str == '\0')
return;
if (*str == '\n')
break;
datalist[j][i] = *str;
str++;
}
str++;
}
460デフォルトの名無しさん
2020/09/22(火) 03:58:17.38ID:ZtayyY2i datalistに行ごとに抽出するならiとj逆のような気もするけど
とりあえずdatalistの方にも、各行の終わりに\0(文字列の終端)が必要じゃね?
ゼロ終端文字列として扱わないとか、最初にmemsetしてるなら別だけど
とりあえずdatalistの方にも、各行の終わりに\0(文字列の終端)が必要じゃね?
ゼロ終端文字列として扱わないとか、最初にmemsetしてるなら別だけど
461デフォルトの名無しさん
2020/09/22(火) 04:01:42.12ID:WeU5fM2j >>459
こんなプログラム書いてるようじゃ無理
こんなプログラム書いてるようじゃ無理
462デフォルトの名無しさん
2020/09/22(火) 04:05:50.78ID:EwzeVKsQ >>449
違わない
違わない
463デフォルトの名無しさん
2020/09/22(火) 04:30:48.29ID:5FJrAAJE464デフォルトの名無しさん
2020/09/22(火) 07:14:47.66ID:iby+25bn465デフォルトの名無しさん
2020/09/22(火) 08:00:49.11ID:xLdkMK4R >>459
このレベルで人に聞いてるようでは使い物にならんな
このレベルで人に聞いてるようでは使い物にならんな
466デフォルトの名無しさん
2020/09/22(火) 09:27:17.92ID:5FJrAAJE467デフォルトの名無しさん
2020/09/22(火) 10:13:21.77ID:Zd6n0i5+468デフォルトの名無しさん
2020/09/22(火) 10:52:41.92ID:GaogVwml >>467
>444 を読むと、言いたかったことはわかる。
> 関数識別子でも型識別子でもそれを一覧しやすいところに集めやすいことを合理性と言っている
言葉のチョイスはおかしいと思うけどね。単に「読みやすさ」「読みにくさ」とか言えばよかったところ。
>444 を読むと、言いたかったことはわかる。
> 関数識別子でも型識別子でもそれを一覧しやすいところに集めやすいことを合理性と言っている
言葉のチョイスはおかしいと思うけどね。単に「読みやすさ」「読みにくさ」とか言えばよかったところ。
469デフォルトの名無しさん
2020/09/22(火) 10:52:56.79ID:iby+25bn >>459
vector<string_view> dim;
string_view sv = str;
string_view::size_type f;
while ((f = sv.find('\n')) != string_view::npos)
{
dim.emplace_back(sv.begin(), f);
sv = sv.substr(f + 1);
}
dim.push_back(sv);
vector<string_view> dim;
string_view sv = str;
string_view::size_type f;
while ((f = sv.find('\n')) != string_view::npos)
{
dim.emplace_back(sv.begin(), f);
sv = sv.substr(f + 1);
}
dim.push_back(sv);
470デフォルトの名無しさん
2020/09/22(火) 15:44:58.47ID:Zd6n0i5+ >>468
個人的に数学記号のようなもの解読する値から強い方だからかも知れないが、
usingがtypedfよりも特に読みやすいとさえ思わない。
ただし、
#define 名前 定義内容
と
using 名前 = 定義内容;
で順序に対応関係が有ることはある。
しかしながら、C/C++では、
型名 変数名; // (100)
の順序な分けで、LL言語に多い、
var 変数名 : 型名;
の順序ではないので、統一と言う点では、typdefは(100)と美しく統一されている。
個人的に数学記号のようなもの解読する値から強い方だからかも知れないが、
usingがtypedfよりも特に読みやすいとさえ思わない。
ただし、
#define 名前 定義内容
と
using 名前 = 定義内容;
で順序に対応関係が有ることはある。
しかしながら、C/C++では、
型名 変数名; // (100)
の順序な分けで、LL言語に多い、
var 変数名 : 型名;
の順序ではないので、統一と言う点では、typdefは(100)と美しく統一されている。
471デフォルトの名無しさん
2020/09/22(火) 15:58:07.27ID:fNKq19I/ ほぼ満点だったってネタじゃなかったのかよwww
472デフォルトの名無しさん
2020/09/22(火) 16:00:22.94ID:iCejn/78 typedef int (*funcA)(float, long), (*funcB)(float, long), (*funcC)(float, long);
↑
の代わりに
typedef int (*(funcA, funcB, funcC))(float, long);
とか描けないよな
↑
の代わりに
typedef int (*(funcA, funcB, funcC))(float, long);
とか描けないよな
473デフォルトの名無しさん
2020/09/22(火) 16:17:29.92ID:EdpAH8NO474443
2020/09/22(火) 16:18:39.11ID:EdpAH8NO メール欄と名前欄間違えた
475はちみつ餃子 ◆8X2XSCHEME
2020/09/22(火) 16:34:37.47ID:Q5rCUsEX >>470
> しかしながら、C/C++では、
> 型名 変数名; // (100)
> の順序な分けで
「型名 変数名;」ではなく「型指定子 宣言子;」な。
(実際には宣言子は複数書けるがそれはわきに置く。)
順序はある程度は好みだろうとは思うが、
変数を宣言するにあたって「型名を与えているわけではない」んだ。
たとえばポインタ型の変数だと
int* a;
みたいに宣言できるが、
このとき int という型指定子と *a という宣言子から成る。
a の型名は int* であるが、
宣言のときには int は型指定子の側について * は宣言子の側についてるわけ。
typedef は変数宣言の文法と一致させているという意味では一貫していることに合意するが、
そもそも型名を途中で分断するかのような変数宣言の文法がイケてないので、
そっちで統一するのが本当にうれしいのかね? という点で疑問を提示する。
いや、それでうれしいというのならそれでもいいんだが、
前提がそれほど一貫してないのに一貫性をもちだしても仕方なくね?
> しかしながら、C/C++では、
> 型名 変数名; // (100)
> の順序な分けで
「型名 変数名;」ではなく「型指定子 宣言子;」な。
(実際には宣言子は複数書けるがそれはわきに置く。)
順序はある程度は好みだろうとは思うが、
変数を宣言するにあたって「型名を与えているわけではない」んだ。
たとえばポインタ型の変数だと
int* a;
みたいに宣言できるが、
このとき int という型指定子と *a という宣言子から成る。
a の型名は int* であるが、
宣言のときには int は型指定子の側について * は宣言子の側についてるわけ。
typedef は変数宣言の文法と一致させているという意味では一貫していることに合意するが、
そもそも型名を途中で分断するかのような変数宣言の文法がイケてないので、
そっちで統一するのが本当にうれしいのかね? という点で疑問を提示する。
いや、それでうれしいというのならそれでもいいんだが、
前提がそれほど一貫してないのに一貫性をもちだしても仕方なくね?
476デフォルトの名無しさん
2020/09/22(火) 16:38:32.20ID:Zd6n0i5+477デフォルトの名無しさん
2020/09/22(火) 16:43:05.81ID:EdpAH8NO int* a;
int* b;
int c;
//int[42] d;
↑こう書きたいという勢力と…
int *a, *b, c, d[42];
↑こう書きたいという勢力があるんやろね
好みというかその人のバックグラウンドというか
int* b;
int c;
//int[42] d;
↑こう書きたいという勢力と…
int *a, *b, c, d[42];
↑こう書きたいという勢力があるんやろね
好みというかその人のバックグラウンドというか
478はちみつ餃子 ◆8X2XSCHEME
2020/09/22(火) 16:48:28.25ID:Q5rCUsEX >>476
* は (文法的には) 宣言子の側についてるからそちらにくっつくもんなんだろうが、
型名としては int* だから int* と書く方が好ましいと考えている。
文法的な解釈はともかく「型名 変数名;」に近い書き方の方がわかりやすいという考え方だ。
あと、 C++ の設計者自身が * を左に寄せる書き方をしてるから私はそれに巻かれている。
C として書くときは * は変数名の側にくっつけて書くようにしてる。 (K&R ではそういう書き方になってるので。)
* の両側に空白を入れる流儀も存在するようだ。
* は (文法的には) 宣言子の側についてるからそちらにくっつくもんなんだろうが、
型名としては int* だから int* と書く方が好ましいと考えている。
文法的な解釈はともかく「型名 変数名;」に近い書き方の方がわかりやすいという考え方だ。
あと、 C++ の設計者自身が * を左に寄せる書き方をしてるから私はそれに巻かれている。
C として書くときは * は変数名の側にくっつけて書くようにしてる。 (K&R ではそういう書き方になってるので。)
* の両側に空白を入れる流儀も存在するようだ。
479デフォルトの名無しさん
2020/09/22(火) 17:23:35.93ID:Zd6n0i5+ >>478
>あと、 C++ の設計者自身が * を左に寄せる書き方をしてるから私はそれに巻かれている。
>C として書くときは * は変数名の側にくっつけて書くようにしてる。 (K&R ではそういう書き方になってるので。)
Cの設計者は数学的、C++の設計者は凡才的。
>あと、 C++ の設計者自身が * を左に寄せる書き方をしてるから私はそれに巻かれている。
>C として書くときは * は変数名の側にくっつけて書くようにしてる。 (K&R ではそういう書き方になってるので。)
Cの設計者は数学的、C++の設計者は凡才的。
480デフォルトの名無しさん
2020/09/22(火) 18:25:41.01ID:iCejn/78481デフォルトの名無しさん
2020/09/22(火) 18:27:35.58ID:iCejn/78482デフォルトの名無しさん
2020/09/22(火) 18:44:14.87ID:PYPDpGOY わしは自身がハゲてきてビヨヨーン先生を師と仰ぐようになったから左寄せ派
483デフォルトの名無しさん
2020/09/22(火) 19:04:01.34ID:fNKq19I/ 俺も左寄せ派だわ。
*は明らかに型の一部なのに変数宣言のときだけ型でないふりしてるのがいただけない
*は明らかに型の一部なのに変数宣言のときだけ型でないふりしてるのがいただけない
484デフォルトの名無しさん
2020/09/22(火) 19:05:41.48ID:EdpAH8NO int *aを
int* aと書きたい人は
int (*f)()を
int(* f)()と書けば満足するのだろうかという不思議はある
そういうときこそtypedefですよ、ってことなんだろうか
int* aと書きたい人は
int (*f)()を
int(* f)()と書けば満足するのだろうかという不思議はある
そういうときこそtypedefですよ、ってことなんだろうか
485デフォルトの名無しさん
2020/09/22(火) 19:07:53.44ID:7BIH7/M6 古典ネタはもうええっちゅうねん
486デフォルトの名無しさん
2020/09/22(火) 19:09:48.55ID:EwzeVKsQ >>484
int*を返す関数じゃないんだから不思議はないと思うが
int*を返す関数じゃないんだから不思議はないと思うが
487デフォルトの名無しさん
2020/09/22(火) 19:13:34.90ID:lX2VmDiW 時代はauto
488デフォルトの名無しさん
2020/09/22(火) 19:14:45.07ID:6pKbcXJi どうでもいいわ
489デフォルトの名無しさん
2020/09/22(火) 19:32:53.07ID:EdpAH8NO >>486
なるほど
int*p // 左に*寄せる
int (*f)() // 寄せない
int (*a)[42] // 寄せない
int* (*f)() // 戻り値側だけ左に寄せる
こういう感じでやっていくのかな
なるほど
int*p // 左に*寄せる
int (*f)() // 寄せない
int (*a)[42] // 寄せない
int* (*f)() // 戻り値側だけ左に寄せる
こういう感じでやっていくのかな
490デフォルトの名無しさん
2020/09/22(火) 20:39:49.00ID:iby+25bn いつも老害呼ばわりされてる俺が
今日ほどこいつら老害と思ったことはない
今日ほどこいつら老害と思ったことはない
491デフォルトの名無しさん
2020/09/22(火) 22:46:59.09ID:GaogVwml Is int* p; right or is int *p; right?
https://isocpp.org/wiki/faq/style-and-techniques#whitespace
> The choice between int* p; and int *p; is not about right and wrong,
> but about style and emphasis. C emphasized expressions; declarations
> were often considered little more than a necessary evil.
> C++, on the other hand, has a heavy emphasis on types.
https://isocpp.org/wiki/faq/style-and-techniques#whitespace
> The choice between int* p; and int *p; is not about right and wrong,
> but about style and emphasis. C emphasized expressions; declarations
> were often considered little more than a necessary evil.
> C++, on the other hand, has a heavy emphasis on types.
493はちみつ餃子 ◆8X2XSCHEME
2020/09/22(火) 23:30:22.08ID:Q5rCUsEX >>484
元からイケてない変数宣言の文法を部分的にどうにかすっきり見せる
って程度の話なんで、複雑な事例を更に複雑にするような変なルール
にしたいわけではない。
C++ 的な方向に振るなら int (*f)(); は
std::add_pointer_t<int()> f;
か
std::decay_t<int()> f;
かなぁ……。
冗長だけど変に入り組んだ感じがなくなるので type_traits はそれなりに取り入れてもいいと思うよ。
元からイケてない変数宣言の文法を部分的にどうにかすっきり見せる
って程度の話なんで、複雑な事例を更に複雑にするような変なルール
にしたいわけではない。
C++ 的な方向に振るなら int (*f)(); は
std::add_pointer_t<int()> f;
か
std::decay_t<int()> f;
かなぁ……。
冗長だけど変に入り組んだ感じがなくなるので type_traits はそれなりに取り入れてもいいと思うよ。
494デフォルトの名無しさん
2020/09/22(火) 23:33:23.38ID:7BIH7/M6 boost?libfmtじゃねーの?
495はちみつ餃子 ◆8X2XSCHEME
2020/09/22(火) 23:37:01.31ID:Q5rCUsEX497デフォルトの名無しさん
2020/09/23(水) 01:33:58.69ID:JzGrrpxj sprintf_s()と_countof()をセットで標準にしてホスイ
498はちみつ餃子 ◆8X2XSCHEME
2020/09/23(水) 01:40:34.94ID:2N0Iktsg499デフォルトの名無しさん
2020/09/23(水) 01:44:08.47ID:wtMA3RXJ >>493
>元からイケてない変数宣言の文法を部分的にどうにかすっきり見せる
一般的なポインタを表現するためには、どうしても、宣言子の中にも型の一部を
書くべきだったので、文法がそのように選択され、
int* a;
ではなく、
int *a;
と書く方がその記法と統一感がある。
数学者や物理学者は一般性や統一性がある方が美しいと感じる人が多いと
言われており、通常、数物の世界で「美しい」というのは、統一性のある
書き方。
なので、C/C++の型でも、後者の方が美しく感じるのが数物系の才能がある
人の感覚。
>元からイケてない変数宣言の文法を部分的にどうにかすっきり見せる
一般的なポインタを表現するためには、どうしても、宣言子の中にも型の一部を
書くべきだったので、文法がそのように選択され、
int* a;
ではなく、
int *a;
と書く方がその記法と統一感がある。
数学者や物理学者は一般性や統一性がある方が美しいと感じる人が多いと
言われており、通常、数物の世界で「美しい」というのは、統一性のある
書き方。
なので、C/C++の型でも、後者の方が美しく感じるのが数物系の才能がある
人の感覚。
500デフォルトの名無しさん
2020/09/23(水) 01:47:03.11ID:SSau2msF501デフォルトの名無しさん
2020/09/23(水) 01:50:27.78ID:wtMA3RXJ >>499
ポインタだけでなく、配列も、
int a[3];
の様に書く。これも、人気言語であったBASIC言語の
DIM a(3)
と似た感覚となっている。
配列はもちろん型の一部ではあるが、これを
int[3] a;
と書いて分かり易いとは限らない。というのは、
配列を使う場合には、BASICの場合ではa(i)、Cの場合では、a[i]のように書くので、
これも、宣言に置いても、BASICやCの書き方の方が分かり易いと思うのも自然。
それに
int *ptr_s[3]; // (100)
のような場合に、分かり易く型を全て左に書くのは難しい。
書くとすれば、
int*[3] ptr_s;
となるが、これが果たして分かり易いかと言えばNoだろう。
使う場合には、ptr_s[i] が int へのポインタになるのだから、
(100)の記法は至って分かり易い。
ポインタだけでなく、配列も、
int a[3];
の様に書く。これも、人気言語であったBASIC言語の
DIM a(3)
と似た感覚となっている。
配列はもちろん型の一部ではあるが、これを
int[3] a;
と書いて分かり易いとは限らない。というのは、
配列を使う場合には、BASICの場合ではa(i)、Cの場合では、a[i]のように書くので、
これも、宣言に置いても、BASICやCの書き方の方が分かり易いと思うのも自然。
それに
int *ptr_s[3]; // (100)
のような場合に、分かり易く型を全て左に書くのは難しい。
書くとすれば、
int*[3] ptr_s;
となるが、これが果たして分かり易いかと言えばNoだろう。
使う場合には、ptr_s[i] が int へのポインタになるのだから、
(100)の記法は至って分かり易い。
502はちみつ餃子 ◆8X2XSCHEME
2020/09/23(水) 01:55:10.68ID:2N0Iktsg >>499
> どうしても、宣言子の中にも型の一部を書くべき
それを前提とするならそれと一貫させることを俺は否定してない。
でも前提とできないよねという話をしてるんだから
なんで「べき」なのかを説明しないとなんの主張にもなってないよ。
> どうしても、宣言子の中にも型の一部を書くべき
それを前提とするならそれと一貫させることを俺は否定してない。
でも前提とできないよねという話をしてるんだから
なんで「べき」なのかを説明しないとなんの主張にもなってないよ。
503デフォルトの名無しさん
2020/09/23(水) 01:55:45.37ID:wtMA3RXJ >>501
さらにいえば二次元配列の場合、宣言は、
int a[3][2]; //C。使う場合は a[i][j]
DIM a(3,2); //BASIC。使う場合は、a(i,j)
となるが、もしCで型を全て左に書くとすれば、
int[3][2] a;
となると思うかもしれないが、これは、数学的な統一性からすれば
間違いで、正しくは、
int[2][3] a;
となり、前後を逆に書くのが「正しい」。
これが即座に理解できる人が数学的才能が有る人で、
教えてもらわないと分からない人才能が無い。
さらにいえば二次元配列の場合、宣言は、
int a[3][2]; //C。使う場合は a[i][j]
DIM a(3,2); //BASIC。使う場合は、a(i,j)
となるが、もしCで型を全て左に書くとすれば、
int[3][2] a;
となると思うかもしれないが、これは、数学的な統一性からすれば
間違いで、正しくは、
int[2][3] a;
となり、前後を逆に書くのが「正しい」。
これが即座に理解できる人が数学的才能が有る人で、
教えてもらわないと分からない人才能が無い。
504デフォルトの名無しさん
2020/09/23(水) 02:05:33.12ID:wtMA3RXJ >>502
Cの記法は、物理学で言うところの「組立単位」に相当する「組み立て型」を
一般的に表現するためには、かなり美しく正しい選択をしている。
int *a[10]; // (1)
int (*a)[10]; // (2)
と
は、物理学のように言えば、int-ptr-array-aとint-array-ptr-aの違いを
表しているが、Cの表現はとても理にかなっており非常に分かり易い。
これらの型を全てまとめて左に書こうとすれば、書くことは出来て、
int*[10] a; // int-ptr-array-a, (10)
int[10]* a; // int-array-ptr-a, (11)
となるが、果たしてこれが分かり易いかどうかと言う問題となる。
それぞれを使う際の a[i] や、*a の表記と(1), (2)に上手く対応しているので、
(10),(11)よりも統一が取れており、数学的には「美しい」状態となっている。
Cの記法は、物理学で言うところの「組立単位」に相当する「組み立て型」を
一般的に表現するためには、かなり美しく正しい選択をしている。
int *a[10]; // (1)
int (*a)[10]; // (2)
と
は、物理学のように言えば、int-ptr-array-aとint-array-ptr-aの違いを
表しているが、Cの表現はとても理にかなっており非常に分かり易い。
これらの型を全てまとめて左に書こうとすれば、書くことは出来て、
int*[10] a; // int-ptr-array-a, (10)
int[10]* a; // int-array-ptr-a, (11)
となるが、果たしてこれが分かり易いかどうかと言う問題となる。
それぞれを使う際の a[i] や、*a の表記と(1), (2)に上手く対応しているので、
(10),(11)よりも統一が取れており、数学的には「美しい」状態となっている。
505デフォルトの名無しさん
2020/09/23(水) 02:18:13.45ID:wtMA3RXJ506デフォルトの名無しさん
2020/09/23(水) 02:24:26.38ID:wtMA3RXJ >>502
C言語のように「書くべき」ことが分かる一番分かり易い例は、Cで
int a[1][2][3][4];
と書くものが、全部左に型を書く記法だと
int[4][3][2][1] a;
と書かないと、組み立て型(物理学における「組立単位」に相当)における
一般性を失うが、それだと、使う際の a[i1][i2][i3][i4]と要素数の指定とが
直感的に逆さまになってしまう問題が起きる。
もし、
int[1][2][3][4] a;
のように書くと、一般性を失い、組み立て型としては破綻しまい、その場しのぎの
記法となってしまう。
もしこれが理解できないのなら、悪いけど、数学的才能や、コンパイラを設計する才能が無い。
C言語のように「書くべき」ことが分かる一番分かり易い例は、Cで
int a[1][2][3][4];
と書くものが、全部左に型を書く記法だと
int[4][3][2][1] a;
と書かないと、組み立て型(物理学における「組立単位」に相当)における
一般性を失うが、それだと、使う際の a[i1][i2][i3][i4]と要素数の指定とが
直感的に逆さまになってしまう問題が起きる。
もし、
int[1][2][3][4] a;
のように書くと、一般性を失い、組み立て型としては破綻しまい、その場しのぎの
記法となってしまう。
もしこれが理解できないのなら、悪いけど、数学的才能や、コンパイラを設計する才能が無い。
507デフォルトの名無しさん
2020/09/23(水) 02:24:53.28ID:VKAwJeUe どうでもよい
508デフォルトの名無しさん
2020/09/23(水) 02:27:39.29ID:SSau2msF じじいはこういう語りつくされた古い話題しか話せないからな
509デフォルトの名無しさん
2020/09/23(水) 02:55:43.29ID:VKAwJeUe 大工が金槌はこうでなくてはならない(家を作ったことない)
510デフォルトの名無しさん
2020/09/23(水) 02:56:47.86ID:VKAwJeUe この手の輩はいないほうがいい
邪魔
邪魔
511デフォルトの名無しさん
2020/09/23(水) 02:58:20.51ID:VKAwJeUe クソみたいなマウント合戦を繰り広げる老害であることを自覚しろ
512はちみつ餃子 ◆8X2XSCHEME
2020/09/23(水) 02:59:44.49ID:2N0Iktsg >>504
数学的・物理的な美しさを (仮に (あくまでも仮に) その主張が妥当だとしても) C++ スレで根拠にするのが不思議。
そんな美しさなんてどうでもいいもの。
こちらの主張は
宣言の文法が型名とは別にある
→ その時点で一貫性なんてないよ
→ どちらを軸にすることもありうる
→ でもまあ C++ の発展の様子からすると型名を軸にしたさが見えるね
って話で、現時点で無い文法を導入したいとか思っているわけでもないし、
存在する文法を絶対に駄目だというわけでもない。
とはいえ (話の大元に戻るが) 現在の C++ が typedef を冷遇しているので、
なるべく using を使ったほうがいいよねってだけ。
数学的・物理的な美しさを (仮に (あくまでも仮に) その主張が妥当だとしても) C++ スレで根拠にするのが不思議。
そんな美しさなんてどうでもいいもの。
こちらの主張は
宣言の文法が型名とは別にある
→ その時点で一貫性なんてないよ
→ どちらを軸にすることもありうる
→ でもまあ C++ の発展の様子からすると型名を軸にしたさが見えるね
って話で、現時点で無い文法を導入したいとか思っているわけでもないし、
存在する文法を絶対に駄目だというわけでもない。
とはいえ (話の大元に戻るが) 現在の C++ が typedef を冷遇しているので、
なるべく using を使ったほうがいいよねってだけ。
513デフォルトの名無しさん
2020/09/23(水) 04:12:53.08ID:VKAwJeUe わしのFormatterは
int* a;
int *a, *b, c;
のように整形しよる。これが落とし所として妥当であろう
int* a;
int *a, *b, c;
のように整形しよる。これが落とし所として妥当であろう
>>500
https://github.com/fmtlib/fmt
でしょうか?github になれてなくて、これを使う方法もよくわからないし…
20年使っている sprintf() でもういいや…って妥協してしまいました
手元のコンパイラは g++17, 職場のは g++11 だけれども、セキュリティが堅くて「無断で」cygwin をアップデートさせてもらえない…
必要に迫られて徹夜して間に合わせたけれども、プログラミングへの集中力はずいぶんと落ちてしまいました…
コメントありがとうございました
https://github.com/fmtlib/fmt
でしょうか?github になれてなくて、これを使う方法もよくわからないし…
20年使っている sprintf() でもういいや…って妥協してしまいました
手元のコンパイラは g++17, 職場のは g++11 だけれども、セキュリティが堅くて「無断で」cygwin をアップデートさせてもらえない…
必要に迫られて徹夜して間に合わせたけれども、プログラミングへの集中力はずいぶんと落ちてしまいました…
コメントありがとうございました
515デフォルトの名無しさん
2020/09/23(水) 07:58:28.38ID:fDvsnE+M >>506
auto signal(int, void(*fp)(int)) -> decltype(fp); //こう書かれたら「破綻」で読めなくなるのか? おまえさんは
それこそC++11のグラマーが読めない、つまり数学的才能に乏しいことになるぞ
auto signal(int, void(*fp)(int)) -> decltype(fp); //こう書かれたら「破綻」で読めなくなるのか? おまえさんは
それこそC++11のグラマーが読めない、つまり数学的才能に乏しいことになるぞ
516デフォルトの名無しさん
2020/09/23(水) 08:04:19.35ID:fDvsnE+M >>512
あいつ結局Cの文法と設計思想を説明してるだけだよな
それをC++11の文法と設計思想を否定する根拠にしようとしているようだが
筋違いというか脈絡がない
ぼくはusing使いたくないんだーtypedef使うのを邪魔すんなー
僕はものすごく数学と物理に詳しいんだーセンスないやつうるせー
あいつ結局Cの文法と設計思想を説明してるだけだよな
それをC++11の文法と設計思想を否定する根拠にしようとしているようだが
筋違いというか脈絡がない
ぼくはusing使いたくないんだーtypedef使うのを邪魔すんなー
僕はものすごく数学と物理に詳しいんだーセンスないやつうるせー
517デフォルトの名無しさん
2020/09/23(水) 09:08:00.93ID:wtMA3RXJ 数学や物理学は、2000年以上も続く巨大なエコシステムを持っており、
それ以上簡潔にならないくらいな表現方法を発明済み。
それとは別の表現をしてもそれらを超えることはまず不可能で、文系の人達の
自己満足に過ぎない。
それ以上簡潔にならないくらいな表現方法を発明済み。
それとは別の表現をしてもそれらを超えることはまず不可能で、文系の人達の
自己満足に過ぎない。
518デフォルトの名無しさん
2020/09/23(水) 09:23:45.36ID:fDvsnE+M 思っクソ関係ない
話せば面白そうな気がしたがそっちへ行くのね
あーあ残念
話せば面白そうな気がしたがそっちへ行くのね
あーあ残念
519デフォルトの名無しさん
2020/09/23(水) 09:33:29.79ID:wtMA3RXJ 最近の「モダン」言語は、既存のものを知らずに新しいものを作ろうとする傾向が目立つ。
彼らは、今までの理論などそのメリットが理解出来ておらず、効率の悪い、
分かりにくい、整合性の無い、その場しのぎで、一般性が無い記法を導入する。
彼らは、今までの理論などそのメリットが理解出来ておらず、効率の悪い、
分かりにくい、整合性の無い、その場しのぎで、一般性が無い記法を導入する。
520デフォルトの名無しさん
2020/09/23(水) 09:58:47.10ID:fDvsnE+M つまんね
521デフォルトの名無しさん
2020/09/23(水) 10:19:32.59ID:hJkRvCZv522デフォルトの名無しさん
2020/09/23(水) 10:22:59.31ID:hJkRvCZv523デフォルトの名無しさん
2020/09/23(水) 11:04:51.52ID:tBUnvPYy 分かりにくい文法で自爆ってダサすぎるなw
そもそもC++なのに素の多重配列使うって
センスなさすぎだし
そもそもC++なのに素の多重配列使うって
センスなさすぎだし
524デフォルトの名無しさん
2020/09/23(水) 12:28:26.75ID:OXXcv7E7 >俺は数学が好きで、学生時代、ほぼ満点だった。
数物系が得意な人が、こんな馬鹿っぽくて曖昧な書き方するのかね?
この情報でどうやってお前の能力を推し量れと
数物系が得意な人が、こんな馬鹿っぽくて曖昧な書き方するのかね?
この情報でどうやってお前の能力を推し量れと
525デフォルトの名無しさん
2020/09/23(水) 12:31:30.53ID:YfY3TQQ4 正直マジレスするアホが居るとは思いもよらなんだ
526デフォルトの名無しさん
2020/09/23(水) 14:09:17.34ID:Ywvud/Qy >>493
なんでもテンプレートに書き直せばいいってもんでもない
なんでもテンプレートに書き直せばいいってもんでもない
527デフォルトの名無しさん
2020/09/23(水) 17:58:15.39ID:fDvsnE+M CでもそうだけどC++を使うからにはC++らしく使いたいね
C訛りのたどたどしいC++からは早く脱したい
C訛りのたどたどしいC++からは早く脱したい
528デフォルトの名無しさん
2020/09/23(水) 17:59:58.72ID:fDvsnE+M Cで憶えたことがとりあえず使えるのがC++に用意された入りやすい門ではあるけどね
そこは振り出しでしかないんだよ
そこは振り出しでしかないんだよ
529デフォルトの名無しさん
2020/09/23(水) 19:14:29.97ID:qJkmihKT >>493みたいなのをC++らしい、と思ってるならだいぶアレだけどな
530デフォルトの名無しさん
2020/09/23(水) 19:48:39.67ID:S15h3SjP 仕事で使うならBetter Cで留めるのが正しいC++の使い方。
531484
2020/09/23(水) 20:09:34.36ID:7wSVczyT >>524
確かに、数物系に「特異」な人のコメントにしては貧弱だなあと、私も思いました
たとえばガロア理論、とか、相対性理論、超弦理論、とか、を熱っぽく語って欲しいです
個人的にはエルゴート理論について薀蓄を知りたいですね
確かに、数物系に「特異」な人のコメントにしては貧弱だなあと、私も思いました
たとえばガロア理論、とか、相対性理論、超弦理論、とか、を熱っぽく語って欲しいです
個人的にはエルゴート理論について薀蓄を知りたいですね
>>527
でも iostream は失敗作という気がふつふつと…(略)
でも iostream は失敗作という気がふつふつと…(略)
534デフォルトの名無しさん
2020/09/23(水) 20:38:06.09ID:wsuhqGJa c++らしいって言っても時代によってかなり変わるし無意味な言い回しだわ。
535デフォルトの名無しさん
2020/09/23(水) 21:11:40.16ID:7wSVczyT 時代によってかなり変わるの?
C++98以降しか知らないけど
C++らしさ=テンプレート
と断言していいほどの一点張りだと思うけど(個人の感想です)
C++98以降しか知らないけど
C++らしさ=テンプレート
と断言していいほどの一点張りだと思うけど(個人の感想です)
536デフォルトの名無しさん
2020/09/23(水) 21:58:09.41ID:wsuhqGJa もうどこから突っ込んでいいかわからんくらい馬鹿
537デフォルトの名無しさん
2020/09/23(水) 23:12:26.96ID:fzdYgRfo ここまで喧喧諤諤の多くの意見が飛びかっておるが
iostream は要らん子、というのは一致しておるな
とくに operator << >> 系のやつ
iostream は要らん子、というのは一致しておるな
とくに operator << >> 系のやつ
538デフォルトの名無しさん
2020/09/23(水) 23:42:00.61ID:0XTX+Fu9 coutで出力するよりstd::stringに一旦文字列化してからprintf()で出した方が速いという時点で以下略
539はちみつ餃子 ◆8X2XSCHEME
2020/09/23(水) 23:55:04.80ID:2N0Iktsg 個人的には iostream をそこそこ好きなんだが、
今だったらこんな設計はしないだろうなというのはとてもよくわかる。
今だったらこんな設計はしないだろうなというのはとてもよくわかる。
540はちみつ餃子 ◆8X2XSCHEME
2020/09/24(木) 00:04:29.70ID:f1TxZ5Sj >>535
互換性を捨てられない以上は汚い部分も捨てられないんだよね。
だからどうやって抽象化層をかぶせるか、もっと直接に言えば
汚い部分をどう隠すかというのが C++ らしさじゃないかな。
そして型 (または型の表記) に関して汚い部分を隠す道具としては
テンプレートは特に有用なもののひとつだとは思う。
ただ、一点張りは言い過ぎで、取れる手段、手数の多さも C++ らしさだというのが私の感想。
組み合わせよう。
互換性を捨てられない以上は汚い部分も捨てられないんだよね。
だからどうやって抽象化層をかぶせるか、もっと直接に言えば
汚い部分をどう隠すかというのが C++ らしさじゃないかな。
そして型 (または型の表記) に関して汚い部分を隠す道具としては
テンプレートは特に有用なもののひとつだとは思う。
ただ、一点張りは言い過ぎで、取れる手段、手数の多さも C++ らしさだというのが私の感想。
組み合わせよう。
541デフォルトの名無しさん
2020/09/24(木) 03:03:21.13ID:yc5bnmE2 printfで%dとか%zとか指定するのめんどいやん
542デフォルトの名無しさん
2020/09/24(木) 03:09:46.41ID:sKL6gd3p printfはバッファオーバーフローの脆弱性を産みやすい
543デフォルトの名無しさん
2020/09/24(木) 03:10:26.11ID:sKL6gd3p 早いとか以前の問題
544デフォルトの名無しさん
2020/09/24(木) 05:20:27.18ID:bfjF2pM4 >>531
>意地でもテンプレートで何とかしよう
"自分でテンプレート書いて"色々どうにかしてる人が言うならまだ説得力もあるけどね
add_pointer_tとかdecayは基本的に標準ライブラリの実装(のためのメタプログラミング)の上での副産物だろ
テンプレートの文脈(=受け取った型に、場合により変換を施す必要がある)でもないとこでそんなん使って
「C++らしい」とか、だいぶ痛々しい
まぁ別に使用を禁止されてるわけでもないから使いたきゃ好きにすればいいけどね・・・
>意地でもテンプレートで何とかしよう
"自分でテンプレート書いて"色々どうにかしてる人が言うならまだ説得力もあるけどね
add_pointer_tとかdecayは基本的に標準ライブラリの実装(のためのメタプログラミング)の上での副産物だろ
テンプレートの文脈(=受け取った型に、場合により変換を施す必要がある)でもないとこでそんなん使って
「C++らしい」とか、だいぶ痛々しい
まぁ別に使用を禁止されてるわけでもないから使いたきゃ好きにすればいいけどね・・・
545デフォルトの名無しさん
2020/09/24(木) 06:18:07.32ID:sKL6gd3p >>544
同意
同意
546デフォルトの名無しさん
2020/09/24(木) 06:37:36.81ID:n05mXSO9 >>533
まあね、俺も禿1からの付き合いだけど
未だによくわからんところはある
iostreamに限ったことじゃなく古株のクラスライブラリって
だいたい今作るならこうはしないってところが何かあるね
大きな実害なければ我慢するし
困る場合はそれこそ腕が鳴るチャンス
まあね、俺も禿1からの付き合いだけど
未だによくわからんところはある
iostreamに限ったことじゃなく古株のクラスライブラリって
だいたい今作るならこうはしないってところが何かあるね
大きな実害なければ我慢するし
困る場合はそれこそ腕が鳴るチャンス
547デフォルトの名無しさん
2020/09/24(木) 06:40:25.74ID:n05mXSO9548デフォルトの名無しさん
2020/09/24(木) 06:48:44.27ID:n05mXSO9 用意されているものを使っただけだろ
意地でもとかバイアスが入るのはコンプレックスの顕れだからこそ
ギャンギャン強弁してくるわけだ
意地でもとかバイアスが入るのはコンプレックスの顕れだからこそ
ギャンギャン強弁してくるわけだ
549デフォルトの名無しさん
2020/09/24(木) 07:02:36.59ID:4EukrBNz550デフォルトの名無しさん
2020/09/24(木) 07:04:12.32ID:bfjF2pM4551デフォルトの名無しさん
2020/09/24(木) 07:09:28.96ID:n05mXSO9 返事をするのは心当たりがあるという自己申告かな?
552デフォルトの名無しさん
2020/09/24(木) 07:14:45.36ID:bfjF2pM4 なんか口調でわかるわ、いつものアホか・・・
「>」これが付いてるのは引用箇所だからな、覚えとくといいよw
「>」これが付いてるのは引用箇所だからな、覚えとくといいよw
553デフォルトの名無しさん
2020/09/24(木) 07:33:47.41ID:n05mXSO9 俺はまだ誰にとも言ってないんだがw
554デフォルトの名無しさん
2020/09/24(木) 07:40:21.81ID:bfjF2pM4 はいはいわろすわろす
555デフォルトの名無しさん
2020/09/24(木) 08:57:55.68ID:55R+R5Lh printf, scanf系はtypedef型の正体を知っておかねばならないとかクラス型を基本型と同等に扱えないとかモロモロあるのに
いつまでもマンセーしててもしゃーないで
いつまでもマンセーしててもしゃーないで
556デフォルトの名無しさん
2020/09/24(木) 09:00:20.65ID:sKL6gd3p >>549
いや普通にありえるからググってわかる程度のこと聞くなよ
いや普通にありえるからググってわかる程度のこと聞くなよ
557デフォルトの名無しさん
2020/09/24(木) 09:01:54.41ID:n05mXSO9558デフォルトの名無しさん
2020/09/24(木) 09:12:36.08ID:afeC5pu7 最終出力がわかりにくいとかロケール対応しにくいとかあるわけだけど
引数順にしか出力できない時点でprintfもロケール対応のやりにくさは変わらん
引数順にしか出力できない時点でprintfもロケール対応のやりにくさは変わらん
559デフォルトの名無しさん
2020/09/24(木) 09:31:03.57ID:+pWNIbO4 >>556
ググっても出てこないぞ
ググっても出てこないぞ
560デフォルトの名無しさん
2020/09/24(木) 09:40:43.54ID:sKL6gd3p ググりかたから教えなきゃならんの?
相手にしてられんわ
相手にしてられんわ
561デフォルトの名無しさん
2020/09/24(木) 09:44:41.22ID:n05mXSO9 >>558
そんなあなたにput_money, put_time
そんなあなたにput_money, put_time
562デフォルトの名無しさん
2020/09/24(木) 10:57:49.94ID:afeC5pu7 >>561
ロケールと書いたのが悪かったな
多言語化だな
語順を変えるとかやりにくい
Pythonのようにフォーマット文に引数の順番をかければ
言語による語順の違いもフォーマット文の差し替えだけで済む
ロケールと書いたのが悪かったな
多言語化だな
語順を変えるとかやりにくい
Pythonのようにフォーマット文に引数の順番をかければ
言語による語順の違いもフォーマット文の差し替えだけで済む
563デフォルトの名無しさん
2020/09/24(木) 11:05:22.76ID:7yQWIIk2564デフォルトの名無しさん
2020/09/24(木) 12:32:18.71ID:QU112yU2565デフォルトの名無しさん
2020/09/24(木) 12:43:09.70ID:G65zjecI >>547
boost::numeric::ublasとか使えばいい。
boost::numeric::ublasとか使えばいい。
566デフォルトの名無しさん
2020/09/24(木) 12:47:12.82ID:n05mXSO9 >>562
ああ確かに語順の変え方はprintfと変わらんな
auto time_v = time(nullptr);
cout << put_time(localtime(&time_v), "%m/%d/%y %H.%M'%S");
ああ確かに語順の変え方はprintfと変わらんな
auto time_v = time(nullptr);
cout << put_time(localtime(&time_v), "%m/%d/%y %H.%M'%S");
567デフォルトの名無しさん
2020/09/24(木) 13:45:56.89ID:sKL6gd3p >>564
お前も本当にゴミだな
wikipediaのリンク貼っといてやるよ
ほら
https://ja.wikipedia.org/wiki/%E6%9B%B8%E5%BC%8F%E6%96%87%E5%AD%97%E5%88%97%E6%94%BB%E6%92%83
お前も本当にゴミだな
wikipediaのリンク貼っといてやるよ
ほら
https://ja.wikipedia.org/wiki/%E6%9B%B8%E5%BC%8F%E6%96%87%E5%AD%97%E5%88%97%E6%94%BB%E6%92%83
568デフォルトの名無しさん
2020/09/24(木) 13:47:01.22ID:sKL6gd3p まじでバカはしね
569デフォルトの名無しさん
2020/09/24(木) 14:13:22.68ID:n05mXSO9 その話のどこがバッファオーバーフローなんだ?
570デフォルトの名無しさん
2020/09/24(木) 14:23:05.33ID:sKL6gd3p >コールスタック上のリターンアドレスを書き換えて不正なコードを実行させる
571デフォルトの名無しさん
2020/09/24(木) 14:24:13.29ID:sKL6gd3p 自分の過ちを認めろと言う割に自分は謝らず図々しく更に無駄な質問を重ねるとは
572デフォルトの名無しさん
2020/09/24(木) 14:30:21.28ID:EUYXPM4X >>565
boostは標準規格外なので却下
boostは標準規格外なので却下
573デフォルトの名無しさん
2020/09/24(木) 14:38:20.48ID:n05mXSO9 >>570
バッファオーバーフローさせるだけではコールスタック上のリターンアドレスは狙えないぜ
同じ記憶域期間を持つ他のオブジェクトを破壊する可能性があるというだけだ
コールスタック上のリターンアドレスを狙うなら配列でないオブジェクトのアドレスにオフセットかけるだけでもできるしな
逆に自動変数のアドレスを確実に得る技術が必要になる
printf/scanfといえばバッファオーバーフローという固定観念に囚われているから
そういう読みになっちまうんだよ
バッファオーバーフローさせるだけではコールスタック上のリターンアドレスは狙えないぜ
同じ記憶域期間を持つ他のオブジェクトを破壊する可能性があるというだけだ
コールスタック上のリターンアドレスを狙うなら配列でないオブジェクトのアドレスにオフセットかけるだけでもできるしな
逆に自動変数のアドレスを確実に得る技術が必要になる
printf/scanfといえばバッファオーバーフローという固定観念に囚われているから
そういう読みになっちまうんだよ
574デフォルトの名無しさん
2020/09/24(木) 14:46:00.53ID:sKL6gd3p まともに日本語の文章も読めないようじゃプログラムは君には難しいよ
575デフォルトの名無しさん
2020/09/24(木) 14:49:15.10ID:sKL6gd3p メモリ位置にあるデータを確認できると書いてあることすら読めてない
576デフォルトの名無しさん
2020/09/24(木) 14:54:12.15ID:0BhvwOmc おまわりさんこのひとです
577デフォルトの名無しさん
2020/09/24(木) 14:55:32.81ID:sKL6gd3p おとなしく、日本語もググるのも難しくてひとつずつ教えてもらわなきゃできません
ごめんなさいって言ってりゃいいのにw
ごめんなさいって言ってりゃいいのにw
578デフォルトの名無しさん
2020/09/24(木) 14:59:43.90ID:n05mXSO9579デフォルトの名無しさん
2020/09/24(木) 15:11:43.38ID:sKL6gd3p Wikipediaまで引用してあげたのにまだごねるのか
本当にわがままだな
本当にわがままだな
580デフォルトの名無しさん
2020/09/24(木) 15:12:12.34ID:sKL6gd3p ばかはしね
581デフォルトの名無しさん
2020/09/24(木) 15:48:16.32ID:n05mXSO9 > printfはバッファオーバーフローの脆弱性を産みやすい
重箱の隅な記事では、最後の「やすい」という主張の裏付けにはならないってことだ
粗暴な罵倒語も裏付けになるわけがないな
重箱の隅な記事では、最後の「やすい」という主張の裏付けにはならないってことだ
粗暴な罵倒語も裏付けになるわけがないな
582デフォルトの名無しさん
2020/09/24(木) 15:53:47.24ID:sKL6gd3p そんなにprintf好きなら勝手に使えばいいんじゃない?
583デフォルトの名無しさん
2020/09/24(木) 16:06:33.08ID:0BhvwOmc おまいら printf の戻り値は毎回チェックしろよ
584デフォルトの名無しさん
2020/09/24(木) 16:26:18.33ID:VqYlbH9U printfの書式にユーザ入力を使うことなんてあるか?
SQLインジェクションとはワケが違うぞ
SQLインジェクションとはワケが違うぞ
585デフォルトの名無しさん
2020/09/24(木) 17:02:36.61ID:EUYXPM4X バッファ使ってるsprintfと
バッファ使ってないprintfの
違いもわからんのか
バッファ使ってないprintfの
違いもわからんのか
586デフォルトの名無しさん
2020/09/24(木) 17:26:51.00ID:5Fx1JvjP 確かにprintfの書式文字列に関するメモリ破壊の脆弱性が示されてるが、これを「バッファオーバーフロー」と呼ぶのは違和感があるな
587デフォルトの名無しさん
2020/09/24(木) 17:33:32.86ID:sKL6gd3p わかってないくせに危険な関数使うなよ
588デフォルトの名無しさん
2020/09/24(木) 17:34:56.21ID:sKL6gd3p パフォーマンスとか以前の問題だろうが
589デフォルトの名無しさん
2020/09/24(木) 17:36:15.17ID:sKL6gd3p >バッファ使ってるsprintfと
それ勝手に持ち出したのお前だからなw
それ勝手に持ち出したのお前だからなw
590デフォルトの名無しさん
2020/09/24(木) 18:19:48.23ID:7yQWIIk2 こっからどう乗り切る気?
591デフォルトの名無しさん
2020/09/24(木) 18:21:49.52ID:9cj79wpF 結局のところ、>>542が恥ずかしい奴だったという結論でok?
592デフォルトの名無しさん
2020/09/24(木) 18:26:33.04ID:sKL6gd3p593デフォルトの名無しさん
2020/09/24(木) 18:37:51.09ID:sKL6gd3p cout << ...
がダサいだのprintfが早いだの
程度が低いんだよ
がダサいだのprintfが早いだの
程度が低いんだよ
594デフォルトの名無しさん
2020/09/24(木) 18:48:48.99ID:TdIgAD6o595デフォルトの名無しさん
2020/09/24(木) 18:53:55.27ID:sKL6gd3p 適当に脳内で読み替えとけや無能
こっちはprintfなんてそもそも使わんから詳しいことに興味はない
だからググれって最初に伝えたんだわ
こっちはprintfなんてそもそも使わんから詳しいことに興味はない
だからググれって最初に伝えたんだわ
596デフォルトの名無しさん
2020/09/24(木) 19:02:40.95ID:sKL6gd3p597デフォルトの名無しさん
2020/09/24(木) 19:10:17.44ID:EUYXPM4X ID真っ赤で必死ダナw
598デフォルトの名無しさん
2020/09/24(木) 19:11:45.79ID:sKL6gd3p 逃げるのか?w
599デフォルトの名無しさん
2020/09/24(木) 19:13:39.45ID:sKL6gd3p ご自慢の知識を披露してみろよばかが
600デフォルトの名無しさん
2020/09/24(木) 19:44:29.22ID:sKL6gd3p はい結局にげたー雑魚〜
601デフォルトの名無しさん
2020/09/24(木) 19:56:55.65ID:55R+R5Lh602デフォルトの名無しさん
2020/09/24(木) 20:09:35.67ID:sKL6gd3p printfに脆弱性ある
というのが重要な点なのにあくまでも上げ足取りをするのか
本当にごみしかいないな
というのが重要な点なのにあくまでも上げ足取りをするのか
本当にごみしかいないな
603デフォルトの名無しさん
2020/09/24(木) 20:10:35.38ID:EUYXPM4X ID真っ赤で恥ずかしい奴w
604デフォルトの名無しさん
2020/09/24(木) 20:12:58.68ID:sKL6gd3p なにが恥ずかしいの?IDすぐリセットされるし
605デフォルトの名無しさん
2020/09/24(木) 20:25:09.79ID:7yQWIIk2 ほれぼれする雑魚っぷり
606デフォルトの名無しさん
2020/09/24(木) 20:27:17.41ID:sKL6gd3p お前ほどではないよw
607デフォルトの名無しさん
2020/09/24(木) 20:32:02.13ID:sKL6gd3p こういうのに反応してくるのは雑魚と相場が決まってるからなw
608デフォルトの名無しさん
2020/09/24(木) 20:39:06.34ID:OqVmXa/U609デフォルトの名無しさん
2020/09/24(木) 20:42:06.80ID:sKL6gd3p いや関係ないけど
どうせこいつもわかってないくせに人のこと煽ってるんだろうから
聞いてみたらやっぱ逃げた
どうせこいつもわかってないくせに人のこと煽ってるんだろうから
聞いてみたらやっぱ逃げた
610デフォルトの名無しさん
2020/09/24(木) 20:56:41.05ID:n05mXSO9 printfはバッファオーバーフローの脆弱性を産みやすい
printfはバッファオーバーフローの脆弱性を産みやすい
printfはバッファオーバーフローの脆弱性を産みやすい
煽りモードに入るならボコボコにしてやんよ
printfはバッファオーバーフローの脆弱性を産みやすい
printfはバッファオーバーフローの脆弱性を産みやすい
煽りモードに入るならボコボコにしてやんよ
611デフォルトの名無しさん
2020/09/24(木) 20:59:32.71ID:sKL6gd3p612デフォルトの名無しさん
2020/09/24(木) 21:00:05.83ID:NCTacveT ここまで具体例を示した証拠も反論もなし。
613デフォルトの名無しさん
2020/09/24(木) 22:12:13.40ID:jspEV3AF614デフォルトの名無しさん
2020/09/24(木) 22:18:55.93ID:OqVmXa/U615デフォルトの名無しさん
2020/09/24(木) 22:50:51.72ID:jspEV3AF sprintf()なら有り得る、
希ガス
個人的にはsprintf_s()しか使わないから無用の心配だが
希ガス
個人的にはsprintf_s()しか使わないから無用の心配だが
616デフォルトの名無しさん
2020/09/24(木) 22:53:03.50ID:55R+R5Lh 自分でバッファオーバーフロー言い出しといてなんやねん
617デフォルトの名無しさん
2020/09/24(木) 22:54:48.84ID:jspEV3AF std::ostringstreamは未来
そんなふうに考えていた時期が漏れにもありました、
そんなふうに考えていた時期が漏れにもありました、
618デフォルトの名無しさん
2020/09/24(木) 23:04:17.15ID:lJ1l9qyF619デフォルトの名無しさん
2020/09/24(木) 23:05:16.99ID:jspEV3AF しかしなんでスタックって高位側から低位側に伸びる実装なんだろうな
逆にしたらそれだけで外部入力依存のバッファオーバーフローでexploitされる危険性を半減できるはず…
逆にしたらそれだけで外部入力依存のバッファオーバーフローでexploitされる危険性を半減できるはず…
620デフォルトの名無しさん
2020/09/24(木) 23:16:12.65ID:lJ1l9qyF バイナリエディタ見てみろよ。アドレス高いほうが下だろ。
スタックはちゃんと下から積んでるんだよ。
スタックはちゃんと下から積んでるんだよ。
621デフォルトの名無しさん
2020/09/24(木) 23:45:08.26ID:jspEV3AF ホンマにprintf()でもやれるんや、
https://www.ipa.go.jp/security/awareness/vendor/programmingv2/contents/c906.html
しかし%nはC++11で廃止されたとあるからモダンなC++ではprintf()は安心、
https://www.ipa.go.jp/security/awareness/vendor/programmingv2/contents/c906.html
しかし%nはC++11で廃止されたとあるからモダンなC++ではprintf()は安心、
622デフォルトの名無しさん
2020/09/24(木) 23:46:33.93ID:lJ1l9qyF 安全なライブラリ=チェックが多く遅いライブラリ
C使う意味なくね?
C使う意味なくね?
623デフォルトの名無しさん
2020/09/24(木) 23:48:09.41ID:jspEV3AF 訂正orz、
誤: C++11
正: C11
誤: C++11
正: C11
624デフォルトの名無しさん
2020/09/25(金) 00:19:45.11ID:nCkagqzh >>619
それは昔々、CPUが今よりずっと低能力で、malloc()などをする余力もない時代、
メモリー領域を、普通の変数のワークエリアと、call命令での戻り値アドレスの
記憶のためと、レジスタの保存、復帰(push,pop)用のためのエリアを逆方向
から使うことは、画期的なアイデアだったから。
データ領域は、アドレスの小さい方から、大きいほうへ伸ばして使っていくが、
そうやってるさいにも、call,push,pop命令は使いたいから、そのようにする
以外には当時の非力なCPUには非効率すぎて選択肢が無かった。
今なら、リンクリストや高速なmalloc()などを駆使すれば、別の方法も取れるかも
知れない。
それは昔々、CPUが今よりずっと低能力で、malloc()などをする余力もない時代、
メモリー領域を、普通の変数のワークエリアと、call命令での戻り値アドレスの
記憶のためと、レジスタの保存、復帰(push,pop)用のためのエリアを逆方向
から使うことは、画期的なアイデアだったから。
データ領域は、アドレスの小さい方から、大きいほうへ伸ばして使っていくが、
そうやってるさいにも、call,push,pop命令は使いたいから、そのようにする
以外には当時の非力なCPUには非効率すぎて選択肢が無かった。
今なら、リンクリストや高速なmalloc()などを駆使すれば、別の方法も取れるかも
知れない。
625デフォルトの名無しさん
2020/09/25(金) 00:26:39.90ID:nCkagqzh >>624
[捕捉]
今は、マルチスレッドプログラミングをする際、各スレッドに、それぞれ
別のスタック領域を割り当てるが、その領域の容量は固定サイズ。
固定サイズでも何とかなるのは、メインメモリーが非常に大きくなったためで、
大部分は無駄になっていても、なんとかなってしまうから。
たとえば、関数呼び出しの回数と、ローカルスタック変数の容量を
掛け算したような値を見積もってみれば、とても無駄なスタック領域の
割り当てをしているだろうが、メモリーがふんだんに余る位になっているので
それでも特に問題がなくなってしまった。
ところが、かつてはメモリーが足りなくてどうしようもなかった。
しかも、当然当時はシングルスレッドだった。
なので、データ領域は上から、スタック領域は下から伸ばしていけば、
お互いが衝突するまで使える。これは、ギリギリ限界まで無駄なく
メモリーが使えることを意味する。
[捕捉]
今は、マルチスレッドプログラミングをする際、各スレッドに、それぞれ
別のスタック領域を割り当てるが、その領域の容量は固定サイズ。
固定サイズでも何とかなるのは、メインメモリーが非常に大きくなったためで、
大部分は無駄になっていても、なんとかなってしまうから。
たとえば、関数呼び出しの回数と、ローカルスタック変数の容量を
掛け算したような値を見積もってみれば、とても無駄なスタック領域の
割り当てをしているだろうが、メモリーがふんだんに余る位になっているので
それでも特に問題がなくなってしまった。
ところが、かつてはメモリーが足りなくてどうしようもなかった。
しかも、当然当時はシングルスレッドだった。
なので、データ領域は上から、スタック領域は下から伸ばしていけば、
お互いが衝突するまで使える。これは、ギリギリ限界まで無駄なく
メモリーが使えることを意味する。
626デフォルトの名無しさん
2020/09/25(金) 00:29:23.03ID:iQJ3d1Xe なんかデタラメがいろいろ混じってるぞ。
627デフォルトの名無しさん
2020/09/25(金) 00:30:59.73ID:7nm9kuAr >>624
どこらへんが画期的で効率的なのかkwsk、
普通の変数のワークエリアと逆方向からスタックを伸ばしたところで
使えるメモリが増えるわけでなし…
(スレッドが2本以上あればスタック領域は結局スレッド毎に固定サイズで割り当てるしかない
百歩譲って一つながりのメモリを上と下の両方から使っていったらすばらしいと思えたとしても、
なんでスタックを0番地から上に伸ばしてsbrkが最大アドレスから下に伸びる設計にしなかったのかの
説明にならない
どこらへんが画期的で効率的なのかkwsk、
普通の変数のワークエリアと逆方向からスタックを伸ばしたところで
使えるメモリが増えるわけでなし…
(スレッドが2本以上あればスタック領域は結局スレッド毎に固定サイズで割り当てるしかない
百歩譲って一つながりのメモリを上と下の両方から使っていったらすばらしいと思えたとしても、
なんでスタックを0番地から上に伸ばしてsbrkが最大アドレスから下に伸びる設計にしなかったのかの
説明にならない
628デフォルトの名無しさん
2020/09/25(金) 00:34:29.83ID:nCkagqzh >>625
[もっと捕捉]
今は、MMUを使っており、実際に使ってない仮想メモリー空間には、物理メモリー
を割り当てない。だから、使うまでは物理メモリーは無駄にはならない。
もう一つは、(仮想)アドレス空間自体が飛躍的に大きく取れるようになったことで、
搭載している物理メモリー以上に大きなアドレス空間が使えて、各スレッド
のスタック用に大きめにアドレス空間を確保(commit)しておけるように
なった。
32BIT時代ですら、4GBの仮想アドレス空間が使えたから、アドレス空間自体の
不足は余りおきなくなった。積んでいる物理メモリーよりも大きな空の領域を
各スレッドのスタックに割り当てても、特に問題が無い。
今や64BIT時代。同時に実行するスレッドの個数も増えつつあるが、各スタック
領域の仮想アドレス空間上のサイズを大きくとってもどうってことは無い時代になった。
しかし、かつてはそうではなく、スタックは下から上に伸ばして行き、データ領域
と衝突するまで使うのが良い方法だった。
[もっと捕捉]
今は、MMUを使っており、実際に使ってない仮想メモリー空間には、物理メモリー
を割り当てない。だから、使うまでは物理メモリーは無駄にはならない。
もう一つは、(仮想)アドレス空間自体が飛躍的に大きく取れるようになったことで、
搭載している物理メモリー以上に大きなアドレス空間が使えて、各スレッド
のスタック用に大きめにアドレス空間を確保(commit)しておけるように
なった。
32BIT時代ですら、4GBの仮想アドレス空間が使えたから、アドレス空間自体の
不足は余りおきなくなった。積んでいる物理メモリーよりも大きな空の領域を
各スレッドのスタックに割り当てても、特に問題が無い。
今や64BIT時代。同時に実行するスレッドの個数も増えつつあるが、各スタック
領域の仮想アドレス空間上のサイズを大きくとってもどうってことは無い時代になった。
しかし、かつてはそうではなく、スタックは下から上に伸ばして行き、データ領域
と衝突するまで使うのが良い方法だった。
629デフォルトの名無しさん
2020/09/25(金) 00:47:42.60ID:iQJ3d1Xe >>627
picの変態仕様見れば分かる。汎用機もそうだけどスタック制限あるアーキテクチャが普通だった時代。
しかも0番地から伸ばすとかCPUの仕組みすら知らんレベルだな。割り込みベクタがあったり、プログラムのROMがあったり、
0番地にフリーのRAMなどたいていない。つまり空いてるRAMの下限は開発が終了するまで確定しないこともしばしば。
じゃあいつSP設定値いつ決まるのって話。決まらないんだから一番うしろにして前に進めるのが頭使わずに済む。
ちなみに8086はスタックセグメントあるから。便利だろw
picの変態仕様見れば分かる。汎用機もそうだけどスタック制限あるアーキテクチャが普通だった時代。
しかも0番地から伸ばすとかCPUの仕組みすら知らんレベルだな。割り込みベクタがあったり、プログラムのROMがあったり、
0番地にフリーのRAMなどたいていない。つまり空いてるRAMの下限は開発が終了するまで確定しないこともしばしば。
じゃあいつSP設定値いつ決まるのって話。決まらないんだから一番うしろにして前に進めるのが頭使わずに済む。
ちなみに8086はスタックセグメントあるから。便利だろw
630はちみつ餃子 ◆8X2XSCHEME
2020/09/25(金) 03:12:37.08ID:5q2rxyfR >>622
ものによるんだろうが、たとえば配列へのアクセスがバッファーオーバーフローに
ならないかのチェック程度ならほどんど実行時のペナルティはないというデータはどこかで見たことがあるな。
正しいプログラムなら分岐予測がほぼ成功するから。
まあ結局のところは程度問題というか、許容可能な程度ならチェックしたっていいだろうし、
実際問題として全く異常系がないプログラムというものもそれはそれでありえないわけで。
ものによるんだろうが、たとえば配列へのアクセスがバッファーオーバーフローに
ならないかのチェック程度ならほどんど実行時のペナルティはないというデータはどこかで見たことがあるな。
正しいプログラムなら分岐予測がほぼ成功するから。
まあ結局のところは程度問題というか、許容可能な程度ならチェックしたっていいだろうし、
実際問題として全く異常系がないプログラムというものもそれはそれでありえないわけで。
631デフォルトの名無しさん
2020/09/25(金) 05:15:46.56ID:Y7UfbpFk632デフォルトの名無しさん
2020/09/25(金) 06:14:47.70ID:cdg8K9Zm633デフォルトの名無しさん
2020/09/25(金) 06:35:56.95ID:cdg8K9Zm >>629
> なんかデタラメがいろいろ混じってるぞ。
お前が言うなよ…
> 0番地にフリーのRAMなどたいていない。
6800はダイレクトアドレッシングモード持ってるから0x0000〜0x00ffはRAM前提
6502も0x0000〜0x00ffがRAMでないと使い物にならないしスタック領域がハード的に決まってるにも関わらず後ろから使う設計だったりする
> じゃあいつSP設定値いつ決まるのって話
開発中にRAMの下限が変わったらSPの初期値の設定変えるだけだろ
> なんかデタラメがいろいろ混じってるぞ。
お前が言うなよ…
> 0番地にフリーのRAMなどたいていない。
6800はダイレクトアドレッシングモード持ってるから0x0000〜0x00ffはRAM前提
6502も0x0000〜0x00ffがRAMでないと使い物にならないしスタック領域がハード的に決まってるにも関わらず後ろから使う設計だったりする
> じゃあいつSP設定値いつ決まるのって話
開発中にRAMの下限が変わったらSPの初期値の設定変えるだけだろ
634デフォルトの名無しさん
2020/09/25(金) 06:40:05.92ID:cdg8K9Zm635デフォルトの名無しさん
2020/09/25(金) 07:16:04.04ID:+l2B7ows >>627
スタックポインタというものができた、8008から8080に進化した時の話なのよ
>一つながりのメモリを上と下の両方から使っていったらすばらしい
うん、それだけの話
若い番地にはプログラムを置くのよ、後ろからスタック、そんだけ
スタックポインタというものができた、8008から8080に進化した時の話なのよ
>一つながりのメモリを上と下の両方から使っていったらすばらしい
うん、それだけの話
若い番地にはプログラムを置くのよ、後ろからスタック、そんだけ
636デフォルトの名無しさん
2020/09/25(金) 07:46:42.31ID:xGsH9qpm mallocまで行かなくてもRAMが少ないからこそヒープからの固定長メモリブロックを使って省メモリしてたし、ヒープとスタックは別方向に取ったほうが最大限利用できた。
運が悪いとオーバーラップして誤動作するけど。
運が悪いとオーバーラップして誤動作するけど。
637デフォルトの名無しさん
2020/09/25(金) 07:51:02.31ID:UNwnFJoF キャッシュ効率を上げるためにコーディング上でなにかできることある?
638デフォルトの名無しさん
2020/09/25(金) 08:15:54.26ID:xSHyo3nF あるよ
まずキャッシュ効率というのをどうやって計測しようとしているか書いてみ
まずキャッシュ効率というのをどうやって計測しようとしているか書いてみ
639デフォルトの名無しさん
2020/09/25(金) 08:32:54.15ID:UNwnFJoF プロファイラー
640デフォルトの名無しさん
2020/09/25(金) 08:33:00.07ID:WvFHSXSD641デフォルトの名無しさん
2020/09/25(金) 09:01:31.03ID:xSHyo3nF642デフォルトの名無しさん
2020/09/25(金) 09:08:54.15ID:UNwnFJoF >>641
わからないなら期待もたせるな
わからないなら期待もたせるな
643デフォルトの名無しさん
2020/09/25(金) 09:09:20.44ID:3+LaQyVV メモリアクセスが狭い範囲に集中するように工夫する
可能な限りスレッド数を少なくタイムスライスを長くする
可能な限りスレッド数を少なくタイムスライスを長くする
644デフォルトの名無しさん
2020/09/25(金) 09:30:26.29ID:VqVKl+Zt >>637
対象CPUのキャッシュアーキテクチャは何?
対象CPUのキャッシュアーキテクチャは何?
645デフォルトの名無しさん
2020/09/25(金) 09:36:13.59ID:cdg8K9Zm646デフォルトの名無しさん
2020/09/25(金) 09:41:32.68ID:3+LaQyVV 80系に採用されたって話だろ
647デフォルトの名無しさん
2020/09/25(金) 09:44:46.31ID:3+LaQyVV てす
648デフォルトの名無しさん
2020/09/25(金) 10:19:41.79ID:xSHyo3nF649デフォルトの名無しさん
2020/09/25(金) 10:35:33.35ID:cdg8K9Zm650デフォルトの名無しさん
2020/09/25(金) 12:11:23.00ID:3+LaQyVV >>649
何で俺がそんな説明されるのかよくわからん
何で俺がそんな説明されるのかよくわからん
651デフォルトの名無しさん
2020/09/25(金) 12:17:58.23ID:cdg8K9Zm652デフォルトの名無しさん
2020/09/25(金) 12:28:12.75ID:4ovx1Tzj CSとSSが物理的に分けられるようになって意味が無くなった
653デフォルトの名無しさん
2020/09/25(金) 12:32:13.75ID:iQJ3d1Xe >>633
6502のアーキテクチャぐらい知ってるがな。だからたいていと言ってるだろ。
> SPの初期値の設定変えるだけだろ
当時の開発環境は紙の上とかが普通。ハンドアセンブル上等でみんなOPコード暗記してた。
ROM位置ズレました〜なんて言われたらちゃぶ台返しレベルの仕様変更。
8086のような相対値アドレスで比較的リロケータブルな環境は後になってから。
設定値を変えるだけだろとか簡単に言われても困る。
> PDP-11の時代からスタックは高位番地から使うようになってる
だったら当時はなぜそうなったか説明してくれないとな。
6502のアーキテクチャぐらい知ってるがな。だからたいていと言ってるだろ。
> SPの初期値の設定変えるだけだろ
当時の開発環境は紙の上とかが普通。ハンドアセンブル上等でみんなOPコード暗記してた。
ROM位置ズレました〜なんて言われたらちゃぶ台返しレベルの仕様変更。
8086のような相対値アドレスで比較的リロケータブルな環境は後になってから。
設定値を変えるだけだろとか簡単に言われても困る。
> PDP-11の時代からスタックは高位番地から使うようになってる
だったら当時はなぜそうなったか説明してくれないとな。
654デフォルトの名無しさん
2020/09/25(金) 13:08:52.30ID:3+LaQyVV655デフォルトの名無しさん
2020/09/25(金) 13:31:16.91ID:cdg8K9Zm656デフォルトの名無しさん
2020/09/25(金) 13:43:22.03ID:3+LaQyVV 被害妄想というよりボキャ貧かw
なるほどな、今さらなことをドヤってるのも頭の更新が止まっている症状か
納得
なるほどな、今さらなことをドヤってるのも頭の更新が止まっている症状か
納得
657デフォルトの名無しさん
2020/09/25(金) 14:00:06.69ID:4ovx1Tzj >頭の更新
ほんそれ
ほんそれ
658デフォルトの名無しさん
2020/09/25(金) 14:09:34.94ID:u87G89iw >>652
でも、アセンブラならcall,push,pop,[ebp+xxx],[esp+xxx]はss:をしていなくても
勝手に stack segment相対になるから良いが、Cの引数にバッファのアドレスを
渡すような場合、ds:なのか、ss:なのかが分からないから、farアドレスにする
しかなくなってしまう。なので、ss=dsの状態にした方がCだと効率が良かった。
でも、アセンブラならcall,push,pop,[ebp+xxx],[esp+xxx]はss:をしていなくても
勝手に stack segment相対になるから良いが、Cの引数にバッファのアドレスを
渡すような場合、ds:なのか、ss:なのかが分からないから、farアドレスにする
しかなくなってしまう。なので、ss=dsの状態にした方がCだと効率が良かった。
659デフォルトの名無しさん
2020/09/25(金) 14:14:37.28ID:cdg8K9Zm 具体的に反論できないなら黙ってりゃいいのに…
660デフォルトの名無しさん
2020/09/25(金) 14:20:55.55ID:MA61Hr7D 64ビットになったらセグメントなんてどうでもよくなったな
661デフォルトの名無しさん
2020/09/25(金) 14:32:23.95ID:3+LaQyVV 対立してないのにどうやって反論するんだよ
それと何がどうだったという証言は論じゃないからな
それと何がどうだったという証言は論じゃないからな
662デフォルトの名無しさん
2020/09/25(金) 14:42:12.89ID:cdg8K9Zm >>661
お前はどうでもいいから無駄に絡んでくるな
>> 設定値を変えるだけだろとか簡単に言われても困る。
> スタックへのアクセスってよほどトリッキーなことをしない限りSP相対だぞ
> スタック領域変わったからと言ってSPの初期値以外に一体何を書き換えるんだよw
に対する答えが欲しいだけ
お前はどうでもいいから無駄に絡んでくるな
>> 設定値を変えるだけだろとか簡単に言われても困る。
> スタックへのアクセスってよほどトリッキーなことをしない限りSP相対だぞ
> スタック領域変わったからと言ってSPの初期値以外に一体何を書き換えるんだよw
に対する答えが欲しいだけ
663デフォルトの名無しさん
2020/09/25(金) 14:50:04.04ID:3+LaQyVV664デフォルトの名無しさん
2020/09/25(金) 15:17:28.57ID:cdg8K9Zm それこそ論点がないのにどう反駁しろと?
バカが横から絡んできて勝手にスッ転びました、どうしましょうか?
⇒ 放置しかないわなw
バカが横から絡んできて勝手にスッ転びました、どうしましょうか?
⇒ 放置しかないわなw
665デフォルトの名無しさん
2020/09/25(金) 15:39:37.04ID:3+LaQyVV >>664
じゃ被害妄想認めるんだな? ニヤニヤ
じゃ被害妄想認めるんだな? ニヤニヤ
666デフォルトの名無しさん
2020/09/25(金) 15:46:21.30ID:iQJ3d1Xe >>655
>SP相対
なんだよこれ。非力なチップでスタックフレームの実装でも始める気か?
8086のようなスタックフレーム考慮した楽ちんアドレッシングとかおまえの指摘は時代錯誤が多い。
当時のデバイスもROMやテープが当たり前だし設定値変えるだけとかほんと簡単に言ってくれる。
だいたい先頭にスタック置いて、今度はどうやってワークエリアの位置を確定する気だよ。
結局確定しないから後ろからってなるだけだ。
>SP相対
なんだよこれ。非力なチップでスタックフレームの実装でも始める気か?
8086のようなスタックフレーム考慮した楽ちんアドレッシングとかおまえの指摘は時代錯誤が多い。
当時のデバイスもROMやテープが当たり前だし設定値変えるだけとかほんと簡単に言ってくれる。
だいたい先頭にスタック置いて、今度はどうやってワークエリアの位置を確定する気だよ。
結局確定しないから後ろからってなるだけだ。
667デフォルトの名無しさん
2020/09/25(金) 16:41:04.34ID:cdg8K9Zm >>665
また意味不明なことを言い出した
まあ低能にありがちな行動だけどw
>>666
push/popってSP相対だろ
> 当時のデバイスもROMやテープが当たり前だし設定値変えるだけとかほんと簡単に言ってくれる。
どうせ変更するのにSPの初期値を変えるのが面倒とか意味わからん
ちなみに俺は8bit時代からの組込み屋でテープもEP-ROMも使ってたから当時の話とかでごまかそうとしても無駄だよ
> だいたい先頭にスタック置いて、今度はどうやってワークエリアの位置を確定する気だよ。
後ろから取ればいいだけだろ
ただなんとなく気持ち悪いから前からワークエリア、後ろからスタックってなっただけだと思うよ
また意味不明なことを言い出した
まあ低能にありがちな行動だけどw
>>666
push/popってSP相対だろ
> 当時のデバイスもROMやテープが当たり前だし設定値変えるだけとかほんと簡単に言ってくれる。
どうせ変更するのにSPの初期値を変えるのが面倒とか意味わからん
ちなみに俺は8bit時代からの組込み屋でテープもEP-ROMも使ってたから当時の話とかでごまかそうとしても無駄だよ
> だいたい先頭にスタック置いて、今度はどうやってワークエリアの位置を確定する気だよ。
後ろから取ればいいだけだろ
ただなんとなく気持ち悪いから前からワークエリア、後ろからスタックってなっただけだと思うよ
668デフォルトの名無しさん
2020/09/25(金) 16:53:17.35ID:3+LaQyVV 否定しないなあw
スタックへのアクセスはpush/popだけとか
自動変数にポインタ経由でアクセスするのがトリッキーとか
何だろこの人w
スタックへのアクセスはpush/popだけとか
自動変数にポインタ経由でアクセスするのがトリッキーとか
何だろこの人w
669デフォルトの名無しさん
2020/09/25(金) 16:54:42.59ID:3+LaQyVV > EP-ROMも使って【た】
過去形だね
C++でファームウエア書いてないってことか
過去形だね
C++でファームウエア書いてないってことか
670デフォルトの名無しさん
2020/09/25(金) 16:58:24.91ID:iQJ3d1Xe671デフォルトの名無しさん
2020/09/25(金) 17:11:48.04ID:cdg8K9Zm672デフォルトの名無しさん
2020/09/25(金) 17:13:00.93ID:cdg8K9Zm673デフォルトの名無しさん
2020/09/25(金) 17:20:52.32ID:3+LaQyVV674デフォルトの名無しさん
2020/09/25(金) 17:22:59.82ID:3+LaQyVV EEPROM知らねえらしいな
マジ頭の更新止まってやんのw
マジ頭の更新止まってやんのw
675デフォルトの名無しさん
2020/09/25(金) 17:33:26.68ID:cdg8K9Zm676デフォルトの名無しさん
2020/09/25(金) 17:36:29.46ID:3+LaQyVV >>675
自動変数かどうかわからんものへのアクセスをSP相対にできるのかって話だよ
重箱の隅ではないごく一般的なケースだぞ
ここC++スレだぜ? this->すげー多用するんだが
UV-EPROMのまま更新が止まった頭じゃ思い至らんかったか
自動変数かどうかわからんものへのアクセスをSP相対にできるのかって話だよ
重箱の隅ではないごく一般的なケースだぞ
ここC++スレだぜ? this->すげー多用するんだが
UV-EPROMのまま更新が止まった頭じゃ思い至らんかったか
677デフォルトの名無しさん
2020/09/25(金) 17:48:59.95ID:cdg8K9Zm >>676
> 自動変数かどうかわからんものへのアクセスをSP相対にできるのかって話だよ
だから自動変数へのポインタを求めるのは呼び出し側でSP相対で計算してるだろ
呼ばれた側は単なるアドレスになってるから関係ない
C/C++の基礎だぞ、まじでわかってないのか?
EP-ROMとか言う前にちょっとは考えろよw
> 自動変数かどうかわからんものへのアクセスをSP相対にできるのかって話だよ
だから自動変数へのポインタを求めるのは呼び出し側でSP相対で計算してるだろ
呼ばれた側は単なるアドレスになってるから関係ない
C/C++の基礎だぞ、まじでわかってないのか?
EP-ROMとか言う前にちょっとは考えろよw
678デフォルトの名無しさん
2020/09/25(金) 18:47:54.21ID:ZULCp3JG679デフォルトの名無しさん
2020/09/25(金) 18:52:40.54ID:3+LaQyVV680デフォルトの名無しさん
2020/09/25(金) 18:53:47.19ID:cdg8K9Zm681デフォルトの名無しさん
2020/09/25(金) 18:56:12.18ID:3+LaQyVV682デフォルトの名無しさん
2020/09/25(金) 19:13:00.04ID:cdg8K9Zm >>681
> this->がどう翻訳されているのか覗いてみたことがないから
C++はスタティックとかヒープとかにインスタンス置けるから一概には言えんけど自動変数としてインスタンスを生成したらthisポインタはSP相対になるだろ
ならない例があるとでも言うのか?
> おまえマジC++でROM焼きしてねえだろ
まあC++のROM焼は確かにあまりないな
ROM焼きするのは8bitはほぼアセンブラだし、16bitでもC言語だったし
ただC言語でもスタック上に生成した構造体へのポインタはC++のthisポインタと同じだしな
アセンブルリスト見たらすぐわかる話
> this->がどう翻訳されているのか覗いてみたことがないから
C++はスタティックとかヒープとかにインスタンス置けるから一概には言えんけど自動変数としてインスタンスを生成したらthisポインタはSP相対になるだろ
ならない例があるとでも言うのか?
> おまえマジC++でROM焼きしてねえだろ
まあC++のROM焼は確かにあまりないな
ROM焼きするのは8bitはほぼアセンブラだし、16bitでもC言語だったし
ただC言語でもスタック上に生成した構造体へのポインタはC++のthisポインタと同じだしな
アセンブルリスト見たらすぐわかる話
683デフォルトの名無しさん
2020/09/25(金) 19:15:18.02ID:ZULCp3JG684デフォルトの名無しさん
2020/09/25(金) 19:54:32.95ID:xGsH9qpm 俺も含めてオッサンしかいないスレw
オッサン同士仲良くしようぜ。
オッサン同士仲良くしようぜ。
685デフォルトの名無しさん
2020/09/25(金) 20:41:49.58ID:3+LaQyVV686デフォルトの名無しさん
2020/09/25(金) 20:53:09.26ID:uaSa3tOr スタックに必要なサイズを求めるのはとても面倒だった。
だから、予め決まった領域を割り当てるのは不可能に近かったので、
データ領域とは逆さまに、データ領域が最後まで使わない部分をスタック
領域とし、暴走しない限りはスタックが足りていると判断する(笑)と言う
当時としては合理的な方法が採用された。
この方式だと、スタックサイズが見積もれなくても、問題が無い。
本等はスタックが足りているかどうかは、暴走したかどうかではなく、
機械語モニタなどで、スタック付近をダンプしてみて、00h以外の値が
ある部分がスタックが使用されている領域とみなすことが出来た。
だから、予め決まった領域を割り当てるのは不可能に近かったので、
データ領域とは逆さまに、データ領域が最後まで使わない部分をスタック
領域とし、暴走しない限りはスタックが足りていると判断する(笑)と言う
当時としては合理的な方法が採用された。
この方式だと、スタックサイズが見積もれなくても、問題が無い。
本等はスタックが足りているかどうかは、暴走したかどうかではなく、
機械語モニタなどで、スタック付近をダンプしてみて、00h以外の値が
ある部分がスタックが使用されている領域とみなすことが出来た。
687デフォルトの名無しさん
2020/09/25(金) 20:55:19.51ID:mkPsEV2L 体はオッサン、心は子供
688デフォルトの名無しさん
2020/09/25(金) 20:57:43.58ID:uaSa3tOr >>682
もちろん、その関数の中ではsp相対になる。
しかし、C言語では、ローカル変数のアドレスを他の関数に渡す。
一方、グローバル変数のアドレスも同じ方式で他の関数に渡す。
で、どちらからきたアドレス化を区別する方法が基本的には無い。
区別するためには、far pointer といって、普通のアドレス以外にセグメントアドレス
を合わせた長いポインタを渡す必要があった。
しかし、それは何かと効率が悪かった。
そこで、Windowsは32BIT化したときに、far pointerを使わずに済ますため、
(大体で言えば)セグメントを全て共通のベースアドレスとサイズを持つようにし、
「Full Flat」方式を採用した。
これで、ポインタ渡したり記録したりするための領域が短くて済み、
効率が上がった。
もちろん、その関数の中ではsp相対になる。
しかし、C言語では、ローカル変数のアドレスを他の関数に渡す。
一方、グローバル変数のアドレスも同じ方式で他の関数に渡す。
で、どちらからきたアドレス化を区別する方法が基本的には無い。
区別するためには、far pointer といって、普通のアドレス以外にセグメントアドレス
を合わせた長いポインタを渡す必要があった。
しかし、それは何かと効率が悪かった。
そこで、Windowsは32BIT化したときに、far pointerを使わずに済ますため、
(大体で言えば)セグメントを全て共通のベースアドレスとサイズを持つようにし、
「Full Flat」方式を採用した。
これで、ポインタ渡したり記録したりするための領域が短くて済み、
効率が上がった。
689デフォルトの名無しさん
2020/09/25(金) 20:58:24.32ID:cdg8K9Zm690デフォルトの名無しさん
2020/09/25(金) 21:01:47.89ID:3+LaQyVV >>688
sp 相対アドレッシングって 6809 以外にはなにがあるのですか?
sp 相対アドレッシングって 6809 以外にはなにがあるのですか?
692デフォルトの名無しさん
2020/09/25(金) 21:21:28.43ID:uaSa3tOr693デフォルトの名無しさん
2020/09/25(金) 21:43:27.60ID:cdg8K9Zm694デフォルトの名無しさん
2020/09/25(金) 21:49:46.68ID:+l2B7ows けんかをやめて 二人をとめて私のために 争わないで もうこれ以上
695デフォルトの名無しさん
2020/09/25(金) 22:03:03.73ID:5mEzuFCz >>694
お前がスタックポインタか
お前がスタックポインタか
696デフォルトの名無しさん
2020/09/25(金) 22:07:42.71ID:OvccyAEi 排他制御の話じゃないかな
697デフォルトの名無しさん
2020/09/25(金) 22:11:37.83ID:GDRWkdI/ >>695
俺がスタックポインタだ
俺がスタックポインタだ
698デフォルトの名無しさん
2020/09/25(金) 22:17:10.28ID:iQJ3d1Xe thisの話は何をモメてるかよくわからないが、単順にブート時のSP初期化値の変更で
後ろのスタックをアクセスするコードを修正する必要があるかないかという話。
彼はSP相対(←この表現がおかしい?)だから変更する必要がないと言ってる。
まぁ、基本手はにはそうだが、処理系によってはバンク切り替えでスタックエリアが裏に回る可能性も否定できない。
そして今時のカーネル開発のようにコンテキスト保持のために同期てんこ盛りになるわけだ。
後ろのスタックをアクセスするコードを修正する必要があるかないかという話。
彼はSP相対(←この表現がおかしい?)だから変更する必要がないと言ってる。
まぁ、基本手はにはそうだが、処理系によってはバンク切り替えでスタックエリアが裏に回る可能性も否定できない。
そして今時のカーネル開発のようにコンテキスト保持のために同期てんこ盛りになるわけだ。
699デフォルトの名無しさん
2020/09/25(金) 22:22:47.78ID:cdg8K9Zm >>691
6800とかでもTSX命令でSPをインデックスレジスタにコピーして相対アクセスできる
8080ならSPHLでSPをHLレジスタにコピーできる、オフセットの処理は自前でやるしかないけど
まあ6809や8086に比べたらかなり効率悪いコードになるけどね
6800とかでもTSX命令でSPをインデックスレジスタにコピーして相対アクセスできる
8080ならSPHLでSPをHLレジスタにコピーできる、オフセットの処理は自前でやるしかないけど
まあ6809や8086に比べたらかなり効率悪いコードになるけどね
700蟻人間 ◆T6xkBnTXz7B0
2020/09/25(金) 22:23:24.07ID:ogXn8IQh x86のC言語では、スタックに積み込まれた自動変数のデータは、SPが変更されてもスタックフレームを復元すれば、変更前と変わらずアクセスできる。SPの値もプッシュ・ポップできる訳であって。
701デフォルトの名無しさん
2020/09/25(金) 22:25:44.11ID:cdg8K9Zm702デフォルトの名無しさん
2020/09/25(金) 22:33:13.14ID:iQJ3d1Xe 一般的な日本の8bitPCで64KB空間しかないのにROMだけでもあれこれと数百キロバイト積んでるし、
VRAMもでかい。基本、z80も6502もフラットを要求するCとの相性はよくない。
VRAMもでかい。基本、z80も6502もフラットを要求するCとの相性はよくない。
703デフォルトの名無しさん
2020/09/25(金) 22:48:54.96ID:ZULCp3JG 6800てw
ワイが学生時代演習で使ったのが68000だったなぁ
今となっては何一つ覚えてないけど
ワイが学生時代演習で使ったのが68000だったなぁ
今となっては何一つ覚えてないけど
704デフォルトの名無しさん
2020/09/26(土) 01:53:27.55ID:JrFBwqTU もはやC++全く関係ない話だな
705デフォルトの名無しさん
2020/09/26(土) 06:33:34.63ID:JvTrRG8q706デフォルトの名無しさん
2020/09/26(土) 06:40:46.95ID:U+G6yEte >>705
> スタック領域変わったからと言ってSPの初期値以外に一体何を書き換えるんだよw
の答えはまだかな?
> 許して欲しいならちゃんとそう言えよ
> まあ逃げても追わねえでやるけど
そのまま返してやるからさw
> スタック領域変わったからと言ってSPの初期値以外に一体何を書き換えるんだよw
の答えはまだかな?
> 許して欲しいならちゃんとそう言えよ
> まあ逃げても追わねえでやるけど
そのまま返してやるからさw
707デフォルトの名無しさん
2020/09/26(土) 06:47:39.19ID:JvTrRG8q708デフォルトの名無しさん
2020/09/26(土) 06:49:33.64ID:U+G6yEte709デフォルトの名無しさん
2020/09/26(土) 06:51:36.58ID:JvTrRG8q710デフォルトの名無しさん
2020/09/26(土) 06:57:40.31ID:U+G6yEte711デフォルトの名無しさん
2020/09/26(土) 07:13:53.77ID:JvTrRG8q712デフォルトの名無しさん
2020/09/26(土) 07:27:56.00ID:U+G6yEte 何だこいつ?
いきなり絡んできて意味不明なこと言い出すとか通り魔かよw
いきなり絡んできて意味不明なこと言い出すとか通り魔かよw
713デフォルトの名無しさん
2020/09/26(土) 07:37:41.03ID:JvTrRG8q ここはC++スレだ
ゆえにC++でコード書いてないやつは価値ゼロだ
もう一度言う
おまえさんがゴミクズなのはC++でROM焼きしてないからだ
8080であろうが6809であろうが関係ない
C++でコード書いて得た知見を言え
それ以外の戯れ言はいらん
ゆえにC++でコード書いてないやつは価値ゼロだ
もう一度言う
おまえさんがゴミクズなのはC++でROM焼きしてないからだ
8080であろうが6809であろうが関係ない
C++でコード書いて得た知見を言え
それ以外の戯れ言はいらん
714デフォルトの名無しさん
2020/09/26(土) 08:42:15.83ID:U+G6yEte >>713
ROM焼きしてないだけでC++はガンガン使ってるけど?
thisポインタなんてstructへのポインタを自動生成してるだけ
初期のC++処理系でC言語に変換したコードとか見たことないのか?
ROM焼きしてないだけでC++はガンガン使ってるけど?
thisポインタなんてstructへのポインタを自動生成してるだけ
初期のC++処理系でC言語に変換したコードとか見たことないのか?
715デフォルトの名無しさん
2020/09/26(土) 08:47:39.20ID:JvTrRG8q716デフォルトの名無しさん
2020/09/26(土) 09:07:00.22ID:U+G6yEte717デフォルトの名無しさん
2020/09/26(土) 12:45:09.58ID:uIJkShC0 スタック上にある構造体を指すポインタはスタック領域を指すっていう
それだけの話で100レス以上も盛り上がれるなんて楽しそうで羨ましい
それだけの話で100レス以上も盛り上がれるなんて楽しそうで羨ましい
718デフォルトの名無しさん
2020/09/26(土) 12:57:51.80ID:U+G6yEte 上から目線で頓珍漢な結論を開陳してる君の方が幸せそうだがw
719デフォルトの名無しさん
2020/09/26(土) 13:01:37.96ID:JvTrRG8q >>718
エテ公の自己紹介乙
エテ公の自己紹介乙
720デフォルトの名無しさん
2020/09/26(土) 13:10:27.66ID:U+G6yEte 話の流れも読めないバカがなんか言ってるなw
惨めにならないんだろうか?
惨めにならないんだろうか?
721デフォルトの名無しさん
2020/09/26(土) 13:18:24.22ID:JvTrRG8q 上から目線で頓珍漢な結論を開陳
上から目線で頓珍漢な結論を開陳
上から目線で頓珍漢な結論を開陳
上から目線で頓珍漢な結論を開陳
上から目線で頓珍漢な結論を開陳
722デフォルトの名無しさん
2020/09/26(土) 13:25:59.50ID:JvTrRG8q723デフォルトの名無しさん
2020/09/26(土) 15:07:52.90ID:U+G6yEte >>722
ん?
633のどこがおかしいの?
結局、
>> 設定値を変えるだけだろとか簡単に言われても困る。
> スタックへのアクセスってよほどトリッキーなことをしない限りSP相対だぞ
> スタック領域変わったからと言ってSPの初期値以外に一体何を書き換えるんだよw
の回答もないんだけど、君が答えてくれるのかな?w
ん?
633のどこがおかしいの?
結局、
>> 設定値を変えるだけだろとか簡単に言われても困る。
> スタックへのアクセスってよほどトリッキーなことをしない限りSP相対だぞ
> スタック領域変わったからと言ってSPの初期値以外に一体何を書き換えるんだよw
の回答もないんだけど、君が答えてくれるのかな?w
724デフォルトの名無しさん
2020/09/26(土) 15:21:46.24ID:RuVJsWZT 当初は技術論をぶつけあってるようで興味深く読ませてもらってた
難しくて理解できないことも多かったけど
いまはもうただの罵倒合戦になっちゃったね残念です
難しくて理解できないことも多かったけど
いまはもうただの罵倒合戦になっちゃったね残念です
725デフォルトの名無しさん
2020/09/26(土) 15:47:25.99ID:ZTwAa6WW >>723
説明したとおり、昔の処理系は移動した先のスタックエリアがそこに常にあるとは保証されないからその対応は必要。
今はユーザーモードならOSがスレッドコンテキストを保証してるから頭使わないだけ。
説明したとおり、昔の処理系は移動した先のスタックエリアがそこに常にあるとは保証されないからその対応は必要。
今はユーザーモードならOSがスレッドコンテキストを保証してるから頭使わないだけ。
726デフォルトの名無しさん
2020/09/26(土) 15:57:43.88ID:U+G6yEte727デフォルトの名無しさん
2020/09/26(土) 16:18:49.58ID:ZTwAa6WW スレッドセーフだったAPIがスレッドセーフじゃなくなりました!!
って言われて、はぁ?と言いながらソースを修正する、みたいな。こんな具体例でいいですか?
って言われて、はぁ?と言いながらソースを修正する、みたいな。こんな具体例でいいですか?
728はちみつ餃子 ◆8X2XSCHEME
2020/09/26(土) 16:40:11.75ID:d+bfMgei ワイはそこまで昔のことは知らんし、組み込み系の話もわからんけど、
MS-DOS (16bit) 時代のプログラミングの知識だと
データの位置はスタックポインタからの相対というだけではなく
セグメントレジスタの内容も加算される。
スタックセグメントレジスタとデータセグメントレジスタが一致するときは
単純なのだが、そうでないときはセグメントの値とセグメント内のオフセットを組にして
ポインタとして扱わなければならない。
(いわゆる far pointer のこと。
Windows SDK のヘッダファイルの中に near と far がマクロ定義されているのはたぶんそのなごり。)
C のプログラムとして書く分にはメモリモデル (セグメントの扱い) を決め打ちして、
コンパイラはそれに従って整合性を取ってくれるから素直な C プログラムなら問題にならないが、
凝ったメモリ管理をしようとするとそう単純にはいかないことはあったかもしれん。
MS-DOS (16bit) 時代のプログラミングの知識だと
データの位置はスタックポインタからの相対というだけではなく
セグメントレジスタの内容も加算される。
スタックセグメントレジスタとデータセグメントレジスタが一致するときは
単純なのだが、そうでないときはセグメントの値とセグメント内のオフセットを組にして
ポインタとして扱わなければならない。
(いわゆる far pointer のこと。
Windows SDK のヘッダファイルの中に near と far がマクロ定義されているのはたぶんそのなごり。)
C のプログラムとして書く分にはメモリモデル (セグメントの扱い) を決め打ちして、
コンパイラはそれに従って整合性を取ってくれるから素直な C プログラムなら問題にならないが、
凝ったメモリ管理をしようとするとそう単純にはいかないことはあったかもしれん。
729デフォルトの名無しさん
2020/09/26(土) 17:22:32.99ID:U+G6yEte730デフォルトの名無しさん
2020/09/26(土) 17:29:29.79ID:JvTrRG8q こいつメモリコンパクション知らんの?
731デフォルトの名無しさん
2020/09/26(土) 17:35:47.60ID:U+G6yEte732デフォルトの名無しさん
2020/09/26(土) 17:36:30.11ID:JvTrRG8q メモリーコンパクションて昔の処理系でしょ
今の処理系でやるやつあんの?w
今の処理系でやるやつあんの?w
733デフォルトの名無しさん
2020/09/26(土) 17:54:42.30ID:ZTwAa6WW あーコンパックショックね。昔あったあった。
734デフォルトの名無しさん
2020/09/26(土) 17:55:50.69ID:U+G6yEte 昔といえば昔かな、>>725はもっと昔の話かと思ってたけど
で、メモリーコンパクションがどう関係するって?
で、メモリーコンパクションがどう関係するって?
735デフォルトの名無しさん
2020/09/26(土) 18:03:51.62ID:ZTwAa6WW これだけ説明して何も分からないならそれまででしょう。
OSに感謝してC++富豪プログラミングを謳歌してください。
OSに感謝してC++富豪プログラミングを謳歌してください。
736デフォルトの名無しさん
2020/09/26(土) 18:41:14.25ID:U+G6yEte 説明できずに遁走
と言うことでいいかなw
まあそうだろうとは思ってたけど
と言うことでいいかなw
まあそうだろうとは思ってたけど
737デフォルトの名無しさん
2020/09/26(土) 18:44:55.61ID:ZTwAa6WW もちろんだ。それでキミの自尊心が傷つかないで済むならそれでいい。
738デフォルトの名無しさん
2020/09/26(土) 19:34:56.51ID:U+G6yEte 了解
739はちみつ餃子 ◆8X2XSCHEME
2020/09/26(土) 23:28:50.69ID:d+bfMgei >>729
ひとつのプログラムの中では整合性は維持されるけど、
別のタスクとやりとりするときにメモリモデルが違うと
near pointer と far pointer を明示的に使い分けないといけないことがある。
わかってればとりたてて難しいことではないのだけど、
言語仕様に沿ってれば後はコンパイラにお任せというわけにはいかない。
知ってる必要はあった。
話題の発端 (よりは少し後?) でスタックポインタとの相対番地は
呼出し側で計算するんだから……という話が出ていたので、
他の要素 (セグメント) が絡むアーキテクチャのことを思い出したなぁという余談。
ひとつのプログラムの中では整合性は維持されるけど、
別のタスクとやりとりするときにメモリモデルが違うと
near pointer と far pointer を明示的に使い分けないといけないことがある。
わかってればとりたてて難しいことではないのだけど、
言語仕様に沿ってれば後はコンパイラにお任せというわけにはいかない。
知ってる必要はあった。
話題の発端 (よりは少し後?) でスタックポインタとの相対番地は
呼出し側で計算するんだから……という話が出ていたので、
他の要素 (セグメント) が絡むアーキテクチャのことを思い出したなぁという余談。
740デフォルトの名無しさん
2020/09/26(土) 23:47:45.08ID:Hf1Mq2xd741デフォルトの名無しさん
2020/09/27(日) 02:34:34.90ID:S4au1vJD far ポインタ、今ここで見なければたぶん一生わすれたままだったのに
ちなみにMS-DOS時代は全部のセグメントをひとつにまとめた .COM っていう実行形式あったな
いまでも動くのかしらんけど
ちなみにMS-DOS時代は全部のセグメントをひとつにまとめた .COM っていう実行形式あったな
いまでも動くのかしらんけど
742デフォルトの名無しさん
2020/09/27(日) 05:20:36.19ID:PnF6Ozyr
743はちみつ餃子 ◆8X2XSCHEME
2020/09/27(日) 08:55:07.39ID:WOc0AJ0G >>741
Windows では今でも com 形式を実行できるよ。
環境変数 PATHEXT の Windows でのデフォルト設定を見ればわかるが、先頭に com が入ってる。
(同じ名前であれば exe より com が優先されるということ。)
C:\Windows\System32 の下にはいくつか com 形式の実行ファイルはあるし。
ただ (com 形式に限らず) 昔のプログラムは直接にデバイスを叩いていたりして、
さすがにサポートしきれていない場合もあるから、昔のプログラムが何もかもそのまま
動くというほどではない。
Windows では今でも com 形式を実行できるよ。
環境変数 PATHEXT の Windows でのデフォルト設定を見ればわかるが、先頭に com が入ってる。
(同じ名前であれば exe より com が優先されるということ。)
C:\Windows\System32 の下にはいくつか com 形式の実行ファイルはあるし。
ただ (com 形式に限らず) 昔のプログラムは直接にデバイスを叩いていたりして、
さすがにサポートしきれていない場合もあるから、昔のプログラムが何もかもそのまま
動くというほどではない。
744デフォルトの名無しさん
2020/09/27(日) 08:59:30.78ID:p6y4XMAK745デフォルトの名無しさん
2020/09/27(日) 09:33:39.25ID:QntRtEDW >>743
たとえばC:\Windows\System32\format.comなんかあるけど
dumpbin /headers format.comとやると中身はexeだと出てくるぞ
masmに付いてたexe2binで出力した本当のtinyモデルのやつは
x86までで、x64のwindowsでは実行できんぞ
たとえばC:\Windows\System32\format.comなんかあるけど
dumpbin /headers format.comとやると中身はexeだと出てくるぞ
masmに付いてたexe2binで出力した本当のtinyモデルのやつは
x86までで、x64のwindowsでは実行できんぞ
746はちみつ餃子 ◆8X2XSCHEME
2020/09/27(日) 11:05:00.24ID:WOc0AJ0G747デフォルトの名無しさん
2020/09/27(日) 11:34:08.96ID:QntRtEDW format.comはdosの時代からずっと拡張子.comのままだね
int 21h, ah=4bhで指定するファイル名が変わると困るから
int 21h, ah=4bhで指定するファイル名が変わると困るから
748デフォルトの名無しさん
2020/09/27(日) 11:41:49.52ID:QntRtEDW ちなx64で16bitプログラムが実行できないのはm$の恣意的な制限で
ホストx64、ゲストx86のvmアンダーなら.com形式のプログラムも実行できる
ホストx64、ゲストx86のvmアンダーなら.com形式のプログラムも実行できる
749デフォルトの名無しさん
2020/09/27(日) 12:07:35.19ID:s60mNpHS Windows 95 の command.com ですら exe 形式
ライブラリ含むと64KB制限は結構きつい
ライブラリ含むと64KB制限は結構きつい
750デフォルトの名無しさん
2020/09/27(日) 12:21:08.36ID:B8/m6o5T 確か、int 21hのDOS Function Callは、今のWindowsではサポートされなく
なったと聞いた様な。
なったと聞いた様な。
751デフォルトの名無しさん
2020/09/27(日) 12:41:38.04ID:HRFRA9zs kakaku.com
752デフォルトの名無しさん
2020/09/27(日) 15:19:28.84ID:PnF6Ozyr 今に生きろよw
753デフォルトの名無しさん
2020/09/27(日) 15:49:06.00ID:tl/HXTc2 じじいは昔話しだすと止まらなくなる
ボケてないんだったら自覚して自重しろ
ボケてないんだったら自覚して自重しろ
754デフォルトの名無しさん
2020/09/27(日) 16:17:04.29ID:kqCKlQkp .comはCPMの名残だけど
全セグメントを一つにまとめたってのは
ちょっと違くないか?
別に違うセグメントにアクセスしても問題無く動いてたろ?
全セグメントを一つにまとめたってのは
ちょっと違くないか?
別に違うセグメントにアクセスしても問題無く動いてたろ?
755はちみつ餃子 ◆8X2XSCHEME
2020/09/27(日) 16:28:23.36ID:WOc0AJ0G >>754
たぶん *.com と *.exe の違いはMS-DOS のイメージローダの都合、というものじゃないでしょうか?
*.exe はテキストの前に、セグメントアロケーション情報を持っていて、実行ファイルをロードする歳に、関係するセグメントオフセットを実セグメントに変更します
*.com にはそれがなく、生のテキストがメモリ上に配置されるだけ
*.com であってもプログラマが自分でオフセット・セグメントを把握したり、スタックポインタ・スタックセグメントを設定しているのだったら、それはそれで問題なく動くでしょう
たぶん *.com と *.exe の違いはMS-DOS のイメージローダの都合、というものじゃないでしょうか?
*.exe はテキストの前に、セグメントアロケーション情報を持っていて、実行ファイルをロードする歳に、関係するセグメントオフセットを実セグメントに変更します
*.com にはそれがなく、生のテキストがメモリ上に配置されるだけ
*.com であってもプログラマが自分でオフセット・セグメントを把握したり、スタックポインタ・スタックセグメントを設定しているのだったら、それはそれで問題なく動くでしょう
757デフォルトの名無しさん
2020/09/27(日) 17:06:17.30ID:QntRtEDW 簡単な実験
echo テ>test.com
test.com
echo テ>test.com
test.com
758デフォルトの名無しさん
2020/09/27(日) 19:47:03.79ID:SosvOXW5 PC9801の頃に、漢字 2字? のファイルを comで保存して、IPLん走らせるみたいのあったな
たしかその 4バイトは 0番地に分岐する命令だったような
たしかその 4バイトは 0番地に分岐する命令だったような
759デフォルトの名無しさん
2020/09/27(日) 20:35:56.16ID:QntRtEDW ぴぽ
760デフォルトの名無しさん
2020/09/28(月) 11:44:17.88ID:PXJ7xAyj 美乳
761デフォルトの名無しさん
2020/09/30(水) 00:23:01.22ID:Sia2lU3A >>759
いまでも鮮やかに蘇る
いまでも鮮やかに蘇る
762デフォルトの名無しさん
2020/09/30(水) 12:14:30.74ID:k+HGkMpo How many files (0-15) ?
NEC N88-BASIC Version 2.1
Copyright (C) 1981 by Microsoft
56548 bytes free
Ok
NEC N88-BASIC Version 2.1
Copyright (C) 1981 by Microsoft
56548 bytes free
Ok
763デフォルトの名無しさん
2020/09/30(水) 20:39:25.56ID:48ryTnta _DEBUG で区切っているコードがあり、
releaseモードで実行したのに
_DEBUGで切っているコードを実行されてしまいます。
プロジェクトプロパティにて宣言していないのは確認しています。
なにか解決になるヒントだけでもいただけないでしょうか?
releaseモードで実行したのに
_DEBUGで切っているコードを実行されてしまいます。
プロジェクトプロパティにて宣言していないのは確認しています。
なにか解決になるヒントだけでもいただけないでしょうか?
764デフォルトの名無しさん
2020/09/30(水) 20:51:05.98ID:/J4p2JyL765デフォルトの名無しさん
2020/09/30(水) 22:08:07.49ID:48ryTnta >>764
スレチすみませんでした。
スレチすみませんでした。
766デフォルトの名無しさん
2020/10/01(木) 09:15:47.76ID:oZeTafce Releaseモードにしたとき自動で入るのはNDEBUGだろ
その昔、ソースコードの中で#undefしてる大タコなやつがいた
その昔、ソースコードの中で#undefしてる大タコなやつがいた
767デフォルトの名無しさん
2020/10/01(木) 12:08:12.26ID:OaA9a4hN 間接話法による自己紹介とはなんと慎み深いお方なんだ
768デフォルトの名無しさん
2020/10/01(木) 13:35:09.79ID:27/Dd+rP ここ見てるとC++使いは性格悪いのが多いって感じがする
769デフォルトの名無しさん
2020/10/01(木) 14:16:23.58ID:QPXIh54Z 昔はこのスレももっとまともな人が多かったと思うけど、いつの間にか一部のガラの悪い奴らの下らない罵り合いばかり見せられて人が去っていったのかなと思う。
770デフォルトの名無しさん
2020/10/01(木) 14:19:30.67ID:WQPTDVBo ここで聞くより調べたほうが大抵早いし
なんでこんなところに来るのかわかんない
なんでこんなところに来るのかわかんない
771はちみつ餃子 ◆8X2XSCHEME
2020/10/01(木) 14:31:52.80ID:i8Yvf3kp 入り組んだ仕様の組み合わせで起こることならともかく、
簡単に調べられることだと回答も仕様 (またはどっかの解説)
をコピペするか URL を貼るだけになるからつまらんのだよなー。
そのワンステップ必要? という気持ちにはなる。
本物の初心者がそれすらできないことがあるのも知ってるから、
あまり無碍にはしないようにしてるけど、
つまらんなーという気持ちは残る。
簡単に調べられることだと回答も仕様 (またはどっかの解説)
をコピペするか URL を貼るだけになるからつまらんのだよなー。
そのワンステップ必要? という気持ちにはなる。
本物の初心者がそれすらできないことがあるのも知ってるから、
あまり無碍にはしないようにしてるけど、
つまらんなーという気持ちは残る。
772デフォルトの名無しさん
2020/10/01(木) 14:45:07.87ID:27/Dd+rP >>770
見事な自己矛盾
見事な自己矛盾
773デフォルトの名無しさん
2020/10/01(木) 14:58:05.69ID:WQPTDVBo 別に質問しに来てるわけじゃないからな
質問する人がどういう経路で来るのか気になる
質問する人がどういう経路で来るのか気になる
774デフォルトの名無しさん
2020/10/01(木) 15:04:41.08ID:15Icpaxe >>769
2|5ちゃん全体がそれ
2|5ちゃん全体がそれ
775デフォルトの名無しさん
2020/10/01(木) 16:59:28.58ID:ECwAm/rR まじでc++ユーザー煽り合いしか出来ねーな
普通に教えられないのか?
そのくせTwitterでは、新人への対応がーとか云々社内のこと愚痴る癖に人の振り見て我が振り直せって感じ
普通に教えられないのか?
そのくせTwitterでは、新人への対応がーとか云々社内のこと愚痴る癖に人の振り見て我が振り直せって感じ
776デフォルトの名無しさん
2020/10/01(木) 17:01:21.71ID:C7xRzI9k コード書かないC++委員会の言語オタクどもが仕様拡張病を患ってるから
仕様を知ってる知らないレベルでマウンティング合戦になるんだよな。
仕様を知ってる知らないレベルでマウンティング合戦になるんだよな。
777デフォルトの名無しさん
2020/10/01(木) 17:03:19.37ID:15Icpaxe779デフォルトの名無しさん
2020/10/01(木) 17:11:12.79ID:oZeTafce 知らなかった情報が拾えるのはいいことだし
質問する者にとって回答してくれる者がいるのもいいことだ
問題はしょーもないクイズで人を小馬鹿にするやつと
無知を正当化しようとする弁舌だけ達者なボーガスだ
質問する者にとって回答してくれる者がいるのもいいことだ
問題はしょーもないクイズで人を小馬鹿にするやつと
無知を正当化しようとする弁舌だけ達者なボーガスだ
780デフォルトの名無しさん
2020/10/01(木) 17:17:50.23ID:C7xRzI9k 質問して答えられなかったら自分の勝ちというのは昔から馬鹿左翼の論法。
国会でカップラーメンの値段聞いたりほんと馬鹿である。答えを知ってるなら説明するだけでいい。
国会でカップラーメンの値段聞いたりほんと馬鹿である。答えを知ってるなら説明するだけでいい。
781デフォルトの名無しさん
2020/10/01(木) 17:20:08.60ID:Qv735ygl C++書くと短気になるのか?
782デフォルトの名無しさん
2020/10/01(木) 17:25:14.05ID:oZeTafce いや気が短い人には、テンプレート絡みのエラーメッセージなんか読めるはずがない
783デフォルトの名無しさん🐙
2020/10/01(木) 17:27:09.99ID:C7xRzI9k 組織で開発してるのにおれおれテンプレートなんか使われたらもはや他人が読めるものではない。
キレて当然。
キレて当然。
784デフォルトの名無しさん🐙
2020/10/01(木) 17:28:30.32ID:oZeTafce 出たな
無知を正当化しようとする弁舌だけ達者なボーガス
無知を正当化しようとする弁舌だけ達者なボーガス
785デフォルトの名無しさん🐙
2020/10/01(木) 17:28:43.35ID:Njtwj5ZN786デフォルトの名無しさん🐙
2020/10/01(木) 17:29:21.00ID:oZeTafce 問題はしょーもないクイズで人を小馬鹿にするやつと
無知を正当化しようとする弁舌だけ達者なボーガス
↑
ゴミクズ同士、共食いで滅びて欲しい
無知を正当化しようとする弁舌だけ達者なボーガス
↑
ゴミクズ同士、共食いで滅びて欲しい
787蟻人間 ◆T6xkBnTXz7B0 🐙
2020/10/01(木) 17:31:05.75ID:f58nw38n デフォルトの名無しさん🐙←タコがついて内科医?
788デフォルトの名無しさん🐙
2020/10/01(木) 17:31:24.98ID:C7xRzI9k ID:oZeTafce ←こういうのが一人でもいると他人が読めないコードを大量生産してデスマーチになるからちゃんと監視しなきゃならない。みんな無知過ぎ、他人の読めないコード書くおれーすげー、みたいな。
789デフォルトの名無しさん🐙
2020/10/01(木) 17:32:57.38ID:HM8/0niY >>776
最近日本人の有名なC++ライターが
「グラフィクスとかオーディオのライブラリ標準化にはゲーム業界も参加しないとやばいよ、という目的もあった」
とかtwitterで言ってたんだが(なんかの講演に関して)
この上から目線は最近?昔から?
ゲーム業界はC++標準に興味など無いことに、いつになったら気付くのか・・・(特にグラフィックスはC++標準に新機能が採用されるのを、何年も待つはずが無い)
最近日本人の有名なC++ライターが
「グラフィクスとかオーディオのライブラリ標準化にはゲーム業界も参加しないとやばいよ、という目的もあった」
とかtwitterで言ってたんだが(なんかの講演に関して)
この上から目線は最近?昔から?
ゲーム業界はC++標準に興味など無いことに、いつになったら気付くのか・・・(特にグラフィックスはC++標準に新機能が採用されるのを、何年も待つはずが無い)
790デフォルトの名無しさん🐙
2020/10/01(木) 17:39:16.66ID:HM8/0niY ゲーム業界というかプロ全般(標準に興味ない
791蟻人間 ◆T6xkBnTXz7B0 🐙
2020/10/01(木) 17:49:49.29ID:f58nw38n たこ焼き祭りですか?
792蟻人間 ◆T6xkBnTXz7B0 🐙
2020/10/01(木) 17:51:57.40ID:f58nw38n おまいら運営に馬鹿にされてるぞ。
793蟻人間 ◆T6xkBnTXz7B0
2020/10/01(木) 18:03:10.97ID:f58nw38n タコも高級品になったもんだ。
794デフォルトの名無しさん
2020/10/01(木) 19:56:29.24ID:oZeTafce795デフォルトの名無しさん
2020/10/01(木) 23:54:48.33ID:N8frV11f まあ江添みたいな馬鹿はあと数年も持たず路頭に迷うだろ。
796デフォルトの名無しさん
2020/10/02(金) 00:34:33.37ID:Whvs+WDZ 職質拒否して裁判もボロ負けしたC++イキリおじさんだっけ
797デフォルトの名無しさん
2020/10/02(金) 00:41:43.80ID:N9frkbqQ 丸坊主にリュックで安全靴なら職質されても仕方ない
798デフォルトの名無しさん
2020/10/02(金) 01:57:01.58ID:ooD45Zz3 本当に、職務質問を拒否しただけで逮捕されるのか?
日本は民主国家か?
これ、中国と同じだろw
日本は民主国家か?
これ、中国と同じだろw
799デフォルトの名無しさん
2020/10/02(金) 02:05:48.79ID:Zv/IYSQC いかにも怪しいやつを人権・自由を盾に野放しにする社会とどっちがいい?
800デフォルトの名無しさん
2020/10/02(金) 07:09:19.57ID:h/f4PeOt 自分がその「いかにも怪しいやつ」に仕立て上げられてと構えられることの想像力が働かないんですね
801デフォルトの名無しさん
2020/10/02(金) 07:13:45.38ID:Zv/IYSQC 想像力の問題とちゃうやろ
802デフォルトの名無しさん
2020/10/02(金) 07:51:44.17ID:w3pZXp3m 別にIOCCCみたいにわざと意地悪してるんじゃなく
整合性を大事に書くときに有り難い機能が追加されたら使うってだけ
新しい機能を使うなってやつは何を基準に言ってるんだ?
たとえばcfront 1.0が基準ならテンプレートどころかprotectedすらないんだが
整合性を大事に書くときに有り難い機能が追加されたら使うってだけ
新しい機能を使うなってやつは何を基準に言ってるんだ?
たとえばcfront 1.0が基準ならテンプレートどころかprotectedすらないんだが
803デフォルトの名無しさん
2020/10/02(金) 08:20:07.69ID:n3ogA7Ho 堀江貴文と一緒でルールハックドヤかましたかっただけだろうがマジで連行されたっていう頭の悪いオチだろ。
804デフォルトの名無しさん
2020/10/02(金) 08:43:35.55ID:ooD45Zz3 他国の有罪率は、50%。
日本だけが、100%
だから、半分は冤罪。
ほとんど証拠がないけど、有罪になってる
酒酔い運転の検問でも、息を吹きかけて、検査機のランプが点かないと、
警官がちょっと待ってと言って、くるっと後ろを向くと、ランプが点く
何のことはない。
警官が酒を飲んでいて、息を吹きかけているw
警官の犯罪率は、異常に高いと思う
日本だけが、100%
だから、半分は冤罪。
ほとんど証拠がないけど、有罪になってる
酒酔い運転の検問でも、息を吹きかけて、検査機のランプが点かないと、
警官がちょっと待ってと言って、くるっと後ろを向くと、ランプが点く
何のことはない。
警官が酒を飲んでいて、息を吹きかけているw
警官の犯罪率は、異常に高いと思う
805デフォルトの名無しさん
2020/10/02(金) 09:37:02.67ID:JOAyzIPW806デフォルトの名無しさん
2020/10/02(金) 09:45:23.01ID:w3pZXp3m スレ違い出てけ
807デフォルトの名無しさん
2020/10/02(金) 12:16:13.18ID:436BsK54 >>804
こんなところでもルール破りかよ。
こんなところでもルール破りかよ。
808デフォルトの名無しさん
2020/10/02(金) 16:45:37.07ID:R9hS5H3t >>795
本売れてるんじゃないの?
本売れてるんじゃないの?
809はちみつ餃子 ◆8X2XSCHEME
2020/10/02(金) 16:49:57.77ID:0aKkMJ10 技術書なんてなんぼ売れてもカスみたいな収入にしかならんよ。
810デフォルトの名無しさん
2020/10/02(金) 17:35:29.74ID:6j4v4nOg 技術書は高めなので1冊の執筆料1000円入ってきたとして、1000部売れても100万円かぁ。
小遣い稼ぎならともかく、事業として考えたらペイはしないわな。
小遣い稼ぎならともかく、事業として考えたらペイはしないわな。
811デフォルトの名無しさん
2020/10/02(金) 17:50:13.26ID:JOAyzIPW 印税なんて5%〜10%程度よ?
しかも最初の1000部は印税なしとか大学生だったときに教授から聞いた
しかも最初の1000部は印税なしとか大学生だったときに教授から聞いた
812はちみつ餃子 ◆8X2XSCHEME
2020/10/02(金) 17:53:55.34ID:0aKkMJ10 具体的な部分は契約によるらしいが、
表紙デザインを除いては Github に公開してしもうとるし、
それで儲ける気はないんやろ。
でもまあ C++ 界でそこそこ知名度のある本にはなったし、
実績として十分だわな。
表紙デザインを除いては Github に公開してしもうとるし、
それで儲ける気はないんやろ。
でもまあ C++ 界でそこそこ知名度のある本にはなったし、
実績として十分だわな。
813デフォルトの名無しさん
2020/10/02(金) 18:17:03.49ID:+7NoxmQt 表紙がハゲのオッサンだしな
814デフォルトの名無しさん
2020/10/02(金) 18:57:57.01ID:t7YMXpIh 本と言えば思い切ってプログラミング言語C++を買ってしまいました
これで僕もハッカーになれますか?
これで僕もハッカーになれますか?
815デフォルトの名無しさん
2020/10/02(金) 19:00:16.60ID:OFlYu8W1 校正のプロになれます。
816デフォルトの名無しさん
2020/10/02(金) 20:50:56.39ID:StR3k4DL ユーチューバーは、100万視聴で1000万近くになるらしいですよ。
817デフォルトの名無しさん
2020/10/02(金) 22:00:08.88ID:N9frkbqQ 1視聴10円かよ!
818デフォルトの名無しさん
2020/10/02(金) 23:42:12.32ID:w1PiXzOX YouTubeで受けるためには道化師になる必要があると思われる。
芸人と呼ばれる人は、ピエロや道化師のように、下から下から
やっていかなくてはならず、人に馬鹿にされることによって
食っていく立場となる。
それが出川であり、アンガールズ田中だ。
芸人と呼ばれる人は、ピエロや道化師のように、下から下から
やっていかなくてはならず、人に馬鹿にされることによって
食っていく立場となる。
それが出川であり、アンガールズ田中だ。
819デフォルトの名無しさん
2020/10/03(土) 09:25:11.62ID:F7oAx4CC >>815
++
++
820デフォルトの名無しさん
2020/10/03(土) 17:57:57.06ID:zNAYM1qP c++が最強たる理由は如何に?
821デフォルトの名無しさん
2020/10/03(土) 17:58:20.13ID:r4k4fPqO 二重質問だな
822デフォルトの名無しさん
2020/10/03(土) 22:59:48.02ID:S8hWGx6H ランタイム速度最強で、高機能は最新バージョンでなんでも無理やり入れるところかな。
その代わり、一貫性、ビルド速度あたりが犠牲になるが。
その代わり、一貫性、ビルド速度あたりが犠牲になるが。
823はちみつ餃子 ◆8X2XSCHEME
2020/10/03(土) 23:53:24.58ID:6Be2cGN6 汚かろうがなんだろうが問題解決のために使用可能だということが C++ の強さだと思う。
程度はともかくとりあえず C++ を使えるという人材を確保するのはなんら難しいことではないし、
資料もたくさんある。
言語機能がどれだけよくできていたところで使い手がいないだとか
まともな処理系がないとかだったら話にならんわけで。
特に産業的な分野では。
C++ は教育体制や処理系の充実と足並みを揃えてその大前提を満たし続けてきた。
----
ところでどうでもいい話なんだけど「きたなかろうが」を変換したら「北中朗が」と出てきた。
程度はともかくとりあえず C++ を使えるという人材を確保するのはなんら難しいことではないし、
資料もたくさんある。
言語機能がどれだけよくできていたところで使い手がいないだとか
まともな処理系がないとかだったら話にならんわけで。
特に産業的な分野では。
C++ は教育体制や処理系の充実と足並みを揃えてその大前提を満たし続けてきた。
----
ところでどうでもいい話なんだけど「きたなかろうが」を変換したら「北中朗が」と出てきた。
824デフォルトの名無しさん
2020/10/04(日) 01:08:30.77ID:CYbdqi1J > C++ は教育体制や処理系の充実と足並みを揃えてその大前提を満たし続けてきた。
釣り針デカすぎだろw
釣り針デカすぎだろw
825はちみつ餃子 ◆8X2XSCHEME
2020/10/04(日) 01:26:05.38ID:EAA10WtI ウェーイwww
826デフォルトの名無しさん
2020/10/04(日) 06:23:23.02ID:kk4eQgu+ XILINXの石で使えるのが大きいだろな。
827デフォルトの名無しさん
2020/10/04(日) 07:14:17.35ID:sgMvq0EF conceptをC++11では一旦引っ込めたのも
足並みを揃えるってことの1つだな
足並みを揃えるってことの1つだな
828デフォルトの名無しさん
2020/10/04(日) 08:30:42.96ID:BZCvNbQp >>824
教育体制って言うか資料は豊富にあって勉強するには事欠かないし処理系はかなり充実してるとおもうぞ
教育体制って言うか資料は豊富にあって勉強するには事欠かないし処理系はかなり充実してるとおもうぞ
829デフォルトの名無しさん
2020/10/04(日) 09:24:05.67ID:AsTxQvCr c++よりrustのほうが良くなーい?と思っていてrustを本格入門している
さようならc++ perlみたくなるんじゃねーぞ
さようならc++ perlみたくなるんじゃねーぞ
830デフォルトの名無しさん
2020/10/04(日) 10:58:21.76ID:WrglaOe5 python は 10-20年程度で perl を駆逐出来たけど
perl や python は 20年以上経っても C/C++ を駆逐出来ていない
perl や python は 20年以上経っても C/C++ を駆逐出来ていない
831はちみつ餃子 ◆8X2XSCHEME
2020/10/04(日) 11:13:56.41ID:hQVA1bdd 俺も rust はかなり気に入ってるけど、
だからといって C/C++ から全く離れようという気持ちにはならんな。
だからといって C/C++ から全く離れようという気持ちにはならんな。
832デフォルトの名無しさん
2020/10/04(日) 12:08:59.42ID:YIIMLtoX プログラミング言語なんて所詮は道具よ
ノコギリとハサミの間に優劣なんてないから
ノコギリとハサミの間に優劣なんてないから
833デフォルトの名無しさん
2020/10/04(日) 13:32:21.33ID:P8Zgc9xR まあRustがC/C++の代わりになるのは無理だね。
834デフォルトの名無しさん
2020/10/04(日) 13:42:50.50ID:R7l6qcNE へー、なんで?
最近Rust手つけようかなと思ってた
最近Rust手つけようかなと思ってた
835デフォルトの名無しさん
2020/10/04(日) 13:47:42.57ID:jSKQ3Llr やりたければやれば良いだけ
なんで他人に確認求めるんだ?
なんで他人に確認求めるんだ?
836デフォルトの名無しさん
2020/10/04(日) 15:44:23.53ID:P8Zgc9xR >>834
ハード屋からすればアセンブラは基礎だが、その基礎と対応が明確なのはC。
対応関係が明確で闇が少ない。
もともとシステム言語としてはC++よりCが好まれているが、C++はCの延長線上に
あるのでなんとか使える。
しかし、C++もどうコンパイルされるのか分からことがあるという意味で「闇がある」と言われている。
ところが、Rustのsafeモードはアセンブラと対応関係が不明確だし、
仕様も非公開や曖昧なところがあるのでC++以上に「闇がある」ので
アセンブラの代わりに使うのは分かりにくいし危険だし、効率も良く無い可能性
が高い。ベンチマークは、Rustに都合の良いものが選べれていることが多いので
実際とは異なる。
ハード屋からすればアセンブラは基礎だが、その基礎と対応が明確なのはC。
対応関係が明確で闇が少ない。
もともとシステム言語としてはC++よりCが好まれているが、C++はCの延長線上に
あるのでなんとか使える。
しかし、C++もどうコンパイルされるのか分からことがあるという意味で「闇がある」と言われている。
ところが、Rustのsafeモードはアセンブラと対応関係が不明確だし、
仕様も非公開や曖昧なところがあるのでC++以上に「闇がある」ので
アセンブラの代わりに使うのは分かりにくいし危険だし、効率も良く無い可能性
が高い。ベンチマークは、Rustに都合の良いものが選べれていることが多いので
実際とは異なる。
837デフォルトの名無しさん
2020/10/04(日) 16:04:43.05ID:heX2CqX2 linux kernel開発にrustが試験的に導入されつつあるが
c++は依然シカト状態
linusのこの判断が妥当と思うか不当と思うかでエンジニアとしてのタイプが大きく分かれる
c++は依然シカト状態
linusのこの判断が妥当と思うか不当と思うかでエンジニアとしてのタイプが大きく分かれる
838デフォルトの名無しさん
2020/10/04(日) 17:11:41.98ID:MVhzoVv9 カーネルモジュールの話なら、昔からC++で開発できるじゃん。
ところがrustはそうでなかった。APIの一部は直接呼び出せなかったり、呼び出すのが煩雑だったりした。だから対応方法検討してみようかってだけ。
検証結果が取り込まれて初めてc++に追いつくんだよ
ところがrustはそうでなかった。APIの一部は直接呼び出せなかったり、呼び出すのが煩雑だったりした。だから対応方法検討してみようかってだけ。
検証結果が取り込まれて初めてc++に追いつくんだよ
839デフォルトの名無しさん
2020/10/04(日) 17:27:22.30ID:w1YmESSn C++利用者の層がクズだからKernel開発に使わないという理由は割とマジでがちだろうな
840デフォルトの名無しさん
2020/10/04(日) 17:31:15.34ID:heX2CqX2841デフォルトの名無しさん
2020/10/04(日) 17:35:37.57ID:BZCvNbQp842デフォルトの名無しさん
2020/10/04(日) 17:35:53.89ID:rzaWC8eE 江添の俺の本スゲーアピール
843デフォルトの名無しさん
2020/10/04(日) 17:45:02.87ID:heX2CqX2844デフォルトの名無しさん
2020/10/04(日) 18:21:33.06ID:BZCvNbQp845デフォルトの名無しさん
2020/10/04(日) 18:40:15.53ID:heX2CqX2846デフォルトの名無しさん
2020/10/04(日) 18:48:13.93ID:XEwerBlV どこがハックなんだろう…
まあ具体的に何がまずいのかも書けない時点で顔真っ赤なんだろうなw
まあ具体的に何がまずいのかも書けない時点で顔真っ赤なんだろうなw
847デフォルトの名無しさん
2020/10/04(日) 18:58:16.40ID:heX2CqX2 そのブログにすんなりc++で作れましたよ〜って書いてあるようには全く読めないな
まぁそこを争うつもりはないので以後スルーで
まぁそこを争うつもりはないので以後スルーで
848デフォルトの名無しさん
2020/10/04(日) 19:15:32.16ID:P8Zgc9xR STLのvectorのソース見てみたけど、解読がとても難しい。
listも難しかった。
listも難しかった。
849デフォルトの名無しさん
2020/10/04(日) 19:55:46.37ID:27qZxY76 一部のc++機能をcで無理やり実装しましたよ〜っていう馬鹿がよくやる種類の話だね。
850デフォルトの名無しさん
2020/10/04(日) 21:39:53.26ID:w1YmESSn 生産的な話し合いができない種類の馬鹿ばかりだ
851デフォルトの名無しさん
2020/10/04(日) 21:55:21.35ID:BZCvNbQp852デフォルトの名無しさん
2020/10/04(日) 22:02:04.98ID:2+QqJimn 怒らせてしまった。やっぱ本当のこと言うのは良くないね。
853デフォルトの名無しさん
2020/10/04(日) 22:06:44.32ID:oRUS9BLt RustはOSも書ける!
らしい!!
らしい!!
854デフォルトの名無しさん
2020/10/04(日) 22:09:13.89ID:oRUS9BLt C++でカーネルを書くとして
レイヤー的にSTLとか一切禁止になるんじゃ…
するともはやCに対するアドバンテージはクラスや仮想関数が使えることぐらい
だがそれあってもカーネル書くのに言うほどうれしいかどうか、、、
レイヤー的にSTLとか一切禁止になるんじゃ…
するともはやCに対するアドバンテージはクラスや仮想関数が使えることぐらい
だがそれあってもカーネル書くのに言うほどうれしいかどうか、、、
855デフォルトの名無しさん
2020/10/04(日) 22:18:38.61ID:oRUS9BLt アプリケーション開発なら問題領域と解決領域をスムーズにつなぐのにクラスや多態性が役に立つが
OSのカーネルとなると信頼性と効率性が追求目標なのでアプリの設計とは様相がだいぶ異なるヨカン
アルゴリズムとデータ構造の世界で今日日のアーキテクチャーの複雑なメモリモデルの
要請を満たしつつメチャ枯れた書き方を要求されるしそれ以外の書き方をしたらリーナスに頃される
ハズ
OSのカーネルとなると信頼性と効率性が追求目標なのでアプリの設計とは様相がだいぶ異なるヨカン
アルゴリズムとデータ構造の世界で今日日のアーキテクチャーの複雑なメモリモデルの
要請を満たしつつメチャ枯れた書き方を要求されるしそれ以外の書き方をしたらリーナスに頃される
ハズ
856デフォルトの名無しさん
2020/10/04(日) 22:23:23.86ID:BZCvNbQp857デフォルトの名無しさん
2020/10/04(日) 22:45:18.08ID:CYbdqi1J >>854
カーネルで糞重い仮想関数使うな、馬鹿。
カーネルで糞重い仮想関数使うな、馬鹿。
858デフォルトの名無しさん
2020/10/04(日) 22:50:31.84ID:heX2CqX2 おいおい
linux kernelの中はいたるところ仮想関数だらけですがな実質的には
vptrは使わないけど
linux kernelの中はいたるところ仮想関数だらけですがな実質的には
vptrは使わないけど
859蟻人間 ◆T6xkBnTXz7B0
2020/10/04(日) 22:52:32.94ID:idByu9RA ちゃんちゃかちゃんの
くるりんぽん♪
くるりんぽん♪
860デフォルトの名無しさん
2020/10/04(日) 22:58:43.88ID:oRUS9BLt そうだっけvptrって構造体に書かれているvptrでvtblを参照してさらにそのvtblに収容されているポインタを参照するわけだが
そんなことをするぐらいなら構造体メンバとしてポインタを持ったほうがなんぼかマシ
※ 個人の感想です
そんなことをするぐらいなら構造体メンバとしてポインタを持ったほうがなんぼかマシ
※ 個人の感想です
861デフォルトの名無しさん
2020/10/04(日) 22:58:58.08ID:w1YmESSn うんこみたいな井戸端会議してないで社会貢献しろ
862デフォルトの名無しさん
2020/10/05(月) 00:59:40.74ID:5Dit9vq+ なんでこんなC++を目の仇にしてるようなオッサンがわざわざスレみにきてるのかが謎だ
その精力を別のことに割り振ればもっと生産的なのに・・
その精力を別のことに割り振ればもっと生産的なのに・・
863デフォルトの名無しさん
2020/10/05(月) 08:15:51.56ID:FaJmikLJ >>858
Cに仮想関数ってあったっけ?
Cに仮想関数ってあったっけ?
864デフォルトの名無しさん
2020/10/05(月) 08:19:43.37ID:FaJmikLJ >>860
virtualキーワード導入にあたってvtable方式に対する反対意見としてそういうのがあったらしいね
多態はクラスの特性かオブジェクトの特性かという分かれ道で
Smalltalkerあたりが言い出しそうなことだ
virtualキーワード導入にあたってvtable方式に対する反対意見としてそういうのがあったらしいね
多態はクラスの特性かオブジェクトの特性かという分かれ道で
Smalltalkerあたりが言い出しそうなことだ
865デフォルトの名無しさん
2020/10/05(月) 08:29:01.18ID:hKB8OZrM Smalltalker
昔あった東京や大阪の街情報誌みたいだなw
昔あった東京や大阪の街情報誌みたいだなw
866デフォルトの名無しさん
2020/10/05(月) 15:49:19.03ID:b8gYZTQ3 >>839
++
++
867デフォルトの名無しさん
2020/10/06(火) 00:17:27.92ID:c3+O5H5/ >>862
ちゅうか、お湯に入れたカエルは飛び出るので死なないが、
水から茹でたカエルはそのまま死んでしまうのと同じで、
昔のC++が好きで使っていたらいつのまにか全然違う言語になってしまって
嫌いになっているから。
ちゅうか、お湯に入れたカエルは飛び出るので死なないが、
水から茹でたカエルはそのまま死んでしまうのと同じで、
昔のC++が好きで使っていたらいつのまにか全然違う言語になってしまって
嫌いになっているから。
868はちみつ餃子 ◆8X2XSCHEME
2020/10/06(火) 00:52:29.20ID:cMEvggOJ 私は C++ が ISO で標準化される前から使っているが今の方がずっと良くなってると思うんだがなぁ……。
まあ私はアマチュアだから業務での事情とかも知らんし、何か思うところがある人もいるのかもしれん。
まあ私はアマチュアだから業務での事情とかも知らんし、何か思うところがある人もいるのかもしれん。
869デフォルトの名無しさん
2020/10/06(火) 01:07:59.33ID:IqXUZgwy 保守性無視のアホ拡張ばかりでもはや業務では使えん。
多くのOSSのC++プロジェクトが担当してたPGがいなくなれば保守されず放置されるのは至極当然。
昔のObjective-C、C++、Java、Javascript、C#がそうであったように、オナニー拡張するなら改名して別言語にすべし。
多くのOSSのC++プロジェクトが担当してたPGがいなくなれば保守されず放置されるのは至極当然。
昔のObjective-C、C++、Java、Javascript、C#がそうであったように、オナニー拡張するなら改名して別言語にすべし。
870はちみつ餃子 ◆8X2XSCHEME
2020/10/06(火) 01:14:44.33ID:cMEvggOJ 具体的にどこが問題点?
871デフォルトの名無しさん
2020/10/06(火) 01:21:56.51ID:CFpJLx94 テンプレートメタプログラミングのトンチ臭さがなんとも
ライブラリを使うだけの立場なら使いやすくなったと思うけど
テンプレート絡んだライブラリ作る側はしんどすぎる
デバッグつらい
ライブラリを使うだけの立場なら使いやすくなったと思うけど
テンプレート絡んだライブラリ作る側はしんどすぎる
デバッグつらい
872はちみつ餃子 ◆8X2XSCHEME
2020/10/06(火) 01:33:21.32ID:cMEvggOJ 確かに色々としんどい機能は多いのかもしれんけど、
それらの機能が必要なときに使わずに書くともっとしんどいでしょ。
全面的にメリットがないときなら使わないという選択もできるわけだし。
それらの機能が必要なときに使わずに書くともっとしんどいでしょ。
全面的にメリットがないときなら使わないという選択もできるわけだし。
873デフォルトの名無しさん
2020/10/06(火) 02:15:21.24ID:IqXUZgwy 頓珍漢甚だしい。その拡張された機能が必要だったのは標準化される10年も20年も前だろう。
必要なときに用意しないで今更使ってくれと迷惑極まりない。C++標準化委員会のやってることは時代錯誤甚だしい。
過去のコード資産を全否定するような拡張するなら別言語にしろと言ってんだ。
必要なときに用意しないで今更使ってくれと迷惑極まりない。C++標準化委員会のやってることは時代錯誤甚だしい。
過去のコード資産を全否定するような拡張するなら別言語にしろと言ってんだ。
874デフォルトの名無しさん
2020/10/06(火) 03:33:59.61ID:CFpJLx94 キレ老人
875デフォルトの名無しさん
2020/10/06(火) 04:32:17.12ID:V/Ik48ec てか、はちみつはマジで煽り抜きで
数万行以上のソフトをモダン(と、C++オタが信じてる)な書き方で作ってみたらいいよ
当然メタプログラミングにも挑戦して、だ
業務どうこうじゃなくて、ソフトを作る道具としての今のC++がどうなのかわかるから
数万行以上のソフトをモダン(と、C++オタが信じてる)な書き方で作ってみたらいいよ
当然メタプログラミングにも挑戦して、だ
業務どうこうじゃなくて、ソフトを作る道具としての今のC++がどうなのかわかるから
876デフォルトの名無しさん
2020/10/06(火) 05:41:08.44ID:bkxQK63r c++界隈ってガイジしかいねーのかね…
877デフォルトの名無しさん
2020/10/06(火) 06:34:58.64ID:Q2zsUWrb こんなスレ見て界隈を語るとかw
878デフォルトの名無しさん
2020/10/06(火) 06:49:52.98ID:2iI+f89O 付いていけない不適任者の恨み節うるせー
879デフォルトの名無しさん
2020/10/06(火) 08:02:53.12ID:/wGSs2GX >>867
それ、デマらしいぞ。
それ、デマらしいぞ。
880はちみつ餃子 ◆8X2XSCHEME
2020/10/06(火) 08:42:39.29ID:zdPPSeez881デフォルトの名無しさん
2020/10/06(火) 09:36:25.29ID:aU8CxIwJ882デフォルトの名無しさん
2020/10/06(火) 10:08:20.97ID:aU8CxIwJ んまー低水準開発だと見えてほしくないものが見えてしまっている
レイヤーAとBの初期化が終わらなければレイヤーCの機能を呼んではいけないのに、
という状況は言語によらず普通に発生するから程度なのかもしれんが
C++はその手の罠が大杉問題、
レイヤーAとBの初期化が終わらなければレイヤーCの機能を呼んではいけないのに、
という状況は言語によらず普通に発生するから程度なのかもしれんが
C++はその手の罠が大杉問題、
883デフォルトの名無しさん
2020/10/06(火) 10:09:47.48ID:aU8CxIwJ 最新のC++規格について行けている(キリ
と自称されている方々は、
単にOSが起動完了した状態での使い方に習熟しているだけではないのかどうなのか、
と自称されている方々は、
単にOSが起動完了した状態での使い方に習熟しているだけではないのかどうなのか、
884デフォルトの名無しさん
2020/10/06(火) 10:24:36.80ID:2iI+f89O くだらねえ言いがかりだな
まあそんなことしか言うことねえのはわかるぜ
最大級に軽蔑する
まあそんなことしか言うことねえのはわかるぜ
最大級に軽蔑する
885デフォルトの名無しさん
2020/10/06(火) 10:52:17.76ID:WjG83btQ このスレ観てたら C#++ とか産まれそう
と思った
と思った
886デフォルトの名無しさん
2020/10/06(火) 11:25:21.40ID:/wGSs2GX >>881
プロジェクトのコーティング規約に従えよ。
プロジェクトのコーティング規約に従えよ。
887デフォルトの名無しさん
2020/10/06(火) 11:53:18.32ID:aU8CxIwJ プロジェクトのコーティング規約をしっかり定めさえすれば
空も飛べるはず、
空も飛べるはず、
888デフォルトの名無しさん
2020/10/06(火) 11:55:12.28ID:c3+O5H5/ >>870
まあ、配列が TYPE a[N][M]; ではなく、
vector<vector<TYPE>> a; // ???
が推奨された時点でもう、おかしいから。
しかも、このスレにはvectorと略さずに必ずstd::vectorと書け、とまで言う人までいる。
まあ、配列が TYPE a[N][M]; ではなく、
vector<vector<TYPE>> a; // ???
が推奨された時点でもう、おかしいから。
しかも、このスレにはvectorと略さずに必ずstd::vectorと書け、とまで言う人までいる。
889デフォルトの名無しさん
2020/10/06(火) 11:58:38.89ID:E8GhSeFr vector< vector <TYPE> > a;
はそもそも
TYPE a[N][M];
じゃなくて
TYPE *a[N];
だからなー
はそもそも
TYPE a[N][M];
じゃなくて
TYPE *a[N];
だからなー
890デフォルトの名無しさん
2020/10/06(火) 11:59:48.46ID:aU8CxIwJ >>888
プロジェクトのコーディング規約に従えよ;;
プロジェクトのコーディング規約に従えよ;;
891デフォルトの名無しさん
2020/10/06(火) 12:01:19.58ID:c3+O5H5/ iteratorの書き方も煩雑すぎ、長すぎ。
linked listの場合に効率悪すぎ。
ポインタも生ポインタ費推奨で uniqure_ptr, shared_ptrなどが推奨されているのも
既に言語として破綻してる。
ポインタはCの「命」なのに、unique_ptrなどと書くのは長すぎるので。
アメリカの学生は9割がポインタが理解できないので、
多数決で言語仕様を決定していくと、ポインタを徹底的に排除してしまう。
角度の Radian 法が理解できない人が、Degreeを推奨し続けたりしているようなもの。
AndroidのSDKは、それになっている。
馬鹿じゃないかと思う。
linked listの場合に効率悪すぎ。
ポインタも生ポインタ費推奨で uniqure_ptr, shared_ptrなどが推奨されているのも
既に言語として破綻してる。
ポインタはCの「命」なのに、unique_ptrなどと書くのは長すぎるので。
アメリカの学生は9割がポインタが理解できないので、
多数決で言語仕様を決定していくと、ポインタを徹底的に排除してしまう。
角度の Radian 法が理解できない人が、Degreeを推奨し続けたりしているようなもの。
AndroidのSDKは、それになっている。
馬鹿じゃないかと思う。
892デフォルトの名無しさん
2020/10/06(火) 12:03:14.67ID:aU8CxIwJ893デフォルトの名無しさん
2020/10/06(火) 12:06:36.75ID:c3+O5H5/ 頭が悪い人は、ポインタの表記の優先順位を頭の中で「ほどけない」ので、
優先順位が馬鹿でも分かる
unique_ptr<unique_ptr<T>> p;
という書き方の方が分かり易く感じるのだと思う。
頭の良い人にとっては、ただ書くのが長くなっただけに過ぎないのに。
優先順位が馬鹿でも分かる
unique_ptr<unique_ptr<T>> p;
という書き方の方が分かり易く感じるのだと思う。
頭の良い人にとっては、ただ書くのが長くなっただけに過ぎないのに。
894デフォルトの名無しさん
2020/10/06(火) 12:08:43.10ID:n1AkD2sr >>893
あんたの頭が悪いのは良くわかった
あんたの頭が悪いのは良くわかった
895デフォルトの名無しさん
2020/10/06(火) 12:09:23.24ID:c3+O5H5/ >>892
便利でも書くのが長くなった時点で駄目。
頭の悪い人は、長くても考える量が少なくなる方を好むから、
9割がベギナー止まりであるところのプログラミングの世界で多数決で
良し悪しを決めると長くても考える量が少なくなる方が人気を呼ぶことになる。
しかし、頭の良い人は頭のAIがすぐれているので、考えなくても瞬時に分かって
しまうので、読み解いたり自分で書くときに全く時間が掛からないので、
短くかけるほうが好まれる。
便利でも書くのが長くなった時点で駄目。
頭の悪い人は、長くても考える量が少なくなる方を好むから、
9割がベギナー止まりであるところのプログラミングの世界で多数決で
良し悪しを決めると長くても考える量が少なくなる方が人気を呼ぶことになる。
しかし、頭の良い人は頭のAIがすぐれているので、考えなくても瞬時に分かって
しまうので、読み解いたり自分で書くときに全く時間が掛からないので、
短くかけるほうが好まれる。
896デフォルトの名無しさん
2020/10/06(火) 12:09:50.61ID:c3+O5H5/897デフォルトの名無しさん
2020/10/06(火) 12:12:26.93ID:CFpJLx94898デフォルトの名無しさん
2020/10/06(火) 12:15:41.91ID:c3+O5H5/ >>897
出せるが、スマンがここには書かない。
出せるが、スマンがここには書かない。
899デフォルトの名無しさん
2020/10/06(火) 12:17:57.70ID:CFpJLx94 はい雑魚
900デフォルトの名無しさん
2020/10/06(火) 12:18:47.45ID:aU8CxIwJ 余は真に驚くべき代案を思いついたが
匿名掲示板に書くには余白が狭すぎる、
匿名掲示板に書くには余白が狭すぎる、
901デフォルトの名無しさん
2020/10/06(火) 12:35:34.59ID:6yK3bagl >>896
ネットを除いたお前さんの実世界って、話す相手が自分自身かお母さんくらいしかいないんじゃないの?
ネットを除いたお前さんの実世界って、話す相手が自分自身かお母さんくらいしかいないんじゃないの?
902デフォルトの名無しさん
2020/10/06(火) 12:38:51.95ID:6yK3bagl >>891
生ポインタは言語仕様上、現在でも有効だし、合理的理由があればナマポを使うことを否定されるわけでもないのに、何が不満なのか分からんな。
生ポインタは言語仕様上、現在でも有効だし、合理的理由があればナマポを使うことを否定されるわけでもないのに、何が不満なのか分からんな。
903デフォルトの名無しさん
2020/10/06(火) 12:44:06.33ID:CI7Aw4lV >>882
グローバル変数やスタティック変数のコンストラクタに依存姓のある処理を記述して失敗しているのを目撃することはよくある。
でもそれはロード時に自動実行する機能のある言語では同様に起こりうることだと思うよ。
だいたいシングルトン多用するやつの仕業。
使うと恥ずかしくて死んでしまうようなパターン名ならよかったのに
グローバル変数やスタティック変数のコンストラクタに依存姓のある処理を記述して失敗しているのを目撃することはよくある。
でもそれはロード時に自動実行する機能のある言語では同様に起こりうることだと思うよ。
だいたいシングルトン多用するやつの仕業。
使うと恥ずかしくて死んでしまうようなパターン名ならよかったのに
904デフォルトの名無しさん
2020/10/06(火) 12:56:09.29ID:2iI+f89O std::vector ←イキってるだけのアホ
::std::vector ←こう書かなきゃ意味ねえだろ
::std::vector ←こう書かなきゃ意味ねえだろ
905デフォルトの名無しさん
2020/10/06(火) 13:04:06.67ID:c3+O5H5/ >>901
なんという貧弱なイマジネーション。
なんという貧弱なイマジネーション。
906デフォルトの名無しさん
2020/10/06(火) 14:46:47.18ID:QUhM0XrN 無益な話題ほど盛り上がるな
907デフォルトの名無しさん
2020/10/06(火) 18:37:05.86ID:Yd4gYmDo メモ帳でコード書いてんの?
普通のエディタは補完が効くよ
普通のエディタは補完が効くよ
909デフォルトの名無しさん
2020/10/06(火) 19:20:46.29ID:c3+O5H5/ この板で一番馬鹿っぽいのに自分は賢いと思っているのが QZだ。
恐らく女。
女の中では賢いのかもしれないが、男の中では普通。
恐らく女。
女の中では賢いのかもしれないが、男の中では普通。
910デフォルトの名無しさん
2020/10/06(火) 20:13:08.46ID:k5Zg1BNu912デフォルトの名無しさん
2020/10/07(水) 01:57:07.30ID:OVJx2Nts 全くオブジェクト思考できない言語w
913デフォルトの名無しさん
2020/10/07(水) 03:07:05.72ID:Bq/qs/XJ C++で食ってるフリーランスいる?
いくつでどういう技能を持ってていくら貰ってるか教えてくれよ
いくつでどういう技能を持ってていくら貰ってるか教えてくれよ
914デフォルトの名無しさん
2020/10/07(水) 03:10:26.00ID:5YLES8U8 >>911
>>恐らく女。
>面白い意見ですね、どのような推論からこの結論が導き出されたのか興味があります
普段から、馬鹿な応答が多かったし、
「自分でコンテナクラス(リストなど)を作れるから天才」
だとか、男だったら基本中の基本の出来て当たり前の事が出来るだけで天才と言っている
辺り、如何に周りのレベルが低いかが分かったから。
>>恐らく女。
>面白い意見ですね、どのような推論からこの結論が導き出されたのか興味があります
普段から、馬鹿な応答が多かったし、
「自分でコンテナクラス(リストなど)を作れるから天才」
だとか、男だったら基本中の基本の出来て当たり前の事が出来るだけで天才と言っている
辺り、如何に周りのレベルが低いかが分かったから。
915デフォルトの名無しさん
2020/10/07(水) 09:58:24.09ID:Ht8WKaAR >>913
教師なら有り得るなω
教師なら有り得るなω
916デフォルトの名無しさん
2020/10/08(木) 11:06:31.29ID:2a0CIcHX917はちみつ餃子 ◆8X2XSCHEME
2020/10/08(木) 11:23:23.22ID:xCgN3gCo :: が増えると tanasinn な感じになるな。
918デフォルトの名無しさん
2020/10/08(木) 14:32:44.44ID:FCbCRYtX919デフォルトの名無しさん
2020/10/08(木) 14:53:12.38ID:k2d5Ic0g stdが被る可能性はないに等しいのでセーフという合理性
920デフォルトの名無しさん
2020/10/08(木) 15:16:36.24ID:FCbCRYtX あのなあ、ここ技術板だぜ?
合理性っておかしいだろ
合理性っておかしいだろ
921デフォルトの名無しさん
2020/10/08(木) 15:23:06.13ID:3RUxQQIS >>920
技術板だからこそ、教条主義的な完全性より現実的な条件での合理的な判断があってしかるべきだと思うぞ。
技術板だからこそ、教条主義的な完全性より現実的な条件での合理的な判断があってしかるべきだと思うぞ。
922はちみつ餃子 ◆8X2XSCHEME
2020/10/08(木) 15:43:13.43ID:xCgN3gCo プログラミングはサイエンスの部分もなくはないがエンジニアリング (またはテクノロジ) 寄りの話だろ。
一部の隙もない論理を構築したいわけじゃなくて問題を解決したいんだ。
で、 std のかわりに ::std と書くことで解決される問題が
このスレの誰かの前に出現したことがただの一度でもあると思うのかね?
トップレベル以外の名前空間に std が現れるのは仕様で禁止されていないっぽいから、
そりゃあ可能性だけで言えば絶対にないとは言えんだろうが、
現実にはこの二者がいたらどちらがよりクソだと思う?
・ 変なところに std という名前空間を作るやつ
・ ::std と書かずに std と書くやつ
前者があまりにもクソすぎるのでそういうやつはおらんだろということで
だいたい上手く運用できておるのや。
一部の隙もない論理を構築したいわけじゃなくて問題を解決したいんだ。
で、 std のかわりに ::std と書くことで解決される問題が
このスレの誰かの前に出現したことがただの一度でもあると思うのかね?
トップレベル以外の名前空間に std が現れるのは仕様で禁止されていないっぽいから、
そりゃあ可能性だけで言えば絶対にないとは言えんだろうが、
現実にはこの二者がいたらどちらがよりクソだと思う?
・ 変なところに std という名前空間を作るやつ
・ ::std と書かずに std と書くやつ
前者があまりにもクソすぎるのでそういうやつはおらんだろということで
だいたい上手く運用できておるのや。
923デフォルトの名無しさん
2020/10/08(木) 15:45:51.60ID:FCbCRYtX 自己弁護にしか聞こえねえな
"今までそうやってきたから正しいことにしたい"
批判的な相手がそれで納得するとでも思っているのか
"今までそうやってきたから正しいことにしたい"
批判的な相手がそれで納得するとでも思っているのか
924デフォルトの名無しさん
2020/10/08(木) 15:48:46.09ID:bMUfOck+ #define std ::std
925デフォルトの名無しさん
2020/10/08(木) 15:51:15.44ID:FCbCRYtX いっそstdをキーワードにすればって話ならまだわかるぜ
おまえらの論法で言うところの関数名やオブジェクト名をstdにはしねえんだから
下線で始まらないoperator""をstd以外には作らせないこともできるね
おまえらの論法で言うところの関数名やオブジェクト名をstdにはしねえんだから
下線で始まらないoperator""をstd以外には作らせないこともできるね
926はちみつ餃子 ◆8X2XSCHEME
2020/10/08(木) 16:12:32.18ID:xCgN3gCo >>923
そうだよ。
std という名前を作らないか ::std を使うかのどちらかが達成されていればよく、
std という名前を作らないという習慣で今までやってきるのをあえて乱したいのはなんで?
っていう話だよ。
そうだよ。
std という名前を作らないか ::std を使うかのどちらかが達成されていればよく、
std という名前を作らないという習慣で今までやってきるのをあえて乱したいのはなんで?
っていう話だよ。
927デフォルトの名無しさん
2020/10/08(木) 16:16:24.11ID:2a0CIcHX ::stdってしてたら逆に何こいつイキってんの?って思うけどなw
928はちみつ餃子 ◆8X2XSCHEME
2020/10/08(木) 16:18:31.50ID:xCgN3gCo929デフォルトの名無しさん
2020/10/08(木) 16:25:12.01ID:OzyhYKZT >>923
世の中には話の通じない相手がいるのは分かってるし、そんな相手を納得させることに無駄なエネルギーを費やす価値はない。お前さんが納得しなくも他の誰も困らないからどうでもいい。
というのも合理性だなw
世の中には話の通じない相手がいるのは分かってるし、そんな相手を納得させることに無駄なエネルギーを費やす価値はない。お前さんが納得しなくも他の誰も困らないからどうでもいい。
というのも合理性だなw
930デフォルトの名無しさん
2020/10/08(木) 16:30:41.96ID:FCbCRYtX 「合理性」を咎められたのが余程効いたようだな
意味をここでだけ変更したくてそんなに必死になるのは
そういう手合いはstdの意味をここだけ変更もしかねねえな
意味をここでだけ変更したくてそんなに必死になるのは
そういう手合いはstdの意味をここだけ変更もしかねねえな
931デフォルトの名無しさん
2020/10/08(木) 16:32:53.69ID:FCbCRYtX >>928
どちらが正しいかって論点では分が悪いもんなw
どちらが正しいかって論点では分が悪いもんなw
932デフォルトの名無しさん
2020/10/08(木) 16:36:13.85ID:FCbCRYtX > ID:2a0CIcHX
感情論ばっかりだな
感情論ばっかりだな
933デフォルトの名無しさん
2020/10/08(木) 16:41:10.44ID:kXp3o/p+ コードヘタクソなヤツは変なところ拘る
934デフォルトの名無しさん
2020/10/08(木) 16:41:16.92ID:k2d5Ic0g ::stdって自己満でしかない
リターンがない
特に困ってない問題を解決したところで人生の無駄遣い
そこがんばったところでアホなマクロがひとつ混ざれば破綻する可能性はあるわけで
ある程度の良識や常識に依存するのは仕方ない
可能性のスケール感を考えられるかどうかとも言える
まぁやめろとは言ってないんだから好きにすればいいじゃん、ひとりで書いてる限りは
リターンがない
特に困ってない問題を解決したところで人生の無駄遣い
そこがんばったところでアホなマクロがひとつ混ざれば破綻する可能性はあるわけで
ある程度の良識や常識に依存するのは仕方ない
可能性のスケール感を考えられるかどうかとも言える
まぁやめろとは言ってないんだから好きにすればいいじゃん、ひとりで書いてる限りは
935デフォルトの名無しさん
2020/10/08(木) 16:59:59.98ID:FCbCRYtX 実害が出る前に予防的措置ということはあるぞ
それから俺は既存のコードを書き直せなんて言ってない
そんなのはてめーらの勝手だ
アカデミックな目線でおかしいと思うところを批判しているだけだ
代替案も出してる(採用されるか否かはともかく)
それから俺は既存のコードを書き直せなんて言ってない
そんなのはてめーらの勝手だ
アカデミックな目線でおかしいと思うところを批判しているだけだ
代替案も出してる(採用されるか否かはともかく)
936デフォルトの名無しさん
2020/10/08(木) 17:01:17.10ID:FCbCRYtX 批判と非難を一緒にしないでくれな
937デフォルトの名無しさん
2020/10/08(木) 17:10:34.05ID:bhEfUzRp 初心者から抜けられない・・・
938はちみつ餃子 ◆8X2XSCHEME
2020/10/08(木) 18:12:40.88ID:xCgN3gCo >>935
もっと広範囲に std という名前を禁止する提案はもう出てるよ。
言語仕様として良くなかったというのは言わなくても皆がわかってるので、
そんなに強くいわなくてもいいよ。
C++ の仕様がグダグダなんていうのは今更のことじゃん。
その上で、 std という名前を定義しないという運用上の習慣は確立してるって話。
もっと広範囲に std という名前を禁止する提案はもう出てるよ。
言語仕様として良くなかったというのは言わなくても皆がわかってるので、
そんなに強くいわなくてもいいよ。
C++ の仕様がグダグダなんていうのは今更のことじゃん。
その上で、 std という名前を定義しないという運用上の習慣は確立してるって話。
939デフォルトの名無しさん
2020/10/08(木) 19:16:21.52ID:Bj+fAE8H そもそもstd名前空間(::stdじゃなくて)の拡張は未定義じゃね?
(17.6.4.2.1 Namespace std)
何のためにstd名前空間を定義するの?
(17.6.4.2.1 Namespace std)
何のためにstd名前空間を定義するの?
940デフォルトの名無しさん
2020/10/08(木) 19:50:52.17ID:2a0CIcHX 茨木が
いばらき
なのか
いばらぎ
なのか
くらいどうでもいい
いばらき
なのか
いばらぎ
なのか
くらいどうでもいい
941蟻人間 ◆T6xkBnTXz7B0
2020/10/08(木) 19:51:57.26ID:N89hoMl4 例えばstd::swapで自分のクラスの交換を定義したい、ってケースが考えられる。
942はちみつ餃子 ◆8X2XSCHEME
2020/10/08(木) 20:13:18.19ID:xCgN3gCo >>939
その std は ::std のことやで。
その std を拡張することは禁止されているが、
別の名前空間の下に std という名前空間を作るのは禁止されていない。
using namespace で std を含む名前空間を取り込んだ上だと ::std でなく std という表現をすると
標準ライブラリの std でないものを指す可能性があるというのが今の話題。
でも禁止されてないからといって std という名前を付けるやつはおらんから気にするだけあほらしいでというのが反論。
その std は ::std のことやで。
その std を拡張することは禁止されているが、
別の名前空間の下に std という名前空間を作るのは禁止されていない。
using namespace で std を含む名前空間を取り込んだ上だと ::std でなく std という表現をすると
標準ライブラリの std でないものを指す可能性があるというのが今の話題。
でも禁止されてないからといって std という名前を付けるやつはおらんから気にするだけあほらしいでというのが反論。
943デフォルトの名無しさん
2020/10/08(木) 20:13:56.08ID:3LpdeaMK >>935が言ってる採用されるか、てのは「相手が」だと思うが
C++標準の話ではないやろ
C++標準の話ではないやろ
944はちみつ餃子 ◆8X2XSCHEME
2020/10/08(木) 20:41:41.67ID:xCgN3gCo >>941
std (::std) に定義を追加することは禁じられているが特殊化を追加することは禁じられていなかった。
しかし C++20 からはこれも禁止になる。
カスタマイズポイントという仕組みが用意されたのでこれを使うのが (今後は) 望ましい。
std (::std) に定義を追加することは禁じられているが特殊化を追加することは禁じられていなかった。
しかし C++20 からはこれも禁止になる。
カスタマイズポイントという仕組みが用意されたのでこれを使うのが (今後は) 望ましい。
945sage
2020/10/08(木) 20:42:23.39ID:5vNQ47uu >>942
C++標準にnamespace std を ::stdとする定義ってあったっけ?
『standard libraryの名前xは ::std::xとして定義しろ(20.5.1.1.3)』
というのはあるけど、namespace std = ::std という定義じゃないよね?
最近は標準を読んでないから見落としあるかもしれんが、
ざっと見た範囲では無さそうだった。
C++標準にnamespace std を ::stdとする定義ってあったっけ?
『standard libraryの名前xは ::std::xとして定義しろ(20.5.1.1.3)』
というのはあるけど、namespace std = ::std という定義じゃないよね?
最近は標準を読んでないから見落としあるかもしれんが、
ざっと見た範囲では無さそうだった。
946はちみつ餃子 ◆8X2XSCHEME
2020/10/08(木) 22:31:10.36ID:xCgN3gCo >>945
そう。
using namespace std; の std が ::std でないものを指す可能性があるが、
拡張を禁じている std というのは ::std のことなので、
大元の議論は ::std を拡張するなんていう話はしてないという指摘をしてる。
そう。
using namespace std; の std が ::std でないものを指す可能性があるが、
拡張を禁じている std というのは ::std のことなので、
大元の議論は ::std を拡張するなんていう話はしてないという指摘をしてる。
947デフォルトの名無しさん
2020/10/09(金) 00:24:46.45ID:Sv65jxff ID:FCbCRYtX さんはグローバル以外で自分のコードから見えるスコープに誰かが
std という名前を宣言している可能性も考慮して万全の策を取っているんですね。すごいなぁ。
ということは当然、誰かが #define std ... している可能性も考慮して
::std を使う行の前には必ず #undef std も書くのでしょうね。すごいなぁ。
std という名前を宣言している可能性も考慮して万全の策を取っているんですね。すごいなぁ。
ということは当然、誰かが #define std ... している可能性も考慮して
::std を使う行の前には必ず #undef std も書くのでしょうね。すごいなぁ。
948デフォルトの名無しさん
2020/10/09(金) 03:44:42.22ID:eAzl4WVQ 「::」って打つのは超々々多大なコストですもんね。すごいですよね。
949sage
2020/10/09(金) 03:59:02.26ID:eAfWXkzh >>946
16.5.4.2.1 Namespace std
Unless otherwise specified, the behavior of a program is undefined if it adds declarations or definitions
to namespace std or to a namespace within namespace std.
で、::stdの規定があるのは
16.5.1.1 Library contents
Whenever a name x defined in the standard library is mentioned, the name x is assumed to be fully qualified
as ::std::x, unless explicitly described otherwise. For example, if the Effects: element for library function F
is described as calling library function G, the function ::std::G is meant.
だけだから、拡張を禁じているのが::stdだけというのは言いすぎじゃね?
標準化の経過を追っているわけじゃないからこの解釈が妥当か知らんが。
16.5.4.2.1 Namespace std
Unless otherwise specified, the behavior of a program is undefined if it adds declarations or definitions
to namespace std or to a namespace within namespace std.
で、::stdの規定があるのは
16.5.1.1 Library contents
Whenever a name x defined in the standard library is mentioned, the name x is assumed to be fully qualified
as ::std::x, unless explicitly described otherwise. For example, if the Effects: element for library function F
is described as calling library function G, the function ::std::G is meant.
だけだから、拡張を禁じているのが::stdだけというのは言いすぎじゃね?
標準化の経過を追っているわけじゃないからこの解釈が妥当か知らんが。
950デフォルトの名無しさん
2020/10/09(金) 07:35:33.10ID:TjErAM+z951デフォルトの名無しさん
2020/10/09(金) 07:36:25.15ID:TjErAM+z >>943
「相手が」stdをキーワードにできると思うのか?
「相手が」stdをキーワードにできると思うのか?
952デフォルトの名無しさん
2020/10/09(金) 07:48:48.53ID:NEyoYsah953デフォルトの名無しさん
2020/10/09(金) 08:05:41.52ID:TjErAM+z954デフォルトの名無しさん
2020/10/09(金) 08:30:04.27ID:NEyoYsah955デフォルトの名無しさん
2020/10/09(金) 09:46:43.60ID:TjErAM+z >>954
標準ライブラリのxは::std::xだと書いてあるやん
標準ライブラリのxは::std::xだと書いてあるやん
956デフォルトの名無しさん
2020/10/09(金) 09:52:04.08ID:TjErAM+z pathは::std::pathじゃないけどね
957デフォルトの名無しさん
2020/10/09(金) 12:06:02.44ID:NEyoYsah >>955
16.5.4.2.1で拡張を禁止されているのはstdと名前の付いた名前空間で、::stdに限定しないだろ。
と言っているんだが。
反論するなら、標準で
namespace std==::std
としている定義を持ってきてくれ。
16.5.4.2.1で拡張を禁止されているのはstdと名前の付いた名前空間で、::stdに限定しないだろ。
と言っているんだが。
反論するなら、標準で
namespace std==::std
としている定義を持ってきてくれ。
958デフォルトの名無しさん
2020/10/09(金) 12:19:21.22ID:TjErAM+z 話が噛み合ってないな
考え落としで言及がないだけだろと言ったはず
あくまで推測だけどね、考え落としていないとわかるものがあるなら拝見したい
考え落としで言及がないだけだろと言ったはず
あくまで推測だけどね、考え落としていないとわかるものがあるなら拝見したい
959デフォルトの名無しさん
2020/10/09(金) 12:48:04.11ID:NEyoYsah >>958
標準化委員じゃないんだから、議論したかどうかなんてクソどうでもいい。
「::stdじゃないと意味ない」とかいう話をしているんだから、まずは標準でどうなっているかだろ。
標準で「namespace stdを拡張すると未定義」となっているなら、::stdに限らず未定義としか言えんわ。
反証するなら
namespace std==::std
とする証拠を出せよ。
標準化委員じゃないんだから、議論したかどうかなんてクソどうでもいい。
「::stdじゃないと意味ない」とかいう話をしているんだから、まずは標準でどうなっているかだろ。
標準で「namespace stdを拡張すると未定義」となっているなら、::stdに限らず未定義としか言えんわ。
反証するなら
namespace std==::std
とする証拠を出せよ。
960デフォルトの名無しさん
2020/10/09(金) 13:15:13.68ID:TjErAM+z 958と全く同じことなんで二度は言わん
961デフォルトの名無しさん
2020/10/09(金) 13:15:55.31ID:vxTRmbpR 話の流れとはずれますが、C++の仕様の確認のための質問をします。
namespace AAA {
void func() {
std::vector<TYPE> v;
}
}
と書いた場合、コンパイラはstdをAAAの中に最初に探し、AAAの中に見つからなければ
「グローバルな名前空間」から探すので、AAAの中にstdが見つからない場合でも、
::std と書かなくてもエラーにはならないんですよね?
namespace AAA {
void func() {
std::vector<TYPE> v;
}
}
と書いた場合、コンパイラはstdをAAAの中に最初に探し、AAAの中に見つからなければ
「グローバルな名前空間」から探すので、AAAの中にstdが見つからない場合でも、
::std と書かなくてもエラーにはならないんですよね?
962はちみつ餃子 ◆8X2XSCHEME
2020/10/09(金) 13:17:08.39ID:vI140Nir >>959
いやいや、自然言語で書かれている以上は文脈・意図を全く考慮せずに読み解くことは出来んよ。
そんなこと言ったら add という言葉の意味が仕様書内で定義されてるか?
とかいう話にもなりかねんわけで。
仕様書という性質上、なるべく解釈の幅がないように書くべきではあるが、
不確かな場合はどうしたってあるし、経緯に遡って解釈することだってあるよ。
いやいや、自然言語で書かれている以上は文脈・意図を全く考慮せずに読み解くことは出来んよ。
そんなこと言ったら add という言葉の意味が仕様書内で定義されてるか?
とかいう話にもなりかねんわけで。
仕様書という性質上、なるべく解釈の幅がないように書くべきではあるが、
不確かな場合はどうしたってあるし、経緯に遡って解釈することだってあるよ。
963デフォルトの名無しさん
2020/10/09(金) 13:24:30.32ID:vxTRmbpR >>961
[捕捉]
ファイルのパス名の場合、/std と書くとルートから探し、stdと書くと
カレントディレクトリから探すだけでルートは探しませんが、
C++の場合、stdと書いても最初は「カレント名前空間」から探し、
見つからなければ、見つかるまで「親の名前空間」を連鎖的に探して
行くのですよね。
この違いは気を付けなければなりません。パス名との類推から、
ややもすればうっかり混同してしまいそうです。
[捕捉]
ファイルのパス名の場合、/std と書くとルートから探し、stdと書くと
カレントディレクトリから探すだけでルートは探しませんが、
C++の場合、stdと書いても最初は「カレント名前空間」から探し、
見つからなければ、見つかるまで「親の名前空間」を連鎖的に探して
行くのですよね。
この違いは気を付けなければなりません。パス名との類推から、
ややもすればうっかり混同してしまいそうです。
964デフォルトの名無しさん
2020/10/09(金) 17:42:56.92ID:8wCv3rMc コードを書け
社会貢献しろ
社会貢献しろ
965デフォルトの名無しさん
2020/10/09(金) 17:47:40.59ID:m4egzLq0 じゃあ見本でお前のgithubさらしてくれる?
966デフォルトの名無しさん
2020/10/09(金) 18:16:22.78ID:8wCv3rMc >>965
お前はまず働け!
お前はまず働け!
967デフォルトの名無しさん
2020/10/09(金) 18:17:41.17ID:m4egzLq0 はい雑魚
968デフォルトの名無しさん
2020/10/09(金) 19:29:37.80ID:mnBkuaJE このスレは餃子以外はまともな書きこみねえなほんと
969デフォルトの名無しさん
2020/10/09(金) 19:32:46.57ID:NEyoYsah >>962
今回の件と関係するのかね?
極端な例で反論したつもりになられても議論できんわ。
文脈の話をするならば、標準の記載では入れ子になったnamespace Nもnamespace N表記なんだから、特に記載の無い限り入れ子になったnamespace stdもnamespace std表記だろ。
namespace stdを
::stdに限定するなんて、標準の文脈からすればなおさらありえん。
今回の件と関係するのかね?
極端な例で反論したつもりになられても議論できんわ。
文脈の話をするならば、標準の記載では入れ子になったnamespace Nもnamespace N表記なんだから、特に記載の無い限り入れ子になったnamespace stdもnamespace std表記だろ。
namespace stdを
::stdに限定するなんて、標準の文脈からすればなおさらありえん。
970デフォルトの名無しさん
2020/10/09(金) 19:47:52.64ID:fkeFOvGK UBIとかEAのような大規模ゲームってどんなコードで作られてるの?
きっとmain関数の中にスレッドループがあったりはしないんだろうな
タイトル画面ですら複雑な処理してそう
きっとmain関数の中にスレッドループがあったりはしないんだろうな
タイトル画面ですら複雑な処理してそう
971デフォルトの名無しさん
2020/10/09(金) 20:16:53.59ID:m4egzLq0 メインループは回すよ
回さなかったら終了するじゃん
まぁspawnしてjoin待ち見たいなのもよくあるけど
回さなかったら終了するじゃん
まぁspawnしてjoin待ち見たいなのもよくあるけど
972デフォルトの名無しさん
2020/10/10(土) 06:22:29.70ID:W6O5r79w test
973デフォルトの名無しさん
2020/10/10(土) 06:32:13.62ID:tjeCnATK leave
ret
ret
974デフォルトの名無しさん
2020/10/10(土) 07:23:12.80ID:gvSXcuMi >>968
餃子がまとも?ヤベェな。。
餃子がまとも?ヤベェな。。
975デフォルトの名無しさん
2020/10/10(土) 09:08:57.50ID:g6Q5c5Tz976デフォルトの名無しさん
2020/10/10(土) 10:47:12.02ID:TSALDtkC 女の子だったら置換する
977デフォルトの名無しさん
2020/10/10(土) 12:58:42.27ID:24/haesl978デフォルトの名無しさん
2020/10/10(土) 13:01:08.76ID:yhyq5Xqm C++の知識はちゃんとしたものではあるが、それ以外の事は必ずしも
正しくはない。
正しくはない。
979デフォルトの名無しさん
2020/10/10(土) 13:23:13.45ID:g6Q5c5Tz 次スレ警報発令。
980はちみつ餃子 ◆8X2XSCHEME
2020/10/10(土) 13:24:43.37ID:i9YWGOdm981デフォルトの名無しさん
2020/10/10(土) 13:37:41.54ID:g6Q5c5Tz わかりやすく言えば老害
982デフォルトの名無しさん
2020/10/10(土) 14:31:19.76ID:yhyq5Xqm983デフォルトの名無しさん
2020/10/10(土) 14:33:21.17ID:djk9d7ug lispは数学的には美しいけど実用の道具としてはカス
984デフォルトの名無しさん
2020/10/10(土) 14:45:47.75ID:TSALDtkC ※ 個人の感想です
985デフォルトの名無しさん
2020/10/10(土) 14:50:55.66ID:poQTxlfJ このスレの主要なコンテンツ
・不毛な議論
・072/マウントみたいなレス
・昔話
・不毛な議論
・072/マウントみたいなレス
・昔話
986デフォルトの名無しさん
2020/10/10(土) 15:06:39.81ID:g6Q5c5Tz >>985
不要じゃなくて主要
不要じゃなくて主要
987デフォルトの名無しさん
2020/10/10(土) 15:31:09.66ID:yhyq5Xqm 質問に答えているのはマウントではなく、国の衰退を防ぐためとか、
プログラミング産業を盛り立てるためとかもある。
プログラミング産業を盛り立てるためとかもある。
988デフォルトの名無しさん
2020/10/10(土) 15:33:26.12ID:lmvlajWr そんな崇高な理念を持ってる奴いねーよ
ただマウント取りたいだけ
ただマウント取りたいだけ
989デフォルトの名無しさん
2020/10/10(土) 15:35:51.69ID:g6Q5c5Tz はちみつ爺さんは世界平和のために書き込んでるんだぞ
990デフォルトの名無しさん
2020/10/10(土) 15:40:29.45ID:yhyq5Xqm >>988
普通にいるぞ。
崇高と言うのとはまた違う。
なぜなら国の衰退や、産業の衰退は、必ず自分にもマイナスになって帰ってくるから。
この板が荒れれば、日本も衰退し、やがて自分の将来も暗くなることは
予想できる。
普通にいるぞ。
崇高と言うのとはまた違う。
なぜなら国の衰退や、産業の衰退は、必ず自分にもマイナスになって帰ってくるから。
この板が荒れれば、日本も衰退し、やがて自分の将来も暗くなることは
予想できる。
991デフォルトの名無しさん
2020/10/10(土) 15:46:52.37ID:yhyq5Xqm たとえば、プログラミング学校、プログラミングの支援ツール、
ゲーム作製ツール、プログラミング言語の解説本、プログラミング処理系
などを仕事にしたり作製したりしている人にとっては、プログラミング
している人を支援することはプログラミングが好きな人を増やし
やがて自分も潤うと考えられる。
だからこのようなスレや板で質問に答えれば彼にとっては得になる。
ゲーム作製ツール、プログラミング言語の解説本、プログラミング処理系
などを仕事にしたり作製したりしている人にとっては、プログラミング
している人を支援することはプログラミングが好きな人を増やし
やがて自分も潤うと考えられる。
だからこのようなスレや板で質問に答えれば彼にとっては得になる。
>>990
数学者の藤原正彦氏のようなことをいってますね‥‥
数学者の藤原正彦氏のようなことをいってますね‥‥
993デフォルトの名無しさん
2020/10/10(土) 16:06:15.00ID:yhyq5Xqm >>992
あの人は、実は人の気持ちが分からない人。
京大生に昼休みの始まりに小学生レベルの分数をさせて、時間がもったいないから
無回答で出て行った人が多かったのに対し、「小学生レベルの分数の問題が解けない」
と本に書いた。
あの人は、実は人の気持ちが分からない人。
京大生に昼休みの始まりに小学生レベルの分数をさせて、時間がもったいないから
無回答で出て行った人が多かったのに対し、「小学生レベルの分数の問題が解けない」
と本に書いた。
994デフォルトの名無しさん
2020/10/10(土) 17:11:28.38ID:THhanVwl >>988
自己紹介乙
自己紹介乙
995デフォルトの名無しさん
2020/10/10(土) 23:14:10.28ID:TSALDtkC 誰か次スレ建てて社会貢献しろよ;;
996デフォルトの名無しさん
2020/10/11(日) 01:14:38.25ID:TCtjmjrc , ,:‘. 。 + ,..
’‘ + ,.. . ..; ', ,:‘
. .; : ’ ' ,:‘.
あ あ ,:‘. +
.. ' ,:‘. . ...:: ’‘
’‘ .; こ ん な に お 断 り し た い
。
. 。 気 持 ち に な っ た の は ,:‘. 。
'+。
初 め て で す .. ' ,:‘.
:: . .. .. ' ,:‘.
ハ,,ハ
( ゚ω゚ )
’‘ + ,.. . ..; ', ,:‘
. .; : ’ ' ,:‘.
あ あ ,:‘. +
.. ' ,:‘. . ...:: ’‘
’‘ .; こ ん な に お 断 り し た い
。
. 。 気 持 ち に な っ た の は ,:‘. 。
'+。
初 め て で す .. ' ,:‘.
:: . .. .. ' ,:‘.
ハ,,ハ
( ゚ω゚ )
997デフォルトの名無しさん
2020/10/11(日) 09:44:54.65ID:ErUdhCxH >>991
英会話教室関係者と似たような構図にしか思えない
英会話教室関係者と似たような構図にしか思えない
998デフォルトの名無しさん
2020/10/11(日) 09:58:02.16ID:kZXFoyze >>993
それは多分別の人だと思いますよ
藤原氏は「アメリカの学生は分数がわかっていない」と昔のエッセーに書いていたのは記憶していますが、
一般の日本人の「数学力」を腐す論調ではなかったと思います
彼のいうことは唯一つ、なんでもいいから「本を読め」、「本を読め」、「本を読め」、「本を読め」、「本を読め」、「本を読め」、「本を読め」、「本を読め」、「本を読め」、「本を読め」、「本を読め」
それは多分別の人だと思いますよ
藤原氏は「アメリカの学生は分数がわかっていない」と昔のエッセーに書いていたのは記憶していますが、
一般の日本人の「数学力」を腐す論調ではなかったと思います
彼のいうことは唯一つ、なんでもいいから「本を読め」、「本を読め」、「本を読め」、「本を読め」、「本を読め」、「本を読め」、「本を読め」、「本を読め」、「本を読め」、「本を読め」、「本を読め」
1000デフォルトの名無しさん
2020/10/11(日) 16:32:48.88ID:kZXFoyze 梅太郎
10011001
Over 1000Thread このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 91日 2時間 50分 29秒
新しいスレッドを立ててください。
life time: 91日 2時間 50分 29秒
10021002
Over 1000Thread 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。
ニュース
- テレビ朝日 本社から男性が転落し死亡。関連会社社員か 当たった通行人が左肩軽傷 [阿弥陀ヶ峰★]
- 高市首相、トランプ米大統領に「早期に会いたい」 日中関係悪化受け… ★4 [BFU★]
- 【コメ】卸売業者「簡単に安売りできない」「大暴落起きれば大赤字に」 JA「新米の販売進度が近年になく遅い。コメの回転が悪い」 ★5 [Hitzeschleier★]
- 「これいいじゃん!!!」 セブン-イレブンの1620円で買える“1人用クリスマスケーキ”🎂に注目殺到「天才すぎる」 [パンナ・コッタ★]
- 高市早苗首相が天理教系企業に“巨額発注” 総額5000万円 本人は「政治団体の活動に必要な支出」と回答 ★2 [Hitzeschleier★]
- テレビ朝日本社から20~30代の関連会社社員とみられる男性が転落し死亡 六本木けやき坂通りの通行人にはけが人なし [少考さん★]
- 【速報】テレビ朝日本社から20代〜30代の男性が飛び降り自殺して死亡 東京・六本木 [597533159]
- 【高市速報】中国、最後通牒 [308389511]
- お前らダウナー系だよな
- 現役JKのお茶会スレ( ¨̮ )︎︎𖠚ᐝ182
- 【朗報】カニ漁バイト募集!急げ! [834922174]
- 精液がゼリー状で黄ばんでるせいで女と付き合う勇気ない
