C++相談室 part131 [無断転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
2017/07/29(土) 11:28:28.97ID:o30VDF4g0
次スレを立てる時は本文の1行目に以下を追加して下さい
!extend:on:vvvvv:1000:512

C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。

前スレ
C++相談室 part130
http://mevius.2ch.net/test/read.cgi/tech/1490917669/

このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.100【環境依存OK】
http://echo.2ch.net/test/read.cgi/tech/1478440682/

■長いソースを貼るときはここへ。■
 http://codepad.org/
 https://ideone.com/

[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
-
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
2017/09/08(金) 10:17:30.47ID:28eiJ4Rm0
>>658
お、ちょっと早いな。
2017/09/08(金) 21:05:50.39ID:VlEBq8a5M
>>648
モダンな言語の多くはprintfライクだし、javaも結局追加された。
printfライクのほうが効率的なことは経験的にわかってるのだからstreamにイマドキのformat関数を追加してくれればいいのに。
2017/09/08(金) 21:16:51.55ID:EwiEYpeM0
もっと50 msばかり速くすた、
ttp://judge.u-aizu.ac.jp/onlinejudge/review.jsp?rid=2526468#1
2017/09/08(金) 22:55:01.80ID:EwiEYpeM0
さらに1桁速くしたわふーん(0.65 sec → 0.06 sec)
ttp://judge.u-aizu.ac.jp/onlinejudge/review.jsp?rid=2526595#1

メモリ消費量も1/4未満になた、(34520 KB → 7432 KB)
2017/09/09(土) 14:52:21.58ID:4g0rauvm0
>>662
それって双方向連結リストなの?
2017/09/09(土) 19:52:47.52ID:FtyOtgZ20
https://ideone.com/aKaZF9
これ、なんで通らないの?
頭爆発しそう。
2017/09/09(土) 20:19:57.93ID:FtyOtgZ20
あぁ、色々いじってたら通った。
わけわかめ。
2017/09/09(土) 20:23:23.69ID:FtyOtgZ20
と思ったらイデオンGCCで動かねーでやんの。

https://ideone.com/oqpQ8i
VC2017では動く魔法のコード。
2017/09/09(土) 20:39:58.02ID:iTjZctD80
もちつけ https://ideone.com/czcAS9
2017/09/09(土) 20:47:48.75ID:FtyOtgZ20
うほ。素晴らしい。
が、今度はVCで動かなくなった。
なんじゃそれ。
2017/09/09(土) 21:07:39.82ID:FtyOtgZ20
なんか、VCもGCCも半分くらいずつ間違えてる予感。
Setだけだとストレージがないからなんかバグの予感するし。
ストレージ持たせようとすると修飾が間違ってるって言われてる感じがする。
なんだこれ。
2017/09/09(土) 21:15:58.82ID:FtyOtgZ20
識者求!急募だ!!
2017/09/09(土) 21:53:02.98ID:FtyOtgZ20
https://ideone.com/mqTzb8
これで手打ち。
よくわからん回り方されたなぁ。
とほほほ・・・。
2017/09/09(土) 21:58:32.95ID:FtyOtgZ20
最後に。さんきゅーそー。
2017/09/09(土) 23:23:25.26ID:iTjZctD80
VC++のバグ…ではなくいつもの標準非準拠の独自仕様の気はする
https://ideone.com/10vEzK
2017/09/10(日) 00:32:56.15ID:8Jhjgi9Q0
>>673
およ、折衷案できそうか?
自分はVC動けばいいんだけど、
コード公開するときに動かないと間抜けっぽいから良対応しようと一応やってる。
visualデバッガが便利すぎてVCやめるの大変。
2017/09/10(日) 00:56:23.48ID:ldnMOHDz0
デバッガのフロントエンドは自作するもの
2017/09/10(日) 00:57:46.72ID:9qoMDsB9r
完全な解決策も規格の規定も知っているが、
再現する最小限のコードにしてから他人に見せる知能も持ち合わせていない者には時間の無駄
2017/09/10(日) 02:34:17.64ID:8GGB49VK0
非修飾名の探索の問題だから発想を変えて明示的修飾で回避すればいいって話?
https://ideone.com/YTnOF2
2017/09/10(日) 06:00:54.71ID:Jp2o0TJ00
templateの使い方を完全に勘違いしてやがる。
2017/09/10(日) 07:35:26.76ID:8Jhjgi9Q0
折衷案色々あるなぁ、感心する。

>>676
別に個人のコードでどこかに迷惑かけてるわけじゃないし、この程度のコードも読めない方が問題。
それに高慢なお方は最初から相手にしてない。マウントしてほしくてやってるんじゃないんだよ。
2017/09/10(日) 07:49:26.32ID:8Jhjgi9Q0
https://ideone.com/Ofcm9I
>>677を採用。これで解決しました。
明示の仕方がいまいちよくわかってなかった。
大変ありがとうございました。
2017/09/10(日) 10:50:41.00ID:Ch3ZHKVB0
プロパティー実装例か…
しかしまぁクソ面倒だ罠
2017/09/11(月) 21:22:51.45ID:+dEH7rh50
auto で受けるとおかしげなことになるんちゃう?
2017/09/12(火) 01:44:38.63ID:uA5S/Coo0
馬鹿に触らせるなテンプレートって昔から言うしな。
フレームワークのテンプレートライブラリ提供する側だけが使っていいんだよ。
2017/09/12(火) 08:52:24.85ID:n2tkiU0+0
テンプレートはSTLやboostのまねをしていれば下手なことにはならないはずだが
2017/09/12(火) 08:56:45.99ID:aShF6cdKa
真似するだけでも、それなりのスキルが必要だ
2017/09/12(火) 09:35:13.31ID:M9yu8us30
何故そういうコードになっているかを理解せずに猿真似して意味があるかどうかはわからんけど
autoで受けるとおかしなことになるのは、キャストや代入で望む結果を得る方法(expression templateなど)全部そう
暗黙のキャストでなく関数呼び出しを強制すればautoでも大丈夫だけど
687デフォルトの名無しさん (ワッチョイ 0e1c-HB/9)
垢版 |
2017/09/12(火) 10:11:33.04ID:CGKPtYms0
> 馬鹿に触らせるなテンプレートって昔から言うしな。

自分が触りたくないのはわかったから
2017/09/12(火) 19:29:46.28ID:mgCIj6GX0
>>682
コピコン切ってあるから大丈夫だと思う。あとは推論性能。
2017/09/12(火) 19:43:33.31ID:8IhLGzTX0
コピコン
2017/09/12(火) 20:29:35.11ID:mgCIj6GX0
コピーコンストラクタ!
2017/09/12(火) 22:54:11.94ID:cQiNwo4o0
>>688
あ、なるほど、状況を勘違いしてた。

C++17 からは RVO が使える場合は常に RVO で処理する (従来は「してもよい」というオプショナルな動作) ことと、
そのときはコピー (ムーブ) コンストラクタが無くても良いというルールが念頭にあったのだけれど、
この場合は RVO は関係なかった。 スマソ
2017/09/12(火) 23:35:09.46ID:q3PtGkEdr
>C++17 からは RVO が使える場合は常に RVO で処理する

ほうほう、それは本当ですか
2017/09/14(木) 16:51:14.81ID:HER/jB+d0
そうです。
2017/09/14(木) 17:39:29.28ID:7On5vAcFr
>>693
だとすると
https://wandbox.org/permlink/KeuEcKR5gy18bi3K
この二つのアドレスは同じになるはずでは?
695デフォルトの名無しさん (ワッチョイ ab1c-/PGn)
垢版 |
2017/09/14(木) 22:59:53.42ID:AfykdPhZ0
いい流れだ
696デフォルトの名無しさん (ワッチョイ c1a6-PzL5)
垢版 |
2017/09/15(金) 15:29:03.53ID:zUPCfesd0
"clacla.h"
class Clacla {
void func1();
void func2();
void func3();
};

"clacla.cpp" //実装部
クラスClacla くくり { <-ここ
void func1() { printf( "1" ); }
void func2() { printf( "2" ); }
void func3() { printf( "3" ); }
};
のように関数の実装時にClacla::を省略する方法ってあるでしょうか?
2017/09/15(金) 15:33:45.29ID:leF15WXE0
>>694
最適化が有効なら C++17 であろうがなかろうが clang なら RVO が効くはずだけど、 u.p の値は null になっちゃうな。
RVO がどうこうじゃなくて this の挙動に関するなんか変なルールが適用されてるとかかも?
2017/09/15(金) 16:07:51.71ID:RQr5TBB1d
>>696
クラス内部にインライン関数を埋め込む方法しかない。
699696 (ワッチョイ c1a6-PzL5)
垢版 |
2017/09/15(金) 16:35:44.21ID:zUPCfesd0
>698
やっぱり無いですよね。
ありがとう。
2017/09/15(金) 21:02:35.06ID:86K7wrSvr
>>697
いやだからISO/IEC DIS 14882:2017 15.2/p3の規定により常にRVOが働くわけではないのではないかと申しているのですよ
ついでにu.pがnullptrになることはない
2017/09/15(金) 21:24:40.19ID:xDlOGQNS0
実にC++相談室らしい流れ
2017/09/15(金) 21:27:27.94ID:5X/IRSU20
右辺値参照の暗黙適用は例外の処理で不都合があるよね
元の値をTmpにコピっといて例外発生で書き戻すにしても
関数A処理内で呼び出した関数Bからの例外をAのユーザコードでは完スルーなのに
コンパイラコードではコッソリ捕まえて書き戻す必要が有る
そんときロックでも掛かってたらどーすんのよと

呼び出し繋がりを横断的に管理要するとんでもないコスト増なんじゃね?
2017/09/15(金) 21:36:23.16ID:xDlOGQNS0
Tmpのアドレスを関数B(およびその先の関数)が知る可能性がコンパイラから見て排除できない限り
関数Aから関数Bを呼び出す前にTmpは元の値の完コピーにならざるおえないのでは…
(そうでなければ副作用のある関数を安全にコンパイルできない&安心して書けない

さらにロックに入るときと出るときは上と同じ理由で結果的に完コピーになる上に、
まともなOSならメモリバリアまで手当てしてくれるんじゃ…
2017/09/15(金) 21:42:30.18ID:xDlOGQNS0
つまり右辺値参照の暗黙適用が効力を持つのはスゲー広範にインライン展開されるような場合
(当然いかなるOSのAPIやシステムコール類の呼び出しも含まない
「だけ」
であって、通常のプログラマーにはあんまありがたみがはっきりしない仕様

※ 個人の感想です
2017/09/15(金) 22:02:45.85ID:1aOT1P+6d
コンパイラに頼らないで、素直にパラメーターの参照にしよう
2017/09/15(金) 22:04:08.03ID:leF15WXE0
>>700
意図するところをあらためて説明すると、
最適化オプションを有効にする (RVO が効くはず) と実際に null になるんだから
clang があてにならないのじゃない? という話。
2017/09/15(金) 22:08:16.65ID:5X/IRSU20
いや noexcept 付きを呼ぶ場合も有難味あると思うよ
C++は const祭りに noexcept祭り追加でござる
特殊化も爆発
2017/09/15(金) 22:34:11.14ID:1joZngjnr
>>706
なるほど理解した
C++11の頃に輝いたclangはその後、規格的にはG++にも劣るゴミなのでそのへんは致し方ない
2017/09/16(土) 11:22:55.52ID:u7cVvkyR0
forward祭り
2017/09/18(月) 10:24:11.11ID:lVEmBRA9d
tcp/ipの勉強のためにC++で何か作れば勉強になるかな?って思ってるのだけど
こういうものを作れば勉強になるよってものある??
パケットの動きだったり階層の考え方だったりを学びたい
2017/09/18(月) 10:40:29.87ID:U79GLBVsM
>>710
TCP/IPの勉強ならWireSharkの使い方覚えた方が早いかも
その上のプロトコルレベルなら勉強したいプロトコルの簡単なクライアントから始めればいいと思う
ちなみに俺はNetNewsに流れるむふふ画像を取り込みたかったのでnntpのクライアントをperlで組んで勉強した
2017/09/18(月) 11:05:46.29ID:lVEmBRA9d
>>711
プロトコルレベルの勉強をしたい
そうなるとhttpサーバを立てることになるのかな?
そういう場合は簡単なhttpサーバとクライアントを作成すれば良いのかね?
それで通信しあってwiresharkで中身を見てtcpだったりhttpだったりを見るべき?
2017/09/18(月) 11:39:07.40ID:9mrqYCJU0
おれは一昔前、深夜ボリュームでかくする姉貴のPCが煩くてTCP通信でマスターボリューム弄るサーバー&クライアント作ってコッソリ仕込んでコントロールしてたな。
まぁ、やってやるぞというモチベーションは大事だとおもうよ。
ガンバってね。
2017/09/18(月) 11:41:39.15ID:qrTqFTlir
>>713
それ仕込んでるとき超ワクワクしそう
2017/09/18(月) 11:43:19.16ID:lVEmBRA9d
>>713
姉貴のパソコンにサーバプログラム常駐させる
そいつがポートXXXで待ち構える

同じ家なのでネットワーク帯は同じで
自分のpcからポートXXXにメッセージ送信する

姉貴のサーバプログラムが受け取ってボリューム下げる処理をする

こんなことしてたってことかね?
2017/09/18(月) 12:01:08.52ID:9mrqYCJU0
>>715
まぁ大体そんな感じなんだが、急に音量小さくすると即効でばれるので、まず、姉貴PCの音量を取得するのが第一だな。
そこからスライダーでボリューム下げていった値をサーバーに順次送信しサーバープログラムがその値に応じて音量を徐々にフェードコントロールするといった具合だな。
2017/09/18(月) 12:08:20.13ID:nt0hX0ohr
>>716>>715の三人きょうだいの次女である可能性が否定できない
2017/09/18(月) 12:10:35.92ID:lVEmBRA9d
>>716
いつも音量小さくなってたのはあんたのせいだったのね??


ってことはそれって通信はhttp?
2017/09/18(月) 12:15:30.74ID:9mrqYCJU0
>>718 http関係ない
ボリュームと改行の平文を繰り返し送るだけの超簡易仕様
だれでも作れる
2017/09/18(月) 12:57:21.32ID:lVEmBRA9d
>>719
相互にsend recvしてるだけってことかな
2017/09/18(月) 13:48:18.24ID:U79GLBVsM
>>712
サーバーよりクライアントの方が簡単だからサーバーは適当な奴持ってきて簡単なクライアントを作るところから始めればいいと思う
2017/09/18(月) 14:27:41.23ID:lVEmBRA9d
>>721
IISサーバとかってことかな?
あの辺の使い方も基本は同じよね?
ポート指定して使うみたいな
2017/09/18(月) 15:08:42.19ID:eqWC6Q8G0
>>722
> IISサーバとかってことかな?
環境ならWindows IISが簡単だろうね
ネットでググれば情報たくさんあるし
2017/09/18(月) 17:35:56.07ID:UWkHQHZA0
そもそも、TCP/IPの練習にC++は妥当なのか?
2017/09/18(月) 17:55:46.62ID:lVEmBRA9d
>>724
CとC++しか言語知らんのや...
IISサーバーと通信できない
これのポートとかどう設定するんや...
2017/09/18(月) 18:29:11.61ID:Of28e9o20
ネットワークライブラリは現在策定中だっけ。
2017/09/18(月) 18:34:59.92ID:HogVByKA0
>>725
以前ネットワークプログラム勉強するのにこのサイト利用させてもらった
わかりやすいと思う

http://x68000.q-e-d.net/~68user/net/
2017/09/18(月) 20:33:20.53ID:lVEmBRA9d
>>727
今読み始めたけど丁寧でわかりやすい
2017/09/19(火) 10:23:20.37ID:mIuFgC1Fd
初歩の初歩の初歩の質問なんだけど
あるPCにポートXXを口とするサーバソフトを同時に二つ立てることはできないよね?
1つめはXXを使うとしてその後にたてられた2つめはどうなる?
(スレチっぽくなってますがよろしくです...)
2017/09/19(火) 10:38:02.75ID:S6233VLa0
出来ます
サーバー側はリクエストに応じて複数のプロセスを起動し、
同じポート番号を使って複数のプロセスが受け答えします
各プロセスはそれぞれで生成したソケットを使ってクライアントとやり取りします
2017/09/19(火) 10:57:49.02ID:mIuFgC1Fd
>>730
それってプログラム内でforkして子プロセスを作る場合の話です?
サーバソフトAとサーバソフトBの両立ができたとすると
ポートXX使用します!ってのはどこでどちらを使うと判断するのでしょうか...
2017/09/19(火) 13:04:43.06ID:TdcUa1CK0
特定ポートでlistenするプロセスは一つだけです。
複数のプロセスで共用は出来ません。
2017/09/19(火) 17:39:27.17ID:5tfXl8chM
>>729
LANポートが複数あればできるし、LANポートがひとつしかなくてもIPアドレスを複数割り当てられるなら可能
2017/09/19(火) 18:44:47.92ID:PcYxkZC90
>>733
ああ言えばこういうの典型
どうでもいいけどC++と関係ないクソ話もうヤメロよカスども
2017/09/19(火) 18:49:41.83ID:Poc3cQP+M
しかも間違ってるという
2017/09/19(火) 18:57:54.46ID:5tfXl8chM
>>735
ん?
どこか違ってたっけ?
2017/09/19(火) 19:48:42.76ID:SHe+skknr
>>736
二つ前のレスくらい読んでほしいものだ
738デフォルトの名無しさん (ワッチョイ ab1c-/PGn)
垢版 |
2017/09/19(火) 20:12:29.29ID:4ZFv917O0
C++98ではできない
C++11以後できるようになった
だろ、通信は本質的にマルチタスクだ
2017/09/20(水) 00:14:27.26ID:zNeStlMI0
なにをいってるかよくわからんがすごい自信だ。
2017/09/20(水) 01:48:22.84ID:E2xZjesx0
規格外のライブラリならほぼ何でもありといえばありだけどさ。
ライブラリ自信はまだ策定中でしょ。
741デフォルトの名無しさん (ワッチョイ 6123-pFfB)
垢版 |
2017/09/20(水) 03:12:29.17ID:E3lPvo/Y0
bind()する時のローカルのIPアドレスを別々にすれば同一ポートで別々のサーバプログラムって動かないの?
2017/09/20(水) 04:49:07.58ID:uOAr6bd90
>>741
だから動くってば
ユニークである必要があるのはIPアドレス:ポート番号の組み合わせだから

>>730
>各プロセスはそれぞれで生成したソケットを使って
まさかその生成されたソケットがサーバーと同じポート番号を持つとか思ってないよな?

いずれにせよこんなのはネットワーク初心者の話題であってC++とは何も関係ない
2017/09/20(水) 06:46:32.53ID:k3KNfXHnM
>>737
それが間違ってるって話
>>741が言うようにローカルアドレスを指定すれば同じPCで同じポートを使用するサーバーを複数立てられる
2017/09/20(水) 10:56:07.53ID:uOAr6bd90
自己訂正
>まさかその生成されたソケットがサーバーと同じポート番号を持つとか思ってないよな?
あはは、これは俺の勘違いだったわ
acceptで返されるソケットはlistenポートと同じポート番号を持っている
745デフォルトの名無しさん (ワッチョイ 0665-hoCt)
垢版 |
2017/09/21(木) 05:09:49.50ID:t8iqXrAz0
質問です。

{ 10/*%*/ } = { a,b,c };

というのは、
a = 10%
b = 10%
c = 10%
なのでしょうか?それとも、
a+b+c = 10%
なのでしょうか?
746デフォルトの名無しさん (ワッチョイ de23-KbB0)
垢版 |
2017/09/21(木) 05:48:27.92ID:eSaSp7RC0
C++を習得するのに莫大な時間を費やしました。

C++のプロフェッショナルなプログラマーになりたかった。

なのに、ハード系の知識が無いと言う理由で、もらう仕事はVB.NET、C#.NET系ばかりでした。
747デフォルトの名無しさん (ワッチョイ de23-KbB0)
垢版 |
2017/09/21(木) 05:51:26.56ID:eSaSp7RC0
質問を書くのを忘れやんした。

C++の仕事ってハード系、通信系、制御系以外、通常業務のシステム開発はないんでしょうか?
2017/09/21(木) 06:00:29.19ID:Bo0/1phe0
ポート重複で同じアドレスでBananaサーバーみたいなラックマウントサーバーの仕組みってあれは一つのサーバーがlistenで待って接続してきたクライアントの処理を複数の子サーバーに割り振っているだけなのか?
2017/09/21(木) 08:18:42.29ID:E1HbcZFyr
struct unko { unko()=delete; };
int main() { unko u{}; }

何故コンパイルが通るのかを理解するのに半日かかった
やはりこの言語はクソ
2017/09/21(木) 08:46:59.52ID:iktVOuYO0
>>746
他人から降って湧いてくることしか期待してないからそうなる
自分がやりたいことは自分で始めろ
2017/09/21(木) 10:13:00.29ID:JjsSVLys0
>>747
C++はC#とかでできないことがあるときに仕方なく使うイメージがある
2017/09/21(木) 11:36:34.81ID:p6kNBh4ir
>>749
あれ
何で動くんだ?
plain old dataあたりの話が噛んでる?
2017/09/21(木) 12:35:00.95ID:iktVOuYO0
C#の方が楽なところが特に無いのでC#という選択肢が無い
2017/09/21(木) 13:21:38.51ID:TbHBi0+x0
>>752
PODがかかわってる部分はあるけど基本として理解しておくべきことは
=default,=delete指定はコンストラクタの宣言でも定義でもない
ということ

つまり>>749の文脈では
struct unko { unko()=delete; };
int main() { unko u{}; }

struct unko {};
int main() { unko u{}; }
と等価でありuはaggregate初期化されコンストラクタは呼ばれないからエラーにならない
(unko();みたいにはっきりとデフォルトコンストラクタが呼ばれる状況ならエラーになる)
2017/09/21(木) 16:15:38.61ID:na02B6ss0
>>750
お、おう!
2017/09/21(木) 17:36:23.55ID:E1HbcZFyr
>>752
規格によると unko u{}; は
8.5/p17『If the initializer is a (non-parenthesized) braced-init-list, the object or reference is list-initialized』によりリスト初期化される
リスト初期化は8.5.4/p3『If T is an aggregate, aggregate initialization is performed』
に該当するのでコンストラクターが呼ばれずにaggregate初期化される。

なおaggregateの定義は8.5.1/p1により『array or a class (Clause 9) with no user-provided constructors (12.1), no (略)』
ここで8.4.1/p1により「=delete」は関数本体だが、
8.4.2/p5によりuser providedではないと見なされている(たぶん)
2017/09/21(木) 22:11:37.04ID:VzX3yrPwM
>>748
パケットレベルで振り分けたり、プロキシとして動作したり色々
ロードバランサ 仕組み
とかでググるがよろし
あとそこまで行くと完全にスレチなので

ネットワーク
http://mevius.2ch.net/hack/

とかに行っとくれ
2017/09/21(木) 23:20:34.43ID:Bo0/1phe0
ほほう
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況