【初心者歓迎】C/C++室 Ver.104【環境依存OK】at TECH
【初心者歓迎】C/C++室 Ver.104【環境依存OK】 - 暇つぶし2ch482:デフォルトの名無しさん
19/02/15 00:04:29.72 tnuHGyjk.net
一度切りの使い捨て用途とかなら全然よくね

483:デフォルトの名無しさん
19/02/15 00:36:18.42 kpfA4lgp.net
>>479
スマートポインタを使うとコード修正効かなくなるの?どういうこと?

484:デフォルトの名無しさん
19/02/15 00:46:46.72 TR5VS7Vw.net
mp4boxをちょこっといじったのを作ろうとしたんだけど、
signed int32の計算で -2112000 / 48000 の結果が 89434 になるんですが。
VS2015のx64です。

485:デフォルトの名無しさん
19/02/15 06:57:51.95 OZ8Dcboc.net
>>484 「-2112000 / 48000 の結果が 89434」
その環境を持ってないんで分からないけど、
-2112000 の32bit16進数表現が 0xffdfc600
89434 * 48000 == 4292832000.000 == 0xffdf6b00
両者のビットパターンが一致することと関係ありそうね。
被除数の -2112000 を64bitで表現する際に
符号拡張 0x_ffff_ffff_ffdf_c600 とすべきなのに
ゼロ拡張 0x_0000_0000_ffdf_c600 にしちゃって、
その後の計算は64bit正数でやってる感じかな。

486:デフォルトの名無しさん
19/02/15 07:20:58.81 1DfV94Wg.net
>>483
本人がスマポ理解できてないってオチだろ

487:デフォルトの名無しさん
19/02/15 07:22:53.73 1DfV94Wg.net
>>480
組み込みが得意でポインタがわからない後輩
設定に無理がありすぎw

488:482
19/02/15 07:53:28.61 OZ8Dcboc.net
再び >>484 「-2112000 / 48000 の結果が 89434」 (間違いを訂正)
-2112000 の32bit16進数表現が 0xffdfc600
89434 * 48000 == 4292832000.000 == 0xffdf6b00
ビットパターン一致してないね。桁数多くて見間違えちゃった(テヘペロ)。
-2112000 を32bitで表現すると 0xffdfc600 であり、
これをゼロ拡張した 0x_0000_0000_ffdf_fc600 == 4292855330 を
48000 で割り算して小数部を捨てれば 89434 という答えが出る。
ということなら合ってるかな。

489:
19/02/15 07:57:48.46 8MeM2Ami.net
>>484
コードを URLリンク(ideone.com) に貼っていただけませんか?

490:デフォルトの名無しさん
19/02/15 09:49:31.73 tuwIijw4.net
>>484
どうせ48000がunsignedなんじゃねーの
それにつられて -2112000もunsignedになって4292855296
その結果が薬師美代ちゃん

491:デフォルトの名無しさん
19/02/15 13:45:38.25 TNDmXWGM.net
>>482
自分が何してるか判って使う分には問題無いな
適材適所だ

492:デフォルトの名無しさん
19/02/15 21:13:40.77 kkRd+/gL.net
>>483
>スマートポインタを使うとコード修正効かなくなる
どういう風に読むとそういう理解になるのか。。
まずは日本語の理解が必要だな。

493:デフォルトの名無しさん
19/02/17 07:14:37.91 KxX3tJEE.net
超初歩的な質問になるのですが
scanf関数を使って20個未満の任意の数だけ、数値を配列変数で受け取りたいです
たとえば「2 4 8 9」と入力し、Enterが押されたらそれで確定
num[0]=2
num[1]=4
num[2]=8
num[3]=9
としたいわけです。
どうしたらよいでしょうか?
一応自分で考えたコード(期待通りの動きをしません)を掲載します
for(i=0;i<20;i++){
scanf("%d",&num[i]);
if(num[i]==‘¥n’){
break;
}
}

494:デフォルトの名無しさん
19/02/17 07:30:35.53 a45/WyPQ.net
for(i=0;i<20;i++) if (scanf("%d",&num[i]) != 1) break;

495:デフォルトの名無しさん
19/02/17 09:09:16.12 uZDoAvc4.net
>>493
scanfや標準ライブラリの関数など、参考書とかで普通の使い方はわかると思うけど、細かい仕様をmsdnやmanコマンドで調べるようにするとかなり理解が広がると思うよ。

496:デフォルトの名無しさん
19/02/17 22:37:58.74 O/E0SKNM.net
中途半端なUI使うよりもcsvパーサーを作るかどっかからとってくるかすれば?

497:デフォルトの名無しさん
19/02/18 00:02:29.61 yZfkTbdS.net
autoってコンパイル遅くなりますか?

498:
19/02/18 00:59:53.43 aN2QSVsl.net
>>497
むしろ遅くなる方に振れるでしょうけれど、そんなのどうでもいいのでは?

499:デフォルトの名無しさん
19/02/18 01:22:44.39 c9cLPpQ7.net
autoって変数の型宣言の話だよね?
コンパイルは遅くなるのか
速くしたい時はどうすりゃ良いの?

500:はちみつ餃子
19/02/18 01:27:51.06 ViRlfcsh.net
C++ の auto は右辺と一致させるように推論するだけの単純機構で、
ややこしい演算で推論するわけではないので、
コンパイル速度ではほとんど差はないと思うよ。

501:デフォルトの名無しさん
19/02/18 01:30:04.86 tKsXQ0K5.net
autoはむしろコンパイル速くなるんじゃない?
いちいち型を解決せずとも、既に解決済みの型を右から左へコピーするだけでいいんだから
C++でコンパイルを速くするのは簡単で、単純にソースファイル数とインクルードするヘッダを減らせばいい
C++のコンパイルが遅いのは主にコンパイル単位という時代遅れで極めて非効率なコンパイル戦略に起因しており、実はコードの複雑さ自体はわりとどうでもいい

502:
19/02/18 01:31:11.50 aN2QSVsl.net
>>499
C++を言語として選択した時点で「記述の時間やコンパイル時間を投資して実行時間を稼ぐ」という思想なのでは?コンパイル時間を短くする努力はする気がないと思います

503:
19/02/18 01:32:21.67 aN2QSVsl.net
>>501
>いちいち型を解決せずとも、既に解決済みの型を右から左へコピーするだけ
この記述はコンパイル時を想定しているの?それとも実行時を想定しているの?
はっきりさせたいので念のために確認します

504:デフォルトの名無しさん
19/02/18 05:41:12.34 KTgkm+s5.net
>>493 サーバーの 503 エラーに引っかかって昨日のうちに書けなかったんだが…。
>>494 の方法だと Enter が単純に読み捨てられて scanf() が終了せず
まだ入力をよこせと言ってくるからダメみたいね。
11 22 33 (Enter) だと読み込みが継続、期待通りに動作しない
11 22 33 x (Enter) なら x を解釈する時点で scanf() が 0 を返してループ脱出

先に文字列として1行読み込んで sscanf() と思ったけど…
ndat = sscanf(s, "%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d",
&num[0], &num[1], &num[2], &num[3], &num[4], &num[5], &num[6], &num[7], &num[8], &num[9],
&num[10], &num[11], &num[12], &num[13], &num[14], &num[15], &num[16], &num[17], &num[18], &num[19]);
実際に読めた値の個数は ndat に入る。
これは書くのもメンテナンスするのも嫌だなぁ。
strtol() で1個ずつ数値を拾いつつ、地道にポインタ進める方が良いかも。

505:デフォルトの名無しさん
19/02/18 05:53:27.02 KTgkm+s5.net
>>503 自分は >>501 の人じゃないけど。
ごく簡単な場合ながら、例えば
int val_a = func(para); // func() がint互換の値を返すかチェックが必要
auto val_b = func(para); // func() の返す型そのまんまで val_b を作ればいい
てな具合に考えると auto で定義した方がコンパイル時の手間が少ない、
という考え方にも一理あるかと。

506:デフォルトの名無しさん
19/02/18 08:39:38.41 KTgkm+s5.net
瑣末なことだけど val_a, val_b って変数名は良くなかったね。
変数 variable の例なんだから var_a, var_b だわな。
というか、この場合は a, b で十分だ。

507:デフォルトの名無しさん
19/02/18 10:06:03.91 PGieQvh3.net
まず計測しろよ

508:491
19/02/18 13:24:52.92 fHtoi1qq.net
>>504
ありがとう。ちゃんと確認してなかったわ。
タブに空白に改行はスキップしやがるんでしたか
別案としては fgets() ⇒ sscanf() になるんかな

509:デフォルトの名無しさん
19/02/18 13:29:17.97 fHtoi1qq.net
505の後半は無しで
1文字ずつ切り出して解析してったほうがよさそうね

510:デフォルトの名無しさん
19/02/18 15:27:41.58 bbNHvPxv.net
コンパイル時間にリンク時間は含まれますか?

511:デフォルトの名無しさん
19/02/18 15:28:58.14 bbNHvPxv.net
>>504
scanf は禁止
>>508 が正しい

512:デフォルトの名無しさん
19/02/18 15:34:26.17 c9cLPpQ7.net
人間の様な邪悪なものからの入力でscanfは使うなと、ばっちゃは言ってた

513:
19/02/18 20:54:12.82 aN2QSVsl.net
>>505
>func() の返す型そのまんまで val_b を作ればいい
この発想は実行時なのでは?
>てな具合に考えると auto で定義した方がコンパイル時の手間が少ない、
実行時の発想をコンパイル時に適用していいのでしょうか?

514:
19/02/18 20:54:41.05 aN2QSVsl.net
>>507
コンパイル時間を計測するのですか?…

515:
19/02/18 20:57:23.82 aN2QSVsl.net
>>512
賛成です、そういうのは1ラインを秘術を尽くして何とか読み込み、後で sscanf() とかを使うべき

516:デフォルトの名無しさん
19/02/18 21:15:24.03 JRPNr6+t.net
>>515
今回の例(>>493) のように可能な限り %d で抜き出して打ち切るとなると sscanf 単発では面倒
なんとか行単位でバッファに詰めた後
連続空白などでトークンに区切ってそのトークン単位で sscanf をぶんまわすような
ほのかな中途半端感が

517:デフォルトの名無しさん
19/02/18 21:20:31.62 etvvcICH.net
>>513
別に実行時の発想じゃないでしょ
型を書けばコンパイラはその型名に対応する型を解決しなければならないし、
型変換の要否や可否のチェックも必要

518:
19/02/18 23:19:20.43 aN2QSVsl.net
>>517
>型変換の要否や可否のチェック
これは10中8, 9 コンパイル時にすることなのでは?

519:デフォルトの名無しさん
19/02/18 23:37:20.44 Q29xkQ9H.net
>>518
初めからずっとコンパイル時間の話をしている。お前さんだけ噛み合ってないから、もう黙っててくれ。

