エスケープシーケンスやWin32APIなどの環境依存なものもOK
そのような質問は必ず環境を書きましょう
半角空白やタブでのインデントはスレに貼ると無くなります
コードを貼れる所
http://codepad.org/
https://ideone.com/
前スレ
【初心者歓迎】C/C++室 Ver.103【環境依存OK】
https://mevius.5ch.net/test/read.cgi/tech/1530384293/
探検
【初心者歓迎】C/C++室 Ver.104【環境依存OK】
■ このスレッドは過去ログ倉庫に格納されています
2018/12/28(金) 06:04:52.38ID:ufThBpcD
698デフォルトの名無しさん
2019/03/07(木) 06:28:12.40ID:beHWBAJY 短時間、というか連続で何度も時刻の値を入手して、
値の下の方の桁がかならずゼロ並びになってるとか、
時刻同士の差を取って、ある値より小さな数が出ないことから、
解像度の見当を付けるくらいかな。
もっと良いやり方を知ってる人は教えてください。
値の下の方の桁がかならずゼロ並びになってるとか、
時刻同士の差を取って、ある値より小さな数が出ないことから、
解像度の見当を付けるくらいかな。
もっと良いやり方を知ってる人は教えてください。
699デフォルトの名無しさん
2019/03/07(木) 09:17:09.23ID:0XBNAuOg 差をとってその偏差を見ればいいんでは
高解像度タイマーならたぶんcpuのクロック程度の解像度じゃないの
パフォーマンス測定に普通使うし
個人的にはchrono使わずにosのapiかコンパイラの組み込み関数使う
そっちの方が信頼できるし、chronoは型がガチガチすぎて面倒くさい
高解像度タイマーならたぶんcpuのクロック程度の解像度じゃないの
パフォーマンス測定に普通使うし
個人的にはchrono使わずにosのapiかコンパイラの組み込み関数使う
そっちの方が信頼できるし、chronoは型がガチガチすぎて面倒くさい
700デフォルトの名無しさん
2019/03/07(木) 09:44:34.06ID:MJ46GSxE アナログ出力してオシロで確認
701デフォルトの名無しさん
2019/03/07(木) 19:42:23.39ID:41TL6wBf std::vectorの最初の要素数は
std::vectro<foo> bar(12);
みたいにコンストラクタで指定できますが、同様に
std::vector<std::vectro<foo>> bar
のように入れ子になったvectorの両方の要素数をコンストラクタで指定する方法はありますか?
std::vectro<foo> bar(12);
みたいにコンストラクタで指定できますが、同様に
std::vector<std::vectro<foo>> bar
のように入れ子になったvectorの両方の要素数をコンストラクタで指定する方法はありますか?
702デフォルトの名無しさん
2019/03/07(木) 20:10:03.40ID:rioBJ/QG 結構難しいと思うがね。
最近のCPUはターボブーストいうてサボるし、命令順序入れ替えるし、キャッシュの乗り方でnano秒程度は簡単にズレるだろうし。
最近のCPUはターボブーストいうてサボるし、命令順序入れ替えるし、キャッシュの乗り方でnano秒程度は簡単にズレるだろうし。
703デフォルトの名無しさん
2019/03/07(木) 20:45:12.44ID:xMxnKQAI >>701
std::vector<std::vector<foo>> a(100, std::vector<foo>(200));
std::vector<std::vector<foo>> a(100, std::vector<foo>(200));
704デフォルトの名無しさん
2019/03/07(木) 20:50:20.24ID:pnI3L7PU >>702
最近のは対策入ってる
最近のは対策入ってる
705デフォルトの名無しさん
2019/03/07(木) 22:54:09.91ID:qMT9Q04c >>703
ありがとござます!
ありがとござます!
706デフォルトの名無しさん
2019/03/09(土) 07:43:53.39ID:L5yO1DTL Cで書かれたライブラリから来た構造体にスマポをあてる方法はありますか?
707デフォルトの名無しさん
2019/03/09(土) 09:00:25.13ID:jz9xUaFa どうなんだろ?
普通に考えたらデストラクタでfreeを呼べばいいから、それ用のライブラリがありそうな気はするけど。
普通に考えたらデストラクタでfreeを呼べばいいから、それ用のライブラリがありそうな気はするけど。
708デフォルトの名無しさん
2019/03/09(土) 10:46:03.96ID:ABNsWlsO >>706
スマポ弄ってアロケートだけしないようにすればいいんじゃね?
スマポ弄ってアロケートだけしないようにすればいいんじゃね?
709デフォルトの名無しさん
2019/03/09(土) 11:36:20.07ID:4ewQpv+T 「来た」というのが構造体へのポインタをfree責任ごと渡されたという意味ならカスタムデリータだろうな。
710706
2019/03/09(土) 12:16:02.29ID:L5yO1DTL ありがとうございます
カスタムデリータは知りませんでした
Cで書かれたライブラリにmallocしたポインタを返してくる関数があって生ポいやだなあと思っていたところでした
カスタムデリータは知りませんでした
Cで書かれたライブラリにmallocしたポインタを返してくる関数があって生ポいやだなあと思っていたところでした
711デフォルトの名無しさん
2019/03/09(土) 14:06:24.90ID:YAm1zwse 最近スマポ使えスマポ使えってうるさい割にはカスタムデリータ指定出来ることも知らなかったりするんだな
自分が使ってるもののリファレンスすら読んでない奴が安全性とかどの口で言ってるんだろう
自分が使ってるもののリファレンスすら読んでない奴が安全性とかどの口で言ってるんだろう
712デフォルトの名無しさん
2019/03/09(土) 15:07:55.58ID:23Hi4jvz わかってない奴ほど、声がデガイんだよ。
713デフォルトの名無しさん
2019/03/09(土) 17:13:56.74ID:kfZA3URW codecvt_utf8
codecvt_utf16
codecvt_utf8_utf16
こいつらの糞加減に
codecvt_utf16
codecvt_utf8_utf16
こいつらの糞加減に
714デフォルトの名無しさん
2019/03/09(土) 17:33:22.12ID:anJ4ej+i 最近カスタムデリータ知ったから嬉しがってる奴がいるなw
715デフォルトの名無しさん
2019/03/09(土) 17:49:56.48ID:23Hi4jvz >>711
すいませんね、リファレンスなんかそっちのけで、ネット情報だけで、プログラム組んでます。
すいませんね、リファレンスなんかそっちのけで、ネット情報だけで、プログラム組んでます。
716デフォルトの名無しさん
2019/03/09(土) 19:59:53.92ID:YAm1zwse717デフォルトの名無しさん
2019/03/09(土) 20:10:27.73ID:eJu7ZZw8 図星しとか意味分からん
ひょっとして>>711 disってるのか? w
ひょっとして>>711 disってるのか? w
718デフォルトの名無しさん
2019/03/09(土) 20:14:07.94ID:9vZTtl18 最近図星って言葉を覚えたので使いたいんだろう
察してやれ
察してやれ
719デフォルトの名無しさん
2019/03/09(土) 20:21:16.84ID:YAm1zwse >>711で言ったことが図星だったか?という意味なんだが
アホが多いインターネッツですね
アホが多いインターネッツですね
720デフォルトの名無しさん
2019/03/09(土) 20:32:45.58ID:kU0Uws1z 今度はインターネッツという言葉を覚えたのか
どんどん賢くなっていくな
どんどん賢くなっていくな
721デフォルトの名無しさん
2019/03/09(土) 20:39:00.33ID:ABNsWlsO カスタムデリータごときでよくそこまでドヤれるもんだなw
722デフォルトの名無しさん
2019/03/09(土) 20:46:58.79ID:YAm1zwse それ俺に言ってんの?w
723デフォルトの名無しさん
2019/03/09(土) 21:23:16.03ID:jx9iLAiD そもそもSTLの基幹部分とかJavaだろ。
724デフォルトの名無しさん
2019/03/09(土) 21:36:18.70ID:jz9xUaFa 実際c++やるやつのほとんどの動機がマウントとりたい以上のものではない。
725デフォルトの名無しさん
2019/03/09(土) 22:31:55.52ID:u5Pk3KZw > 俺に言ってんの?
意識しまくりすぎだろw
意識しまくりすぎだろw
726デフォルトの名無しさん
2019/03/09(土) 22:41:21.04ID:Tm/Y9JxW 大学四年かけてC++と機械学習学べば年収1000万とか本気で言ってる奴らだからな()
727デフォルトの名無しさん
2019/03/11(月) 22:26:31.27ID:QlHozVZM 相談なのですが
テキスト形式のライセンスファイルへのファイルパスを渡さないと使用できないライブラリA
そのライブラリAを使用するライブラリB
私が作成しているのはライブラリBです。お客さんに使ってもらうものなんですが、「ライセンスファイルをセットで提供して適切な場所に置いて使ってもらう」という手間を省きたくてライセンスファイルをライブラリBに埋め込めないかと思案しています。
とりあえずライセンスファイルの中身をソースにベタ書きし、実行時に一時ファイルとして作成しライブラリAにそのパスを渡すことで上手くいっているのですが、もっとスマートな方法はないでしょうか?
ファイルパスを渡さないといけないので無理ですかね…
テキスト形式のライセンスファイルへのファイルパスを渡さないと使用できないライブラリA
そのライブラリAを使用するライブラリB
私が作成しているのはライブラリBです。お客さんに使ってもらうものなんですが、「ライセンスファイルをセットで提供して適切な場所に置いて使ってもらう」という手間を省きたくてライセンスファイルをライブラリBに埋め込めないかと思案しています。
とりあえずライセンスファイルの中身をソースにベタ書きし、実行時に一時ファイルとして作成しライブラリAにそのパスを渡すことで上手くいっているのですが、もっとスマートな方法はないでしょうか?
ファイルパスを渡さないといけないので無理ですかね…
728デフォルトの名無しさん
2019/03/11(月) 22:57:10.81ID:9rO3q8tQ 納入時にファイル一つなんか?
実体なんやねん
実体なんやねん
729デフォルトの名無しさん
2019/03/11(月) 23:06:05.03ID:zGphoT2G ライブラリAが要求するのは
ファイルシステムに認知されるファイルの形式でないといけない
だから中間ファイルに書き出して、そのファイルパスを渡すしかない
つかライセンスを埋め込んだ場合何がしかの事情で
ライセンス変更の必要が迫られた場合ライブラリBを構築しなおすことになるんだが
そういう管理でいいのけ?
ファイルシステムに認知されるファイルの形式でないといけない
だから中間ファイルに書き出して、そのファイルパスを渡すしかない
つかライセンスを埋め込んだ場合何がしかの事情で
ライセンス変更の必要が迫られた場合ライブラリBを構築しなおすことになるんだが
そういう管理でいいのけ?
730デフォルトの名無しさん
2019/03/11(月) 23:06:05.25ID:CMHDEYzk >>728
ヘッダーと共有ライブラリのセットです。
ヘッダーと共有ライブラリのセットです。
731デフォルトの名無しさん
2019/03/11(月) 23:11:06.21ID:CMHDEYzk >>729
やっぱ他にないですよね…
継続的にバージョンアップ重ねて提供してるんですが、ライブラリAについては今後も使い続けるか微妙なんでお客さんに〜のように運用してくださいってお願いするのはまだやめておきたいんですよ。
まあその面倒ごとを避けようとするスタンスが一番よくないのかもしれませんね。
やっぱ他にないですよね…
継続的にバージョンアップ重ねて提供してるんですが、ライブラリAについては今後も使い続けるか微妙なんでお客さんに〜のように運用してくださいってお願いするのはまだやめておきたいんですよ。
まあその面倒ごとを避けようとするスタンスが一番よくないのかもしれませんね。
732デフォルトの名無しさん
2019/03/11(月) 23:14:01.28ID:CMHDEYzk というか自分がお客さんの立場にたってみれば、「カレントディレクトリにライセンスファイル置いて使ってください」と言われたら「はいOKです」ですむ問題ですよね。
やはりちゃんとライセンスファイル提供して使ってもらうべきかと思ってきました。
やはりちゃんとライセンスファイル提供して使ってもらうべきかと思ってきました。
733デフォルトの名無しさん
2019/03/11(月) 23:20:45.86ID:9rO3q8tQ >>730
どう配布すんのかしらんけど
共有ライブラリと同じとこに置いて固めるなり、インストーラー書くなりすれば十分やろ
たいして報われん努力やと思うわ
それよりライブラリAは何がしたいんか気になるわ
意味あんのかそれ
どう配布すんのかしらんけど
共有ライブラリと同じとこに置いて固めるなり、インストーラー書くなりすれば十分やろ
たいして報われん努力やと思うわ
それよりライブラリAは何がしたいんか気になるわ
意味あんのかそれ
734デフォルトの名無しさん
2019/03/11(月) 23:23:05.53ID:CMHDEYzk >>733
ライブラリAはwebAPI叩くからその時にアクセス権限チェックでライセンスファイルを使うようです。
ライブラリAはwebAPI叩くからその時にアクセス権限チェックでライセンスファイルを使うようです。
735デフォルトの名無しさん
2019/03/11(月) 23:36:41.67ID:9rO3q8tQ736デフォルトの名無しさん
2019/03/12(火) 01:51:07.02ID:xlgLjh5J 変数と型についてなんだがメモリは2進数でデータを記録していて、それを何byteで区切って、どういう意味を持つか(正の整数のみとか)を型で決めてるんだよね?だとしたらポインタに型があるのはなぜ?どれもアドレスを示すんだからある意味int型でいいと思うんだけど
737はちみつ餃子 ◆8X2XSCHEME
2019/03/12(火) 02:03:10.03ID:tBEUjULM >>736
そういう言語もあったよ。
でも、ポインタを経由しただけで型がわからなくなるんじゃ、
型システムが意味を成さないだろう。
元と違った型としてアクセスしようとしたときに、
型情報がなけりゃコンパイラが捕捉しようもない。
それはプログラマの責任で正しく扱うってのならそれでもいいし、
実際、 C/C++ はプログラマがやりたければポインタを整数に型変換することも出来るけど、
(言語仕様としてはほとんど保証はないが。)
人類は間違うのでな。
型が合わないエラーなんてたびたび出しちゃうもんだろ。
もし型がなければそれはスルーされてわけのわからない挙動をするプログラムになるんだぞ。
そういうのはもうやめようって話。
そういう言語もあったよ。
でも、ポインタを経由しただけで型がわからなくなるんじゃ、
型システムが意味を成さないだろう。
元と違った型としてアクセスしようとしたときに、
型情報がなけりゃコンパイラが捕捉しようもない。
それはプログラマの責任で正しく扱うってのならそれでもいいし、
実際、 C/C++ はプログラマがやりたければポインタを整数に型変換することも出来るけど、
(言語仕様としてはほとんど保証はないが。)
人類は間違うのでな。
型が合わないエラーなんてたびたび出しちゃうもんだろ。
もし型がなければそれはスルーされてわけのわからない挙動をするプログラムになるんだぞ。
そういうのはもうやめようって話。
738デフォルトの名無しさん
2019/03/12(火) 02:06:26.71ID:i1gu3hXZ >>736
ポインタに格納されるアドレス値は32bitとか64bitとかの整数でそれ自体は同じ型として扱えるとしても、そのポインタの指す先にある物の型が分からないと色々困るでしょ。
ポインタ型としてvoid*だけでプログラムを書こうとすればその必要性がわかるはず。
同じバイト表現だからといって同じ型で表さなければならない道理はない。用途や演算結果が異なるのだから別の型として扱うのはある意味自然なことだと思うよ。
ポインタに格納されるアドレス値は32bitとか64bitとかの整数でそれ自体は同じ型として扱えるとしても、そのポインタの指す先にある物の型が分からないと色々困るでしょ。
ポインタ型としてvoid*だけでプログラムを書こうとすればその必要性がわかるはず。
同じバイト表現だからといって同じ型で表さなければならない道理はない。用途や演算結果が異なるのだから別の型として扱うのはある意味自然なことだと思うよ。
739デフォルトの名無しさん
2019/03/12(火) 07:03:19.32ID:1t7NN+JI740デフォルトの名無しさん
2019/03/12(火) 07:35:06.24ID:nPeHxcg9 Cのポインタ型はK&Rのプログラミング言語Cに書いてある通り、単なるアドレスを保持する型じゃなくて配列の仲間なのよ。
例えば
char *cp =“abc”;
で
*(p+1)の様に書くと、ちゃんとcharサイズ分ずらしたアドレスを指してくれる。
その本には
(当時の)優れたプログラマたちがやってた事を言語仕様として取り込んだと、という様な事が書いてあったと思う。
ポインタが示す先の型とサイズやらの心配はC言語では不要だ、すげーだろ?的な。
例えば
char *cp =“abc”;
で
*(p+1)の様に書くと、ちゃんとcharサイズ分ずらしたアドレスを指してくれる。
その本には
(当時の)優れたプログラマたちがやってた事を言語仕様として取り込んだと、という様な事が書いてあったと思う。
ポインタが示す先の型とサイズやらの心配はC言語では不要だ、すげーだろ?的な。
741デフォルトの名無しさん
2019/03/12(火) 07:35:25.54ID:nPeHxcg9 Cのポインタ型はK&Rのプログラミング言語Cに書いてある通り、単なるアドレスを保持する型じゃなくて配列の仲間なのよ。
例えば
char *cp =“abc”;
で
*(p+1)の様に書くと、ちゃんとcharサイズ分ずらしたアドレスを指してくれる。
その本には
(当時の)優れたプログラマたちがやってた事を言語仕様として取り込んだと、という様な事が書いてあったと思う。
ポインタが示す先の型とサイズやらの心配はC言語では不要だ、すげーだろ?的な。
例えば
char *cp =“abc”;
で
*(p+1)の様に書くと、ちゃんとcharサイズ分ずらしたアドレスを指してくれる。
その本には
(当時の)優れたプログラマたちがやってた事を言語仕様として取り込んだと、という様な事が書いてあったと思う。
ポインタが示す先の型とサイズやらの心配はC言語では不要だ、すげーだろ?的な。
742デフォルトの名無しさん
2019/03/12(火) 07:37:59.58ID:nPeHxcg9743デフォルトの名無しさん
2019/03/12(火) 08:23:28.38ID:xHFKV8QO744デフォルトの名無しさん
2019/03/12(火) 08:29:27.03ID:i1gu3hXZ >>743
ポインタが指す先にいくつ分の領域があるか(いくつ分を参照してよいか)は記録されてないから、プログラマが自分の責任で管理するしかないよ
ポインタが指す先にいくつ分の領域があるか(いくつ分を参照してよいか)は記録されてないから、プログラマが自分の責任で管理するしかないよ
745デフォルトの名無しさん
2019/03/12(火) 08:41:29.44ID:7SPfMi3X >>743
直接長さを示す情報はどこにもないよ
だから、cの「文字列」は単なる文字の配列だけではなく、0終端が必要
>(脱線するけどNULL終端も数えて長さ4?)
その通り
(NULLはnullptrとしてのみ使ったほうがいいよ
混同してないならいいんだけどね)
直接長さを示す情報はどこにもないよ
だから、cの「文字列」は単なる文字の配列だけではなく、0終端が必要
>(脱線するけどNULL終端も数えて長さ4?)
その通り
(NULLはnullptrとしてのみ使ったほうがいいよ
混同してないならいいんだけどね)
746デフォルトの名無しさん
2019/03/12(火) 09:29:32.99ID:nPeHxcg9747デフォルトの名無しさん
2019/03/12(火) 09:32:06.13ID:u0RxZCyH \0終端が来るまで確保されていると想定して受け取り側は動作する
だから終端記号がないと色々まずい
(ので、バッファ長も指示する関数が後から増えた)
だから終端記号がないと色々まずい
(ので、バッファ長も指示する関数が後から増えた)
748デフォルトの名無しさん
2019/03/12(火) 09:32:15.05ID:xVickGeK 便乗質問でごめんやけど
delete [] p;
この場合deleteはどうやってサイズ調べてんの?
delete [] p;
この場合deleteはどうやってサイズ調べてんの?
749デフォルトの名無しさん
2019/03/12(火) 09:33:32.91ID:i1gu3hXZ >>746
char *cpで宣言してるならその計算じゃ配列サイズはとれないよ。
char *cpで宣言してるならその計算じゃ配列サイズはとれないよ。
750デフォルトの名無しさん
2019/03/12(火) 09:33:42.86ID:u0RxZCyH 要素数の算出は
sizeof(配列) / sizeof(配列[0]) または sizeof(配列) / sizeof(*配列)
ではなかろうか?
sizeof(配列) / sizeof(配列[0]) または sizeof(配列) / sizeof(*配列)
ではなかろうか?
751デフォルトの名無しさん
2019/03/12(火) 09:47:35.09ID:Nd0ou12Q 除算は遅いからなぁ
752デフォルトの名無しさん
2019/03/12(火) 10:18:57.28ID:u0RxZCyH コンパイル時に確定する値だから
実行時には定数として埋まってるんでないの?
(ほんとんどの環境で インタープリターはしらんw
実行時には定数として埋まってるんでないの?
(ほんとんどの環境で インタープリターはしらんw
753デフォルトの名無しさん
2019/03/12(火) 10:22:41.05ID:Nd0ou12Q sizeof(配列)は動的でしょう
754デフォルトの名無しさん
2019/03/12(火) 12:15:07.37ID:7lezZ5hH sizeofは演算子だから動的じゃないかな
最適化で消し飛ぶ可能性はあるのかもしれんけど
最適化で消し飛ぶ可能性はあるのかもしれんけど
755デフォルトの名無しさん
2019/03/12(火) 12:42:52.96ID:Gedrqwi7 >>748
実装依存だと思うけど、p[-1]とかに長さが書いてあったりする
実装依存だと思うけど、p[-1]とかに長さが書いてあったりする
756デフォルトの名無しさん
2019/03/12(火) 12:45:54.40ID:xHFKV8QO アンカー長くなるから省略するけど
みなさんありがとう
みなさんありがとう
757デフォルトの名無しさん
2019/03/12(火) 13:32:00.51ID:6Uu2j9Xc インクリメントするときに困る
758752
2019/03/12(火) 14:52:24.67ID:u0RxZCyH VLAのこと完全に忘れてた sizeof(配列) は動的だわ
759はちみつ餃子 ◆8X2XSCHEME
2019/03/12(火) 15:09:12.69ID:tBEUjULM sizeof の結果は動的な判断が必要な場合 (いわゆる VLA) を除いて整数定数であることは保証される。
C++ には VLA は無いので sizeof が動的であるかどうかを心配する必要はないんだけど、
それは置いといて、 C++ で配列の大きさを知りたいときは std::extent の方がよくない?
C++ には VLA は無いので sizeof が動的であるかどうかを心配する必要はないんだけど、
それは置いといて、 C++ で配列の大きさを知りたいときは std::extent の方がよくない?
760デフォルトの名無しさん
2019/03/12(火) 15:29:35.28ID:xWv5Y9zk761デフォルトの名無しさん
2019/03/12(火) 22:48:56.35ID:SU/8eF4+ 昔はstd::extent持ち出したりしたが今はstd::sizeだな
762デフォルトの名無しさん
2019/03/12(火) 23:05:04.16ID:/eUnUFro uint8_t *addrb =(uint8_t *)0x00F00000;
uint16_t *addrw =(uint16_t *)0x00F00000;
*addrb = 0x10;
*addrw = 0xF0F0;
0x00F00000番地に0x10と0xF0F0を書き込むコードらしいのですが、最初の2行がよく分かりません。アドレスが4バイトなのにポインタはそれより小さくて問題ないのでしょうか。右辺のキャストは何を行っているのでしょうか。
よろしくお願いします。
uint16_t *addrw =(uint16_t *)0x00F00000;
*addrb = 0x10;
*addrw = 0xF0F0;
0x00F00000番地に0x10と0xF0F0を書き込むコードらしいのですが、最初の2行がよく分かりません。アドレスが4バイトなのにポインタはそれより小さくて問題ないのでしょうか。右辺のキャストは何を行っているのでしょうか。
よろしくお願いします。
763デフォルトの名無しさん
2019/03/12(火) 23:29:55.31ID:RU0tEwI6764デフォルトの名無しさん
2019/03/12(火) 23:37:26.58ID:y5WX6T5u >ポインタはそれより小さくて問題ないのでしょうか。
*addrb = 0x10;
*addrw = 0xF0F0;
この文を見て上の疑問に到達したのかな?
ポインタは addrb や addrw で その変数の器の大きさはアドレスを格納できる大きさ
*addrb で アドレスにさされた先の内容を示す 内容の大きさはその型による
*addrb は uint8_t 型でおそらく1バイト (1オクテット)
*addrw は uint16_t 型でおそらく2バイト (2オクテット)
*addrb = 0x10;
*addrw = 0xF0F0;
この文を見て上の疑問に到達したのかな?
ポインタは addrb や addrw で その変数の器の大きさはアドレスを格納できる大きさ
*addrb で アドレスにさされた先の内容を示す 内容の大きさはその型による
*addrb は uint8_t 型でおそらく1バイト (1オクテット)
*addrw は uint16_t 型でおそらく2バイト (2オクテット)
765デフォルトの名無しさん
2019/03/13(水) 18:31:26.55ID:yPp5BeL1 ありがとうございます。
理解できました。
そもそもアドレス自身のサイズがあるものと勘違いしてました。
理解できました。
そもそもアドレス自身のサイズがあるものと勘違いしてました。
766デフォルトの名無しさん
2019/03/14(木) 06:41:14.61ID:SGfhnH0M アドレス自身にもサイズはあるけどね。
sizeof(*addrb) == たぶん 1 (8bit)
sizeof(*addrw) == たぶん 2 (16bit)
sizeof(addrb) ... 近頃のPCでは 4 (32bitアドレス) か 8 (64bitアドレス) かのう。
sizeof(*addrb) == たぶん 1 (8bit)
sizeof(*addrw) == たぶん 2 (16bit)
sizeof(addrb) ... 近頃のPCでは 4 (32bitアドレス) か 8 (64bitアドレス) かのう。
767デフォルトの名無しさん
2019/03/14(木) 12:20:30.31ID:Yw9IVRaM メモリ消費についてききたい。
8byteのa,b,cっていう変数と、それを結合した24byteのdっていう変数をクラス内で扱いたいんだけど、素直にやると48byteメモリ消費だよね?
代わりに24byteのdと、8byte型のポインタ(4byte)3つ宣言したら36byteのメモリ消費で12byte/オブジェクトの節約になると思うんだけど、最適化したければ意識するべき?
あるいはコンパイラがその辺は上手にやってくれて最小限のメモリ消費になる?
8byteのa,b,cっていう変数と、それを結合した24byteのdっていう変数をクラス内で扱いたいんだけど、素直にやると48byteメモリ消費だよね?
代わりに24byteのdと、8byte型のポインタ(4byte)3つ宣言したら36byteのメモリ消費で12byte/オブジェクトの節約になると思うんだけど、最適化したければ意識するべき?
あるいはコンパイラがその辺は上手にやってくれて最小限のメモリ消費になる?
768さまよえる蟻人間 ◆T6xkBnTXz7B0
2019/03/14(木) 12:26:16.05ID:1+g2CCuw >>767
ポインタ先をチェック・確保するのにヒープメモリーと計算コストが掛かる。
ポインタ先をチェック・確保するのにヒープメモリーと計算コストが掛かる。
769デフォルトの名無しさん
2019/03/14(木) 13:52:59.75ID:M+miX7Aw770デフォルトの名無しさん
2019/03/14(木) 14:39:59.26ID:3EvgP48J >>767
それ実体の24byteが別に要るだろ…
それ実体の24byteが別に要るだろ…
771デフォルトの名無しさん
2019/03/14(木) 14:43:45.46ID:q8OuUl64 下のソースをコンパイルしてコマンドプロンプト(cmd)で実行すると「鷗」の字が出力されません
int main(int ac, char **av){
setlocale(LC_ALL, "");
fwprintf(stdout, L"[%c]\n", 0x3042); // [あ] と表示される
fwprintf(stdout, L"[%c]\n", 0x9dd7); // [?] と表示される
return 0;
}
同じコマンドプロンプト(同じwindowsインスタンス上)で
python3 からだと(スクリプト経由でもIDEでもどちらも)
print(f'[{0x3042:c}]') # [あ]
print(f'[{0x9dd7:c}]') # [鷗]
表示されます
setlocale(LC_CTYPE, "en_US:utf8");
にしても同じでした
python3 からだと表示出来るということは
fwprintf に問題があるということでしょうか?
int main(int ac, char **av){
setlocale(LC_ALL, "");
fwprintf(stdout, L"[%c]\n", 0x3042); // [あ] と表示される
fwprintf(stdout, L"[%c]\n", 0x9dd7); // [?] と表示される
return 0;
}
同じコマンドプロンプト(同じwindowsインスタンス上)で
python3 からだと(スクリプト経由でもIDEでもどちらも)
print(f'[{0x3042:c}]') # [あ]
print(f'[{0x9dd7:c}]') # [鷗]
表示されます
setlocale(LC_CTYPE, "en_US:utf8");
にしても同じでした
python3 からだと表示出来るということは
fwprintf に問題があるということでしょうか?
772デフォルトの名無しさん
2019/03/14(木) 14:57:23.81ID:tsxAqnNH Windows は、Visual Studio だろ
TCHAR マクロで、sjis/Unicode を切り替える。
Windows用の環境を揃えないと、無理だろ
TCHAR マクロで、sjis/Unicode を切り替える。
Windows用の環境を揃えないと、無理だろ
773デフォルトの名無しさん
2019/03/14(木) 15:10:14.13ID:q8OuUl64 UNICODE
_UNICODE
とかは定義してあります
それに[あ]の方は表示されてるので
TCHAR が char と誤認識とかめっちゃ的外れな指摘だと感じます
_UNICODE
とかは定義してあります
それに[あ]の方は表示されてるので
TCHAR が char と誤認識とかめっちゃ的外れな指摘だと感じます
774デフォルトの名無しさん
2019/03/14(木) 15:25:54.72ID:s2YvJJWc fwprintf
ワイド文字を書き込む場合、ファイルはバイナリー・モードでオープンするか、
o_ccsid または codepage パラメーターでオープンする必要があります。
これにより、ワイド文字に対して変換が発生しないことが保証されます。
ワイド文字を書き込む場合、ファイルはバイナリー・モードでオープンするか、
o_ccsid または codepage パラメーターでオープンする必要があります。
これにより、ワイド文字に対して変換が発生しないことが保証されます。
775デフォルトの名無しさん
2019/03/14(木) 17:04:07.47ID:DMc/T5SW >>767
もしかして windows で 24bitカラーを取り扱いたい話? union で楽する
#pragma pack(push,1)
typedef union {
BYTE e[3];
struct { BYTE B, G, R; };
} BPP24_t;
#pragma pack(pop)
もしかして windows で 24bitカラーを取り扱いたい話? union で楽する
#pragma pack(push,1)
typedef union {
BYTE e[3];
struct { BYTE B, G, R; };
} BPP24_t;
#pragma pack(pop)
776デフォルトの名無しさん
2019/03/14(木) 19:02:32.98ID:wP1B/x23777デフォルトの名無しさん
2019/03/14(木) 19:26:19.44ID:lcdumzgu778デフォルトの名無しさん
2019/03/14(木) 20:21:10.72ID:2vbDdJqi 規格で標準ライブラリ中のメソッドがconst指定されていない場合これをconst指定するのは規格違反ですか?
具体的にはuniform_int_distributionのconstなインスタンスを生成してoperator()(URNG& g)を呼び出すとMSVC(VS2017)のみ通り、gcc4.3.2とclang4.0ではコンパイルエラーになりました
N4140及びN4659を参照した限り、上記のオペレータはconst指定されていませんでした
具体的にはuniform_int_distributionのconstなインスタンスを生成してoperator()(URNG& g)を呼び出すとMSVC(VS2017)のみ通り、gcc4.3.2とclang4.0ではコンパイルエラーになりました
N4140及びN4659を参照した限り、上記のオペレータはconst指定されていませんでした
779デフォルトの名無しさん
2019/03/14(木) 20:28:14.30ID:gIuDI0vP >>776
フレームの組み立ては迷うことなくstructでいいと思うのですがどうでしょう。ちなみにpingではは素直にstructで組み立ててあります。
フレームの組み立ては迷うことなくstructでいいと思うのですがどうでしょう。ちなみにpingではは素直にstructで組み立ててあります。
780デフォルトの名無しさん
2019/03/14(木) 20:30:26.12ID:V4l0GHvB781デフォルトの名無しさん
2019/03/14(木) 21:00:14.82ID:gIuDI0vP >>780
ああ、なるほど。structでガワ作っておいて、ペイロード書き換えてバッファに溜めていくって感じでしかやった事しかないですけどケースバイケースなんでしょうね。
ああ、なるほど。structでガワ作っておいて、ペイロード書き換えてバッファに溜めていくって感じでしかやった事しかないですけどケースバイケースなんでしょうね。
782デフォルトの名無しさん
2019/03/14(木) 21:58:48.11ID:VY0DZD81 コンソールがSJISだから無理
783デフォルトの名無しさん
2019/03/14(木) 23:31:25.66ID:u00Rfoqy C++難しすぎねえか?
こんなの新機能を網羅してる人どんだけいるんだか・・・
こんなの新機能を網羅してる人どんだけいるんだか・・・
784デフォルトの名無しさん
2019/03/14(木) 23:39:23.56ID:CLlwPgIu 奥義を究めると尊敬されます(カモ)
785はちみつ餃子 ◆8X2XSCHEME
2019/03/14(木) 23:47:20.81ID:mXS2OKIJ >>783
別に網羅せんでも使えるところだけ使えば良い。
常に新しい機能を把握しておく必要はない。
使わない方が良い機能というのは有るので、駄目な部分を把握する方が大事だと思う。
(その結果として新しい機能に行きつくこともあるけど。)
新しい機能を使わないと回りくどくなるだけだが、
駄目な機能は致命傷になる (という可能性をコンパイル時にエラーに出来ない) こともあるので。
今の C++ で nullptr でなく NULL を使う理由は全然ない、みたいなのとか。
別に網羅せんでも使えるところだけ使えば良い。
常に新しい機能を把握しておく必要はない。
使わない方が良い機能というのは有るので、駄目な部分を把握する方が大事だと思う。
(その結果として新しい機能に行きつくこともあるけど。)
新しい機能を使わないと回りくどくなるだけだが、
駄目な機能は致命傷になる (という可能性をコンパイル時にエラーに出来ない) こともあるので。
今の C++ で nullptr でなく NULL を使う理由は全然ない、みたいなのとか。
786デフォルトの名無しさん
2019/03/14(木) 23:49:54.51ID:Gk3KilXE てかコンセプトが待ち遠しい
templateの黒魔術っぷりが大幅に改善されるよね
エラーメッセージが分かりやすくなるのが大きい
templateの黒魔術っぷりが大幅に改善されるよね
エラーメッセージが分かりやすくなるのが大きい
787はちみつ餃子 ◆8X2XSCHEME
2019/03/15(金) 00:08:50.55ID:q2a9nFaz コンセプトとモジュールは C++er の悲願って感じだからな……。
今まで土壇場での延期を繰返した経緯を考えると次も本当に入るのか
疑わしい気はするけど。
今まで土壇場での延期を繰返した経緯を考えると次も本当に入るのか
疑わしい気はするけど。
788デフォルトの名無しさん
2019/03/15(金) 02:19:09.67ID:f+LcC8HT 配列のアドレスが表示できません。何が悪いのでしょうか。結果はからになります。
unsigned char a[100];
cout << hex << &a[5] << endl;
unsigned char a[100];
cout << hex << &a[5] << endl;
789デフォルトの名無しさん
2019/03/15(金) 02:52:40.51ID:nvk7uoI+ a+5
790さまよえる蟻人間 ◆T6xkBnTXz7B0
2019/03/15(金) 04:49:34.55ID:CgPhXsZt (void *)
791デフォルトの名無しさん
2019/03/15(金) 06:53:21.47ID:F3jqlZHF >>788
&a[5] は「unsigned char を指すポインタ」なので
cout << では「'\0'で終端する文字列」として表示しようとするのよ。
なもんで >>790 の通り void* にキャストして、
具体的なデータを指さない「単なるアドレス」扱いしてくれと指示。
ちなみに >>789 は効果ないでしょ。
でも C++ の作法としては static_cast<void*>(&a[5]) と
長々しい名前付きキャストを使うべきなんじゃろか。
個人的には static_cast<const void*>(&a[5]) まで書きたいけど。
inline const void *to_voidptr(const void* p) {return p;}
てな具合に、字数を減らすための変換用の関数でも使うか。
…何か標準的で短い書き方があったりするのかしら。
&a[5] は「unsigned char を指すポインタ」なので
cout << では「'\0'で終端する文字列」として表示しようとするのよ。
なもんで >>790 の通り void* にキャストして、
具体的なデータを指さない「単なるアドレス」扱いしてくれと指示。
ちなみに >>789 は効果ないでしょ。
でも C++ の作法としては static_cast<void*>(&a[5]) と
長々しい名前付きキャストを使うべきなんじゃろか。
個人的には static_cast<const void*>(&a[5]) まで書きたいけど。
inline const void *to_voidptr(const void* p) {return p;}
てな具合に、字数を減らすための変換用の関数でも使うか。
…何か標準的で短い書き方があったりするのかしら。
792デフォルトの名無しさん
2019/03/15(金) 08:07:08.74ID:fLDhqMRG 文字はcharだけでsigned/unsignedは整数扱いするとかしてくれりゃよかったのにな。
793デフォルトの名無しさん
2019/03/15(金) 09:38:53.54ID:MV2geWC9 coutなんて使うのが悪い
printf()でおk
printf()でおk
794デフォルトの名無しさん
2019/03/15(金) 10:50:58.56ID:nvk7uoI+ qDebugばっか使ってたからcoutの使い方なんて忘れてたわw
795デフォルトの名無しさん
2019/03/17(日) 06:21:33.06ID:Q6jWm6hE そういえば「cout << &a[5] でアドレス値が表示されない」ってのは
char 系の配列やポインタの場合だけで起きる特殊例なのかな。
ユーザーが operator<<(ostream&, T*) の再定義をしない標準の状態で、
オブジェクトのアドレス値を送ったらアドレス値以外の何かが表示される型って
標準か有名どころのライブラリで、何か知ってる?
char 系の配列やポインタの場合だけで起きる特殊例なのかな。
ユーザーが operator<<(ostream&, T*) の再定義をしない標準の状態で、
オブジェクトのアドレス値を送ったらアドレス値以外の何かが表示される型って
標準か有名どころのライブラリで、何か知ってる?
796デフォルトの名無しさん
2019/03/17(日) 12:02:02.30ID:ZVJiTVd1 operator<<(ostream&, T*) の再定義をしないライブラリで
オブジェクトのアドレス値を送ったらアドレス値以外の何かが表示される型を定義しているものは?
という質問に置き換えてみた
オブジェクトのアドレス値を送ったらアドレス値以外の何かが表示される型を定義しているものは?
という質問に置き換えてみた
797デフォルトの名無しさん
2019/03/17(日) 13:17:40.49ID:4LIjOkKH gccのiostreamのソース辿れば全部書いてあるよ。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- ネット殺到「高市総理の責任」「完全に高市リスク」「負けるな」中国が水産物輸入停止→流石に総理批判の声も「どう責任取る?」 ★2 [樽悶★]
- 中国外務省局長 「ポケットに手を入れていたのは寒いから」 日本との局長級会談で ★3 [お断り★]
- 【為替】対ドルで157円台、対ユーロ181円台に下落 財政悪化を警戒 [蚤の市★]
- 高市首相「台湾有事」発言を引き出した「立憲・岡田克也氏」に聞いた質問の真意「これはマズイ発言だと」少しずらしてみたが焼け石に水 [ぐれ★]
- トランプ氏「台湾侵攻すれば北京爆撃」“過激予告発言”報道がXで再燃「高市氏の1億倍やばい」 [七波羅探題★]
- 【自民/維新】国会議員の歳費、月5万円アップで調整 月額134万4000円に 維新配慮で次の国政選挙後に引き上げ方針 [Hitzeschleier★]
- 日本人「な、なぜだ?なぜこの件で日本を助けてくれる国が0カ国なんだ!?」。日本人、さすがに気づく [805596214]
- ホタテ6t(トン)、返品されるwwwwwwwwwwwwwwwwwwwwwwww [329329848]
- 【不思議】ヤフコメ、なぜか円安の話の時だけ高市批判が集まり正常化する事態に…… [305926466]
- お前らがフリーランスにならない理由
- 中国報道、高市首相を「毒苗」と中傷😡 [399259198]
- んなぁ…みんな~おりゅ~🍬❓🏡
