C++相談室 part119 [転載禁止]©5ch.io
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2015/08/31(月) 18:19:04.13ID:NE3NvROEただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。
前スレ
C++相談室 part118
http://peace.2ch.net/test/read.cgi/tech/1435970316/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.97【環境依存OK】 [転載禁止]©2ch.net
http://peace.2ch.net/test/read.cgi/tech/1439849418/
次期規格C++1zはこちら
C++14/C++1z 20
http://peace.2ch.net/test/read.cgi/tech/1410382924/
■長いソースを貼るときはここへ。■
http://codepad.org/
http://ideone.com/
0153デフォルトの名無しさん
2015/09/04(金) 03:33:33.23ID:CNzc1DB/AもBも他のクラスのメンバとするならば、初期化で問題なくインスタンス化できるという話ですか?
いずれにしろAとBをマネージするクラスを作るのは避けられないですかね?
>>152
どちらもgccのc++03でいけましたが、>>151はc++03だと警告が出ました
コンストラクタは書かなくても大丈夫ではないですか?
0154デフォルトの名無しさん
2015/09/04(金) 04:59:59.47ID:ukgXeb3fどっちも参照しかもって無いんだから誰かが実体持つ必要があるだろ。
それは相互に参照してようがしてまいが変わらない
0155デフォルトの名無しさん
2015/09/04(金) 05:04:41.54ID:1ELVgZ8YC++03でクラス化するにはコンストラクタがいるよ
それと試しにg++(gcc)でやってみたけど、
C++11でのみ有効な機能っていう警告が出たよ
それじゃなかった?
0156デフォルトの名無しさん
2015/09/04(金) 06:17:53.16ID:rG9hvPUXコンソールに出力すると
コンソールの通信速度に引っ張られて
プログラムの動作が遅くなる
デバッグだからと言って無闇に大量に出力しないように気をつけないといけない
0157デフォルトの名無しさん
2015/09/04(金) 08:17:29.72ID:9mN0gzGK0158デフォルトの名無しさん
2015/09/04(金) 08:58:14.87ID:voaTutYw0159デフォルトの名無しさん
2015/09/04(金) 11:55:39.86ID:1AVS2Ktf言うだけ無駄
どーしてもcoutと手段が目的化してる
0160デフォルトの名無しさん
2015/09/04(金) 12:28:24.29ID:s9W6t8fF0161デフォルトの名無しさん
2015/09/04(金) 12:30:58.91ID:8nJVYQKkmainとかの関数内ではAやBのインスタンス作れないですよね?
何かしら方法あるのかな
0162デフォルトの名無しさん
2015/09/04(金) 12:37:05.16ID:g9gAlQ8r普通に作れるでしょ…
0163デフォルトの名無しさん
2015/09/04(金) 14:48:15.68ID:yKUUH6cx0164デフォルトの名無しさん
2015/09/04(金) 17:07:42.09ID:ynK+SMBx>>158
リングバッファに貯めて別タスクでワイヤレスのコンソールに吐き出させています
>>160
確かにそうかもしれません。
主目的は、標準ライブラリの移植です。
>>163
それでもかまいませんが
やらなくてはならないことは同じではないかと思いました。
ちなみにiostreamをヘッダファイルに加えると以下のようなエラーが出ます
hoge.cpp:(.text.startup+0x48): undefined reference to `__dso_handle'
/path/to/libstdc++.a(system_error.o): In function `_GLOBAL__sub_I__ZNSt14error_categoryC2Ev':
system_error.cc:(.text.startup._GLOBAL__sub_I__ZNSt14error_categoryC2Ev+0x4c): undefined reference to `__dso_handle'
0165デフォルトの名無しさん
2015/09/04(金) 20:19:10.44ID:STCOa/Lw0166デフォルトの名無しさん
2015/09/05(土) 18:20:35.46ID:pkvC4koKhttp://erosuga1.blog.fc2.com/blog-entry-3174.html
親戚のエロお姉さんとS◯Xwwwwwwwwwww
0167デフォルトの名無しさん
2015/09/06(日) 23:13:13.97ID:kzoJkPUN0168デフォルトの名無しさん
2015/09/06(日) 23:59:11.69ID:TtEkoNQG0169デフォルトの名無しさん
2015/09/07(月) 19:34:51.82ID:XjY9JrjDmoveNextとcurrentはcurrentを実装するときコピーはいらないが進むのにmoveNextが必要という
トレードオフがあると思いませんか?
0170デフォルトの名無しさん
2015/09/07(月) 20:08:22.86ID:AAyuiqtlちょうど俺もそう思っていたところだ
0171デフォルトの名無しさん
2015/09/07(月) 21:24:45.26ID:107fD43G0172デフォルトの名無しさん
2015/09/07(月) 21:26:55.88ID:xAuYi2fm0173デフォルトの名無しさん
2015/09/08(火) 10:01:21.06ID:LEkrsXyvtypelistの可変引数版みたいなのを自作しようと思います
0174デフォルトの名無しさん
2015/09/08(火) 12:57:45.86ID:rdzMyuc+0175デフォルトの名無しさん
2015/09/10(木) 14:29:57.70ID:vNCRKT6funique_ptr<int> p(new int[3]);
unique_ptr<int[]> p(new int[3]);
はどちらもGNU C++11でコンパイルが通りますが、両者は同じですか?
0176デフォルトの名無しさん
2015/09/10(木) 17:14:13.20ID:tn/zLcPl前者は消滅時に変なdeleteが呼ばれるんじゃね
0177デフォルトの名無しさん
2015/09/10(木) 18:13:22.19ID:vNCRKT6fshare_ptrの場合<int[]>だとコンパイルエラーになりますが、
unique_ptrは配列の特殊化があるので<int[]>にしないとダメということでしょうか?
0178デフォルトの名無しさん
2015/09/10(木) 18:33:57.55ID:jMDA+bxl0179デフォルトの名無しさん
2015/09/10(木) 19:52:32.49ID:Ubq2dser代わりにshared_arrayがあったと思うけど、要するに生配列なんてクソなものは使うなよってことなのかね
0180デフォルトの名無しさん
2015/09/10(木) 20:18:56.37ID:dU3rTPO3いえそんなものありません
0181デフォルトの名無しさん
2015/09/10(木) 20:26:28.15ID:2c1W3PII0182デフォルトの名無しさん
2015/09/10(木) 20:42:53.70ID:XPHYFe1Bなぜなならアーレイやベクトルやストリングがあるからさ
そんな僕でもこれらデータ構造よりもunique_ptr<T[]>が使えると思いつく場面はあるんだ
それはヒープ配列の生のポインターをAPIで所有権をうけとるときたった一つさ
0183デフォルトの名無しさん
2015/09/10(木) 23:41:24.04ID:Lt3YsJ/Z和服の彼女かとおもた
0184デフォルトの名無しさん
2015/09/11(金) 10:32:13.74ID:yGFUVtFx実際の情報はどこで保持されてるんでしょうか?
0185デフォルトの名無しさん
2015/09/11(金) 10:33:39.57ID:H6P2Jlk50186デフォルトの名無しさん
2015/09/11(金) 11:22:30.30ID:Ra3TP7iEただし高速化の工夫はしてある
0187デフォルトの名無しさん
2015/09/11(金) 14:11:15.39ID:yGFUVtFxうまいことやってるというくらいしか分かりませんでした
atomicについて知らなかったので調べたんですが、
これってC++11のメモリモデルに関するもので、
いわば言語のコアの機能なんですね
0188デフォルトの名無しさん
2015/09/11(金) 14:12:30.08ID:yGFUVtFxたとえば参照カウンタを持つクラスを用意し、これをshare_ptrさせたい
クラスに継承させるという間接的な方法しかないということですよね?
0189デフォルトの名無しさん
2015/09/11(金) 14:20:50.61ID:ZeO2NzYz0190デフォルトの名無しさん
2015/09/11(金) 15:00:10.29ID:xy/6VGnh2つの変数の型を自動的に整合させる方法が分からないのだ。
void some_job() {
const auto loop_times = 10;
for (auto cnt = 0; cnt != loop_times; ++cnt) {
/* ループ内の処理 */
}
} // (インデントはおそらく破壊される)
上の場合、ループ回数 loop_times と、ループカウンタ cnt は
どちらのautoもintと判断されるのでとりあえず一致する。
しかし auto loop_times の初期値にintでない値を与えると
当然ながら loop_times と cnt の型が違ってしまう。
「cntの型は、loop_timesの型からconstを外したものだよ」
という変数宣言の書き方はないだろうか?
諸兄らの教えを乞いたい。
0191デフォルトの名無しさん
2015/09/11(金) 15:18:09.86ID:yGFUVtFxどのへんが間違ってるんですか?
C++初心者にもわかる説明だとありがたいです
0192デフォルトの名無しさん
2015/09/11(金) 15:43:03.84ID:BdWqvAgcttp://ideone.com/CTjWaa
これでどうよ
>>191
boost::shared_ptrのソースでも見てみれば
shared_ptrが標準に入ったのは11からだけどそれ以前にもshared_ptrはあったんだから
0193190
2015/09/11(金) 18:00:12.76ID:xy/6VGnhまさに希望した通りの情報です。感謝します。
std::remove_const 云々 と書くのか。
sizeof() と typeid().name() とで並べて見たところ
loop_times と cnt の型は一致した。
loop_times = 10U; や loop_times = '3'; でも
試したら自動的に型が合った。
テンプレート構造体に閉じ込めたtypedefか。
こんな仕掛けを思いつくとは尊敬すべき変態さん達だな。
0194デフォルトの名無しさん
2015/09/11(金) 19:32:57.26ID:eMWeHauNconst auto && loop_times = 10;
でも動くんか?
そこはdecayじゃないのかって思ったんだけど
0195デフォルトの名無しさん
2015/09/11(金) 21:03:06.98ID:yGFUVtFxよく見てみたら、参照カウンタ自体の仕組みはごく単純で、自分のイメージ通りでした
というか、そもそも自分がshare_ptrの使い方をちゃんと理解していませんでした
share_ptrに生ポインタ渡せるのは初回だけなんですね・・・
http://ideone.com/mysMec
スレ汚し失礼しました
0196デフォルトの名無しさん
2015/09/11(金) 23:54:45.84ID:b8iFLD3fhttp://wired.jp/2015/09/11/github-coding-languages-open-source/
http://wired.jp/wp-content/uploads/2015/09/wiredus09101024x541.jpg
0197デフォルトの名無しさん
2015/09/12(土) 01:27:55.77ID:JUZlHW5G0198デフォルトの名無しさん
2015/09/12(土) 02:10:12.94ID:xJrAsa7qでも混ぜこぜでもcssに負けてんのはちょっと面白い
0199デフォルトの名無しさん
2015/09/12(土) 04:58:03.64ID:oXtx5tH/プログラミング言語ランキングとは
サイトの名前をwiredからweirdに変えた方がいい
0200デフォルトの名無しさん
2015/09/12(土) 13:10:32.88ID:JUZlHW5GなんだかんだCは上位にいると思う。
0201デフォルトの名無しさん
2015/09/12(土) 13:17:01.58ID:VGFicEEtgithubはもともとスクリプト書いてる人が多く使ってたから
ああいう順位なんだと思うよ
0202デフォルトの名無しさん
2015/09/12(土) 14:01:59.69ID:kwHtj/5Ndetachしたスレッドが,メインスレッド終了後も生き続けてもグローバル変数にアクセスしても問題はありませんか?
StackOverflowなどには大丈夫だという回答があり、簡単なテストコードでも問題は無かったのですが
クラス内static変数にアクセスしたときに時々異常終了したことがあったので少し不安です
0203デフォルトの名無しさん
2015/09/12(土) 14:06:47.33ID:JUZlHW5G0204デフォルトの名無しさん
2015/09/12(土) 14:06:59.24ID:5QpLz49+0205デフォルトの名無しさん
2015/09/12(土) 14:37:23.35ID:kwHtj/5N生きてないですね(核爆
0206デフォルトの名無しさん
2015/09/12(土) 15:31:31.26ID:Jf5oAWRgこれってなんですか
0207デフォルトの名無しさん
2015/09/12(土) 15:52:40.95ID:uQU/vJQH>Inhibiting the automatic generation of a default constructor by the compiler.
0208デフォルトの名無しさん
2015/09/12(土) 16:38:30.48ID:Jf5oAWRg0209デフォルトの名無しさん
2015/09/12(土) 16:40:31.69ID:pEVoCQGH0210デフォルトの名無しさん
2015/09/12(土) 16:41:18.68ID:9veCOfSe0211デフォルトの名無しさん
2015/09/12(土) 16:41:52.46ID:9veCOfSe0212デフォルトの名無しさん
2015/09/12(土) 16:43:08.92ID:Hpj3Z5wB0213デフォルトの名無しさん
2015/09/12(土) 18:04:37.15ID:fhFqy1Q7ただし使うとコンパイルエラーになる特別な本体で
定義されるので書かなかったときの自動生成は行われないし
privateで書いて生成禁止にしてもfriendからアクセス出来てしまうという誤りを防げる
0214デフォルトの名無しさん
2015/09/12(土) 21:36:31.32ID:XAqQ9sMDコンパイラのコンストラクタの自動生成を阻止する
とせずに
使えない特殊なコンストラクタを定義
↓
コンストラクタがあるので自動生成されない
という回りくどいプロセスを踏んでいるのは何故ですか?
0215デフォルトの名無しさん
2015/09/12(土) 21:46:02.85ID:mqPDPmPFどっちが回りくどいかもう一度考えてみたら?
0216デフォルトの名無しさん
2015/09/12(土) 21:48:41.33ID:urgaTojg0217デフォルトの名無しさん
2015/09/12(土) 22:39:51.40ID:fhFqy1Q7そりゃ>>207のサイトが嘘つきなだけで
自動生成を抑止するためじゃなく
使えない関数を定義することが目的だからね
http://ideone.com/LKN3q1
0218デフォルトの名無しさん
2015/09/13(日) 01:24:33.20ID:T9Cd4+Hx0219デフォルトの名無しさん
2015/09/13(日) 01:28:55.66ID:Auzbsz6v0220デフォルトの名無しさん
2015/09/13(日) 02:17:23.86ID:T9Cd4+Hx0221デフォルトの名無しさん
2015/09/13(日) 03:41:04.36ID:6aqKmbgS適用されるのは同じ翻訳単位だけなのでは?
0222デフォルトの名無しさん
2015/09/13(日) 04:33:23.08ID:fzKWBIn4そのレスする意味ある?
0223デフォルトの名無しさん
2015/09/13(日) 05:08:08.47ID:6aqKmbgS0224デフォルトの名無しさん
2015/09/13(日) 05:42:13.47ID:fzKWBIn4他人を批判する前に自分を省みろって
0225デフォルトの名無しさん
2015/09/13(日) 06:21:11.66ID:oxWskyTTdeleteが同じ翻訳しか適用されなくても
delete関数はインライン関数だから
違う翻訳単位でdeleteじゃかったらODR違反
問題ない
0226デフォルトの名無しさん
2015/09/13(日) 08:36:35.77ID:GRWOhyHTclear()メソッドが無いのは何か理由有り?
一応pop()がデータを返さなくてfront()で先頭要素にアクセスしてからpop()すべき仕様なのは
極力先頭要素のコピーをしたくなくて、参照で済ませたいからだと推測できるのですが
clear()が無い理由はちょっと…
0227デフォルトの名無しさん
2015/09/13(日) 08:40:43.87ID:1aU/2qC8データ構造上、コンテナを使い回すメリットがないから
新たにインスタンス作ればよろしいということ
0228デフォルトの名無しさん
2015/09/13(日) 08:43:14.92ID:m2o7J/Xtまーたその話かよ
コンテナアダプタだからって結論が出ただろ
0229デフォルトの名無しさん
2015/09/13(日) 13:19:52.29ID:BGQqu8BAFIFOを使う場合にclearが必要になるのがおかしい
0230デフォルトの名無しさん
2015/09/13(日) 13:59:21.40ID:21SWVEBeへー、どうして?
FIFOを乱す順序の操作ではないよね?
0231デフォルトの名無しさん
2015/09/13(日) 15:45:14.55ID:zCQU/fdLclearしたければclearする派生クラスを作ればいい
そういう設計だ
0232デフォルトの名無しさん
2015/09/13(日) 17:42:34.20ID:aPjNmwB2>極力先頭要素のコピーをしたくなくて
pop()が要素を返す場合コピーコンストラクタが例外を投げる可能性があるので
例外安全を満たすことができなくなる。
0233デフォルトの名無しさん
2015/09/13(日) 17:59:22.43ID:dMwVjMJUへー、どうして?
0234デフォルトの名無しさん
2015/09/13(日) 18:45:49.56ID:ABWGqgknあとtopで参照返すことによりswapなどを使う事により例外発生させることなく受け取ることが可能になる
C++11からmove出来るようになったからほぼいらなくなったけど
0235デフォルトの名無しさん
2015/09/13(日) 20:20:56.97ID:M0wiS1Aaarray[width][height]
array[height][width]
どっちがいいですか?
0236デフォルトの名無しさん
2015/09/13(日) 20:22:35.56ID:G58MCBrjそんなことはお前のやろうとしていること次第。
ここできくことじゃない。
0237片山博文MZ ◆T6xkBnTXz7B0
2015/09/13(日) 20:25:57.90ID:io0Trfl5横向きに連続してアクセスするなら
array[height][width]
がいい。まあ、その辺はインライン関数で抽象化して、実測すればわかる。
0238デフォルトの名無しさん
2015/09/13(日) 21:21:42.16ID:M3GBYhkY変わるんすかねぇ
0239デフォルトの名無しさん
2015/09/13(日) 22:47:56.80ID:q3JnkdTU0240デフォルトの名無しさん
2015/09/13(日) 23:01:44.40ID:JxlRVXLxまず変わると考える根拠を述べよ
0241デフォルトの名無しさん
2015/09/13(日) 23:26:04.26ID:q3JnkdTUここ、C++スレですよね
0242片山博文MZ ◆T6xkBnTXz7B0
2015/09/13(日) 23:55:37.85ID:io0Trfl5横方向に連続したアクセスなら、早くなるはず。
先読みとかキャッシュも関係するかも。
0243デフォルトの名無しさん
2015/09/13(日) 23:57:05.44ID:ABWGqgkn0244デフォルトの名無しさん
2015/09/14(月) 01:17:12.52ID:h9CenDqdプログラムが完成したら入れ替えてテストしろよ
0245デフォルトの名無しさん
2015/09/14(月) 02:27:47.71ID:WQ7njzDq0246デフォルトの名無しさん
2015/09/14(月) 19:17:30.03ID:nW8KHDe7template templateという機能がありますが、これをクラステンプレートではなくて
関数テンプレートを渡す機能はありますか?
http://codepad.org/pYejO9Fn
意図としては、ライブラリを作るにあたって、ユーザーからコールバックとして
関数テンプレートを受け取りたいです。
コードの最初のFooクラスのように、クラスで包んでoperator()を定義すれば
実現できます。しかし不格好なので、 bar のように普通に定義された関数テンプレートを
渡すことはできないでしょうか?
0247デフォルトの名無しさん
2015/09/14(月) 19:24:44.32ID:cuv2HbJp関数テンプレートを渡す機能はありません
0248デフォルトの名無しさん
2015/09/14(月) 19:29:09.13ID:nW8KHDe7そうか。あざす。残念。
0249190
2015/09/15(火) 08:28:18.63ID:j+WGnnSbconst auto loop_times = ... に対しては
for (std::remove_const<decltype(loop_times)>::type cnt = 0; ...
for (std::decay<decltype(loop_times)>::type cnt = 0; ...
どちらで書いても期待通り動作することを確認。
const auto && loop_times = ... に対しては
前者(remove_const)はコンパイルエラー、後者(decay)は動作する。
ところで const auto && loop_times という変数宣言の && の
意味が分からないのですよ。
この&&が変数にどんな性質を与えるのか、
検索時に使うべきキーワードなど教えていただきたい。
0250デフォルトの名無しさん
2015/09/15(火) 08:37:09.59ID:kADVoeCZ0251デフォルトの名無しさん
2015/09/15(火) 14:25:08.30ID:B7TuBbRI最後の要素を得るのは仕様的に問題無いでしょうか?
http://ideone.com/dzDqLI
0252デフォルトの名無しさん
2015/09/15(火) 19:45:47.95ID:AnTXPfgv動画の形式(H.264など)に圧縮して、
ネットワークに送出し、
タブレットなどの端末でストリーミング再生できるようにしたいのですが、
どのようにすればできるでしょうか?
動画の形式にするにはMediaFoundationやNVENCなどのHWエンコーダを利用する
プログラムで可能であることは分かりました。
ネットワーク経由でストリーミングする具体的な方法が分かりません。
扱えるAPIは
・WinAPI
・WinSock
・Direct3D11
・DirectShow
・MediaFoundation
などです。
よろしくお願いします。
■ このスレッドは過去ログ倉庫に格納されています