520:デフォルトの名無しさん
19/02/19 15:32:09.41 Hz70ZqtS.net
C++です
インクルードガードがあっても関数の定義がヘッダに書かれていればヘッダが複数回読み込まれていた場合リンク時に多重インクルードでエラーが出る
ここまではわかるのですが、同じことをクラス関数で実験した結果エラーになりませんでした
具体的にはヘッダのクラス内に関数定義を書いて複数のファイルからインクルードしました
これはどういうことなのでしょうか?

521:デフォルトの名無しさん
19/02/19 16:00:36.20 uP1odnYQ.net
>>520
クラス定義の中に書かれたメンバ関数の定義は
自動的にインライン関数になる(関数の実体の定義ではない)
この場合は、複数の場所にメンバ関数の実体が作られるわけじゃない、
という説明でどうかな。

522:
19/02/19 17:19:54.69 BVj1SDNF.net
>>519
そもそも「実行時」「コンパイル時」の区別がついていないのでは、コンパイル時間の話なんかできないのでは?
だから「実行時」「コンパイル時」どちらを適用するかに執着しているだけです

523:デフォルトの名無しさん
19/02/19 17:23:21.85 Hz70ZqtS.net
>>521
なるほど
クラス内に定義を書くとインライン関数になって普通の関数としては扱われないんですね
もう少し理解するために調べたのですが、インライン関数は内部リンケージのみを持つものとしてコンパイラに解釈されるらしいですね
だからコンパイラはファイル間での関数の重複を調べようとしない
そしてインクルードによって複数のファイルで同じものを読み込んだとしてもエラーにはならないと・・・
理解です
勉強になりました
ありがとうございました

524:502
19/02/19 17:39:36.16 uP1odnYQ.net
失礼、なぜか >>513 を見逃してて(黙殺するような意図はまったくなかった)。
C++ は関数を宣言・定義するときに返り値型を書くから
auto で受けてもコンパイル時に曖昧さは生じないと考えたんだけど。
実行時まで返り値の型が決まらない関数って作れるんだっけ?
これは純粋に質問、教えを乞いたい。
あんまり高度な話だと振り落とされるかも知れないけど。

525:デフォルトの名無しさん
19/02/19 17:48:52.81 h1wI7nx1.net
型推論が実行時に行われるとかトンチキこいてるやつが一人騒いでるだけ

526:デフォルトの名無しさん
19/02/19 18:43:18.16 +3biNeIC.net
>>524
おそらく君の書いた「func()の返す型~」をqz某が勝手に勘違いしているだけだからスルーしていいよ。
初心者が必ずしも正確な用語を使わないことくらい想像つくだろうし、文脈からして普通ならそんな勘違いはしないはずなのだが。

527:はちみつ餃子
19/02/20 00:20:40.27 C98K3aY7.net
>>524
出来ない。
強いて言えば C++17 からは std::any があるけれど、
これはこれで実行時に型が決まるわけではなくて
コンパイル時に std::any 型であることは確定する。

528:デフォルトの名無しさん
19/02/20 00:28:15.76 qDW9CRq2.net
>>523
> もう少し理解するために調べたのですが、インライン関数は内部リンケージのみを持つものとしてコンパイラに解釈されるらしいですね
どこにそんな嘘書いてあった?
URLリンク(timsong-cpp.github.io)
> The inline keyword has no effect on the linkage of a function.

529:デフォルトの名無しさん
19/02/20 00:47:02.04 rsRaa5eC.net
>>528
IBMのサイトに書いてありました・・・
と思って今見返したらこれはIBMの統合開発環境のページなのでその開発環境の仕様かもしれないですね
失礼しました
URLリンク(www.ibm.com)
>インライン関数は内部リンケージを持っているものとして処理されるので

530:デフォルトの名無しさん
19/02/20 09:09:52.38 qDW9CRq2.net
>>529
「C のみの始まり」~「C のみの終わり」で囲まれているとおり、それはCの仕様だね。

531:
19/02/20 19:50:21.82 P8vN2pc3.net
>>528
それは inline キーワードで束縛された関数は、inline 展開される多数の実体と、外部リンケージによって外部からコールできるものとで別の実体をコンパイラは作成する、ってことですか
まあ inline しまくって無駄にバイナリーを増やすくらいだったら、ついでに1 個の外部リンケージで呼べる実体を追加したって、いろいろな面で大差がない、とはいえますね

532:デフォルトの名無しさん
19/02/21 01:44:35.45 HXHB3ZEN.net
>>531
「それ」が何を指して言ってるのかよくわかんないけど、 inline 関数に対して
インライン展開されてない「実体」を生成するのもしないのもコンパイラの自由。
外部リンケージを持つ関数について複数のコンパイル単位でアドレスを取って
==, != で比較した場合には一致させないといけないので、アドレスを取られた場合には
そういうコード生成をするのが一般的だろうとは思う。

533:デフォルトの名無しさん
19/02/21 14:52:33.25 68lFGCx0t
主にc++でJSON editor作ってみた mac専用だけど
URLリンク(www.quite-funny.com)

534:デフォルトの名無しさん
19/02/22 22:57:05.70 LZ/mWRas.net
引数や関数にはconstつけられるところは全部つけるべきですか?

535:デフォルトの名無しさん
19/02/23 00:51:14.65 CdF18mGW.net
つけて問題ないならつけるべきだけど、まあ実際は面倒くさくなければという程度…

536:デフォルトの名無しさん
19/02/23 10:37:02.21 6erMuDJl.net
>>534
内部で書き換えないポインタや参照の引数には必ずconstをつけるべき。より自己文書化されるし、付けてないと使う側の手間が増える。>>535は元javaプログラマ

537:デフォルトの名無しさん
19/02/23 10:39:40.19 Iy1q86mj.net
今は良いけど、半年後の自分は既に他人だと思わないと

538:デフォルトの名無しさん
19/02/23 11:45:29.73 +DV3f+Dk.net
const連鎖まんどくせ

539:デフォルトの名無しさん
19/02/23 12:40:33.73 aRr2CtyI.net
530みたいな質問する奴はそもそもconst気にする前に関数が長すぎたり
参照と実値渡しの違いもわかってないと思われるのでその辺をしっかりやった方が良い。

540:デフォルトの名無しさん
19/02/23 17:32:16.44 7GKXwuwj.net
入門書の類が、最初のうちは const なしで説明しておいて、
本の後半でおもむろにポインタの引数に const つけることを
載せてたりするせいかもな。
高度な、マニアックな話題みたいな感じで。
文字列(charへのポインタ)を受け取る関数を紹介したら、
すかさず const char* の説明も合わせてすべきって気がする。
const の一般的な価値が分かれば、メンバ関数での func() const {...} の
ありがた味もすぐ飲み込めて const つけまくり派になるでしょ。

541:デフォルトの名無しさん
19/02/23 21:02:55.45 kvfLWeS8.net
戻り値を const char* してても、
char* const してなければさほど意味がない。

542:デフォルトの名無しさん
19/02/23 21:20:57.14 JpeZVvP/.net
それは質問なの初心者君?

543:デフォルトの名無しさん
19/02/23 23:45:27.99 Z+wYSHT9.net
クソミソみたいなjavaのconstと違ってC++のconstは
コードの安全性を高めるのに必須といっていいぐらいのキーワード
とりあえず片っぱしから全部const付けて、どう頑張ってもここは
constはずさないと動くコードにできないよな・・ていうぐらいの
時だけはずす。このぐらいの気構えでコードを書けば、かなり安全な
コードになってる。他のやつが書きかえちゃダメなものをいじろうと
しても、強引なキャストでもしない限りどうやってもコンパイルが
通らなくなる。強引なキャストしてでも無理矢理強姦してくる強姦魔は
そもそも犯罪者気質なのでそんなやつに仕事をやらせてる時点で間違い

544:デフォルトの名無しさん
19/02/23 23:48:50.01 Iy1q86mj.net
「かなり安全な」
ここで思わず笑ってしまったではないか

545:デフォルトの名無しさん
19/02/24 00:00:52.25 qLJosHl4.net
残念ながらバカはmutable使い出すから無意味。

546:デフォルトの名無しさん
19/02/24 00:06:41.22 2wDVhIfR.net
俺は書換られたりはしない たぶんしないと思う
しないんじゃないかな ま、ちょっと覚悟はしておけ

547:デフォルトの名無しさん
19/02/24 00:47:53.06 ORSkBdqU.net
constっていちいち書くのめんどい

548:デフォルトの名無しさん
19/02/24 00:48:50.68 haqs87u6.net
>>541
何を言ってるのか分かりません

549:デフォルトの名無しさん
19/02/24 01:15:50.47 is7scwjD.net
いやまてまて・・このスレの99%はネタでできてるけど
そこ分からないのはダメだぞ
まさに初心者向けの話題ではある

550:デフォルトの名無しさん
19/02/24 07:21:28.17 kwD2lttR.net
>>545
mutable使ったらいかんのか

551:デフォルトの名無しさん
19/02/24 08:50:14.25 FFCpIhtq.net
こいつ能力低いなと思う奴のソースを見ると、
constなんて全く付いていない場合が多い

552:デフォルトの名無しさん
19/02/24 09:00:44.87 eyx8DEIH.net
>>547
ちょっとわかるわw
あと3文字くらいが良かった

553:デフォルトの名無しさん
19/02/24 09:02:28.69 zE1f0a65.net
cnst

554:デフォルトの名無しさん
19/02/24 09:40:01.37 4ommn3XM.net
constはキーボード入力の観点からはそんなに苦じゃない
stdとかarrayが割りと入力しづらい
左右均等に割り振られてると楽な感じ

555:デフォルトの名無しさん
19/02/24 09:57:22.91 FGRIaiAP.net
const char* a = "hoge";
const char* const a = "hoge";
の違いがわからんやつは死ねとよい

556:デフォルトの名無しさん
19/02/24 10:22:22.64 qLJosHl4.net
そんな違いを意識しないと読めないコード書く方がバカだと思う。

557:デフォルトの名無しさん
19/02/24 10:24:20.55 eyx8DEIH.net
(そんな初歩中の初歩でマウンティングドヤ顔して大丈夫っすか先輩)

558:デフォルトの名無しさん
19/02/24 10:37:36.70 haqs87u6.net
>>549
>>548のこと言ってるの?
>>541は、ポインタの指し先だけでなく、戻り値を格納する変数自体を定数にしなければさほど意味がないっていう主張だと理解したけど、合ってる?
ローカル変数を定数化したければ呼び出し元が勝手にやればいいし、戻り値をconst char*にする重要性に比べたらそれをする必要性なんてごく僅かで"さほど意味がない"なんてとても言えないと思うけど

559:デフォルトの名無しさん
19/02/24 12:08:33.20 6sZPiHms.net
>>555
ドヤ顔して噛むなよ

