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 は分からん(定義は別ファイル、みたいだし)。
806:デフォルトの名無しさん
19/03/17 15:17:33.67 9G7IgbIM.net
痛レータが呼ばれるんじゃね
807:デフォルトの名無しさん
19/03/17 19:25:05.63 wQNvtjPu.net
現在アルゴリズムの勉強をしています
ソートアルゴリズムで有名な基本挿入法で与えた5つの整数を小さい順に並べるプログラムがうまく動きません
基本選択法、基本交換法(バブルソート)は書けるのですが…
ソートアルゴリズム、アルゴリズムそのものは図で正しく書けるとは思うのですが、コードに落とし込むのがうまくいきません
書いたコードは稚拙ですが以下のものです おかしな点を教えてくだされば幸いです
#include<stdio.h>
//基本挿入法
int main(void){
int temp=0,j,i;
int ary[5]={9,6,1,5,2};
for(i=1;i<=4;i++){
temp=ary[i];
for(j=i-1;j>=0;j--){
if(ary[j]>ary[i]){
puts("aaa");
ary[j+1]=ary[j];
}else{
puts("jais");
j--;
break;
}
}
j++;
ary[j]=temp;
printf("a[%d]は%d a[%d]は%d¥n",j,ary[j],i,ary[i]);
}
for(i=0;i<=4;i++){
printf("%d¥n",ary[i]);
}
return 0;
}
808:デフォルトの名無しさん
19/03/17 19:26:08.56 wQNvtjPu.net
puts(“aaa”)やputs(“jais”)はprintf(“a[%d]は%d ~”)の3つは、プリントデバグのために書いたものです…消し忘れました
すみません
809:
19/03/17 21:48:00.62 8PHb1ymW.net
>>807
URLリンク(ideone.com)
納得がいくまで printf() を仕掛けるのはいいことだと思います。
810:デフォルトの名無しさん
19/04/01 21:33:07.89 iIi946R+.net
class C
{
public:
void f(){}
};
C* pc= new C;
pc.f();
コンパイルエラーが出るってことは、コンパイラはpcがポインタであることを
知ってる
なのになぜ、->と記述させるの?
811:デフォルトの名無しさん
19/04/01 21:44:58.77 32G7a9z6.net
std::invoke使え
812:デフォルトの名無しさん
19/04/01 21:52:40.40 7SOsx0TI.net
ClassAのメンバにClassBがあってコンストラクタかsetterで外部から与えたいんだけど、
ClassBが大きくてできるだけコピーしたくない場合はどうするのがベストですか?
コピーコンストラクタが呼ばれた場合に初めてコピーされるようにしたいです
unique_ptr<ClassB>型にするとスコープを外れるときに落ちました
Class ClassA{
public:
ClassA(ClassB &b) { m_b.reset(&b); };
ClassA(const ClassA a) : m_b(new ClassB(a.m_b)){};
・・・
private:
unique_ptr<ClassB> m_b;
}
main(){
・・・
{
ClassB b;
ClassA a(b);
} // ここで落ちる
・・・
}
813:デフォルトの名無しさん
19/04/01 22:09:12.99 oZ4uWA1m.net
> m_b.reset(&b);
ヒープオブジェクトじゃないものをunique_ptrに突っ込んだらダメ。
カスタムデリータ用意するなら別だけど。
814:デフォルトの名無しさん
19/04/01 22:22:19.12 7SOsx0TI.net
>>813
この場合にスマートポインタは違うようですね
メンバは実体にして渡すときにムーブすればコピーは発生しないという認識は正しいですか?
815:デフォルトの名無しさん
19/04/01 22:30:43.95 0T+gZcjq.net
ClassAはClassBそのものを所有するのか
それとも外部のClassBへの参照を保持するだけなのか?
そのものを所有するなら外部から与えるのではなく
ClassAの中でClassBを構築するのも検討してみれば
// ClassAのコンストラクタ
// 11以降ならムーブとかも
ClassA(ClassBの構築に使う引数) : m_b(前記の引数) {}
816:さまよえる蟻人間
19/04/01 22:30:51.94 OIWsA4Np.net
>>814
スマホ使う前にオブジェクトの所有権を明確にせよ。
817:デフォルトの名無しさん
19/04/01 22:51:52.32 7SOsx0TI.net
ClassBの構築に使う引数も大きいためコピーを避けたいところです
基本的には参照を保持するだけにしたいところですが、ClassBがスコープを外れて破棄される場面ではClassAに実体をコピーできるようにしたいです
818:デフォルトの名無しさん
19/04/01 22:59:26.12 oZ4uWA1m.net
なんでそこでわざわざコピーしたいの?
最初からnewでヒープに確保すりゃコピー必要ないのに。
819:デフォルトの名無しさん
19/04/01 23:35:23.75 32G7a9z6.net
AにB*とunique_ptr<B>を作って
AがBを使うときは常にB*経由でアクセス
Bを所有させたいときだけunique_ptrにヒープ管理だけさせる
820:デフォルトの名無しさん
19/04/01 23:37:44.29 7SOsx0TI.net
2つ持つという発想はありませんでした
試してみます
821:デフォルトの名無しさん
19/04/04 17:56:45.10 4dlKQxP/.net
昔、openGLを使ってC++出遊んでたんですけど、また最近触りたくなりました
皆さんC++で何作ってますか?
個人開発規模でお願いします
822:
19/04/04 19:24:27.16 +9gozOKQ.net
>>821
昔作ったツールがひょんなことで役立っています…
あるディレクトリを別のドライブにコピーするだけのことなんですが、いや、まあ、Windows はなかなか御しがたく、path 文字列長が一定範囲を超過すると止まってしまう変てこなコマンドラインツールが未だに現役だったりするのです…
スレリンク(tech板:53番)
823:デフォルトの名無しさん
19/04/04 20:14:39.57 vPLFSwkc.net
>>822
システムコールってやつですか?
オブジェクト指向と並列処理を勉強したいと思ってるのでQtもいいかなと思ってます
どうでしょうか?
824:デフォルトの名無しさん
19/04/04 20:22:00.68 USs/shwk.net
Qtのデメリットはライセンスだけだから個人でやる分には良い選択
825:デフォルトの名無しさん
19/04/12 11:39:32.60 K5RuTlhq.net
オブジェクト指向を学ぶのにRubyあたりを使うのは
どういうデメリットが?
Pythonは「バージョン違いによる仕様変更」に
入門書レベルのコードが影響されるのであれば「良い選択とは言えない」ことになりそーだけど
826:デフォルトの名無しさん
19/04/12 12:37:54.42 oOSdboOz.net
>>825
せっかく新しい言語を学ぶなら、近い将来役に立たなくなる言語より他の役に立つ言語を選んだ方が合理的だと思う
827:デフォルトの名無しさん
19/04/12 13:47:38.12 +CDO09PL.net
pythonて破壊的な変更があったのは20年近く前なのに、未だに古い仕様で書かれた入門書が出回っているなら、オブジェクト指向学習に最適化どうかとは別に、問題な気が。
828:デフォルトの名無しさん
19/04/12 14:05:10.56 VR9mZ4dF.net
rubyは古い言語
829:デフォルトの名無しさん
19/04/12 14:50:54.53 K5RuTlhq.net
Qt5.12.2はLGPLライセンスでインストールしとけばok?
他のライセンスは初見
830:デフォルトの名無しさん
19/04/12 14:56:36.82 rTBxcnf6.net
追加パッケージを使わないのならLGPLでおk
831:デフォルトの名無しさん
19/04/12 15:06:17.42 K5RuTlhq.net
"Qt Creator 4.8.2 CDB Debugg..." と "MinGW 7.3.0" 64-bit" 入れたら Hello World の窓が表示できるようになったけど、
練習ならそんなかんじでok?
832:デフォルトの名無しさん
19/04/12 15:28:10.39 VR9mZ4dF.net
しばらく正常に動いてるように観えてても
あとで問題が顕在化して困るパターン
833:デフォルトの名無しさん
19/04/12 15:38:10.46 K5RuTlhq.net
どのような問題が発生しうるのでしょう?
もっぱら個人用の練習用とする予定
834:デフォルトの名無しさん
19/04/12 15:54:14.03 rTBxcnf6.net
Qt始めるならとりあえずこのシリーズ読もう
URLリンク(blog.qt.io)
835:デフォルトの名無しさん
19/04/12 17:06:12.27 K5RuTlhq.net
私の場合は、インストール~ "Hello World" については
URLリンク(qiita.com)
URLリンク(qiita.com)
を参考にしました。続きについては、御提示のリンク先を試してみますね
836:デフォルトの名無しさん
19/04/13 12:09:38.16 r7SUy1hn.net
ID:K5RuTlhq です
>>830
URLリンク(www3.sra.co.jp) を見て『グラフ作成パッケージQt Charts入れておいた方が便利かも』と思い
いったんアンインストールしてみたのですが、
[Qt 5.12.2 のセットアップ] の画面で
Qt Charts
Qt Data Visualization
Qt purchasing
Qt Virtual Keyboard
Qt WebEngine
Qt Network Authrozation
Qt WebGL Streming Plugin
にチェックを入れたとしても LGPL が選べるようです
サードパーティーの追加パッケージで問題となりうる…?
837:デフォルトの名無しさん
19/04/13 12:11:50.81 r7SUy1hn.net
>>832
具体的に「どのような問題が顕在化」し「どのように困る」ことになるのでしょうか
クラスとメンバ関数のみの指摘でも構わないので、示していただけませんか?
また、その問題を回避する方法は何なのでしょうか?
838:デフォルトの名無しさん
19/04/13 13:57:08.11 TvmgiEsJ.net
>>836
LGPLを選べたとしてもQt Chartsを使っていればGPLv3
GPLと非互換のライセンスのライブラリを使うなら問題になる
だがそもそも練習段階ならライセンスなど気にせずどんどん書け
839:デフォルトの名無しさん
19/04/13 20:47:38.59 r7SUy1hn.net
昔は知らんが5.12.1ならQt ChartsはLGPLで許諾されるよ?
840:デフォルトの名無しさん
19/04/13 20:48:56.62 r7SUy1hn.net
5.12.2だった
841:デフォルトの名無しさん
19/04/13 23:19:58.42 TvmgiEsJ.net
はっきりとGPLv3と書かれてる
URLリンク(www.qt.io)
Open Source->Additional features->Data visualization の?を参照
842:デフォルトの名無しさん
19/04/14 00:04:08.34 El+pt49w.net
条項はこれから確認する
>>841
インストールの操作手順からしたら
不意打ちも良いとこだなあ
Qt Charts をチェックした状態で[次へ(N)]ボタンを押したときに
「修正を受けたGPLv3」以外のラジオボタンが無効になってないと
UIとしておかしくねえか
あと「100%GPLv3と一致で修正条項なし」なん?
そうだとしたら、なおさらおかしい
843:デフォルトの名無しさん
19/04/14 00:07:28.45 El+pt49w.net
そういえば
LICENSE
などと大文字ファイル名にしないと効力が発生しないとする「糞判例がある」と聞いたことがあるけど、日本の裁判所?
ググっただけでは見つからなかった
最高裁判例なら検索結果の判決文をPDFで読める訳だがなあ
そのようなケースを敷衍すると、帰結として、Qt chartsはLGPLとなりうる
GPLv3 については逐条解説もあるから、そっちの内容も確認してみてちょ(あくまで「解説」)
844:デフォルトの名無しさん
19/04/14 00:54:57.43 El+pt49w.net
純粋に「Qt のライセンス」の話なのでスレチ?
copyright notice の表示方法の適切性について、GPLv3って基本的には明確には記載してなくね
ただし今回のケースだと、「インストーラが LGPL によるライセンスを表示した状態」で先に進める以上
0. Definitions. の第8パラグラフ(1) 反対解釈により、「GPLv3は適用されない」と読む余地がある
実際、GPLv3 につき "displays an appropriate copyright notice" してないもの
845:デフォルトの名無しさん
19/04/14 00:56:08.63 El+pt49w.net
書き込み制限受けたので続き。多分コレで終わり。
あのインストーラが表示している著作権表示は明確に LGPL だから適用条件満たしてないと解釈する余地がある、と
…わたしはただの学習者だから大騒ぎすることでもねえんだがねえ…
846:デフォルトの名無しさん
19/04/15 21:39:53.28 L7qqGgg7.net
int& a;
int &a;
どっちにすべきでしょうか
847:デフォルトの名無しさん
19/04/15 21:52:39.66 zTAvdEPs.net
好きな方で書け
848:デフォルトの名無しさん
19/04/15 21:56:00.71 dimPC8Ge.net
「すべき」というのは規格表での『shall』のことですか?
それとももっと別の意図がありますか?
849:デフォルトの名無しさん
19/04/15 22:02:16.06 1nT5zSFt.net
int & a;
int * b;
850:はちみつ餃子
19/04/15 23:26:36.86 94OTneyx.net
std::add_lvalue_reference<int>::type a;
851:デフォルトの名無しさん
19/04/16 07:00:13.97 xjyBK9QH.net
そんなこと気にする前に参照の変数を未初期化で使おうとするなよ。
みたいなツッコミを入れたくなるけど、コンパイル時にエラーが出る
間違いは必ず見落としなく直せるから実際は大きな問題じゃないよね。
「ポインタ宣言の * を型名に寄せるか変数名に寄せるか」と同じで
一貫した書き方をするかぎり、どっちでも構わんでしょ。
個人的には「変数名に寄せる」派だけど。
852:デフォルトの名無しさん
19/04/16 08:18:02.67 hl7GJiol.net
int& a, &b;
int &a, &b;
自分も後者の方がいい
853:デフォルトの名無しさん
19/04/16 08:20:49.86 GDkTCt4E.net
>>851
> 未初期化で使
コレの解釈は揺れそうだが、たとえば
int *i;
とか、
int *i;
int j;
i = &j;
とかいうかんじのことかしらん
854:デフォルトの名無しさん
19/04/16 11:22:25.45 vZl8q5zB.net
>>852
+1
ほんそれ
855:デフォルトの名無しさん
19/04/16 12:24:17.44 uqcfe1Iw.net
わからない事をここで質問しようとレスを書いてる最中に「わかった!」
ってなることが多々あるんだが、この謎の現象は何なんだ・・・
856:デフォルトの名無しさん
19/04/16 12:28:15.56 4RjIOnLA.net
自己解決パターン
質問するときに頭の中が整理される→解決
質問するために再現する必要最小限のコードを書く→問題の切り分けが出来る→解決
いろいろあるが
857:はちみつ餃子
19/04/16 13:21:34.50 XnNfa6Fy.net
>>855
何が駄目なのかわかれば解決法は自明であることが多い。
逆に言えば、解決法がわからないときは問題が何であるかわかってなかったりするんだよ。
だから、きちんとした形に質問をまとめれたなら、それはもうほとんど解答でもあるんだ。
この手法を利用してバグを取り除くやり方としてラバーダックデバッギングというものが知られている。
858:デフォルトの名無しさん
19/04/16 13:51:09.84 WfxisTJA.net
C++erならRust学べって風潮嫌い
なんで学習コストがある言語を2つも学ばないといけないのかと思うし
859:847
19/04/16 17:31:42.92 xjyBK9QH.net
>>853
あんまり大それた意見とではなくて
void func()
{
int &a;
...
}
と宣言したら、参照先不明の &a を作ろうとしてるから
必ずコンパイルエラーになるじゃろ、程度の指摘。
…ただ、この投稿を書こうとして気がついたんだけど、
class samp {
int &a;
...
};
てな具合に、クラスのメンバとしての宣言ならエラーにならないね。
ちゃんとコンストラクタで a に参照先を与えるなら許される。
要するに >>851 の前半部分は間違ってた、ということ。
正しい場合もあるけど、常に正しいわけじゃない。
860:デフォルトの名無しさん
19/04/16 17:55:46.56 LqBdGBd1.net
その場合でもコンストラクタで初期化してなかったらエラー出るんだから
説明自体は間違ってない
861:デフォルトの名無しさん
19/04/16 21:38:13.69 5Rly8M3u.net
>>857
テディベアをおいておくというエピソードなら有名だね
862:デフォルトの名無しさん
19/04/16 22:14:36.94 dFuxCqAG.net
>>858
難しいことも違った方向から見るとわかりやすくなることもある。
863:デフォルトの名無しさん
19/04/19 11:24:45.99 qKKG75KJ.net
質問です。
cinの戻り値のistream&がなんでif(cin)みたいに真偽判定に使えるのかが発端です。
URLリンク(stackoverflow.com)
こことか見たんですけど、
1.istreamはbasic_iosを継承してて、
2.basic_iosで型変換演算子explicit operator bool() const;が定義されてる
ってとこまでは理解しました
ここからが質問なんですけどこの型変換ってのは勝手に行われるもんなんですかね
if(something)って書いたらif(bool(something))っていつもやってるんでしょうか
864:デフォルトの名無しさん
19/04/19 11:40:22.57 ymX8VCBl.net
intで参照したらEOF
865:デフォルトの名無しさん
19/04/19 12:05:08.07 r9r2BfdP.net
型変換以前に0やnullポインタを評価するとfalse、0以外の値はtrueと評価されると決まっているからだろ。
あと暗黙の型変換はよく起こる。
866:デフォルトの名無しさん
19/04/19 12:08:35.86 lgg24wim.net
if 文の条件判定部は bool 型を要求してる前提で解釈,翻訳してるんじゃない
867:はちみつ餃子
19/04/19 12:13:29.89 mypEidUJ.net
>>863
yes.
条件部はブールを要求し、もしブールでない場合は常に型変換する。
868:デフォルトの名無しさん
19/04/20 09:49:03.76 9bTTnEnG.net
前橋和弥さんのC言語ポインタ完全制覇という本で、
PCの環境(CPUの種類など)によってデータのメモリ上の配置は異なる
(構造体のパディングをはじめ、ただの単体のintでさえバイトオーダーが異なる(ワークステーションではビッグエンディアン採用だったりする))
ので、メモリの内容をバイナリでディスク上のファイルに出力したデータは別環境で読み込んで使おうと思ってはいけない
というような事が書いてありましたが、この話はWindows以外の環境や古い環境を前提とした話なのでしょうか?
同書にWindowsではBMPファイルをfwriteでファイルへダンプしていていかにもWindowsらしいとも書いてあるので、
Windows環境ならゲームのセーブデータとしてクラスをまるごとfwriteでバイナリ出力したファイルを別PCでロードしても問題ないのでしょうか?
(Xeonとかワークステーションマザーとか関係なしに、IntelCPU&Windowsの環境ならばリトルエンディアンで統一されている?)
(Macではビッグエンディアンになるが、Windows環境のみ対応のゲームを作る上では無視してよい?)
という認識は間違っているでしょうか?
パディングの違いなどもWindowsやVisualStudioが自動で良きに計らってくれるのならありがたいのですが…
869:デフォルトの名無しさん
19/04/20 09:54:32.44 gSzU4BUh.net
windows間だから「別環境」ではなく「同じ環境」
だからwindowsでも同じ
そのbmpデータをmacに持って行っても使えない
なので磁気コアをダンプして永続化したようなデータは、他の全ての環境で使えない
60年代くらいから知られている
870:デフォルトの名無しさん
19/04/20 12:00:13.06 9bTTnEnG.net
>>869
Windows環境であれば、別PC(別ハード)でも同環境とみなして良いのですね
>>WindowsではBMPファイルをfwriteでファイルへダンプしていていかにもWindowsらしいとも書いてある
読み直したら、違ってましたm(_ _)m
可変長構造体の節で、
WindowsではBMPをfwriteなどで可変長構造体まるごとダンプしていて、
BMPのような他の環境にもっていく可能性が高いファイルを構造体まるごとダンプしているのがWindowsらしい
というような内容でした
Windows級の一流プログラマーでも構造体まるごと出力を使っているのであれば、
ゲームのセーブデータで構造体やクラスをまるごとバイナリ出力しても問題ないととらえてよいのかな?
871:デフォルトの名無しさん
19/04/20 12:30:10.75 4KhiFNHT.net
>>870
bmpファイルには仕様があるので「Windowsのプログラマがどうたら」なんぞ関係無く仕様に従って読み書きすべし
(現実には仕様に従わない入出力をやらかすアプリ毎に対処することはあるが)
自分で定義した構造体でも外部に公開するなら仕様を決めそれに準ずるべし
公開しないならそれこそ構造体丸ごとダンプなり好きにすれば良い
実際にそういう実装は珍しいものじゃない
どうせ環境の変化で困るとしてもそれは自分だけだからね