!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
↑同じ内容を3行貼り付けること
次スレは>>980が立てること
無理なら細かく安価指定
※前スレ
C++相談室 part162
https://mevius.5ch.net/test/read.cgi/tech/1667194175/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
探検
C++相談室 part163
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ bbda-Axul)
2022/12/30(金) 23:16:31.37ID:DPUEZfMS0794デフォルトの名無しさん (ワッチョイ ff9a-Pd8U)
2023/04/01(土) 14:26:59.20ID:TiOY9/eM0 例えばfunctionを使って比較関数をインライン的に書くとこうですよね
priority_queue<int, vector<int>, function<bool(int a, int b)>> pq([](int a, int b){return a > b;});
一方ラムダを使った場合は例えばこんなですよね
auto comp = [](int a, int b) { return a > b; };
priority_queue<int, vector<int>, decltype(comp)> pq(comp);
で疑問に思ったのが
- 上記の例で後者の場合もインライン的に書ける? まソース的には1行目と2行目を改行なしで
書けばいいのかもしれないけどw
- function を使う場合と decltype を使う場合の違いに何が違う?
ということです
priority_queue<int, vector<int>, function<bool(int a, int b)>> pq([](int a, int b){return a > b;});
一方ラムダを使った場合は例えばこんなですよね
auto comp = [](int a, int b) { return a > b; };
priority_queue<int, vector<int>, decltype(comp)> pq(comp);
で疑問に思ったのが
- 上記の例で後者の場合もインライン的に書ける? まソース的には1行目と2行目を改行なしで
書けばいいのかもしれないけどw
- function を使う場合と decltype を使う場合の違いに何が違う?
ということです
795デフォルトの名無しさん (ワッチョイ ff9a-Pd8U)
2023/04/01(土) 14:29:01.96ID:TiOY9/eM0 う、二番目の質問がおかしい
- function と delctype で単に書き方が違うという以上の違いはありますか?
- function と delctype で単に書き方が違うという以上の違いはありますか?
796デフォルトの名無しさん (ワッチョイ ff9a-Pd8U)
2023/04/01(土) 14:31:10.70ID:TiOY9/eM0 function と decltype は単にシンタックスが違うだけというなら、これからは一番最初の
function を使った書き方で行こうかなと思います
function を使った書き方で行こうかなと思います
797デフォルトの名無しさん (ワッチョイ 7f7f-icd+)
2023/04/01(土) 15:00:44.48ID:IfOudlag0 C++17以降ならdeduction guideが使える
priority_queue pq { [](int a, int b){return a > b;}, vector<int>{} };
priority_queue pq { [](int a, int b){return a > b;}, vector<int>{} };
798デフォルトの名無しさん (ワッチョイ 7f28-TZ4b)
2023/04/02(日) 08:51:08.20ID:t9D8iOvK0 メモリ確保と同時に初期化、
これをしないことによる顕著なメリットの説明がそろそろあってしかるべき……
初期化をしないことによってメモリ確保はメモリ確保1回あたり(デフォルトコンストラクタにもよるが)数千~数万クロックサイクルぐらい早くなるかもしれないが
プログラムの実行速度を追求したいならそもそもメモリ確保とかいっぱい回るループの中ですべきではないし、
そもそも領域を確保しておいて初期化を後回しにするとか、プログラミを不必要に複雑なピタゴラスイッチ化するだけ……
もっとも、毎秒1万回std::vector<T>を構築するとか、サイズ3TBのFIFOを作るとかなアフォ
構想時点で極めて特殊な設計なら話は別やが……
これをしないことによる顕著なメリットの説明がそろそろあってしかるべき……
初期化をしないことによってメモリ確保はメモリ確保1回あたり(デフォルトコンストラクタにもよるが)数千~数万クロックサイクルぐらい早くなるかもしれないが
プログラムの実行速度を追求したいならそもそもメモリ確保とかいっぱい回るループの中ですべきではないし、
そもそも領域を確保しておいて初期化を後回しにするとか、プログラミを不必要に複雑なピタゴラスイッチ化するだけ……
もっとも、毎秒1万回std::vector<T>を構築するとか、サイズ3TBのFIFOを作るとかなアフォ
構想時点で極めて特殊な設計なら話は別やが……
799デフォルトの名無しさん (ワッチョイ 7f28-TZ4b)
2023/04/02(日) 09:00:08.86ID:t9D8iOvK0 それよか一番危険なのは、
>必要があれば初期化するし
>必要なければ余計なことはしない
>
>判断できましぇ~んなアホにはなりたくない (キリ
とのたまう人が、encueカウンタやdecueueカウンタが未初期かなFIFO、みたいな
益体も無い例を持ち出してみたり、冒す必要のない危険を冒してまでリリースしてしまうことや……
>必要があれば初期化するし
>必要なければ余計なことはしない
>
>判断できましぇ~んなアホにはなりたくない (キリ
とのたまう人が、encueカウンタやdecueueカウンタが未初期かなFIFO、みたいな
益体も無い例を持ち出してみたり、冒す必要のない危険を冒してまでリリースしてしまうことや……
800デフォルトの名無しさん (ワッチョイ 7f28-TZ4b)
2023/04/02(日) 09:31:47.33ID:t9D8iOvK0 >>784
教師信号はどこから来るというんじゃ……
教師信号はどこから来るというんじゃ……
801デフォルトの名無しさん (ワッチョイ 5f5f-9P2W)
2023/04/02(日) 10:42:08.81ID:B65ZsGdj0 まず、えんきゅーできゅーのスペル確認ぐらいしてくれ。
802デフォルトの名無しさん (ワッチョイ 7f28-TZ4b)
2023/04/02(日) 10:44:15.18ID:t9D8iOvK0 まともな回答を寄越してくれたら直してしんぜよう、
803デフォルトの名無しさん (ワッチョイ ffcf-icd+)
2023/04/02(日) 10:52:59.44ID:iUrLRRfa0804デフォルトの名無しさん (ワッチョイ df63-2Vho)
2023/04/02(日) 11:02:53.69ID:WgpY8vNM0 char fifo[256] = 俺はここのことを言った
char* enq = ここの話に逸らした時点でアホの相手はやめた
char* enq = ここの話に逸らした時点でアホの相手はやめた
805デフォルトの名無しさん (ワッチョイ 5f69-9P2W)
2023/04/02(日) 16:04:22.42ID:MRqRSiku0 CUE!難民発見
806はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ff3e-9P2W)
2023/04/02(日) 16:50:57.97ID:gP4vNTAJ0 >>796
std::function は実行時に型を切り替える機能をもったクラスで、
後から切り替える可能性が無い場面では無駄になるから避けるのが普通だと思う。
#include <functional>
int foo(void) { return 1; }
int main() {
// 関数ポインタとクロージャは異なる型だが
// std::function は呼出しの形式が同じならどちらでも扱える
std::function<int(void)> bar = foo; // 関数ポインタを格納できる
bar = [](void) -> int { return 1; }; // クロージャも格納できる
}
std::function は実行時に型を切り替える機能をもったクラスで、
後から切り替える可能性が無い場面では無駄になるから避けるのが普通だと思う。
#include <functional>
int foo(void) { return 1; }
int main() {
// 関数ポインタとクロージャは異なる型だが
// std::function は呼出しの形式が同じならどちらでも扱える
std::function<int(void)> bar = foo; // 関数ポインタを格納できる
bar = [](void) -> int { return 1; }; // クロージャも格納できる
}
807デフォルトの名無しさん (ワッチョイ 5f5f-I0N1)
2023/04/02(日) 17:17:55.77ID:Pu7bAi6b0 コンパイラと標準ライブラリによるんだろうけど、
std::functionはラップしてるぶんラムダに比べて遅いだろうね
でもラップしてるおかげで柔軟だから用途次第で使い分けるのがいいね
std::functionはラップしてるぶんラムダに比べて遅いだろうね
でもラップしてるおかげで柔軟だから用途次第で使い分けるのがいいね
808デフォルトの名無しさん (ワッチョイ df63-2Vho)
2023/04/02(日) 17:20:28.25ID:WgpY8vNM0 anyみたいにRTTIを使っているわけじゃないけどね
809デフォルトの名無しさん (ワッチョイ c69a-RdFw)
2023/04/08(土) 06:18:03.35ID:AxtXnxq40 bool型を整数に変換した時、false -> 0, true -> 1 は保証される?
810デフォルトの名無しさん (ワッチョイ 2d63-r2C4)
2023/04/08(土) 06:19:18.69ID:jYlViDaH0 される
811デフォルトの名無しさん (ワッチョイ c69a-RdFw)
2023/04/08(土) 06:40:35.49ID:AxtXnxq40 ですか
何個条件が成り立っているかを数えるときに上記を使ってるっぽいコードがあったので
何個条件が成り立っているかを数えるときに上記を使ってるっぽいコードがあったので
812デフォルトの名無しさん (ワッチョイ c5da-Lh5z)
2023/04/08(土) 08:36:57.00ID:v6ilm6510 WindowsのBOOLは保障されない点だけ気を付けよう
==TRUEとかやっちゃダメだからね
==TRUEとかやっちゃダメだからね
813はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 423e-/aea)
2023/04/08(土) 09:17:21.57ID:CT+2+9fN0814デフォルトの名無しさん (ワッチョイ 6ecf-Rzwh)
2023/04/08(土) 10:10:31.03ID:zFgkwmzh0 TRUE==1 FALSE==0 は仕様で明確に保証されていたかは知らんが事実上変えようがないから実害はないな。
注意するのは「FALSEでない値」とTRUEは違うってことで。
注意するのは「FALSEでない値」とTRUEは違うってことで。
815はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 423e-/aea)
2023/04/08(土) 11:19:32.51ID:CT+2+9fN0 >>814
ドキュメントに書いてあるから仕様と言ってよさそう。
https://learn.microsoft.com/en-us/windows/win32/learnwin32/windows-coding-conventions#boolean-type
ドキュメントに書いてあるから仕様と言ってよさそう。
https://learn.microsoft.com/en-us/windows/win32/learnwin32/windows-coding-conventions#boolean-type
816デフォルトの名無しさん (ワッチョイ a190-6ENU)
2023/04/08(土) 11:52:43.24ID:x/nopyOk0 #define True !Fales はもう昔の話か
817デフォルトの名無しさん (ワッチョイ 2d63-r2C4)
2023/04/08(土) 16:50:36.81ID:jYlViDaH0 GetMessage() < 0 とかもうアボカド
818デフォルトの名無しさん (アウウィフ FF05-883t)
2023/04/09(日) 09:19:40.13ID:Dm0aM9sgF #define True !False
printf("%d", True);
# 1
printf("%d", True);
# 1
819デフォルトの名無しさん (アウウィフ FF05-883t)
2023/04/09(日) 09:20:16.12ID:Dm0aM9sgF >>817
ほんそれ++
ほんそれ++
820デフォルトの名無しさん (アウアウウー Sa05-/Yip)
2023/04/09(日) 23:45:39.86ID:Gr5O5zRWa c++の入門書のサンプルでは、整数を 42で初期化するケースが多い気がします
この 42(fooやbarを使うように)には意味があるのでしょうか
この 42(fooやbarを使うように)には意味があるのでしょうか
821デフォルトの名無しさん (ワッチョイ 495f-/aea)
2023/04/09(日) 23:49:54.13ID:mWJqmDjC0822デフォルトの名無しさん (アウアウウー Sa05-/Yip)
2023/04/10(月) 00:03:58.95ID:PpQYou85a >>821
thx!
thx!
823デフォルトの名無しさん (ワッチョイ 6ea7-/aea)
2023/04/10(月) 10:38:06.12ID:auMz+cIB0 constevalな関数の中でchar配列中からintを読み取る場合ってポインタ使えないから下記のようにするしかない?
arr[index] | ((int)arr[index + 1] << 8) | ((int)arr[index + 2] << 16) | ((int)arr[index + 3] << 24);
arr[index] | ((int)arr[index + 1] << 8) | ((int)arr[index + 2] << 16) | ((int)arr[index + 3] << 24);
824デフォルトの名無しさん (ワッチョイ 495f-/aea)
2023/04/10(月) 13:13:53.16ID:j1Pkk3Kb0825デフォルトの名無しさん (ワッチョイ 495f-MO2j)
2023/04/10(月) 13:14:40.33ID:Y31i0sl00 >>823
共用体は使えないの?
共用体は使えないの?
826デフォルトの名無しさん (スップ Sd82-qF+M)
2023/04/10(月) 15:33:11.04ID:3mw67OVid 32bit-little endianであることを前提になるがいいか?
あとこれarr[3]が0-127に収まってないとintの符号ビット壊しそうだし、
charが符号付きの環境だとシフト+bit orが意図通りにならなそう
あとこれarr[3]が0-127に収まってないとintの符号ビット壊しそうだし、
charが符号付きの環境だとシフト+bit orが意図通りにならなそう
827デフォルトの名無しさん (ワッチョイ a910-Mkip)
2023/04/11(火) 00:04:23.89ID:Ta/4j/O20 >>823
consteval使えるならbit_castも使えるのでは
consteval使えるならbit_castも使えるのでは
828はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 423e-/aea)
2023/04/11(火) 00:07:23.43ID:HzbpoBAH0829デフォルトの名無しさん (スプッッ Sd22-b+kJ)
2023/04/11(火) 12:34:29.16ID:Ii6omevMd >>826
おもいっきり環境依存なコードに対して環境依存を心配するアホ
おもいっきり環境依存なコードに対して環境依存を心配するアホ
830デフォルトの名無しさん (スプッッ Sd22-b+kJ)
2023/04/11(火) 12:34:35.05ID:Ii6omevMd >>826
おもいっきり環境依存なコードに対して環境依存を心配するアホ
おもいっきり環境依存なコードに対して環境依存を心配するアホ
831デフォルトの名無しさん (ワッチョイ c5c9-hq/O)
2023/04/11(火) 15:29:28.26ID:No77oSsN0 右シフトはおもいっきり符号にひっぱられるけど左シフトならセーフだべ?
832デフォルトの名無しさん (ワッチョイ a961-rbmB)
2023/04/11(火) 15:38:30.59ID:aQanOcc40 char→intで符号拡張されちゃうべ
833デフォルトの名無しさん (ワッチョイ c5c9-hq/O)
2023/04/11(火) 15:39:28.74ID:No77oSsN0 んだんだ 0xff で マスクするべな
834デフォルトの名無しさん (ワッチョイ c5c9-hq/O)
2023/04/11(火) 15:43:02.02ID:No77oSsN0 (0x0ff & (int)a[i]) |
(0x0ff & (a[i+1] <<8)) |
(0x0ff & (a[i+2] <<16)) |
(0x0ff & (a[i+3] <<24))
これでよろしかですかの?
(0x0ff & (a[i+1] <<8)) |
(0x0ff & (a[i+2] <<16)) |
(0x0ff & (a[i+3] <<24))
これでよろしかですかの?
835デフォルトの名無しさん (ワッチョイ c5c9-hq/O)
2023/04/11(火) 15:43:45.69ID:No77oSsN0 ひでぇ間違えた もういいー
836デフォルトの名無しさん (ワッチョイ 254e-Rzwh)
2023/04/11(火) 15:47:35.33ID:ukUq4n2Z0 >>834
そんなことしなくても (int)(unsigned char) でいいのでは?
そんなことしなくても (int)(unsigned char) でいいのでは?
837デフォルトの名無しさん (ワッチョイ c5c9-hq/O)
2023/04/11(火) 16:07:55.56ID:No77oSsN0 んだな
838デフォルトの名無しさん (スッップ Sd22-b+kJ)
2023/04/11(火) 17:30:55.22ID:K2f5iX7Sd (int) いらね
839デフォルトの名無しさん (ワッチョイ aeda-Lh5z)
2023/04/11(火) 18:27:39.70ID:3b0RAKoL0 (unsigned int)arr[index] | ((unsigned int)arr[index + 1] << 8) | ((unsigned int)arr[index + 2] << 16) | ((unsigned int)arr[index + 3] << 24);
840デフォルトの名無しさん (ワッチョイ aeda-Lh5z)
2023/04/11(火) 18:33:47.48ID:3b0RAKoL0 いや、こうか
arr[index] | int((unsigned)arr[index + 1] << 8) | int((unsigned)arr[index + 2] << 16) | int((unsigned)arr[index + 3] << 24);
arr[index] | int((unsigned)arr[index + 1] << 8) | int((unsigned)arr[index + 2] << 16) | int((unsigned)arr[index + 3] << 24);
841デフォルトの名無しさん (アウアウエー Sa0a-0l8A)
2023/04/11(火) 18:49:44.57ID:HmfbYrEaa 以下はTCP/IPのクライアントを作成する例なのですが、このコードにタイムアウト値を付けるにはどうしたら良いですか?
http://onishi-lab.jp/programming/tcp_win.html
// Windows の場合
WSADATA data;
WSAStartup(MAKEWORD(2,0), &data);
// 相手先アドレスの入力と送る文字の入力
printf("サーバーマシンのIPは?:");
scanf("%s", destination);
// sockaddr_in 構造体のセット
memset(&dstAddr, 0, sizeof(dstAddr));
dstAddr.sin_port = htons(PORT);
dstAddr.sin_family = AF_INET;
dstAddr.sin_addr.s_addr = inet_addr(destination);
// ソケットの生成
dstSocket = socket(AF_INET, SOCK_STREAM, 0);
//接続
if(connect(dstSocket, (struct sockaddr *) &dstAddr, sizeof(dstAddr))){
printf("%s に接続できませんでした\n",destination);
return(-1);
}
http://onishi-lab.jp/programming/tcp_win.html
// Windows の場合
WSADATA data;
WSAStartup(MAKEWORD(2,0), &data);
// 相手先アドレスの入力と送る文字の入力
printf("サーバーマシンのIPは?:");
scanf("%s", destination);
// sockaddr_in 構造体のセット
memset(&dstAddr, 0, sizeof(dstAddr));
dstAddr.sin_port = htons(PORT);
dstAddr.sin_family = AF_INET;
dstAddr.sin_addr.s_addr = inet_addr(destination);
// ソケットの生成
dstSocket = socket(AF_INET, SOCK_STREAM, 0);
//接続
if(connect(dstSocket, (struct sockaddr *) &dstAddr, sizeof(dstAddr))){
printf("%s に接続できませんでした\n",destination);
return(-1);
}
842デフォルトの名無しさん (ワッチョイ 0279-90pI)
2023/04/11(火) 19:25:01.15ID:BlUKqEB00 winsock2 connect タイムアウト
843デフォルトの名無しさん (アウアウエー Sa0a-0l8A)
2023/04/12(水) 20:53:53.05ID:slmCp11Ka >>842
ありがとうございます。
この記事のWindows版を参考にしてタイムアウトつき接続できたのですが
https://qiita.com/hidetaka0/items/501ad17b4c23c3adee03
これってちゃんとサーバーに接続できた場合、接続できたことをコード内のどこで判別すれば良いのでしょうか?
色んな箇所にprintを仕込んでみたのですがよくわかりませんでした。
ありがとうございます。
この記事のWindows版を参考にしてタイムアウトつき接続できたのですが
https://qiita.com/hidetaka0/items/501ad17b4c23c3adee03
これってちゃんとサーバーに接続できた場合、接続できたことをコード内のどこで判別すれば良いのでしょうか?
色んな箇所にprintを仕込んでみたのですがよくわかりませんでした。
844デフォルトの名無しさん (ワッチョイ aeda-Lh5z)
2023/04/12(水) 21:19:15.87ID:3roUAINp0 //読み書きできる状態
845デフォルトの名無しさん (ワッチョイ 0279-90pI)
2023/04/12(水) 21:38:01.94ID:IOSSRt+R0 ネットワークプログラミングスレってあったと思うんだけど
何でここで質問するのか理解できない
何でここで質問するのか理解できない
846デフォルトの名無しさん (スプープ Sd22-pvw1)
2023/04/13(木) 00:15:12.61ID:ndOnjJhod847デフォルトの名無しさん (ワッチョイ aeda-Lh5z)
2023/04/13(木) 01:15:15.35ID:DRH76Ra10848デフォルトの名無しさん (ワッチョイ aeda-Lh5z)
2023/04/13(木) 01:23:34.33ID:DRH76Ra10849デフォルトの名無しさん (ワッチョイ aeda-Lh5z)
2023/04/13(木) 01:28:55.79ID:DRH76Ra10 あと考えられる問題は、スレッドのスタックが足りなくてprintfがコールできていない可能性だな
いろいろと洗ってみれ
いろいろと洗ってみれ
850デフォルトの名無しさん (スプープ Sd22-0l8A)
2023/04/13(木) 02:30:15.77ID:/ixh6GMqd >>847
以下のようにprintというかcoutを挟むと、接続前はずっと"1"が出力されるのに、接続後は何も出力されなくなります。
エラーも出ず、プログラムは動き続けます。
int sockNum = select(socket + 1, &readFd, &writeFd, &errFd, &timeout);
if(0 == sockNum)
{
//timeout
std::cout << "1" << std::endl;
return -1;
}
else if(FD_ISSET(socket, &readFd) || FD_ISSET(socket, &writeFd) )
{
std::cout << "2" << std::endl;
}
else
{
//error
std::cout << "3" << std::endl;
return -1;
}
std::cout << "4" << std::endl;
以下のようにprintというかcoutを挟むと、接続前はずっと"1"が出力されるのに、接続後は何も出力されなくなります。
エラーも出ず、プログラムは動き続けます。
int sockNum = select(socket + 1, &readFd, &writeFd, &errFd, &timeout);
if(0 == sockNum)
{
//timeout
std::cout << "1" << std::endl;
return -1;
}
else if(FD_ISSET(socket, &readFd) || FD_ISSET(socket, &writeFd) )
{
std::cout << "2" << std::endl;
}
else
{
//error
std::cout << "3" << std::endl;
return -1;
}
std::cout << "4" << std::endl;
851デフォルトの名無しさん (ワッチョイ aeda-Lh5z)
2023/04/13(木) 02:46:49.32ID:DRH76Ra10 そこ、コードが間違ってるな
selectのエラーは負の値返したときだよ
selectのエラーは負の値返したときだよ
852デフォルトの名無しさん (ワッチョイ aeda-Lh5z)
2023/04/13(木) 06:22:49.75ID:DRH76Ra10 だがしかし、エラーじゃなくてタイムアウト検査して0と比較しているからこのままでも問題はないか
timevalのタイムアウト値がまちがってんじゃねーの?とは思う
timevalのタイムアウト値がまちがってんじゃねーの?とは思う
853デフォルトの名無しさん (ワッチョイ 0279-90pI)
2023/04/13(木) 07:23:10.38ID:8nXR27xn0 socket + 1って何だっけ
おかしい原因これじゃないの?こういうもんだっけ?
おかしい原因これじゃないの?こういうもんだっけ?
854デフォルトの名無しさん (ワッチョイ a2fb-qF+M)
2023/04/13(木) 08:05:52.88ID:AKmB1uVA0 VisualStudio使ってるんならステップ実行したほうがはやいんじゃね
1行ずつ実行してどこでクラッシュ/待たされてるかすぐにわかるぞ
1行ずつ実行してどこでクラッシュ/待たされてるかすぐにわかるぞ
855デフォルトの名無しさん (ワッチョイ 495f-cPl8)
2023/04/13(木) 10:00:54.60ID:4kBfFXBL0 接続後にConnect呼んでないだけでしょ
856デフォルトの名無しさん (スプープ Sd22-pvw1)
2023/04/13(木) 10:36:58.20ID:GsnZRt31d >>855
コード内のどこでconnectを呼べば良いですか?
コード内のどこでconnectを呼べば良いですか?
857デフォルトの名無しさん (ワッチョイ 495f-cPl8)
2023/04/13(木) 15:55:39.85ID:4kBfFXBL0 >>856
ソースをうpは無理?
ソースをうpは無理?
858デフォルトの名無しさん (ワッチョイ c69a-gTA8)
2023/04/13(木) 17:56:14.36ID:iNDrHE0O0 初心者なのですが、find()で結果がないときnposの場合と.hoge.end()の場合、
イテレータで hoge.begin()とする場合と begin(hoge)とする場合(end()も同様)、等
混乱しております。これは...
イテレータで hoge.begin()とする場合と begin(hoge)とする場合(end()も同様)、等
混乱しております。これは...
859デフォルトの名無しさん (ワッチョイ 2d63-r2C4)
2023/04/13(木) 18:12:14.03ID:zEEI4t8g0 nposってstd::basic_stringのか?
#include <algorithm>のfindとは別物だぞ
メンバ関数でfindを持っているオブジェクトならhoge.begin()
持っていないオブジェクトにはbegin(hoge)
#include <algorithm>のfindとは別物だぞ
メンバ関数でfindを持っているオブジェクトならhoge.begin()
持っていないオブジェクトにはbegin(hoge)
860はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 423e-/aea)
2023/04/13(木) 18:22:14.89ID:y5cvZaYN0 >>858
algorithm にある std::find と string にある std::string::find の違いのことかな?
それはまあ名前が同じだけの別物なんでそういうものと思うしか仕方がない。
begin については、
異なるものが共通のインターフェイスで扱えるとテンプレート内で扱いやすいだろうというのが基本的な事情。
でも配列とかポインタがメンバを持つことは出来ないからこれらも含めて共通の扱いをしたい場合は
メンバ関数の begin よりも非メンバ関数の std::begin を使う必要がある。
メンバに begin を持っている場合はそれを直接に呼んでも std::begin を使っても結果は同じだよ。
C++ には ADL という仕組みがあって引数に関連する名前空間も関数を探す探索対象になるというルールがある。
std::begin は ADL の仕組みと相性が悪いところがあって扱いづらいので
新しい仕様は std::ranges::begin が導入された。
ややこしいんだが全部を一貫して説明できるような統制された理屈があるわけではなくて
細々とした歴史的事情の積み重ねでグダグダになってるだけ。
algorithm にある std::find と string にある std::string::find の違いのことかな?
それはまあ名前が同じだけの別物なんでそういうものと思うしか仕方がない。
begin については、
異なるものが共通のインターフェイスで扱えるとテンプレート内で扱いやすいだろうというのが基本的な事情。
でも配列とかポインタがメンバを持つことは出来ないからこれらも含めて共通の扱いをしたい場合は
メンバ関数の begin よりも非メンバ関数の std::begin を使う必要がある。
メンバに begin を持っている場合はそれを直接に呼んでも std::begin を使っても結果は同じだよ。
C++ には ADL という仕組みがあって引数に関連する名前空間も関数を探す探索対象になるというルールがある。
std::begin は ADL の仕組みと相性が悪いところがあって扱いづらいので
新しい仕様は std::ranges::begin が導入された。
ややこしいんだが全部を一貫して説明できるような統制された理屈があるわけではなくて
細々とした歴史的事情の積み重ねでグダグダになってるだけ。
861デフォルトの名無しさん (ワッチョイ c71f-CTeB)
2023/04/15(土) 01:20:02.46ID:dgB6RPkk0 intとsize_tって足し算したらsize_tになるんか・・・?
862デフォルトの名無しさん (ワッチョイ 0701-ieXZ)
2023/04/15(土) 02:11:09.11ID:KQOFatDn0 bit数の大きい側に拡張してから演算するんやっけ
863デフォルトの名無しさん (ワッチョイ 7fda-OGDT)
2023/04/15(土) 02:27:21.46ID:m2iUDqjP0 不安ならキャストせい
864デフォルトの名無しさん (ワッチョイ c71f-CTeB)
2023/04/15(土) 02:33:26.00ID:dgB6RPkk0 改めて書くと
std::vector<...> vec;
int neg = -15;
for(int x = neg ; x < neg + vec.size() ; x++){ ...
こんな感じのfor文の中になぜか入ってこず
for(int x = neg ; x < neg + (int)vec.size() ; x++){ ...
こう書き換えたらfor文の中にちゃんと入ってきたので
何事かと
std::vector<...> vec;
int neg = -15;
for(int x = neg ; x < neg + vec.size() ; x++){ ...
こんな感じのfor文の中になぜか入ってこず
for(int x = neg ; x < neg + (int)vec.size() ; x++){ ...
こう書き換えたらfor文の中にちゃんと入ってきたので
何事かと
865デフォルトの名無しさん (ワッチョイ 7fda-OGDT)
2023/04/15(土) 02:57:32.14ID:m2iUDqjP0 そりゃビット数の多いsize_tに自動的にキャストされるからな
866デフォルトの名無しさん (ワッチョイ 277c-H95I)
2023/04/15(土) 09:19:08.06ID:9E7JiVxa0 コンパイラの警告出てるでしょそれ
867デフォルトの名無しさん (ワッチョイ 5ffb-ZLJR)
2023/04/15(土) 12:55:47.51ID:ZHLNp/Uz0 32bit intが表現できる範囲(-21億〜+21億)と
size_tが表現できる範囲(32bit環境なら0〜42億、64bit環境なら1800京)が違うんだよね
直接キャストしたり比較演算した結果が一目で分からないし、
未規定の動作も紛れてるから
コンパイラによって結果が変わったりする
size_tが表現できる範囲(32bit環境なら0〜42億、64bit環境なら1800京)が違うんだよね
直接キャストしたり比較演算した結果が一目で分からないし、
未規定の動作も紛れてるから
コンパイラによって結果が変わったりする
868はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5f3e-S3w6)
2023/04/15(土) 15:43:33.34ID:5Qe8Q1VE0 ちなみに更に厳密なことを言うと std::vector::size() の返却値の型は std::vector::size_type であって、
一般的な実装では size_t の別名として定義されることが多いけどそうでないこともありうる。
一般的な実装では size_t の別名として定義されることが多いけどそうでないこともありうる。
869デフォルトの名無しさん (ワッチョイ c75f-nEk4)
2023/04/15(土) 17:41:19.21ID:SXeCdLds0 移植性を気にする人ってtypename std::vector<hoge>::size_typeとか書いてるの?
870デフォルトの名無しさん (ワッチョイ 277c-H95I)
2023/04/15(土) 18:32:47.38ID:9E7JiVxa0 こんなかなあ
不用意にsize_t決め打ちはなるべくしない(せざるをえない場合もある)
auto N = v.size();
for(decltype(N) i = 0; i < N; ++i) { /**/ }
不用意にsize_t決め打ちはなるべくしない(せざるをえない場合もある)
auto N = v.size();
for(decltype(N) i = 0; i < N; ++i) { /**/ }
871デフォルトの名無しさん (ワッチョイ 5f79-uE6i)
2023/04/15(土) 20:20:15.05ID:iq3ZlEDB0 単にsize_tの型とイコールじゃなかったらエラーではねとけばいいんじゃね
想定外環境でも何でもかんでも通そううなんて思考はバグの元になるし
想定外環境でも何でもかんでも通そううなんて思考はバグの元になるし
872デフォルトの名無しさん (ワッチョイ 674e-baic)
2023/04/15(土) 20:53:24.33ID:9nQxeRw/0 NAXDE
873デフォルトの名無しさん (ワッチョイ 674e-baic)
2023/04/15(土) 20:58:21.87ID:9nQxeRw/0 なんでsize_tをunsigned にしたんだろうな…
874デフォルトの名無しさん (ワッチョイ 5fad-soEM)
2023/04/15(土) 21:05:21.11ID:r+oi7xUE0 そりゃサイズに負数はあり得ないからでは?
-12バイトのファイルなんてありえないですし
-12バイトのファイルなんてありえないですし
875デフォルトの名無しさん (ワッチョイ 4701-ieXZ)
2023/04/15(土) 21:41:39.88ID:fX0vt5Cu0 奥さん! そこでssize_tですよ!
876デフォルトの名無しさん (ワッチョイ 7fcf-baic)
2023/04/15(土) 22:41:45.51ID:21huWqOn0 数の概念が生まれた当初は負の数なんて想像つかなかったしな。
マイナス3個のリンゴとか存在しないし。
マイナス3個のリンゴとか存在しないし。
877デフォルトの名無しさん (ワッチョイ 5fad-soEM)
2023/04/15(土) 22:44:53.66ID:r+oi7xUE0 つまりマイナスの概念が存在しない時からsize_tは存在していた!?
878デフォルトの名無しさん (ワッチョイ a702-em59)
2023/04/15(土) 23:18:30.96ID:mFN3uRP10 負数があるならssize_tやptrdiff_tと使い分けなよ…
879デフォルトの名無しさん (ワッチョイ 5f28-C4RG)
2023/04/16(日) 09:49:57.27ID:KtrVYfy50 for (size_t k = 999; k >= 0; k--) {
...
...
880デフォルトの名無しさん (ワッチョイ 7fda-OGDT)
2023/04/16(日) 12:17:04.86ID:mZTbxJpt0 for (size_t k = 999; k+1 > 0; k--) {
...
...
881デフォルトの名無しさん (スププ Sd7f-wMyH)
2023/04/16(日) 17:59:44.79ID:gghWvzSgd k > -1
882デフォルトの名無しさん (ワッチョイ c75f-nEk4)
2023/04/16(日) 21:30:04.86ID:SbMfPVDO0 k < -1
883デフォルトの名無しさん (ワッチョイ a702-em59)
2023/04/16(日) 23:08:58.58ID:EOwLLPBr0 くノ一
884デフォルトの名無しさん (アウアウウー Sacb-/q5i)
2023/04/17(月) 20:58:44.15ID:RKcegE7fa size_t の変数を 0 との大小で比較しても
常に >= 0 だから変なことになる
for で -- してるときは特に注意な
常に >= 0 だから変なことになる
for で -- してるときは特に注意な
885デフォルトの名無しさん (ラクッペペ MM8f-bKDU)
2023/04/18(火) 07:58:45.20ID:EVDEK+w/M 負の数、虚の数
886デフォルトの名無しさん (ワッチョイ 7fa7-zN3t)
2023/04/18(火) 09:29:12.70ID:hwR9qYx/0 符号無しループはグーグルだとコーディング規約違反だからな
887デフォルトの名無しさん (ワッチョイ 2763-7nfa)
2023/04/19(水) 11:20:40.34ID:twYHK80b0 コーディング基準はあくまで特定案件での決めごとに過ぎず
井の外で何かを批判する根拠に使っても説得力はない
井の外で何かを批判する根拠に使っても説得力はない
888デフォルトの名無しさん (ワッチョイ c75f-nEk4)
2023/04/19(水) 11:50:42.02ID:rE0e6VM+0 符号ありしかない言語もあるから、それなりに一般性あるかと
889デフォルトの名無しさん (ワッチョイ 2763-7nfa)
2023/04/19(水) 12:06:58.70ID:twYHK80b0 特定案件つーてるのに他の言語?
話通じないやつだな
話通じないやつだな
890デフォルトの名無しさん (ワッチョイ c75f-nEk4)
2023/04/19(水) 12:12:27.61ID:rE0e6VM+0 あれ?話広げたいんじゃなかったのか こりゃ失礼
891デフォルトの名無しさん (ワッチョイ 5f28-C4RG)
2023/04/21(金) 06:54:24.86ID:zpP4hMgV0 std::vector<T>::size()やstrlen()が符号無しで返してくるからそれらを使った汎用ライブラリ的なものを書く場合に仕方なくsize_tを使うこともあるだけでループ変数については符号有りで大して困らない希ガスだいたいOS記述言語であるところのC言語がアセンブラでは常識的に利用されるゼロフラグやキャリーフラグの概念を捨て去った設計した点をかみしめるべきや整数表現のMSBまで符号以外の意味で使わねばならないシチュエーションはマジ少ない多倍長演算であってさえ2のべき乗範囲に拘るのを捨てたらゼロフラグやキャリーフラグを駆使してビット幅全部使う記述と同等以上の効率にできうる
892デフォルトの名無しさん (ワッチョイ 277c-H95I)
2023/04/21(金) 07:19:21.58ID:opTauXds0 句読点を入れろ
893デフォルトの名無しさん (ワッチョイ 279c-3fkD)
2023/04/21(金) 08:49:31.32ID:6fw7yQrg0 江戸時代かよ。
894デフォルトの名無しさん (ワッチョイ 7fa7-S3w6)
2023/04/21(金) 11:52:07.81ID:Er6tcVYC0 スレチだと思うけどx86intrinsicsに詳しい人がいたらNonTemporal命令について教えてもらいたい
_mm_stream_load_si128や_mm_stream_si32はCPUキャッシュに対象範囲が無い場合はキャッシュスルーして確実にメモリを読み書きするということは分かったけど、
CPUキャッシュにある場合の挙動は一般的な命令同様にCPU内だけで完結してしまう?
_mm_stream_load_si128や_mm_stream_si32はCPUキャッシュに対象範囲が無い場合はキャッシュスルーして確実にメモリを読み書きするということは分かったけど、
CPUキャッシュにある場合の挙動は一般的な命令同様にCPU内だけで完結してしまう?
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 国内ホテル、既にキャンセルも 訪日客関連業界、事態見守る ★3 [蚤の市★]
- 習政権、高市首相への態度硬化 台湾有事発言で連日非難 中国 ★11 [ぐれ★]
- 橋下徹氏 外務省幹部の訪中受け「口だけ番長」へ痛烈指摘 「喧嘩は日本の完敗…なんとかっこ悪い日本か」 [冬月記者★]
- 【外国人問題】小野田紀美担当相「不法就労や不法滞在は許さない」 [シャチ★]
- 【野球】井端監督 大谷翔平、山本由伸らのWBCへの参加 「1日も早く返事ほしい」「待っててといっても、国内組が遅くなってしまう」★3 [冬月記者★]
- 東京株式市場 インバウンド関連株が下落 中国政府の渡航自粛要請で [バイト歴50年★]
- 【実況】博衣こよりのえちえち朝こよ🧪
- 「これが完成された醜い姿である>>1」←これなに?
- 中国「高市が頭を下げて謝罪しない限り、絶対に許さない」 [329329848]
- 🏡
- 安倍晋三の遺産、日銀ETF売却終了予定は2138年 [115996789]
- 【高市刺客】 自民党「公明党の斉藤代表と闘う! 衆議院広島3区に公認候補を立てるぞ😤」 [485983549]