560:デフォルトの名無しさん
19/02/24 12:15:09.98 sIV9Z0cV.net
C++ってC言語の負の遺産を引き継いだ言語だろ?
constは廃止すべき

561:デフォルトの名無しさん
19/02/24 15:05:59.28 uFOuUY9d.net
constみたいな糞どうでもいい些末なことより
配列のサイズとオーバーフローの管理を強化するべきだったんだよ
互換性捨てなきゃならんが

562:デフォルトの名無しさん
19/02/24 15:35:26.16 2tRfk65D.net
>>561
そこはCの負の遺産を引き継いだのではなく、可能な限り実行時オーバーヘッドを小さくする実装手段を提供するというCの基本スタンスを継承しただけだろう。それが負の遺産というなら他の言語の方が適切なんだからそれを選択すればいいよ。
C++を使いたく、ある程度の実行時オーバーヘッドが許容できるときはstd::vectorという選択肢があるけど、それじゃダメなのか?

563:デフォルトの名無しさん
19/02/24 16:47:00.15 RgZ/0jGo.net
>>560
const に関しては C++ で新規導入された仕様を ANSI C に逆輸入、
みたいな感じじゃなかったっけ?
そのせいか、定数としてconst変数を使えないとか中途半端になってる。
C++ が C の負の遺産を切り捨てるべきだったとしても、
const はその「C の負の遺産」の範疇に含まれないかと。
いずれにせよ、今さら言っても、現に存在する C++ はどうもならんよね。
そういう新プログラミング言語が出ても、それは C++ じゃない別物ってことで。

564:デフォルトの名無しさん
19/02/24 16:57:30.90 2fcQjxFq.net
そういうのはDで良いと思う

565:デフォルトの名無しさん
19/02/24 17:18:54.78 NUlc6EOn.net
とりあえず数値以外はconst参照渡しが基本でおk?

566:デフォルトの名無しさん
19/02/24 17:34:26.40 qxqTarkR.net
>>561
at()使え。
>>560
constが負の遺産とか頭おかしい。
ドキュメントにこの変数は内部で変更しませんとか書くよりよっぽど楽だろ

567:はちみつ餃子
19/02/24 17:36:09.20 gUJTdPsI.net
>>566
負の遺産だよ。
const キーワードを廃止して
デフォルトの挙動を const に出来れば
どれほど良いことか。
という意味で。

568:デフォルトの名無しさん
19/02/24 17:40:12.42 qxqTarkR.net
>>567
それなら同意するけど>>560にそんな意図はないでしょ

569:はちみつ餃子
19/02/24 17:43:09.22 gUJTdPsI.net
>>568
皮肉っぽい言い回しをしてみたかっただけ。

570:デフォルトの名無しさん
19/02/24 17:48:01.19 qxqTarkR.net
いやん

571:デフォルトの名無しさん
19/02/24 18:48:30.19 qLJosHl4.net
そこまで挙動を変えるなら別言語でやれば良いし、実際rustとか他の言語としてあるだろ。

572:デフォルトの名無しさん
19/02/24 18:53:22.05 2wDVhIfR.net
使わないで済ませる事ができるなら、使わないで置く方がうまく行く

573:デフォルトの名無しさん
19/02/24 19:20:28.43 iK4D+UQi.net
>>567
>>571 も書いてるけど、それ何てRust?と思った。

574:はちみつ餃子
19/02/25 01:48:46.07 LzC1voP1.net
負の遺産でも互換性とのトレードオフだしな。
いいことばかりじゃないけど、悪いことばかりでもない。
とりあえず const は付けれるだけ付けとけというのが
ベストプラクティスだと思う。

575:デフォルトの名無しさん
19/02/25 12:52:11.08 y5m/9TYH.net
>>567
引数だけなら同意してもいいけど変数はどうするんだ?
for(variable int i = 0; i < 10; i++){
とかはあまり書きたくないぞ

576:はちみつ餃子
19/02/25 13:56:12.72 LzC1voP1.net
>>575
まあそこはもしもの話だから。
最初から const なら文法もそれに
沿ったものになってただろうさ。

577:デフォルトの名無しさん
19/02/25 17:39:50.14 ubojwQhV.net
確かに、関数内で作ったローカル変数だけデフォルト変更可能、
他所から持ちこんだ、ポインタの先や参照、グローバル変数へのアクセスは
基本的に読み出しのみ許可で、明示した場合だけ変更できる、なら
「勝手に書き換えたのは誰だ!?」ってバグは減りそうだね。

578:デフォルトの名無しさん
19/02/25 18:51:13.68 y5m/9TYH.net
>>577
ああ、それなかなかいいかも

579:デフォルトの名無しさん
19/02/25 20:42:12.40 lqvZQt+c.net
そうそう、だから普通にC++書いてる人は
とりあえず引数に全部 const つけるでしょ
それはそういうことだよ

580:デフォルトの名無しさん
19/02/25 20:44:41.85 x+rkal0w.net
引数じゃなく method の const は後悔することがちょいちょいと
class foo {
public:
void method() const;
};

581:デフォルトの名無しさん
19/02/25 20:50:25.72 1EOktSCH.net
constつけときゃいいってのもなんか胡散臭い印象しかないな。
そんなことよりも変更や生成を行う場所、タイミングを局所化するってのが本質だと思うが。

582:はちみつ餃子
19/02/25 20:56:50.13 LzC1voP1.net
const が必要なところに付けるって考えるよりは
const では駄目なところでは外すという考え方の方が
安全っぽいという話であって、
適切に使い分けろというのは大前提のことだってことは補足しておく。
const が当たり前だって気持ちになると
変更が必要な個所は自然に局所化されるでしょ。

583:デフォルトの名無しさん
19/02/25 21:58:02.00 rMTHv0xs.net
const連鎖くらったらほどほどでいいやと思うようになる

584:デフォルトの名無しさん
19/02/25 22:14:33.44 1EOktSCH.net
なんというかもう修正が一切されないコードしか想定してない印象を受ける。

585:デフォルトの名無しさん
19/02/25 22:37:43.55 rMTHv0xs.net
やりすぎオブジェクト指向といっしょで
事故起こりにくいとこでこだわっても変更に弱くなるだけ

586:デフォルトの名無しさん
19/02/25 22:51:58.14 ki6l711j.net
複雑怪奇で理解不能にしておくと、
変な改造されないで済む

587:デフォルトの名無しさん
19/02/26 00:51:25.18 wcHiR3Ib.net
初心者で申し訳ないんですが、c/c++を学ぶため何か作りたいのですが、cで作る意味のあるいいお題はないでしょうか。JavaやC♯、rubyは一通りかける感じですがcはmallocなど知ってはいても使ったことはないレベルです。よろしくお願いします!

588:デフォルトの名無しさん
19/02/26 01:02:30.50 Ujo6lghI.net
>>587
ビットマップ画像を読み込んでブラーをかけてビットマップ画像として出力

589:はちみつ餃子
19/02/26 01:30:28.38 azIRgqwp.net
>>587
いきなり「実務的な」プログラムを書くのはオススメしないよ。
C/C++ には歴史的経緯によってクソな落とし穴と「未定義」がたくさんあるので、
たとえ期待通りに動いたとしても正しくないプログラムであることは多い。
初心者向けのしょうもない (他の言語でやる入門と大差ないような) 題材で小さなプログラムを書いて
ブログとか Qiita とかに書いておけばベテランがよってたかって指摘してくれるさ。
そういうので基本的な落とし穴くらいは理解してから進んだ方が良いと思う。

590:デフォルトの名無しさん
19/02/26 01:35:07.18 F6jD76wH.net
HDDの中を検索するプログラムとか、整理するプログラムとか
こういうのがあったら便利だなっていう物を考えて作ってみる
途中分からなくなったら、ここに相談に来ると良い
親切な人が教えてくれる、かもしれない
あてにはしないこと

591:デフォルトの名無しさん
19/02/26 01:49:53.01 2prSgTvN.net
おっさんらジイさんらの世代だと
「こういうのあったら便利だよな」と思って作りはじめるパターンは有効だったけど
今はそういうの探したらほとんどあるからある意味不幸だよな
しかも自分で作ってたらとてもここまで作ってるヒマないっていうぐらい高機能なのが多いし

592:デフォルトの名無しさん
19/02/26 01:50:17.99 wcHiR3Ib.net
>>588
>>589
>>590
ありがとうすごく参考になりました。デスクトップランチャーとかほしいと思って作るならWPFだし、Cで実用的なほしい物ってむつかしいんですよね。初心者向けの小さなプログラムは上記のブラーとかでしょうか?Cで書く意味がある題材ってわからなくて。。。

593:デフォルトの名無しさん
19/02/26 01:59:04.98 H+xdnOpD.net
>>592
そもそも自分がC/C++を身につける意味があるかというとこらから見直した方がいいのでは?
直ちに必要な訳ではないが将来的に身に付けたいというなら、先に他の人が言っていたようにいきなり実用的なプログラムから入るより練習問題レベルの小品をコツコツ作っていった方がいいと思う。

594:はちみつ餃子
19/02/26 02:00:19.43 azIRgqwp.net
どうしても自分が欲しくて既存のものがないってケースでも、
既存のものをバッチファイルで繋げればできるって程度のものだったりするもんな。
そういう意味じゃ、日常ではスクリプト言語の方が使うことが多いとは思う。
俺が一番最近に書いた C のプログラムもスクリプト言語の拡張パッケージだし。

595:デフォルトの名無しさん
19/02/26 02:19:19.20 F6jD76wH.net
>>592
例えば容量の大きなHDDだと、同じファイルが複数場所にあったりするじゃない?
そういうのを見つけて、チェックした後削除すれば容量節約という実利もあるよ

596:はちみつ餃子
19/02/26 02:22:08.89 azIRgqwp.net
>>592
C/C++ で書く意味ということに最初は拘らなくてよいと思う。
こだわらなくてもプログラムの構成の仕方、書き方には確実に違いがあるから、
むしろ比較しながら学んだ方がいいかもしれない。

597:デフォルトの名無しさん
19/02/26 02:40:55.07 OTQ63qDn.net
C/C++使う必要性がわからないならやらないのが正解
今だにこんなクソ言語使ってるのはそれしか選択肢がないから
あるいは物好きな言語マニアか

598:デフォルトの名無しさん
19/02/26 03:33:39.99 belfWXD5.net
先に他の言語やらんとC++の必要性はわからんと思う

599:588
19/02/26 08:48:58.01 +14u2RP+.net
こんなにレスもらえると思いませんでした、他の言語スレや板だともっと殺伐としてます。。。ありがとうございます。
低レイヤを高速で処理できるのが魅力だと思うので最終的には任意のパケットを送受信できるデーモンを作りたい。ので、>>595のいう同名ファイル検索デーモンから始めようと思います。

600:デフォルトの名無しさん
19/02/26 09:06:06.17 OTQ63qDn.net
ならechoサーバーから入ってhttpサーバーという定番ソケットプログラミングコースもおすすめ
まぁでもその検索デーモンとやらでファイルの扱い勉強してからでいいだろうな
高速化に興味あるならC/C++の標準ライブラリでなくOSのnativeのapiを積極的に使うのもいい
ファイルならメモリマップドファイルを使ったり(ファイル名調べるだけなら不要だけど)
他には検索アルゴリズムに凝る方向とかね

601:デフォルトの名無しさん
19/02/26 11:48:20.70 9FjD9aLm.net
>>599
同じファイルというのをどう判定するかだな
ファイル名なのかハッシュ(中身)なのか

602:デフォルトの名無しさん
19/02/26 14:41:46.79 8+7ktUtN.net
globalに宣言されてる変数と同じ型同じ名前で
関数内にlocalに宣言されたものがあるとき
警告出してくれるオプションって何だっけ

603:デフォルトの名無しさん
19/02/26 16:05:20.40 5MxkS3P7.net
>>599
なんで、そんな面倒くさい事をしなきゃならないんだ?
Ruby なら、PowerShell から、1-liner で、
Rubyで作られた遅いウェブサーバー、WEBrick が起動する
ruby -run -e httpd . -p 8080
そのフォルダに、index.html があれば、
何も考えなくても、これでブラウザからアクセスできる
URLリンク(localhost:8080)

604:デフォルトの名無しさん
19/02/26 16:39:31.27 2RZ4BMiv.net
>>603
お前は相手の意図を理解する気がまったくなく、人とのコミュニケーションができないことをさっさと理解して、巣にかえって閉じ籠っていてくれ。
ここはお前に用がある奴は一人もいない。

605:588
19/02/26 17:33:10.46 +14u2RP+.net
みなさんありがとう
今日は会社で暇だったのでコピペベースながらUDPで任意のメッセージ送受信出来るようになった
ヘッダでincludeする構造体って宣言済みのクラスみたいな感じで使えることを理解しました。(udphdrを使わずにsendしたからか、送れたけどudpチェックサムは自動で計算されなかった)
tcpは、というかhttpサーバは難しそうですが頑張ります!

606:デフォルトの名無しさん
19/02/26 17:44:16.64 MNG9zBp3.net
>>602
gcc/clang だと -Wshadow だな。
-Wall -Wextra とは別に指定する必要があるようだ。
細かいことを言えば、同じ型でなくても、名前が隠される場合は警告が出る。
今ネットで調べて確認、これからオイラも使うことにする。

607:デフォルトの名無しさん
19/02/26 23:22:44.06 8Je4SUY+.net
同じ意味だけど型が違うときの変数名ってどうされてますか?
いつも困ってます。
例)
float2 fPos( 1.0f, 2.0f );
XMFLOAT2 fPos( fPos.x, fPos.y ); ←当然同じ名前は×

