C++相談室 part131 at TECH
[2ch|▼Menu]
[前50を表示]
800:デフォルトの名無しさん
17/09/25 18:34:40.87 iFpSSPyJr.net
>>774
違う

801:デフォルトの名無しさん
17/09/26 10:35:57.85 DAuKDJeY0.net
>>776
このスレ的にはって書いてあるのが読めてないのか
自分が苦手なものに触れられたくないのか
どっちだ?

802:デフォルトの名無しさん
17/09/26 11:02:34.83 XbrOuhiT0.net
>>779
最近お前みたいなニワカが増えてうんざりするわ
というかCの可変長引数がどこに出てきた?

803:デフォルトの名無しさん
17/09/26 11:38:28.30 XSwUFkBD0.net
つかぬことを伺いますが、
あるクラス内で定義した構造体を同クラス内でstatic constメンバとして宣言し、
外部で定義しようとしたところ、「〜との互換性がありません」と出て上手く行きません
どうすればよいのでしょうか
〜ヘッダ内
class Hage{
public:
struct A{
int a;
int b;
};
static const struct A M;
}
〜ソース内
#include "ヘッダ"
const struct A Hage::M; //不正

804:デフォルトの名無しさん
17/09/26 11:39:54.54 XSwUFkBD0.net
あ、行頭の半角スペース消されるの忘れてた

805:デフォルトの名無しさん
17/09/26 11:48:05.08 XbrOuhiT0.net
const struct Hage::A Hage::M;

806:デフォルトの名無しさん
17/09/26 11:48:55.33 r3ztyMSNd.net
>>781
少なくとも Hoge::A としなけりゃダメなんじゃないか
>>771を読んでもCの可変長引数とは決めつけられなかった

807:デフォルトの名無しさん
17/09/26 11:51:53.92 XSwUFkBD0.net
うわあ何でこんな初歩的なことに躓いていたんだアホらしい
>>783-784サンクス

808:デフォルトの名無しさん
17/09/26 15:18:58.40 SDiSqFpw0.net
###HUM###
000-K,AZ,0,1,
001-KI,L,I.T,DEF,11.2,TE,F,0.12235,
002-EM,OBLA,7##END

809:デフォルトの名無しさん
17/09/26 15:24:00.47 DAuKDJeY0.net
>>780
うわーおまえ、それ人に聞かなきゃ判んねえの?
省略記号は右端という初歩の初歩でミスりながら
ドヤってる笑い地獄が2日前あったんだが
突っ込めなきゃせっかくボケた芸人も泣いてるだろうな

810:デフォルトの名無しさん
17/09/26 16:32:49.03 XbrOuhiT0.net
>>787
まずはsageることから覚えような

811:デフォルトの名無しさん
17/09/26 16:36:37.77 r3ztyMSNd.net
>>773の「モロじゃねえか」がどっから出てきてるのか謎だ

812:デフォルトの名無しさん
17/09/26 17:08:16.18 XbrOuhiT0.net
多分Cの可変長引数なら右端以外にも書けると思ってんじゃないかな

813:デフォルトの名無しさん
17/09/26 18:55:18.16 DXd+nok20.net
こんなイメージかな?
#define X (100)
#define f(a,b,c,d,e) ((b)[(c)+X*(d)+X*X*(e)] = (a)[(e)+X*(c)+X*X*(d)])

814:デフォルトの名無しさん
17/09/26 19:31:39.64 T9NefDHyr.net
>const struct A Hage::M; //不正
初歩的でなく相当に高度な気がしてならない
規格の3.4.1/p7,p8,p14あたりを頭に入れていないといけない
「class NS::C;」のように何でも「::」を付ければ良いと言うわけでもないので

815:デフォルトの名無しさん
17/09/26 22:59:17.35 pvKSJMRt0.net
そうでもない

816:デフォルトの名無しさん
17/09/26 23:10:02.38 28pSalnA0.net
だってグローバルスコープにも struct A; が存在したらどうなるか?
って考えればすぐわかりそうなモノじゃんね

817:デフォルトの名無しさん
17/09/26 23:33:07.57 QYZ1C1Pk0.net
グローバルが優先される所と、グローバルよりクラスや名前空間が優先される所が入り乱れたこの言語で
どちらが優先なのかを正確に覚えてるのはかなりの変人である可能性が高い
URLリンク(ideone.com)

818:デフォルトの名無しさん
17/09/26 23:48:01.42 piJXswiP0.net
グローバルが優先するところなんてあったか?

819:デフォルトの名無しさん
17/09/26 23:48:58.27 28pSalnA0.net
>>795
その例ではいったんA::の中に入っているから B はA::B になるけど
>>781 のはそうじゃないからな。

820:デフォルトの名無しさん
17/09/27 00:14:02.46 LyDwKMB00.net
>>788
おーいバカ、省略記号の位置の件はわかったか?
まさか789なみの重度池沼じゃねえよな

821:デフォルトの名無しさん
17/09/27 00:41:37.58 lz0JexH90.net
>>771>>770を参考にして新たに考えようとしてるじゃないか。
それを>>770のやり方でまんま行こうとしている、と解釈するのは悪意があるぞ。

822:デフォルトの名無しさん
17/09/27 00:57:18.03 LyDwKMB00.net
だからって770の大ボケを正当化する法はあんめえ

823:デフォルトの名無しさん
17/09/27 07:53:47.82 Ep3hxvTm0.net
あんめえ

824:デフォルトの名無しさん
17/09/27 09:12:11.59 nsBNhogE0.net
>>800
お前まだ分からんのか・・・
>>770のどこが大ボケなんだよ
添え字演算子の中で二項演算子の後に省略記号書いて再帰的に計算させたり
パラメータパック(またはそれを含む式)も無しに引数の左端にいきなり省略記号書いたり
なんてのはCでもC++でも出来ないの
お前みたいにCの可変長引数もvariadic templateも分かってるつもりなら
>>770を見た瞬間にこれは文面上の省略であって動くコードではないと一瞬でわかるはずなんだよ
質問でもないのにageまくるわ自分も初心者のくせして同じ初心者(あるいはそれ以上)を聞きかじりの知識でバカにしようとするわ
憂さ晴らしにしか利用しないのなら出ていけ

825:デフォルトの名無しさん
17/09/27 09:30:35.39 LyDwKMB00.net
文面上の省略だっておw
大ボケに苦しい言い訳を上塗りして
アフォから超アフォに進化したなあ