608:デフォルトの名無しさん
19/02/27 07:11:30.50 tay7IMIk.net
>>607
float2でfPosって付けてるならXMFLOAT2ならxPosとかでいいと思うが…

609:デフォルトの名無しさん
19/02/27 07:53:03.71 3Jl+ieqT.net
>>607
よくシステムハンガリアンは悪と言われるけど、この例のように同じ内容で型名の違いに意味がある場合は、型名に関するプリフィックスをつければいいんでない?
とあるライブラリに渡す境界部分ならそのライブラリ名に関するプリフィックスとか。

610:デフォルトの名無しさん
19/02/27 19:12:35.49 8imVoWCJ.net
初心者ですみません、こんなコードをみたのですが2点わかりません。
char packet[1500];
memset(buf, 0, sizeof(buf));
ether_header *eh;
eh = (struct ether_header *)packet;
たぶん、1500byteのメモリを確保して0埋め、ether_header構造体のポインタを宣言してpacketのアドレスを渡す、としたいのだと思います。
分からないのは0埋め対象が宣言されていない変数bufであること、packetのアドレスを渡すのにわざわざether_header型のポインタにキャストしている2点です。よろしければ教えてください。
URLリンク(qiita.com)

611:さまよえる蟻人間
19/02/27 19:18:47.40 AjY/hWvK.net
bufはpacketの間違いか? 多分。

612:デフォルトの名無しさん
19/02/27 19:25:41.76 uRVYM9rZ.net
キャストしてるのはwarning回避じゃないか?

613:デフォルトの名無しさん
19/02/27 19:41:57.94 vHAcjSp1.net
>>610 の引用元を見るとコード片だから、実際にはコンパイルしてないんだな。
char packet[1500];
memset(buf, 0, sizeof(buf));
は、packet と buf が同じもので、正しくは
char packet[1500];
memset(packet, 0, sizeof(packet));
なんだと思う。最初は両方とも buf と書いてあったけど
「もっと自ら語る変数名にしよう」と packet に変えたはいいが、
memset() の方では直し忘れた、というお話かと。

(struct ether_header *) のキャストは、コンパイラの警告対策だな。
…って言うか、これキャストしないでも警告だけで通るのね。

614:デフォルトの名無しさん
19/02/27 19:48:31.45 cPR259KO.net
やってきたパケットのうち 頭のEthernet Header にフォーカスしてる意図でのキャストかな?
最終的には char [1500] で受け取ったパケットの配分を(パディング無しで)
 struct TCPpacket {
  Ethernet_Header eth;
  IP_Header iph;
  TCP_Header tcph;
  char* TCP_payload[]; /* 末尾可変サイズ */
 };
に配分したいんだろうけど、手を抜くなら union にしそうだわ
union Packet {
struct TCPpacket tcp;
char* packet[1500];
};

615:603
19/02/28 00:25:33.39 OS/9xoBt.net
>>608
>>609
ご提案ありがとうございます!
何らかのプリフィクスで識別が妥当そうですね。
ローカル名前空間みたいな概念があると便利そうですが・・・。
local namespace XM
{
  XMFLOAT2 fPos;
}
float2 fPos( 1.0f, 2.0f );
XM::fPos = { fPos.x, fPos.y };

616:デフォルトの名無しさん
19/02/28 09:35:29.75 KtBFXYBy.net
どうせ長ったらしい関数書いてんだろ
それがそもそもの間違い

617:デフォルトの名無しさん
19/02/28 12:25:31.13 o9FaNCnF.net
>>611
>>612
>>613
ありがとう、cがとんでもなく難しい言語かと誤解するところだった。

618:
19/02/28 20:15:42.34 FII1Vkt+.net
>>587
スレリンク(tech板)
にお題がいっぱい転がっています…

619:デフォルトの名無しさん
19/02/28 22:42:25.23 chn/XevV.net
いやーCは簡単な言語だけどC++はとんでもなく難しい言語だと思うぞ
解説本が電話帳より分厚いなんてな自然言語超えてる

620:デフォルトの名無しさん
19/02/28 22:46:25.10 UN7NGNSN.net
そんな解説本あるのかw

621:デフォルトの名無しさん
19/02/28 23:11:49.78 LM7UlKO7.net
それはあいつが悪いだろ‥

622:デフォルトの名無しさん
19/03/01 00:09:02.27 TIzWjpCx.net
しかも、言語仕様の改訂が3年ごとと早すぎて、
邦訳解説本はもちろん、原書でもリリースがおいつかず、
仕様改訂を繰り返すたびについてこれないユーザーをふるい落とす恐るべき言語
仕様改訂の世代を重ねるごとに中国以上の人口減少率でユーザー数が減少する既に終わった少子化言語ww

623:デフォルトの名無しさん
19/03/01 01:01:16.39 SPEgyt6t.net
なんか皆C++はむずかしいむずかしいっていうが、そんなむずかしいか?
俺的には今時のECMAScriptと各種フレームワークの使い方のほうがよほどむずかしい。
2、3年もすると何だかイノベーションがどうのこうのいってまるっきり別物のコンセプトのがでてくるし・・。
C++なんて基本概念はもう何十年もかわらんだろ。あとはその都度必要なstlとかの機能覚えればいいだけ。
楽なもんだよ。

624:デフォルトの名無しさん
19/03/01 01:51:54.22 ejlMN09K.net
今何も見ずにラムダ式書ける?

625:デフォルトの名無しさん
19/03/01 01:55:24.44 aAd1thXX.net
有名所のライブラリでラムダ式使ってるの見たことない

626:デフォルトの名無しさん
19/03/01 06:22:49.33 TGgsjFNR.net
『プログラミング言語C++』第4版は電話帳より厚いね。
あれは解説書だよな。1300ページ以上ある。
ちょうど新しい電話帳が届けられたばかり。
田舎住まいだから都市部に比べて電話帳が薄いってこともあるけど。

627:デフォルトの名無しさん
19/03/01 07:01:09.26 TGgsjFNR.net
C++は新しい言語仕様が次々に追加されるせいで、
同じ細かな処理をするにも人によって書き方が色々になって、
「同じ言語で同じ処理をしてるはずなのにソースは似ても似つかない」
「自分で書くには便利だけど、他人の書いたプログラムは読み解けない」
てな状況になってるんと違うかな。
わざわざストラウストラップ先生が「言語の全部を知らなくても、
徐々に理解しながら使えばいい」と書いてくれてるけど、
他人のソースを読む際には役に立たないアドバイスだよね。

628:デフォルトの名無しさん
19/03/01 13:03:30.11 ozM8zBQ9.net
>>619
CもC++も仕様は簡単
ライブラリやアルゴリズム考えるのが面倒で生産性が低いだけ
それを難しいと勘違いしてるだけ

629:デフォルトの名無しさん
19/03/01 13:21:26.51 5w/5u0Tx.net
こういうc++の危険さをまったく認識できてないやつが一番困る
std::forwardの意義を誰にでもわかるように説明してみろよ

630:デフォルトの名無しさん
19/03/01 15:52:20.02 3z2kkMi4.net
C++11以降とそれ以前で違い過ぎるのが問題では?

631:はちみつ餃子
19/03/01 16:02:10.84 Vq7maKYR.net
>>627
「徐々に理解しながら」は、 C を既に知っている人を明らかに想定していて、
今では C がそんなに支配的でもないという状況を思うと適切な動線とは言えないという意味でも
あまり役に立たなくなってきていると思う。
ただ、追加された機能を見ると、
新しい書き方の方が間違い難くて綺麗で一貫していることが多いので、
肥大化するから追加するのをやめろとも言い難いんだよな……。

632:デフォルトの名無しさん
19/03/01 16:17:07.89 yZJ4Zkhu.net
皆、ドワンゴ江添亮の本を読んでいないから、C++ の恐ろしさがわからないのだろう
詳細を突っつくと、無限にややこしいものが出てくるw
だから江添でさえ、詳細は省略しますって書いてあるw
>>614
1バイトずつ、check sum を計算するような場合は、そういうように、union にするのが定番

633:デフォルトの名無しさん
19/03/01 17:25:35.13 tC4m5Wn4.net
●ワンゴ倒産の危機わろすω

634:588
19/03/01 17:56:26.55 VPz6Y2H0.net
udpパケットを送れるようにはなったのですが、wiresharkで確認するとudpフレームのchecksumが未定義となっていました。。。
そこで1からやりなおしたいのですが、ソケットはrawで開くべきなのでしょうか。いまはudpなのでdgramで開いてsockaddr_inのインスタンスをつかってsendtoしています。

635:デフォルトの名無しさん
19/03/01 18:11:15.15 a4IFMTFx.net
checksum計算して値入れてから送れよ

636:デフォルトの名無しさん
19/03/01 18:18:10.83 6LDVvTwi.net
enumについて教えてください
enum { ..\..\VAL1, VAL2 };
このような書き方でコンパイルが通る環境はありますか?
case ..\..\VAL1:
というのも許される環境はありますか?
c/c++

637:デフォルトの名無しさん
19/03/01 18:57:53.08 p6eROYwf.net
よくわからんが、識別子の定義を変えたいということか?

638:632
19/03/01 19:04:29.12 6LDVvTwi.net
どこかで見た覚えがあります

639:588
19/03/01 19:14:27.70 VPz6Y2H0.net
>>635
調べた方が足りませんでした、NICのTCP offloadingという機能が有効になっていたせいで、NICより手前でキャプチャするとunverifiedとなっているようです。大変失礼しました。

640:デフォルトの名無しさん
19/03/01 19:23:28.99 HVxvwZsK.net
>>623
>今時のECMAScript
いや、ハードウェアに固定されたバイナリーですらなく、ソフトウェア上で決められた決め事になんら意味を見出せないのですが、それでも javascript とかに熱意を抱けるコツがあったら教えてください

641:デフォルトの名無しさん
19/03/01 19:25:06.34 HVxvwZsK.net
>>633
いいかげんにニコ動をなんとかしてほしいです、昔も重かったけれども今も重い、これはなんとかならないのですか?

642:デフォルトの名無しさん
19/03/01 19:27:08.91 YTopxKYT.net
>>640
>>623の書き込みのどの部分を読んでその質問がでてきたんだ?なんかバグってね?

643:デフォルトの名無しさん
19/03/01 21:35:36.90 Y8fj+4tW.net
引数のmove受け一つとってもrustの3倍くらい難しくなってるわな。
シンタックスが特殊だし、オーバーロードはされるわ、特殊な右辺値に対してのみ動作するとか
根本からおかしい。

644:デフォルトの名無しさん
19/03/02 09:08:32.90 NYNVQHNm.net
物作った事の無い人の重箱の隅つつき+詳細未記載本なんて
時間の無駄だというのが良くわかった。
石田晴久の通信プログラムとか技術書展の方がマシ

645:デフォルトの名無しさん
19/03/02 11:46:55.44 jZcAiOx4.net
ソース書くときに気を付けるのはとにかく引き継ぎしないといけなくなったときに楽になるようにって点かな。
上から読み下していったときにわかりやすければなんでもいいと思ってる。

646:デフォルトの名無しさん
19/03/02 12:38:56.25 +L4gK20K.net
構造体で例えば
struct POINT{
int x, y;
};
があるとき
struct POINT p = {1, 2};
と定義と代入を同時に出来ますが
一度代入したものを後から書き換えるとき
p = {3, 4};
と書くとエラーになるみたいで
p.x = 3, p.y = 4;
と書かないといけないのが面倒です
先生なんとかなりませんか?

647:デフォルトの名無しさん
19/03/02 12:45:48.83 +L4gK20K.net
ああできた
p = (struct POINT){3, 4};
これでいけました

648:デフォルトの名無しさん
19/03/02 13:27:28.31 NYNVQHNm.net
構造体一括代入はANSI以降の機能だからOS/9とかCP/M68K
のC言語では当然のように動かない

649:デフォルトの名無しさん
19/03/02 13:49:52.82 +L4gK20K.net
C++だと
p = POINT(3, 4);
もいけるかな

650:デフォルトの名無しさん
19/03/02 13:50:54.37 +L4gK20K.net
>>648
たぶんそうだったと思います
ありがとうございます

651:はちみつ餃子
19/03/02 14:04:36.97 tMatklv8.net
>>649
C++11 以降なら p = {3, 4}; でもいけるよ。

652:デフォルトの名無しさん
19/03/02 14:07:27.41 kDivPjLV.net
片山さんは何で改名したんですか?

653:デフォルトの名無しさん
19/03/02 16:04:24.12 uz1yhwTy.net
C の p = (struct POINT){3, 4}; は、構造体の一括代入に違いないけど、
(struct POINT){3, 4} の部分が「複合リテラル」compound literal だから
使えるのは C99 以降だね。

654:デフォルトの名無しさん
19/03/02 16:10:37.25 EmfZa2jP.net
>>647
理由が"面倒"だったのに、文字数増えてるよねそれ

655:
19/03/02 16:12:43.27 Ud+LwFnR.net
>>653
これは、C++ に合わせてほしかったな、と思うのです

656:デフォルトの名無しさん
19/03/02 21:57:47.90 nqwTLRnH.net
>>654
要素数によるやろ

657:デフォルトの名無しさん
19/03/03 10:43:47.19 lzyzpNmU.net
C++の規格で使いたいならC++使えで

658:デフォルトの名無しさん
19/03/03 10:52:31.28 BbxzBxVK.net
c++の規格って言ってもその辺、c++のいつの規格だよって話になるんじゃないの?

659:デフォルトの名無しさん
19/03/03 12:23:44.49 eB5he6fi.net
>>633
会社の売り上げに貢献せず、警察を提訴するような
キチガイ高卒社員が資産食い潰してるんじゃね?wwww

660:デフォルトの名無しさん
19/03/03 12:30:17.98 eB5he6fi.net
>>626
すでに3版でも電話帳より厚いよ
まともに読む気になるのは2版までだな。
熱意あるうちはともかく、ふと我に返ると俺何してんだろって。
そんで、言語覚えただけじゃプログラムてかけないしな。

661:デフォルトの名無しさん
19/03/03 12:36:20.23 0vjeZZiI.net
C++でまともなWebサービス作れるエンジニアなんて相当単価高そう
もうオワコン動画の便所掃除やりたがる奴なんていないだろうし

662:デフォルトの名無しさん
19/03/03 14:17:56.07 ilhG1tLW.net
オワンゴとは良く言ったものだな

663:はちみつ餃子
19/03/03 14:31:57.32 XzFmXWmd.net
サービスを書くのに C++ の比率は高くないかもしれんが、
サービスを支えるインフラには C++ を使うことだってあるだろう。

664:デフォルトの名無しさん
19/03/03 15:36:52.66 WlpYxc7g.net
普通はJavaじゃなかろうか。

665:デフォルトの名無しさん
19/03/03 15:58:13.68 E4UxtVYi.net
Javaは糞

666:デフォルトの名無しさん
19/03/03 16:24:07.50 D2G4oQ9F.net
副業解禁で激変する若者世代とマネージャー世代のキャリア観
URLリンク(www.businessinsider.jp)
フリーランスの職種20個の仕事内容と平均年収をわかりやすく解説
URLリンク(www.proof0309.com)
時給1万円のバイトも。会社員向きのプチ副業を、“バイト芸人”が教える
URLリンク(headlines.yahoo.co.jp)
副業が「会社にバレる人」と「バレない人」の大差
URLリンク(headlines.yahoo.co.jp)
正社員の10%以上が副業 中には過重労働で体調崩す人も
URLリンク(headlines.yahoo.co.jp)
「副業で年2000万円稼ぐ男」に学ぶキャリア戦略
URLリンク(headlines.yahoo.co.jp)
加速する「副業社会」正社員の4割が「副業したい」 気になる収入はどれくらい?
URLリンク(headlines.yahoo.co.jp)
おすすめ副業22選を現役フリーランスが解説【在宅も可能】
URLリンク(www.proof0309.com)
会社を辞めてフリーランスで働きたいあなたが知っておくべき10のこと
URLリンク(www.businessinsider.jp)
フリーランスと会社員、働き方の根本的な差 広がる「雇用されない働き方」の課題とは何か
URLリンク(toyokeizai.net)
フリーランス人口は増える!今後は仕事もプロジェクト単位になる!?
URLリンク(freelance.mts-career.com)

667:デフォルトの名無しさん
19/03/03 16:40:10.01 QDmbu/k4.net
言語を使う側なのに、大声でJavaは嫌い()

668:デフォルトの名無しさん
19/03/03 23:12:33.70 PvgSI+1g.net
>>633
焼そば屋?

669:デフォルトの名無しさん
19/03/04 04:52:56.59 DAN4+o0x.net
「困った」と
「助けたい」をマッチングする
新たな出会い系アプリか?

670:デフォルトの名無しさん
19/03/04 21:58:39.97 jKyydNU9.net
最近はスノボにご熱心。

671:デフォルトの名無しさん
19/03/05 04:05:49.01 /9uzsfIc.net
まあJavaは糞これは間違いない
Java使うぐらいならC#使うほうが10倍まし

672:デフォルトの名無しさん
19/03/05 06:49:23.03 O5wD/kWC.net
そんなことあるわけない
100倍は違う

673:デフォルトの名無しさん
19/03/05 06:58:59.78 kisxcMe6.net
Javaはコボラーと同じく湿った猫のような臭いがします

674:デフォルトの名無しさん
19/03/05 14:00:13.11 CkJINn0N.net
Java並に大規模な開発事例ってC++にはあるの?

675:デフォルトの名無しさん
19/03/05 15:25:41.23 fIhIM0AX.net
Windows

676:デフォルトの名無しさん
19/03/05 17:12:45.41 YmAHbq9k.net
>>674
人月商売をやってるだけで大規模()とは言わない
Linuxカーネルほど大規模なのはJavaではない

677:デフォルトの名無しさん
19/03/05 17:33:37.15 /9vlYliD.net
LinuxカーネルってCじゃないのか?

678:デフォルトの名無しさん
19/03/05 17:42:59.75 zQd5qKqX.net
javaって大規模なの?

679:デフォルトの名無しさん
19/03/05 18:51:08.44 t42KPL8W.net
unreal engineとかクッソ大規模に見えるけどどう?

680:デフォルトの名無しさん
19/03/05 19:03:00.43 fIhIM0AX.net
工数でいえばそんなもんクフ王のピラミッドには遠く及ばないだろう

681:デフォルトの名無しさん
19/03/05 19:03:04.57 VOhJ9aa0.net
そもそもjreの基幹部分とかc++だろ