826:デフォルトの名無しさん
17/09/27 09:41:27.37 nsBNhogE0.net
>>770じゃないよw

827:デフォルトの名無しさん
17/09/27 10:03:04.41 LyDwKMB00.net
どう見ても770だな
必死さの理由が他にない

828:デフォルトの名無しさん
17/09/27 10:19:41.03 Ls/Jbx6+0.net
ワッチョイも知らないアホじゃん

829:デフォルトの名無しさん
17/09/27 11:12:43.27 LyDwKMB00.net
驚いた、ム板にIP信者がいるとはね
嘆かわしい限りだ

830:デフォルトの名無しさん
17/09/27 11:41:32.93 /eBNIii1d.net
>>800
だったら>>771をターゲットにすればよかったんだよ
お前は>>770をも貶し続けていると見なされていたんだよ

831:デフォルトの名無しさん
17/09/27 11:42:15.16 /eBNIii1d.net
>>808 間違えた、逆だ



833:デフォルトの名無しさん
17/09/27 14:47:33.57 LyDwKMB00.net
大ボケ+言い訳+IP信者+錯乱
この安定したアフォぶりは、どう見ても同一人物だなw

834:デフォルトの名無しさん
17/09/29 01:30:30.30 ppl3WHHK0.net
%%%3%%%
000-DOK<NAZE-0.8112162>
001-3800%\73NMB/1,81,2,NB"IKKI"%
002-91.81%ML7"8.122231746668193,43@ML.4@"%^23.1444
003-1.33321444718%"YLD""SO"%{71.%{62.1339816{331.422231765%<<<NL6
004-LOOP%Go To"000"%
VCL

835:デフォルトの名無しさん
17/09/29 22:15:16.68 7WUGaaf40.net
javaやc#しかやったことないような人間がc++でもメモリ管理をきちんと身につけるには何から始めるのが手っ取り早いでしょう?

836:デフォルトの名無しさん
17/09/29 23:55:16.07 7WUGaaf40.net
そもそもみんなc++で何してるの?🤔

837:デフォルトの名無しさん
17/09/30 00:49:06.72 Yf3yOiqk0.net
人工知能ゥ・・・

838:はちみつ餃子
17/09/30 00:56:27.58 H54Xn+Px0.net
>>812
C++ ではなるべくスマートポインタを使って自動化すべきなんだけど、
その内側にあるメモリの気持ちを実感として持つには C の範囲で色々やってみるのもいいかな。

839:デフォルトの名無しさん
17/09/30 01:18:37.51 bL0j7tMv0.net
>>812-813
JavaやC#が選択肢になる状況でC++を選択する理由はない。
今C++を何に使うか決まってないのなら、JavaやC#を極める方向に努力した方がいい。

840:デフォルトの名無しさん
17/09/30 01:39:01.97 zjlhf9G/0.net
VisualStudioでMFCのSDIテンプレートを作ると、ドキュメントクラス、ビュークラス、アプリケーションクラス、メインフレームクラスができますが、
これらのポインタを初期化時にグローバル化しておいて、以後あらゆるクラスから気軽にアクセスできるようにしとくのは良くないんでしょうか?
グローバル変数はあまり使うべきではないという考えは置いておくとして、動作上問題は起こるのでしょうか?

841:デフォルトの名無しさん
17/09/30 09:54:39.91 1M7A4t/A0.net
まあたまには口ですることもあるかな…

842:デフォルトの名無しさん
17/09/30 16:24:19.18 EIEZdyCfd.net
問題が起こらないように作れば起こらない
としか言えない

843:デフォルトの名無しさん
17/10/01 00:09:52.37 A+1idbvt0.net
MFCのtheAppには100万回ぶち切れてきたけど動作上は特に問題は無い

844:デフォルトの名無しさん
17/10/01 04:08:21.65 EFR2vscz0.net
あーこの人、こうやっちゃったんだ(ニヤニヤ
しながら使うもの
ARM C++ベースなんで同情するところもあるけどね

845:デフォルトの名無しさん
17/10/01 11:18:29.65 coFT7XLp0.net
グローバル変数だからといって頭ごなしにぶち切れるのもいかがなものか…
CPU視点でやるべきことに対して処理順序にあいまいさが生じないなら実行上問題無いし、
プログラマーの視点で管理できる個数なら実用上も問題無い
同一クラスの複数インスタンスが欲しければグローバルな配列にしたらやり過ごせる
ていうか仮にtheAppを根とする木構造で全てのデータを管理することを思い立ったとして、
その木の根付近をぶち切って得た2〜3の大枝をグローバル変数を根とするそれぞれ別の木にする、ぐらいの
挿し木設計は設計上のショートカットとして許されるべきや
というのは、プログラムのあらゆる箇所で
 theApp()->getMemberA()->getMemberAA()->getMemberAAA()->...->getMemberZZ()->getValue()
と書かねばならなかったものが、
 g_dataAA->...->getMemberZZ()->getValue()
ぐらいで済む

846:デフォルトの名無しさん
17/10/01 12:31:41.44 A+1idbvt0.net
平気でグローバル変数を使う奴はtheAppの混じったコードを使いまわし続けて大量にデータを持たせるようになる
そして結合しまくりのクラスを他のソフトにコピペしていつのまにか神theAppができある
マルチスレッドで読み書きしてるもんだから予想外のバグが起こる
上司はそれでそれが当たり前だと思ってるから同じようにしろと俺に命令する
俺切れる

847:デフォルトの名無しさん
17/10/01 12:47:25.61 coFT7XLp0.net
>マルチスレッドで読み書きしてるもんだから予想外のバグが起こる
これはグローバル変数でなくとも起きる設計なら起きるから別件
ていうか
>CPU視点でやるべきことに対して処理順序にあいまいさが生じ(>>822)
ているケースにあたる
非同期呼び出しの同期化は呼び出される側のクラスで解決すべき、というだけ
メソッド内で完結できれば最も安全
パホーマンスや処理の粒度の関係でそれが適さない場合は
トランザクション処理をちゃんと設計汁、

848:デフォルトの名無しさん
17/10/01 12:50:48.09 +enXMbbO0.net
>>823
アプリケーションの中で寿命の長いデータはどこにどうやって置いてるの?

849:デフォルトの名無しさん
17/10/01 14:12:37.21 A+1idbvt0.net
>>824
ちょっと足りなかったわ
マルチスレッドでかつ複数のクラスを跨って別々の場所で読み書きされているからいつどこで変更されるかわからないことが多々ある
そうなるとあちらを立てればこちらが立たずといった感じになり、きれいに書く気力が失われてさらに汚さが加速する
>>825
必要なデータだけを引数で与えるべき

850:デフォルトの名無しさん
17/10/01 14:15:44.38 P+J8m3XL0.net
グローバル変数で同期とるんじゃないぞ。そんなもので同期なんて取れないからな。
ちゃんとOSが提供する同期オブジェクト使えよ。

851:デフォルトの名無しさん
17/10/01 14:17:42.21 LFbo+6zld.net
どんな環境でもOSがあってしっかりした同期の仕組みが有るとか思ってるお花畑がいると聞いて

852:デフォルトの名無しさん
17/10/01 14:25:15.04 P+J8m3XL0.net
いやはや無知で申し訳ない。
マルチスレッド機能があって同期の仕組みが提供されない処理系があるならばご教授して頂きたい。

853:デフォルトの名無しさん
17/10/01 14:59:48.84 8m985+fI0.net
文脈上Windowsでの話なのははっきりしてるのに「どんな環境でも」とか

854:デフォルトの名無しさん
17/10/01 15:20:08.45 +enXMbbO0.net
>>826
>必要なデータだけを引数で与えるべき
引数を渡す側がそのデータをどこにどうやって保持すればいいのか、という問題が残るだけでは?

855:デフォルトの名無しさん
17/10/01 15:35:52.14 7TdPvZgo0.net
>>831
> 引数を渡す側がそのデータをどこにどうやって保持すればいいのか、という問題が残るだけでは?
再帰的にたどって行けばいいだけかと
プログラムの寿命とほぼ同じ寿命が必要ならmain( )で定義することになるだろうし

856:デフォルトの名無しさん
17/10/01 15:38:17.18 P+J8m3XL0.net
どうしてもグローバル的なものがほしいなら、グローバルにしてしまえよ。
アクセス用の関数だけしっかり同期処理書けばいい。

857:デフォルトの名無しさん
17/10/01 15:41:47.38 coFT7XLp0.net
んまーマルチスレッド機能有りのOSであり
 (1) OSがプリエンプトしてくるのを止めるAPIが無い
 (2) ユーザープログラム独自に割り込み禁止命令を実行できない(特権命令違反でトラップされる
としたらユーザー側ではフラグのread modify writeのアトミック性を保証する術がまるきり無くなる

858:デフォルトの名無しさん
17/10/01 15:43:55.69 coFT7XLp0.net
いやすまん下記も追加
 (3) interlock系の命令が使えない(特権命令違反か何かでトラップされる
(3)は使えるかな普通…
>>829のは杞憂かもしれんな…

859:デフォルトの名無しさん
17/10/01 15:51:28.11 coFT7XLp0.net
しかしまあ同期処理はOSが提供すべき(理念としてだけでなく、その方が効率よく実現できるから
というのは同意
マルチスレッド機能があるOSなら必ずプリエンプトされないコード範囲を持つので、そこでなら
interlock系の命令を持たないZ-80みたいなCPUでも何も問題なくアトミックなread-modify-writeができる、

860:デフォルトの名無しさん
17/10/01 15:52:05.08 7TdPvZgo0.net
>>834-835
Compare-And-Swapとかの命令が特権命令になってるプロセッサなんてあるんだっけ?

861:デフォルトの名無しさん
17/10/01 15:59:29.84 coFT7XLp0.net
>>837
Interlock系命令の意味で言った
正しい言葉使いかは知らん…!

862:デフォルトの名無しさん
17/10/01 16:05:24.82 a+6SxdIf0.net
atomicなread及びwriteが使えるならmutexを構成できるし、それを利用すればread modify writeも可能だよ。

863:デフォルトの名無しさん
17/10/01 17:15:48.85 zBOS+jx9M.net
ミューテックスが何だって?
くだらねえ話しやがって・・

864:デフォルトの名無しさん
17/10/01 17:18:14.77 A+1idbvt0.net
>>831
どんどん上にたどっていく
そのデータを管理しなければいけないクラスあるいはmain関数が保持すればいい
externした変数はそのクラスが所有権を持っていることと同等なので、パフォーマンス上の都合が無ければ極力共有は避けるべき
あとコードを使いまわすときにも障害になる
ファイルにまとめて他でincludeしてもそのまま使えない

865:デフォルトの名無しさん
17/10/01 17:46:49.19 +enXMbbO0.net
>>841
>そのデータを管理しなければいけないクラスあるいはmain関数が保持すればいい
クラスが持つっていうのはそのクラスのスタティックメンバにしろという意味?
それでは結局グローバル変数とか無名namespace内変数とあまり変わらないような気がする。

866:デフォルトの名無しさん
17/10/01 18:21:24.53 A+1idbvt0.net
>>842
言ってる意味がわからない
クラスA内クラスBとCを宣言して
B b;
C c;
c.set_data(b);
だとか
main関数内で
Dptr d_ptr = D::get_resource();
Eptr e_ptr = E::get_resource();
F f(d_ptr, e_ptr);
f.excute();
とかこんな風にする

867:デフォルトの名無しさん
17/10/01 18:30:22.24 +enXMbbO0.net
>>843
んー
>そのデータを管理しなければいけないクラスあるいはmain関数が保持すればいい
「あるいは」ってどういう意味?
main関数内に持つ方はわかるんですよ。
そうでなく、「クラスが保持」の方の解説をお願いしたい。ずっと保持し続けるんだから
スタティックメンバなのかな?と思った。

868:817
17/10/01 18:34:27.58 SWvA/SVx0.net
>>820
では、例えば初期化時にtheApp内に、Doc、View、MainFrmクラスのポインタをメンバに持たせておいて、
以降、あらゆるクラスからtheAppを介してアクセスしてもよいということですね。
こういったやり方でふとよぎった不安なんですが、
長時間アプリを起動していたとき、とあるクラスの参照ポインタがいつのまにか変わっていて、
例えばビュークラスを取得しようと「theApp.GetView()」としたときにはすでにそこにViewクラスはいない。。。なんてことは起こりませんか?

869:デフォルトの名無しさん
17/10/01 19:04:09.96 c8q3kohq0.net
>>845
起こらないように設計する。

870:デフォルトの名無しさん
17/10/01 19:06:45.42 A+1idbvt0.net
>>844
普通なパブリックなメンバでいいと思うけど
その所有権をもったクラスの寿命が尽きたら同時に開放される

>>845
もちろん参照元からは参照先の実態があることが保障されないのでよくある
特定のメンバの参照数が数百箇所になってたときは手に負えなくなったのでさすがに作り直した

871:デフォルトの名無しさん
17/10/01 19:24:06.85 8m985+fI0.net
「クラスの寿命」とかもう難しすぎてついていけんわ

872:デフォルトの名無しさん
17/10/01 19:38:58.01 A+1idbvt0.net
>>848
推敲とかしてないのである程度読み替えて言いたいことを汲み取ってね
そのクラスの変数の寿命な

873:デフォルトの名無しさん
17/10/01 19:42:13.70 +enXMbbO0.net
うん、寿命の長いオブジェクトをどうやって保持し続けるかっていう話なのにね

874:デフォルトの名無しさん
17/10/01 19:51:59.11 P+J8m3XL0.net
悩む理由がよく分からないが。適当な管理クラス作ればいいだけでは。

875:デフォルトの名無しさん
17/10/01 19:54:30.69 +enXMbbO0.net
>>849
寿命の長いオブジェクトをどうやって保持し続けるかがテーマなので、
「a というデータはクラスBのオブジェクトbに持たせればいい」では
じゃあそのbはどこにどうやって保持し続けるのかという無限後退に陥る。
普通のグローバル変数やシングルトン
theAppにぶら下げるの
mainの中に置く
一長一短あるのでそれ以外に何かないかなという話

876:デフォルトの名無しさん
17/10/01 20:03:44.13 P+J8m3XL0.net
別に永続化、シリアライズの話までしてないわけでしょ。
mainかグローバルの2択で推奨はmain、どのスコープからも見えてアクセスしたいならグローバルもありで終わりでしょ。

877:デフォルトの名無しさん
17/10/01 20:06:34.68 +enXMbbO0.net
>>853
あなたの意見は>>833以降ずっと一貫しているからいいですよ。
>>823の意見がわかるようでわかりにくい

878:デフォルトの名無しさん
17/10/01 20:15:10.00 P+J8m3XL0.net
MFC? H社のソフトのことかな?

879:デフォルトの名無しさん
17/10/01 22:22:01.91 SWvA/SVx0.net
>>846
>>もちろん参照元からは参照先の実態があることが保障されないのでよくある
ソースコードで意図的にdeleteとか、アドレス移動する命令をいれてなくても起こるんですか?
(ガベージコレクションみたいなことが)

880:デフォルトの名無しさん
17/10/01 22:50:35.76 LFbo+6zld.net
>>829
無知を謝る必要はない
マルチコアのDSPをOSレスで使うとか

881:デフォルトの名無しさん
17/10/01 22:54:38.73 LFbo+6zld.net
>>826
パラメータで渡すべき情報と
そうじゃない情報と
がある

882:デフォルトの名無しさん
17/10/01 23:00:12.89 LFbo+6zld.net
>>852
スタティックメモリ(グローバル変数など)
auto変数(スタックやレジスタなど)
OSやAPI側の保存領域(APIを用いた設定など)
ファイルなど

883:デフォルトの名無しさん
17/10/01 23:08:17.57 A+1idbvt0.net
>>856
起こるわけないが

884:デフォルトの名無しさん
17/10/01 23:28:49.53 LFbo+6zld.net
意図的じゃないdelete

885:デフォルトの名無しさん
17/10/02 15:27:40.28 jSh1mr/v0.net
> プログラムのあらゆる箇所で
>  theApp()->getMemberA()->getMemberAA()->getMemberAAA()->...->getMemberZZ()->getValue()
> と書かねばならなかった
本当にあらゆる箇所に重複コードを書きまくっているとしたら相当なアフォだな
関数化かキャッシュするだろふつー

886:デフォルトの名無しさん
17/10/02 17:30:53.86 wJY11lw/0.net
最近WindowsのほうでVSを入れまして、簡単なSTGを作って遊んでいるのですが、MacOSでもC++でSTGを作ることはできるのでしょうか?
Windowsでは、DxlibといったSTG制作に特化したライブラリがありますが、MacOSではどうなのでしょうか…?実際にMacでSTG制作の経験がある方、挫折した方の話をお聞かせください。よろしくお願いします。

887:デフォルトの名無しさん
17/10/02 17:45:41.63 M0wavUvt0.net
DXLibがSTG制作に特化したライブラリ…

888:デフォルトの名無しさん
17/10/02 18:07:53.55 wJY11lw/0.net
>>864
何かおかしなことを言っていたらすみません。
STG制作入門のホームページでそのようなことが書かれていたので、そう認識していた次第です。

889:デフォルトの名無しさん
17/10/02 19:07:36.56 SPyFybU20.net
それはDirectXの薄いラッパなので何に特化しているとかはない
マルチプラットフォームで作りたいならOpenGLで作れ

890:デフォルトの名無しさん
17/10/02 20:27:58.95 wJY11lw/0.net
OpenGLか…
難しそうだしまだ取っ付くべきじゃないような気がするんだけどそんなことはない?

891:デフォルトの名無しさん
17/10/02 20:36:13.43 /AEbHlJU0.net
Valkan行こう

892:デフォルトの名無しさん
17/10/02 22:38:15.66 O4roxos+0.net
>>845
それぞれアクセス関数が用意されているので馬鹿なことはやめなさい

893:デフォルトの名無しさん
17/10/03 00:06:57.08 AOU4wQiN0.net
>>862
黙れよキチガイ
theApp()はtheAppかthisの間違いだがそれは別にして
メソッドgetMenberA()を有するクラスから始まって、
メソッドgetValue()を有するクラスFooまでの全てのクラス
が完璧にカプセル化された設計の元で
theAppから配下のFooのメンバにアクセスするアクセッサは実質的に>>862な状況を呈する
これはもう完璧なカプセル化を諦めて途中までグローバル変数にする(挿し木設計)か
インライ


894:涛W開による最適化を期待するぐらいしか手が無い



895:デフォルトの名無しさん
17/10/03 00:11:53.92 AOU4wQiN0.net
まあ神の視座に立てば完璧な抽象化を徹底してそんな深いアクセッサをいらなくすれば良いのだが
そんなことが最初からできるなら苦労は無い、

896:デフォルトの名無しさん
17/10/03 05:23:10.92 ZkSEHHAS0.net
> カプセル化を諦めて途中までグローバル変数
ヘボ野郎

897:デフォルトの名無しさん
17/10/03 15:26:50.04 tYdASm94H.net
二次元配列の中身を1命令で一気に出力する方法はないでしょうか
いちいち2重ループかくのめんどくさいです

898:デフォルトの名無しさん
17/10/03 16:01:22.87 ZkSEHHAS0.net
CならあるがC++では一般的な方法はない

899:デフォルトの名無しさん
17/10/03 16:16:18.00 vTZ8MAnuM.net
>>874
Cでの方法を教えていただけると嬉しいです

900:デフォルトの名無しさん
17/10/03 16:16:57.77 vTZ8MAnuM.net
すいませんIDかわりました
>>875>>873です

901:デフォルトの名無しさん
17/10/03 16:20:42.09 ZkSEHHAS0.net
俺も暇なヤツだなw
template <typename T> void print_dim(T&);
template <typename T, int RANK>
struct print_dim_t
{
void doit(T& x)
{
for(auto& y : x) print_dim(y);
}
};
template <typename T>
struct print_dim_t<T, 1>
{
void doit(T& x)
{
for(auto& y : x) std::cout << y << ',';
}
};
template <typename T>
void print_dim(T& x)
{
print_dim_t<T, std::rank_v<T>> obj;
obj.doit(x);
}

902:デフォルトの名無しさん
17/10/03 16:34:48.99 ZkSEHHAS0.net
#define print_dim(array, type) do_print_dim_##type((type *)&array, (type *)(&array + 1))
void do_print_dim_int(int *first, int *last)
{
for(int *p = first; p != last; p++) printf(" %d", *p);
}

903:デフォルトの名無しさん
17/10/03 16:54:32.30 hqWXgVBV0.net
暇じゃないので横着しました
int* it = (int*) mat;
for_each(it, it + ROW * COL, [](int i){cout << i << " ";});

904:デフォルトの名無しさん
17/10/04 18:26:58.85 O2xwfga8d.net
linuxの質問です
・koファイルからコマンドライン実行で実行ファイルを実行したい
どうやって実現するか調べてもわからなくてやり方教えて欲しいです
A --B みたいな呼び出しかたをしたい
・複数スレッドを立てているBプロセスを
全スレッドsleepにすることできる?

905:デフォルトの名無しさん
17/10/04 18:34:16.19 O2xwfga8d.net
>>880
親プロセスをスリープにできるだけでも問題ないです

906:片山博文MZ
17/10/04 18:45:43.87 HMkkIXOid.net
system, execl, execlp, execle, execv, execvp, execvpe, spawn, popen, fork

907:片山博文MZ
17/10/04 18:47:36.46 HMkkIXOid.net
sleep, usleep, nanosleep

908:片山博文MZ
17/10/04 19:21:33.45 HMkkIXOid.net
解説が必要ですか?
はい/いいえ

909:デフォルトの名無しさん
17/10/04 19:29:13.24 N0mfbhbs0.net
>>880 上半分だけ
.ko ってデバイスドライバとかのローダブルモジュールじゃないかな。
動作中のカーネルにinsmodで組み込まなきゃ使えないと思うんだけど。

910:885
17/10/04 19:36:09.54 N0mfbhbs0.net
すまん、質問の意図を取り違えたかも。
カーネルモジュールの中から外部コマンドを呼びたいって話かな。
可能かも知れん、と言うかカーネルがコマンドを実行するのと同じ手順のはずだが、
具体的な方法はさっぱり分からん。役に立たなくて申し訳ない。

911:デフォルトの名無しさん
17/10/04 22:05:29.41 O2xwfga8d.net
>>884
とても欲しいです..


912:. >>886 カーネルオブジェクトから外部コマンド(実行ファイル)をコマンド形式で呼び出したいって意味ですね



913:デフォルトの名無しさん
17/10/04 22:07:13.92 UdMKuk5G0.net
ハッカーですね。

914:片山博文MZ
17/10/04 22:16:13.63 HMkkIXOid.net
>>882に書かれている関数のそれぞれの機能を比較し、該当する関数のソース(in Linux kernel)を読んでみては?

915:デフォルトの名無しさん
17/10/04 22:19:51.52 O2xwfga8d.net
>>889
今解説読んでいてsleep関連が終わったとこ
exec関連多すぎて大変

916:デフォルトの名無しさん
17/10/05 07:00:51.51 AZey7Nzq0.net
>>880
ちょいと検索したところ call_usermodehelper て関数があるみたい。

917:デフォルトの名無しさん
17/10/05 21:41:51.13 /Agpj2+3d.net
>>891
今調べたら出てきました!
自分が望んだことできそうですありがとうございます

918:デフォルトの名無しさん
17/10/06 09:41:37.58 aNGBh62I0.net
("a,b,c")とは、a,b,cの合計を表すのでしょうか?
それとも、a,b,c各それぞれを表すのでしょうか?

919:デフォルトの名無しさん
17/10/06 10:15:40.40 tNPv5Oyi0.net
ここの住人はソースコードをコメントで装飾するのに、どういう書き方をしていますか?
参考にさせて下さい

920:デフォルトの名無しさん
17/10/06 10:26:06.63 8EN3J+m8d.net
doxygen方式

921:片山博文MZ
17/10/06 11:28:24.20 u49AV52wd.net
>>893
ただのC文字列。

922:893
17/10/06 14:25:11.99 aNGBh62I0.net
>>896
ありがとうございました。

923:デフォルトの名無しさん
17/10/06 19:52:03.20 sTEh17J80.net
C++リテラル文字列だろ

924:デフォルトの名無しさん
17/10/06 19:54:12.06 sTEh17J80.net
いや、やっぱただの文字列か

925:デフォルトの名無しさん
17/10/06 21:08:44.42 vfMxTM1h0.net
→ の意味教えて下さい。

926:デフォルトの名無しさん
17/10/06 21:15:27.43 fyJ+AUec0.net
そんなものありません。

927:片山博文MZ
17/10/06 21:46:37.43 u49AV52wd.net
「ptr->member」は、「(*ptr).member」と同じ意味。

928:900
17/10/06 23:48:23.51 vfMxTM1h0.net
参考書の一部です
URLリンク(fast-uploader.com)
どう言う意味なのでしょうか?

929:デフォルトの名無しさん
17/10/06 23:52:15.96 vfMxTM1h0.net
本を読んでも
 structやunionが具体的に、どの様に動作してるのか分かりません。

930:デフォルトの名無しさん
17/10/06 23:58:13.70 yrQN1jb/0.net
基本の基本なので、
先ずは、小さなサンプル作って、実際に動かしてデバッガで追ってみる。
その上で、判らない事を質問すべき。

931:デフォルトの名無しさん
17/10/07 01:41:08.30 6wfQSWva0.net
質問です
以下のコードがコンパイルに通りません
class Structure { public: std::string type; };
std::vector< std::unique_ptr<void> > data;
std::unique_ptr<void> structure(new Structure);
structure->type = "HogeHoge";
data.push_back(structure);
>g++ -Wall -std=c++11 -c hogehoge.cpp
>error: ‘std::unique_ptr<void>::pointer {aka void*}’ is not a pointer-to-object type
> structure->type = "HogeHoge";
> ^
std::unique_ptr<void>ではなくて、
std::unique<Structure>にするとコンパイル通りました
voidだとだめなんでしょうか エラーになる理由を教えて下さい

932:デフォルトの名無しさん
17/10/07 01:49:12.44 IjrnmnS30.net
>>906
anyつかえ。

933:デフォルトの名無しさん
17/10/07 05:28:19.29 9j2tI+ab0.net
>>900
こりゃ -> の誤植だな。
印刷屋さんがC知らなくて矢印記号と思ったんだな。
コード部分は執筆者が念を入れてチェックしなきゃね。

934:デフォルトの名無しさん
17/10/07 08:30:30.38 r58+Koxz0.net
>>906
エラーメッセージに書いてあるだろ <


935:br> structure->type = "HogeHoge"; の代入先がオブジェクトじゃねえぜと おまえさんはvoid = char const*;をやろうとしたんだよ



936:デフォルトの名無しさん
17/10/07 08:31:55.56 r58+Koxz0.net
あ、すまんちょいミスった
指摘できるやついる?解説頼むわ

937:デフォルトの名無しさん
17/10/07 08:41:11.20 eyY86HOM0.net
>>906
unique_ptrあんまりしらんから想像で書くけど
そいつがデストラクタまで管理したいからvoidじゃなくてちゃんと型渡せってことじゃね

938:デフォルトの名無しさん
17/10/07 09:00:22.02 y2Dkbadu0.net
>>906
> エラーになる理由を教えて下さい
void 型の変数なんてないから
そもそも何をしたいんだよ...

939:デフォルトの名無しさん
17/10/07 09:03:55.62 7nonADk70.net
unique_ptr<void>という型なので、
中にtypeというメンバーがあることがコンパイラからはわからない。
static_cast<Structure*>(structure.get())->type = "HogeHoge";
のように明示すればコンパイルだけは通るかと思ったんだが、
こっちだと>>911の問題に引っかかって、その前の行でエラーになる。

940:デフォルトの名無しさん
17/10/07 09:27:45.88 7nonADk70.net
>>913の最後の行は勘違いだった。
こちらの環境だと、unique_ptr<void>の時点でエラーになる。

941:
17/10/07 11:35:23.13 NngrEkye0.net
unique_ptr<void *> だとどうなる?

942:デフォルトの名無しさん
17/10/07 11:58:47.95 rHfSD+zL0.net
>>913
delete できないからね
voidを渡すんならカスタムデリータもセットにしなきゃならない。
template <typename T>
struct vp_deleter {
void operator ()(void *p)const
{
delete static_cast<T*>(p);
}
};
std::unique_ptr<void, vp_deleter<int>> a(new int(8));
なら通った。

943:デフォルトの名無しさん
17/10/07 12:19:56.83 jvf7kHO4M.net
void型なんて定義もなければサイズもないから
素で使うがそもそもNG

944:デフォルトの名無しさん
17/10/07 12:36:08.56 6wfQSWva0.net
>>907
anyは知りませんでした
stdじゃなくてboostにあるんですね つかってみます
>>909
つまり void*->type は void.type になるってことですね
voidポインタは使ったことなくて、あれから調べたのですが
アクセスする前にキャストが必要だと知りました・・
無知ゆえの初歩的なミスです 指摘ありがとうございます
>>911, >>913, >>916
スマートポインタなのでデストラクタを呼び出せるようにしないといけないんですね
カスタムデリータは知りませんでした コード参考になります
void型なのはStructureの他にもプリミティブ型とかも入れたかったからです
boost::any使うやり方とカスタムデリータ渡すやり方両方やってみます
皆さんレスありがとうございました

945:デフォルトの名無しさん
17/10/07 13:41:40.48 j+yonEy7d.net
ひとつのカスタムデリータでいろんな型をdeleteするってなら無理

946:デフォルトの名無しさん
17/10/07 14:16:25.95 LB5EP+Z/0.net
いまだにforkとthreadの動作の違いがわからない

947:デフォルトの名無しさん
17/10/07 14:17:50.50 jvf7kHO4M.net
ある配列がありそれを指定した順番で並び替えしたい
std::vector< any_struct_t > array; //これを並び替えたい
std::vector< unsigned int > index_list = { 3,8,6,0,2...}; //この順番にしたい
探しているんだけど適当なライブラリが見つからない
標準ライブラリに入ってたりする?
またはアルゴリズムが知りたい
出来ればswap回数が少ない方法が知りたい

948:デフォルトの名無しさん
17/10/07 15:34:33.81 cqowZFEsp.net
配列もう一個用意してその添え字に移動するんじゃだめなん

949:デフォルトの名無しさん
17/10/07 16:00:10.47 ZvmF6v7F0.net
>>922
それが一番速そうだよね

950:デフォルトの名無しさん
17/10/07 16:14:50.00 Mcd7mBScM.net
std::vector<any_struct_t> ret(index_list);
std::transform(index_list.cbegin(), index_list.cend(), ret.begin(), [&array](auto i){ return array[i]; });

951:デフォルトの名無しさん
17/10/07 16:25:34.07 jvf7kHO4M.net
>>924
それタイプミスあります?
でももう一つ配列を用意してコピーする点では
他の方と一緒ですね
別配列を用意せず全てswapで済ます方法も作ってみましたが
これにはindex_listが更に2本必要になり
効率は別配列と変わらないと予想される結果でした
参考になりました
ありがとうございました

952:デフォルトの名無しさん
17/10/07 16:38:58.22 Mcd7mBScM.net
一行目初期化はsizeだった
すまん

953:デフォルトの名無しさん
17/10/07 16:55:14.57 rHfSD+zL0.net
>>925
別領域を全く使わずin-placeでかつ汎用性のあるやり方ってすごく難しそう。
でも不可能性の証明も難しそうなんだよな。

954:デフォルトの名無しさん
17/10/07 17:23:03.40 9j2tI+ab0.net
index_list に含まれる値がそれぞれ重複なく1回だけ出現とか、
いかにも破られそうな条件を暗黙に期待するライブラリ、
てのも変な感じだしねぇ。

955:デフォルトの名無しさん
17/10/07 17:39:38.90 7nonADk70.net
任意の置換は互換の積で表せるので、swap繰り返せばin-placeで可能。
URLリンク(rikei-index.blue.coocan.jp)

956:デフォルトの名無しさん
17/10/07 17:47:14.55 IjrnmnS30.net
>>906
URLリンク(ideone.com)
こういうことでしょ?

957:デフォルトの名無しさん
17/10/07 18:00:13.73 rHfSD+zL0.net
>>929
まだやってない場所どこだっけ?

958:デフォルトの名無しさん
17/10/07 18:14:41.26 7nonADk70.net
>>927
「別領域を全く使わず」を見落としてたすまぬ

959:デフォルトの名無しさん
17/10/07 18:35:30.53 rHfSD+zL0.net
「別領域を全く使わず」とはいっても、テンポラリの変数を1個とか2個の固定数だけ使うのは除く。

960:デフォルトの名無しさん
17/10/07 19:11:01.43 7nonADk70.net
屁理屈を言うと、index_listを壊していいなら、
以下の手順で別領域を使わない置換は可能。遅いけど。
for( size_t i = 0; i < array.size() - 1; ++i )
{
std::swap( array[i], array[index_list[i]] );
std::swap( index_list[i], *std::find( index_list.begin()+i+1, index_list.end(), i ) );
}

961:デフォルトの名無しさん
17/10/07 19:26:56.50 7nonADk70.net
おっと、index_list.begin()+i+1の「+1」は消してくれ

962:デフォルトの名無しさん
17/10/07 19:44:23.58 rHfSD+zL0.net
この話をきっかけに、std::next_permutation の仕様を見てみたが、どういう時に使うのかよくわからない。

963:デフォルトの名無しさん
17/10/07 20:14:16.81 jvf7kHO4M.net
流石にO(n)は維持しないと
厳しいと思います

964:片山博文MZ
17/10/07 20:23:01.47 vDiuGwTad.net
お前ら、プログラム書くとき、普通にnoexceptを何回も書いてるの?

965:片山博文MZ
17/10/07 20:25:42.72 vDiuGwTad.net
>>936
permutation を実装するときに決まってんだろ?

966:デフォルトの名無しさん
17/10/07 20:53:48.18 Mcd7mBScM.net
>>938
今までthrow()と書いてた場所には書いてるよ
むしろ、書いてないの?

967:片山博文MZ
17/10/07 21:02:34.40 vDiuGwTad.net
>>940
コンパイラーのバカ。

968:はちみつ餃子
17/10/07 21:05:19.53 JUuMz14c0.net
>>918
any は C++17 で標準に入ったよ。

969:デフォルトの名無しさん
17/10/07 21:13:10.52 x4ka+ayCr.net
規格と規格じゃないものの区別も付かない低能はすっこんでて

970:900
17/10/07 21:13:19.89 m/msdGTM0.net
>>908
ありがとうございます。
いくら検索しても出て来ないので、困ってました。

971:デフォルトの名無しさん
17/10/07 21:17:07.24 rHfSD+zL0.net
>>939
わからんがな

972:デフォルトの名無しさん
17/10/07 23:13:09.50 7nonADk70.net
>>934
別領域を使わない置換に再挑戦。今回はO(n)のはず。
for( size_t i = 0; i < array.size() - 1; ++i )
{
size_t j = i, k = index_list[i];
while( k != i )
{
std::swap( array[j], array[k] );
index_list[j] = j; j = k; k = index_list[k];
}
index_list[j] = j;
}

973:デフォルトの名無しさん
17/10/08 00:16:09.42 FGX6bPrh0.net
>>9


974:46 二重ループなのにO(n)なの?



975:デフォルトの名無しさん
17/10/08 00:28:37.42 wi1g/BWB0.net
後出しのようで心苦しいけどindex_listを壊すのはダメだと思う。
const参照で渡すインタフェースにできないという意味で汎用性条件を満たしていない。

976:デフォルトの名無しさん
17/10/08 06:22:19.14 +SudLjvR0.net
>>947
以下の2つの理由により、外側のループがn回まわる間に
内側のループの中身はたかだかn回しか実行されない。
1. 内側のループ内で処理済みのインデックスjに対し index_list[j]=j が実行される。
2. index_list[i]==i の条件が最初から満たされていた場合、内側のループは実行されない
要するに、内側のループを実行済みかのフラグとしてindex_listを使ってるだけ。
>>948
index_listを壊している時点で屁理屈なのは自覚しているんで、仕方ない。
一応、別配列にムーブする場合と比べると、
最初から正しい位置にある要素への処理が不要になるというメリットは有る。

977:デフォルトの名無しさん
17/10/08 11:20:44.83 HosRocIl0.net
>>928, >>948
ライブラリに対するオレオレ定義をいちいち開陳しなくていいよ、チラ裏にでも書いとけ

978:デフォルトの名無しさん
17/10/08 11:34:33.36 +SudLjvR0.net
駄目な理由が引数を壊すってことだけなら、引数を値渡しにしてやれば、
呼び出し時に勝手にコピーされるので問題ないはず。
壊していい引数を渡す時はstd::move()すればいいし。

979:デフォルトの名無しさん
17/10/08 13:39:35.60 GUxnbDfL0.net
引数がconst参照=引数の状態を変更しない(てか、できない)という意思表示
に対して
引数が右辺値参照=引数の状態を変更する(しても文句言うな)という意思表示
というのはアリ?
右辺値参照に対する理解が曖昧なんで漠然とよく分からない(何が分かって
ないかも分からないw)んだが、もっと別な意思表示方法もある?

980:デフォルトの名無しさん
17/10/08 16:07:31.29 6tf5QjxV0.net
ほ〜ん>>946の奴はちゃんと動いたわ;
URLリンク(ideone.com)

981:デフォルトの名無しさん
17/10/08 16:11:39.00 6tf5QjxV0.net
>>946の奴は要素[i]が内側のwhile()ループからは1回以上アクセスされないから確かにO(N)な気配、

982:デフォルトの名無しさん
17/10/08 23:25:19.93 sIfqyVAH0.net
右辺値参照はさっぱり意味わからんわ。

983:デフォルトの名無しさん
17/10/09 09:00:03.09 U0LcPFS10.net
右辺値参照というのは、関数f()へのT型データの値渡し時に暗黙のうちに行われる(C++03までは無条件に行われていた)
 (左辺値) = (右辺値)
という代入処理において、
当該代入処理後、右辺値が関数呼び出し元によって使われなくなることが明白なとき、
 左辺値へのコピー後、右辺値をデストラクトする
という処理に暗黙のうちになっていたものを、
 右辺値から左辺値への移動
と「も」書けるようにするためのしくみ
Tに効率の良いムーブコンストラクタ(か右辺値参照を引数とする代入演算子)を定義しないとメリットが生じない
ポインタに__restrictを付けるべきかどうか悩まねばならないレベルの人用
C++03でもコンストラ・デストラ呼び出し回数削減の最適化がかかって同じような効果になるケースが多々あるから
そういうのが信用できない神経質な人向け
※ 個人の感想です

984:デフォルトの名無しさん
17/10/09 09:09:56.49 Ge9OzZ/lr.net
それで>>952の質問の答えはどうなるんだ?

985:デフォルトの名無しさん
17/10/09 09:20:15.73 U0LcPFS10.net
>>957
右辺値参照には一時オブジェクトしか代入できない縛りがあるから_
関数fooを
 voiid foo(int&& x)
というバージョンしか定義していないとすると、
 int g_x = 10;
 foo(g_x);
がビルドが通らないのではないか;
一般的な使用を想定すれば、結局foo(const int& x)も定義必要
C++03までしか使ったこと無いから知らんけど;;

986:デフォルトの名無しさん
17/10/09 09:37:56.10 nhJ4ZLVgM.net
>>958
その場合はfoo(int(g_x));が通るから、必須ではないよ
コピーを外側で明示的にやらせることで、こっちのほうが責任が明確になるので好きという人もいる

987:デフォルトの名無しさん
17/10/09 10:15:14.60 53KUOYPr0.net
必然性の無い実装都合のシンクはクソ

988:デフォルトの名無しさん
17/10/09 17:26:43.28 bLguG3ky0.net
オブジェクトのコピーとかムーブのためにここまで言語仕様を複雑にしないといけないのか。おれにはさっぱり理解不能だわ。

989:デフォルトの名無しさん
17/10/09 17:57:29.04 0USm99MRM.net
俺も右辺値参照はどうかと思う
いらないよね

990:デフォルトの名無しさん
17/10/09 18:35:18.07 3udUYydoM.net
使わなくてもいいんじゃないか?
使ったことないから複雑に感じるだけで、そこまで複雑でもないよ

991:デフォルトの名無しさん
17/10/09 18:45:40.84 UEIAYP2F0.net
>>961
GCをもたない言語の宿命だから嫌なら性能を犠牲にするかGCを持つ言語を使えばいい

992:デフォルトの名無しさん
17/10/09 18:56:48.86 QjIlXwNcM.net
いやいやスマポがあるじゃない。
中級が多いプロジェクトならスマポ強制のほうが性能上がるんじゃないかと思う。

993:デフォルトの名無しさん
17/10/09 18:58:40.39 8DJAJvC20.net
個人的にはC++の言語仕様の暗黒面はほとんど「参照」が絡んでいると思う。

994:デフォルトの名無しさん
17/10/09 19:50:58.39 3udUYydoM.net
ADLとか部分特殊化のマッチとかのほうが、はるかに複雑で暗黒だと思う

995:デフォルトの名無しさん
17/10/09 20:54:40.71 bLguG3ky0.net
>>964
理解してないのでなにを指摘してるかさっぱり分からないが、
つまり、気取ってC++でGCっぽいことしようとして破綻してるわけだな。

996:デフォルトの名無しさん
17/10/09 20:56:32.03 UEIAYP2F0.net
>>968
> 理解してないのでなにを指摘してるかさっぱり分からないが、
わからないなら絡んでくるなよ...
> つまり、気取ってC++でGCっぽいことしようとして破綻してるわけだな。
全然違うし

997:デフォルトの名無しさん
17/10/09 20:56:47.16 1ynB1O3m0.net
>>967
そう思う。
そのへんは「ルール」でしかないけど、右辺値参照はそれ自体が左辺値参照とは違うひとつの概念だから理解可能

998:デフォルトの名無しさん
17/10/09 21:28:57.78 iWLkHfj90.net
右辺値参照なんか、破壊不可オブジェクトをムーブするときくらいしか使わないような。うにーくぽいんたとか。
それ以外は参照でいいし。

999:デフォルトの名無しさん
17/10/09 21:45:04.70 Rk3/uNWr0.net
右辺値参照の有用性を理解できない人間にとってはそもそもC++自体が無用だと思う
さっさと退散しなさい

1000:デフォルトの名無しさん
17/10/09 21:56:43.96 bLguG3ky0.net
ところでなんでそんなに一時オブジエクトを参照しなきゃいけないコードを書くの?
参照元を管理するのが面倒だから? そういう人は初めからGC言語使えばよくね? ということですか?

1001:デフォルトの名無しさん
17/10/09 22:03:17.69 Rk3/uNWr0.net
なんでとか言われても。。。
壊してもいい一時オブジェクトの場合、特別に効率的な扱いをしたくなるケースなんて山ほどある
それが分からないならC++なんて触らずにGC言語専門でやってればいいと思うよ

1002:はちみつ餃子
17/10/09 22:10:35.64 GeS0S50a0.net
そのあたりはトレードオフなんだよ。
そりゃあ気にせずに済むなら気にしたくないが、気にしなきゃならないときに出来ることがないのはつらいって話で。

1003:デフォルトの名無しさん
17/10/09 22:13:59.60 0USm99MRM.net
俺もわからん
左辺値参照ではなく右辺値参照を使った方が
良い状況ってどんなの?
あと唐突にガページコレクション出してるけど
何の関係があるの?

1004:デフォルトの名無しさん
17/10/09 22:24:17.86 bLguG3ky0.net
もしかしてC++で仕事したことないんですか?


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

556日前に更新/267 KB
担当:undef