682:デフォルトの名無しさん
19/03/05 19:33:34.31 5rQQuIbo.net
クフ王のピラミッドがなんか関係あるのか?

683:デフォルトの名無しさん
19/03/05 19:57:12.64 RSECco33.net
甘い
甘いなぁ
人月換算だと同じだよ
死者数すらも一致してる

684:デフォルトの名無しさん
19/03/05 22:23:27.02 kisxcMe6.net
20年前で70万ステップぐらいでビルドに1Hぐらいだったなあ

685:デフォルトの名無しさん
19/03/06 00:39:47.70 oR6mPeK7.net
むしろ>>674が思う大規模なjavaプロジェクトを知りたい

686:デフォルトの名無しさん
19/03/06 00:47:13.50 URVwFrjm.net
人数かけて、webページの遷移ごとに別人が開発して、似たような処理をするコードが100倍くらいに膨れ上がって収集つかないようなのが大規模なんじゃね

687:デフォルトの名無しさん
19/03/06 02:24:32.10 bd8igJ/M.net
そう言われると、それまさにコボルだなw

688:デフォルトの名無しさん
19/03/06 09:21:38.79 Bk9kaTOY.net
コボル島ってどっかになかったっけ

689:デフォルトの名無しさん
19/03/06 09:50:15.63 mg6kC0Yg.net
c++じゃなくてcでnamespaceって使えますか?あるいはnamespace相当の機能ってどうすれば実現出来ますか?

690:デフォルトの名無しさん
19/03/06 09:53:13.16 mg6kC0Yg.net
重力波を検出するのに世界中の電子望遠鏡を接続してリアルタイムに通信してるようだけど
ああいうシステムのコードって何で書かれてるの? FORTRAN ?

691:デフォルトの名無しさん
19/03/06 10:10:00.89 TjQtzcPT.net
>>689
cでは使えない
ほぼ上位互換だからc++使えばいいじゃん

692:デフォルトの名無しさん
19/03/06 11:25:59.41 1+PBsWw4.net
>>690
マジレスすると、ああいうのはファイルに落として時々バッチ処理してるだけ
言語はだいたいFortranかC++が多いだろうね

693:デフォルトの名無しさん
19/03/06 13:12:20.46 +Sk++sfs.net
C++だけは絶対にないな

694:はちみつ餃子
19/03/06 13:15:53.62 7/fqDaVy.net
そうか。

695:デフォルトの名無しさん
19/03/06 23:36:07.84 rIL6SiiZ.net
std::chronoにnanoseconds取り扱う型があるけど
これってwindowsでもナノ秒の精度ちゃんと取り扱えるの?

696:デフォルトの名無しさん
19/03/06 23:39:51.80 NglcYyrq.net
c++11以降はあれ明らかに生産性下がってんだろ。。
誰か本当のことを言ってやれよ。。

697:デフォルトの名無しさん
19/03/06 23:41:05.32 ARyk7IvZ.net
構造化束縛はありがたい

698:デフォルトの名無しさん
19/03/06 23:42:11.68 TjQtzcPT.net
>>695
自分で試してみたら?

699:デフォルトの名無しさん
19/03/06 23:52:49.64 07omsi5c.net
>>695
表現できるだけ
計測できるとは言っていない

700:デフォルトの名無しさん
19/03/07 04:25:32.55 hEEon6In.net
じっさいにやったらわかるが、結局 Windows API の持ってる精度までしかでない
あたりまえっちゃーあたりまえだが

701:デフォルトの名無しさん
19/03/07 05:42:28.93 mVKClUMz.net
>>698
試そうと思ったらどう試すのがいいんだ?

702:デフォルトの名無しさん
19/03/07 06:28:12.40 beHWBAJY.net
短時間、というか連続で何度も時刻の値を入手して、
値の下の方の桁がかならずゼロ並びになってるとか、
時刻同士の差を取って、ある値より小さな数が出ないことから、
解像度の見当を付けるくらいかな。
もっと良いやり方を知ってる人は教えてください。

703:デフォルトの名無しさん
19/03/07 09:17:09.23 0XBNAuOg.net
差をとってその偏差を見ればいいんでは
高解像度タイマーならたぶんcpuのクロック程度の解像度じゃないの
パフォーマンス測定に普通使うし
個人的にはchrono使わずにosのapiかコンパイラの組み込み関数使う
そっちの方が信頼できるし、chronoは型がガチガチすぎて面倒くさい

704:デフォルトの名無しさん
19/03/07 09:44:34.06 MJ46GSxE.net
アナログ出力してオシロで確認

705:デフォルトの名無しさん
19/03/07 19:42:23.39 41TL6wBf.net
std::vectorの最初の要素数は
std::vectro<foo> bar(12);
みたいにコンストラクタで指定できますが、同様に
std::vector<std::vectro<foo>> bar
のように入れ子になったvectorの両方の要素数をコンストラクタで指定する方法はありますか?

706:デフォルトの名無しさん
19/03/07 20:10:03.40 rioBJ/QG.net
結構難しいと思うがね。
最近のCPUはターボブーストいうてサボるし、命令順序入れ替えるし、キャッシュの乗り方でnano秒程度は簡単にズレるだろうし。

707:デフォルトの名無しさん
19/03/07 20:45:12.44 xMxnKQAI.net
>>705
std::vector<std::vector<foo>> a(100, std::vector<foo>(200));

708:デフォルトの名無しさん
19/03/07 20:50:20.24 pnI3L7PU.net
>>706
最近のは対策入ってる

709:デフォルトの名無しさん
19/03/07 22:54:09.91 qMT9Q04c.net
>>707
ありがとござます!

710:デフォルトの名無しさん
19/03/09 07:43:53.39 L5yO1DTL.net
Cで書かれたライブラリから来た構造体にスマポをあてる方法はありますか?

711:デフォルトの名無しさん
19/03/09 09:00:25.13 jz9xUaFa.net
どうなんだろ?
普通に考えたらデストラクタでfreeを呼べばいいから、それ用のライブラリがありそうな気はするけど。

712:デフォルトの名無しさん
19/03/09 10:46:03.96 ABNsWlsO.net
>>710
スマポ弄ってアロケートだけしないようにすればいいんじゃね?

713:デフォルトの名無しさん
19/03/09 11:36:20.07 4ewQpv+T.net
「来た」というのが構造体へのポインタをfree責任ごと渡されたという意味ならカスタムデリータだろうな。

714:706
19/03/09 12:16:02.29 L5yO1DTL.net
ありがとうございます
カスタムデリータは知りませんでした
Cで書かれたライブラリにmallocしたポインタを返してくる関数があって生ポいやだなあと思っていたところでした

715:デフォルトの名無しさん
19/03/09 14:06:24.90 YAm1zwse.net
最近スマポ使えスマポ使えってうるさい割にはカスタムデリータ指定出来ることも知らなかったりするんだな
自分が使ってるもののリファレンスすら読んでない奴が安全性とかどの口で言ってるんだろう

716:デフォルトの名無しさん
19/03/09 15:07:55.58 23Hi4jvz.net
わかってない奴ほど、声がデガイんだよ。

717:デフォルトの名無しさん
19/03/09 17:13:56.74 kfZA3URW.net
codecvt_utf8
codecvt_utf16
codecvt_utf8_utf16
こいつらの糞加減に

718:デフォルトの名無しさん
19/03/09 17:33:22.12 anJ4ej+i.net
最近カスタムデリータ知ったから嬉しがってる奴がいるなw

719:デフォルトの名無しさん
19/03/09 17:49:56.48 23Hi4jvz.net
>>715
すいませんね、リファレンスなんかそっちのけで、ネット情報だけで、プログラム組んでます。

720:デフォルトの名無しさん
19/03/09 19:59:53.92 YAm1zwse.net
>>718
図星だったか、すまんな
というかマウント取るための屁理屈考えてる暇あったら手動かした方がいいよ

721:デフォルトの名無しさん
19/03/09 20:10:27.73 eJu7ZZw8.net
図星しとか意味分からん
ひょっとして>>715 disってるのか? w

722:デフォルトの名無しさん
19/03/09 20:14:07.94 9vZTtl18.net
最近図星って言葉を覚えたので使いたいんだろう
察してやれ

723:デフォルトの名無しさん
19/03/09 20:21:16.84 YAm1zwse.net
>>715で言ったことが図星だったか?という意味なんだが
アホが多いインターネッツですね

724:デフォルトの名無しさん
19/03/09 20:32:45.58 kU0Uws1z.net
今度はインターネッツという言葉を覚えたのか
どんどん賢くなっていくな

725:デフォルトの名無しさん
19/03/09 20:39:00.33 ABNsWlsO.net
カスタムデリータごときでよくそこまでドヤれるもんだなw

726:デフォルトの名無しさん
19/03/09 20:46:58.79 YAm1zwse.net
それ俺に言ってんの?w

727:デフォルトの名無しさん
19/03/09 21:23:16.03 jx9iLAiD.net
そもそもSTLの基幹部分とかJavaだろ。

728:デフォルトの名無しさん
19/03/09 21:36:18.70 jz9xUaFa.net
実際c++やるやつのほとんどの動機がマウントとりたい以上のものではない。

729:デフォルトの名無しさん
19/03/09 22:31:55.52 u5Pk3KZw.net
> 俺に言ってんの?
意識しまくりすぎだろw

730:デフォルトの名無しさん
19/03/09 22:41:21.04 Tm/Y9JxW.net
大学四年かけてC++と機械学習学べば年収1000万とか本気で言ってる奴らだからな()

731:デフォルトの名無しさん
19/03/11 22:26:31.27 QlHozVZM.net
相談なのですが
テキスト形式のライセンスファイルへのファイルパスを渡さないと使用できないライブラリA
そのライブラリAを使用するライブラリB
私が作成しているのはライブラリBです。お客さんに使ってもらうものなんですが、「ライセンスファイルをセットで提供して適切な場所に置いて使ってもらう」という手間を省きたくてライセンスファイルをライブラリBに埋め込めないかと思案しています。
とりあえずライセンスファイルの中身をソースにベタ書きし、実行時に一時ファイルとして作成しライブラリAにそのパスを渡すことで上手くいっているのですが、もっとスマートな方法はないでしょうか?
ファイルパスを渡さないといけないので無理ですかね…

732:デフォルトの名無しさん
19/03/11 22:57:10.81 9rO3q8tQ.net
納入時にファイル一つなんか?
実体なんやねん

733:デフォルトの名無しさん
19/03/11 23:06:05.03 zGphoT2G.net
ライブラリAが要求するのは
ファイルシステムに認知されるファイルの形式でないといけない
だから中間ファイルに書き出して、そのファイルパスを渡すしかない

つかライセンスを埋め込んだ場合何がしかの事情で
ライセンス変更の必要が迫られた場合ライブラリBを構築しなおすことになるんだが
そういう管理でいいのけ?

734:デフォルトの名無しさん
19/03/11 23:06:05.25 CMHDEYzk.net
>>732
ヘッダーと共有ライブラリのセットです。

735:デフォルトの名無しさん
19/03/11 23:11:06.21 CMHDEYzk.net
>>733
やっぱ他にないですよね…
継続的にバージョンアップ重ねて提供してるんですが、ライブラリAについては今後も使い続けるか微妙なんでお客さんに~のように運用してくださいってお願いするのはまだやめておきたいんですよ。
まあその面倒ごとを避けようとするスタンスが一番よくないのかもしれませんね。

736:デフォルトの名無しさん
19/03/11 23:14:01.28 CMHDEYzk.net
というか自分がお客さんの立場にたってみれば、「カレントディレクトリにライセンスファイル置いて使ってください」と言われたら「はいOKです」ですむ問題ですよね。
やはりちゃんとライセンスファイル提供して使ってもらうべきかと思ってきました。

737:デフォルトの名無しさん
19/03/11 23:20:45.86 9rO3q8tQ.net
>>734
どう配布すんのかしらんけど
共有ライブラリと同じとこに置いて固めるなり、インストーラー書くなりすれば十分やろ
たいして報われん努力やと思うわ
それよりライブラリAは何がしたいんか気になるわ
意味あんのかそれ

738:デフォルトの名無しさん
19/03/11 23:23:05.53 CMHDEYzk.net
>>737
ライブラリAはwebAPI叩くからその時にアクセス権限チェックでライセンスファイルを使うようです。

739:デフォルトの名無しさん
19/03/11 23:36:41.67 9rO3q8tQ.net
>>736
ロードされてる共有ライブラリのパスはとれるはずやから、
そこにライセンスファイル置いておく手はある

740:デフォルトの名無しさん
19/03/12 01:51:07.02 xlgLjh5J.net
変数と型についてなんだがメモリは2進数でデータを記録していて、それを何byteで区切って、どういう意味を持つか(正の整数のみとか)を型で決めてるんだよね?だとしたらポインタに型があるのはなぜ?どれもアドレスを示すんだからある意味int型でいいと思うんだけど

741:はちみつ餃子
19/03/12 02:03:10.03 tBEUjULM.net
>>740
そういう言語もあったよ。
でも、ポインタを経由しただけで型がわからなくなるんじゃ、
型システムが意味を成さないだろう。
元と違った型としてアクセスしようとしたときに、
型情報がなけりゃコンパイラが捕捉しようもない。
それはプログラマの責任で正しく扱うってのならそれでもいいし、
実際、 C/C++ はプログラマがやりたければポインタを整数に型変換することも出来るけど、
(言語仕様としてはほとんど保証はないが。)
人類は間違うのでな。
型が合わないエラーなんてたびたび出しちゃうもんだろ。
もし型がなければそれはスルーされてわけのわからない挙動をするプログラムになるんだぞ。
そういうのはもうやめようって話。

742:デフォルトの名無しさん
19/03/12 02:06:26.71 i1gu3hXZ.net
>>740
ポインタに格納されるアドレス値は32bitとか64bitとかの整数でそれ自体は同じ型として扱えるとしても、そのポインタの指す先にある物の型が分からないと色々困るでしょ。
ポインタ型としてvoid*だけでプログラムを書こうとすればその必要性がわかるはず。
同じバイト表現だからといって同じ型で表さなければならない道理はない。用途や演算結果が異なるのだから別の型として扱うのはある意味自然なことだと思うよ。

743:デフォルトの名無しさん
19/03/12 07:03:19.32 1t7NN+JI.net
>>740
参照はずし、つまり*演算子で「ポインタの指す内容」を取り出すときに
そのポインタがどんなデータを指すポインタか分からないと困るでしょ。
構造体を指すポインタで p->menber とかする場合も同様。
>>742 の「void*ポインタだけ使って書いてみる」ってのは、
ポインタに型のある有り難さを実感できる良い課題だね。

744:デフォルトの名無しさん
19/03/12 07:35:06.24 nPeHxcg9.net
Cのポインタ型はK&Rのプログラミング言語Cに書いてある通り、単なるアドレスを保持する型じゃなくて配列の仲間なのよ。
例えば
char *cp =“abc”;

*(p+1)の様に書くと、ちゃんとcharサイズ分ずらしたアドレスを指してくれる。
その本には
(当時の)優れたプログラマたちがやってた事を言語仕様として取り込んだと、という様な事が書いてあったと思う。
ポインタが示す先の型とサイズやらの心配はC言語では不要だ、すげーだろ?的な。

745:デフォルトの名無しさん
19/03/12 07:35:25.54 nPeHxcg9.net
Cのポインタ型はK&Rのプログラミング言語Cに書いてある通り、単なるアドレスを保持する型じゃなくて配列の仲間なのよ。
例えば
char *cp =“abc”;

*(p+1)の様に書くと、ちゃんとcharサイズ分ずらしたアドレスを指してくれる。
その本には
(当時の)優れたプログラマたちがやってた事を言語仕様として取り込んだと、という様な事が書いてあったと思う。
ポインタが示す先の型とサイズやらの心配はC言語では不要だ、すげーだろ?的な。

746:デフォルトの名無しさん
19/03/12 07:37:59.58 nPeHxcg9.net
>>745
>>745
>*(p+1)の様に書くと、ちゃんとcharサイズ分ずらしたアドレスを指してくれる。
*(cp+1)の間違い

747:デフォルトの名無しさん
19/03/12 08:23:28.38 xHFKV8QO.net
>>741
>>742
>>743
>>744
ヒューマンエラー防止
型のないポインタを宣言すると中身のbyte長が不明
ってことかありがとう
740のコードを見て疑問に思ったんだけど*cpは一つのアドレスしか記録できないから配列の先頭(文字a)のアドレスを記録するよね。このとき配列の長さが3だという情報はどこにあるの?(脱線するけどNULL終端も数えて長さ4?)

748:デフォルトの名無しさん
19/03/12 08:29:27.03 i1gu3hXZ.net
>>747
ポインタが指す先にいくつ分の領域があるか(いくつ分を参照してよいか)は記録されてないから、プログラマが自分の責任で管理するしかないよ

749:デフォルトの名無しさん
19/03/12 08:41:29.44 7SPfMi3X.net
>>747
直接長さを示す情報はどこにもないよ
だから、cの「文字列」は単なる文字の配列だけではなく、0終端が必要
>(脱線するけどNULL終端も数えて長さ4?)
その通り
(NULLはnullptrとしてのみ使ったほうがいいよ
混同してないならいいんだけどね)

750:デフォルトの名無しさん
19/03/12 09:29:32.99 nPeHxcg9.net
>>744
>>745
>ポインタが示す先の型とサイズやらの心配はC言語では不要だ、すげーだろ?的な。
サイズって型のサイズでした、すみません。
配列長さは
sizeof(*cp) / sizeof(型)で取ってねって書いてあったよね?

751:デフォルトの名無しさん
19/03/12 09:32:06.13 u0RxZCyH.net
\0終端が来るまで確保されていると想定して受け取り側は動作する
だから終端記号がないと色々まずい
(ので、バッファ長も指示する関数が後から増えた)

752:デフォルトの名無しさん
19/03/12 09:32:15.05 xVickGeK.net
便乗質問でごめんやけど
delete [] p;
この場合deleteはどうやってサイズ調べてんの?

753:デフォルトの名無しさん
19/03/12 09:33:32.91 i1gu3hXZ.net
>>750
char *cpで宣言してるならその計算じゃ配列サイズはとれないよ。

754:デフォルトの名無しさん
19/03/12 09:33:42.86 u0RxZCyH.net
要素数の算出は
sizeof(配列) / sizeof(配列[0]) または sizeof(配列) / sizeof(*配列)
ではなかろうか?

755:デフォルトの名無しさん
19/03/12 09:47:35.09 Nd0ou12Q.net
除算は遅いからなぁ

756:デフォルトの名無しさん
19/03/12 10:18:57.28 u0RxZCyH.net
コンパイル時に確定する値だから
実行時には定数として埋まってるんでないの?
(ほんとんどの環境で インタープリターはしらんw

757:デフォルトの名無しさん
19/03/12 10:22:41.05 Nd0ou12Q.net
sizeof(配列)は動的でしょう

758:デフォルトの名無しさん
19/03/12 12:15:07.37 7lezZ5hH.net
sizeofは演算子だから動的じゃないかな
最適化で消し飛ぶ可能性はあるのかもしれんけど

759:デフォルトの名無しさん
19/03/12 12:42:52.96 Gedrqwi7.net
>>752
実装依存だと思うけど、p[-1]とかに長さが書いてあったりする

760:デフォルトの名無しさん
19/03/12 12:45:54.40 xHFKV8QO.net
アンカー長くなるから省略するけど
みなさんありがとう

761:デフォルトの名無しさん
19/03/12 13:32:00.51 6Uu2j9Xc.net
インクリメントするときに困る

762:752
19/03/12 14:52:24.67 u0RxZCyH.net
VLAのこと完全に忘れてた sizeof(配列) は動的だわ

763:はちみつ餃子
19/03/12 15:09:12.69 tBEUjULM.net
sizeof の結果は動的な判断が必要な場合 (いわゆる VLA) を除いて整数定数であることは保証される。
C++ には VLA は無いので sizeof が動的であるかどうかを心配する必要はないんだけど、
それは置いといて、 C++ で配列の大きさを知りたいときは std::extent の方がよくない?

764:デフォルトの名無しさん
19/03/12 15:29:35.28 xWv5Y9zk.net
>>760
>>748-759
というアンカー表示方法も、知っておいてね。

765:デフォルトの名無しさん
19/03/12 22:48:56.35 SU/8eF4+.net
昔はstd::extent持ち出したりしたが今はstd::sizeだな

766:デフォルトの名無しさん
19/03/12 23:05:04.16 /eUnUFro.net
uint8_t *addrb =(uint8_t *)0x00F00000;
uint16_t *addrw =(uint16_t *)0x00F00000;
*addrb = 0x10;
*addrw = 0xF0F0;
0x00F00000番地に0x10と0xF0F0を書き込むコードらしいのですが、最初の2行がよく分かりません。アドレスが4バイトなのにポインタはそれより小さくて問題ないのでしょうか。右辺のキャストは何を行っているのでしょうか。
よろしくお願いします。

767:デフォルトの名無しさん
19/03/12 23:29:55.31 RU0tEwI6.net
>>766
・整数だから昇格するよ
・整数即値をポインタ型に変換してるよ
ポイント先のデータは多分、バイト型だよ
マップドIO系のCPUではよく見るパターンだね

768:デフォルトの名無しさん
19/03/12 23:37:26.58 y5WX6T5u.net
>ポインタはそれより小さくて問題ないのでしょうか。
*addrb = 0x10;
*addrw = 0xF0F0;
この文を見て上の疑問に到達したのかな?
ポインタは addrb や addrw で その変数の器の大きさはアドレスを格納できる大きさ
*addrb で アドレスにさされた先の内容を示す 内容の大きさはその型による
*addrb は uint8_t 型でおそらく1バイト (1オクテット)
*addrw は uint16_t 型でおそらく2バイト (2オクテット)

769:デフォルトの名無しさん
19/03/13 18:31:26.55 yPp5BeL1.net
ありがとうございます。
理解できました。
そもそもアドレス自身のサイズがあるものと勘違いしてました。

770:デフォルトの名無しさん
19/03/14 06:41:14.61 SGfhnH0M.net
アドレス自身にもサイズはあるけどね。
sizeof(*addrb) == たぶん 1 (8bit)
sizeof(*addrw) == たぶん 2 (16bit)
sizeof(addrb) ... 近頃のPCでは 4 (32bitアドレス) か 8 (64bitアドレス) かのう。

771:デフォルトの名無しさん
19/03/14 12:20:30.31 Yw9IVRaM.net
メモリ消費についてききたい。
8byteのa,b,cっていう変数と、それを結合した24byteのdっていう変数をクラス内で扱いたいんだけど、素直にやると48byteメモリ消費だよね?
代わりに24byteのdと、8byte型のポインタ(4byte)3つ宣言したら36byteのメモリ消費で12byte/オブジェクトの節約になると思うんだけど、最適化したければ意識するべき?
あるいはコンパイラがその辺は上手にやってくれて最小限のメモリ消費になる?

772:さまよえる蟻人間
19/03/14 12:26:16.05 1+g2CCuw.net
>>771
ポインタ先をチェック・確保するのにヒープメモリーと計算コストが掛かる。

773:デフォルトの名無しさん
19/03/14 13:52:59.75 M+miX7Aw.net
>>771
宣言次第ですね。
メモリ節約だとdを配列にしておくといいかなとおもいました。

774:デフォルトの名無しさん
19/03/14 14:39:59.26 3EvgP48J.net
>>771
それ実体の24byteが別に要るだろ…

775:デフォルトの名無しさん
19/03/14 14:43:45.46 q8OuUl64.net
下のソースをコンパイルしてコマンドプロンプト(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 に問題があるということでしょうか?

776:デフォルトの名無しさん
19/03/14 14:57:23.81 tsxAqnNH.net
Windows は、Visual Studio だろ
TCHAR マクロで、sjis/Unicode を切り替える。
Windows用の環境を揃えないと、無理だろ

777:デフォルトの名無しさん
19/03/14 15:10:14.13 q8OuUl64.net
UNICODE
_UNICODE
とかは定義してあります
それに[あ]の方は表示されてるので
TCHAR が char と誤認識とかめっちゃ的外れな指摘だと感じます

778:デフォルトの名無しさん
19/03/14 15:25:54.72 s2YvJJWc.net
fwprintf
ワイド文字を書き込む場合、ファイルはバイナリー・モードでオープンするか、
o_ccsid または codepage パラメーターでオープンする必要があります。
これにより、ワイド文字に対して変換が発生しないことが保証されます。

779:デフォルトの名無しさん
19/03/14 17:04:07.47 DMc/T5SW.net
>>771
もしかして windows で 24bitカラーを取り扱いたい話? union で楽する
#pragma pack(push,1)
typedef union {
BYTE e[3];
struct { BYTE B, G, R; };
} BPP24_t;
#pragma pack(pop)

780:デフォルトの名無しさん
19/03/14 19:02:32.98 wP1B/x23.net
>>772-774 >>779
ありがとう説明不足だった
厳密にはL2フレームを実装したくて
DMAC6byte
SMAC6byte
TYPE2byte
とかを結合して送りたい。
んだが、結合用の変数を用意するとメモリ消費二倍な気がしていやだなと。
で、それぞれはポインタにして結合用の変数の0、6、8byteめを指定してやればいい気がして聞いてみた

781:デフォルトの名無しさん
19/03/14 19:26:19.44 lcdumzgu.net
>>780
プロトコルスタックでそういうデザインはよくある
nicにわたすときのdmaもそんな感じ
しかしその数バイトの処理はこだわるところじゃない

782:デフォルトの名無しさん
19/03/14 20:21:10.72 2vbDdJqi.net
規格で標準ライブラリ中のメソッドがconst指定されていない場合これをconst指定するのは規格違反ですか?
具体的にはuniform_int_distributionのconstなインスタンスを生成してoperator()(URNG& g)を呼び出すとMSVC(VS2017)のみ通り、gcc4.3.2とclang4.0ではコンパイルエラーになりました
N4140及びN4659を参照した限り、上記のオペレータはconst指定されていませんでした

783:デフォルトの名無しさん
19/03/14 20:28:14.30 gIuDI0vP.net
>>780
フレームの組み立ては迷うことなくstructでいいと思うのですがどうでしょう。ちなみにpingではは素直にstructで組み立ててあります。

784:デフォルトの名無しさん
19/03/14 20:30:26.12 V4l0GHvB.net
>>781
確かに数バイトなんだけどね
>>783
cppで書いててクラスのプライベート変数として持ってます
結合どうするかだけ悩ましい

785:デフォルトの名無しさん
19/03/14 21:00:14.82 gIuDI0vP.net
>>784
ああ、なるほど。structでガワ作っておいて、ペイロード書き換えてバッファに溜めていくって感じでしかやった事しかないですけどケースバイケースなんでしょうね。

786:デフォルトの名無しさん
19/03/14 21:58:48.11 VY0DZD81.net
コンソールがSJISだから無理

787:デフォルトの名無しさん
19/03/14 23:31:25.66 u00Rfoqy.net
C++難しすぎねえか?
こんなの新機能を網羅してる人どんだけいるんだか・・・

788:デフォルトの名無しさん
19/03/14 23:39:23.56 CLlwPgIu.net
奥義を究めると尊敬されます(カモ)

789:はちみつ餃子
19/03/14 23:47:20.81 mXS2OKIJ.net
>>787
別に網羅せんでも使えるところだけ使えば良い。
常に新しい機能を把握しておく必要はない。
使わない方が良い機能というのは有るので、駄目な部分を把握する方が大事だと思う。
(その結果として新しい機能に行きつくこともあるけど。)
新しい機能を使わないと回りくどくなるだけだが、
駄目な機能は致命傷になる (という可能性をコンパイル時にエラーに出来ない) こともあるので。
今の C++ で nullptr でなく NULL を使う理由は全然ない、みたいなのとか。

790:デフォルトの名無しさん
19/03/14 23:49:54.51 Gk3KilXE.net
てかコンセプトが待ち遠しい
templateの黒魔術っぷりが大幅に改善されるよね
エラーメッセージが分かりやすくなるのが大きい

791:はちみつ餃子
19/03/15 00:08:50.55 q2a9nFaz.net
コンセプトとモジュールは C++er の悲願って感じだからな……。
今まで土壇場での延期を繰返した経緯を考えると次も本当に入るのか
疑わしい気はするけど。

792:デフォルトの名無しさん
19/03/15 02:19:09.67 f+LcC8HT.net
配列のアドレスが表示できません。何が悪いのでしょうか。結果はからになります。
unsigned char a[100];
cout << hex << &a[5] << endl;

793:デフォルトの名無しさん
19/03/15 02:52:40.51 nvk7uoI+.net
a+5

794:さまよえる蟻人間
19/03/15 04:49:34.55 CgPhXsZt.net
(void *)

795:デフォルトの名無しさん
19/03/15 06:53:21.47 F3jqlZHF.net
>>792
&a[5] は「unsigned char を指すポインタ」なので
cout << では「'\0'で終端する文字列」として表示しようとするのよ。
なもんで >>794 の通り void* にキャストして、
具体的なデータを指さない「単なるアドレス」扱いしてくれと指示。
ちなみに >>793 は効果ないでしょ。
でも C++ の作法としては static_cast<void*>(&a[5]) と
長々しい名前付きキャストを使うべきなんじゃろか。
個人的には static_cast<const void*>(&a[5]) まで書きたいけど。
inline const void *to_voidptr(const void* p) {return p;}
てな具合に、字数を減らすための変換用の関数でも使うか。

…何か標準的で短い書き方があったりするのかしら。

796:デフォルトの名無しさん
19/03/15 08:07:08.74 fLDhqMRG.net
文字はcharだけでsigned/unsignedは整数扱いするとかしてくれりゃよかったのにな。

797:デフォルトの名無しさん
19/03/15 09:38:53.54 MV2geWC9.net
coutなんて使うのが悪い
printf()でおk

798:デフォルトの名無しさん
19/03/15 10:50:58.56 nvk7uoI+.net
qDebugばっか使ってたからcoutの使い方なんて忘れてたわw

799:デフォルトの名無しさん
19/03/17 06:21:33.06 Q6jWm6hE.net
そういえば「cout << &a[5] でアドレス値が表示されない」ってのは
char 系の配列やポインタの場合だけで起きる特殊例なのかな。
ユーザーが operator<<(ostream&, T*) の再定義をしない標準の状態で、
オブジェクトのアドレス値を送ったらアドレス値以外の何かが表示される型って
標準か有名どころのライブラリで、何か知ってる?

800:デフォルトの名無しさん
19/03/17 12:02:02.30 ZVJiTVd1.net
operator<<(ostream&, T*) の再定義をしないライブラリで
オブジェクトのアドレス値を送ったらアドレス値以外の何かが表示される型を定義しているものは?
という質問に置き換えてみた

801:デフォルトの名無しさん
19/03/17 13:17:40.49 4LIjOkKH.net
gccのiostreamのソース辿れば全部書いてあるよ。

802:
19/03/17 14:11:06.99 8PHb1ymW.net
>>801
ほう、どこに書いているのかわかってそう言っているのですね、それはすごいですね

803:デフォルトの名無しさん
19/03/17 14:22:23.04 rD0zueCH.net
URLリンク(github.com)

804:はちみつ餃子
19/03/17 14:50:03.46 aA4z/LNt.net
ライブラリのソースコードを辿っていくとビルトイン関数だったりして萎えることもあるので、
まずは仕様をちゃんと読もうな。

805:795
19/03/17 15:05:24.52 Q6jWm6hE.net
>>803
ostream のヘッダ単独は意外に分量少なくて一通り見られたよ。
char系以外には...
operator<<(nullptr_t); // #if __cplusplus >= 201703L で条件コンパイル
operator<<(__streambuf_type* __sb);
があるみたい。本当にこれだけか確実ではないけど。
nullptr_t の方は「nullptr が送り込まれたら "nullptr" と表示しろ」だと思うが
__streambuf_type* __sb は分からん(定義は別ファイル、みたいだし)。


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch