C++相談室 part115 [転載禁止]©5ch.io
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2014/12/18(木) 13:46:24.42ID:Mboq20NAただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。
前スレ
C++相談室 part114
http://peace.2ch.net/test/read.cgi/tech/1408743258/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.94【環境依存OK】 [転載禁止]2ch.net
http://peace.2ch.net/test/read.cgi/tech/1417179292/
次期規格C++1yはこちら
C++14/C++1z 20
http://peace.2ch.net/test/read.cgi/tech/1410382924/
■長いソースを貼るときはここへ。■
http://codepad.org/
http://ideone.com/
0002デフォルトの名無しさん
2014/12/18(木) 13:48:36.76ID:Mboq20NA環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?
#include <stdafx.h>
後死ね。
言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。
0003デフォルトの名無しさん
2014/12/18(木) 13:49:19.44ID:Mboq20NA0004デフォルトの名無しさん
2014/12/18(木) 16:23:18.11ID:Xu+bpXu30005デフォルトの名無しさん
2014/12/18(木) 21:09:31.54ID:k0ND7p5i0006デフォルトの名無しさん
2014/12/18(木) 23:13:31.10ID:fnOUCw1n0007デフォルトの名無しさん
2014/12/19(金) 00:12:58.73ID:NqAoL8i00008デフォルトの名無しさん
2014/12/19(金) 02:14:24.67ID:D9g9ciFN0009デフォルトの名無しさん
2014/12/19(金) 06:48:52.77ID:6yiRzMRAhttp://peace.2ch.net/test/read.cgi/tech/1268613679/
0010デフォルトの名無しさん
2014/12/19(金) 06:55:16.41ID:XHQPWWr/プログラミング初心者ににC++=C++/CLIという概念を植え付けてそれを多数派に
していこうとしている
>>8もその被害者の一人
0011デフォルトの名無しさん
2014/12/19(金) 07:35:24.65ID:LnqskZcGお前、使ったことないだろ
IDE なんて MS も嫌々やってるのがまるわかりのできだぞ
本気でやってるなら C# 並みにしてるわ w
0012デフォルトの名無しさん
2014/12/19(金) 13:33:24.46ID:sTJegaK20013デフォルトの名無しさん
2014/12/19(金) 21:13:49.42ID:rAA+xYtYこれからはIDEじゃなくてIoT(InternetOfThings)だよ(>_<)
0014デフォルトの名無しさん
2014/12/19(金) 23:49:49.30ID:wb+cst2b0015デフォルトの名無しさん
2014/12/20(土) 11:50:50.19ID:jR1T/TYI0016デフォルトの名無しさん
2014/12/20(土) 12:15:35.44ID:/dRkMF5D元のデータが何なのかにも夜が、良くやるのは既存のバイナリファイル(これがデータに該当する)をchar配列のC構文に自動変換する方法
0017デフォルトの名無しさん
2014/12/20(土) 12:24:13.66ID:JZ4PykH50018デフォルトの名無しさん
2014/12/20(土) 12:33:11.89ID:NV7bMuJAR"(#include "data.txt")" みたいなことがやりたい。
0019デフォルトの名無しさん
2014/12/20(土) 13:19:55.03ID:/dRkMF5D引用符で括った段階で意味変わっちまうからな
せめてカンマ区切りの16進ダンプになってればどうにかなるんだろうが
自前の変換ツールかいてみたらどーよ
数10行で書けるし
0020デフォルトの名無しさん
2014/12/20(土) 13:23:25.97ID:lS6KGt9L規格で保証されてる1オブジェクトのサイズは32KBとか64KBとか、そんなもんだったはず。
まぁ、分割しておいてプログラム側で組みたてりゃいいが。
0021デフォルトの名無しさん
2014/12/20(土) 14:12:40.26ID:fOhVUgIO32bitの組込用コンパイラだけど、100KB越えのchar配列は宣言出来たよ
0022デフォルトの名無しさん
2014/12/20(土) 15:40:59.86ID:nd4W1El1>>20
C++規格にそんなのあるの?
0023デフォルトの名無しさん
2014/12/20(土) 15:56:11.84ID:cUhMXe+F0024デフォルトの名無しさん
2014/12/20(土) 16:09:48.06ID:UAEy/4JW0025デフォルトの名無しさん
2014/12/20(土) 16:12:13.89ID:g/UZFBu60026デフォルトの名無しさん
2014/12/20(土) 16:50:31.13ID:lS6KGt9L制限値はあくまでも実装定義で、規格にあるのはその推奨値だな。
C++11だと Annex B にオブジェクトサイズ260KB、文字列リテラル64KBとある。
それと、自分が以前引っかかったのは文字列リテラルの方の制限だった。
GIMPで一定サイズ以上の画像をCソース形式でエクスポートするとコンパイルできない
ことがあったんだが、そいつを勘違いした。
0027デフォルトの名無しさん
2014/12/20(土) 17:03:57.61ID:UAEy/4JWobjcopyなり自作するなりしてCソース生成するか、環境が許せばELFリソースとして取り込むか
0028デフォルトの名無しさん
2014/12/20(土) 17:34:11.78ID:MvUnc9qyexeの後ろにバイナリでくっ付けて、何かの情報を読んでそのデータを読み出して使う
なんてことやったことがあるな。
0029デフォルトの名無しさん
2014/12/20(土) 18:03:34.67ID:UAEy/4JWexeつうことはDOSかWINなんだろうけど、exeの後ろをインチキして延長した部分はプログラムからはどう見えるの
0030デフォルトの名無しさん
2014/12/20(土) 18:05:05.16ID:UAEy/4JW0031デフォルトの名無しさん
2014/12/20(土) 18:29:45.99ID:gQF4xUpTインチキの仕方によるだろ
0032デフォルトの名無しさん
2014/12/20(土) 18:37:13.04ID:MvUnc9qy0033デフォルトの名無しさん
2014/12/20(土) 19:00:07.56ID:F6eJQs21そんな話をおれも聞いたことある。
dosの時代
0034デフォルトの名無しさん
2014/12/20(土) 19:55:07.52ID:SDWeWTgE0035デフォルトの名無しさん
2014/12/20(土) 21:57:43.10ID:UAEy/4JWビルドした後にいちいちもう一段手数踏むのか、デバッグめんどくさそうだ
0036デフォルトの名無しさん
2014/12/21(日) 17:23:02.94ID:FZbFM7/vバイナリならコンパイル後catで結合
コードはexeファイルをバイナリモードで開いて「ファイルの最後-結合するデータサイズ」にファイルポインタセットして読み込み
0037デフォルトの名無しさん
2014/12/21(日) 17:29:19.07ID:FZbFM7/v0038デフォルトの名無しさん
2014/12/21(日) 17:32:56.00ID:FZbFM7/v0039デフォルトの名無しさん
2014/12/21(日) 17:38:33.47ID:e2fIb+kJ>exeファイルをバイナリモードで開いて
これをやるのが一番めんどくさそうだ、ファイルパスとかどうやって手に入れるの?
>>38
リソースはロードしてロックしてとかめんどくさそうなんだけれど‥static で持たせたらなにもせずにアクセスし放題だよ‥
0040デフォルトの名無しさん
2014/12/21(日) 17:47:26.03ID:6WeMGJJtリソースのロードとロックなんて簡単だろ。 exe自身に含められる上、アンロックは無いし。
なんにせよ、C++の素の機能では実行ファイルに外部データを埋め込むことはできないのな。
0041デフォルトの名無しさん
2014/12/21(日) 17:50:50.33ID:2iwIfbgZ0042デフォルトの名無しさん
2014/12/21(日) 18:38:09.07ID:FZbFM7/vデータcatする手法使いたいけどそれが手間ってんならmakeやVSのビルドコマンドにぶち込んどけ
0043デフォルトの名無しさん
2014/12/21(日) 19:05:38.10ID:2iwIfbgZ0044デフォルトの名無しさん
2014/12/21(日) 21:22:22.55ID:OJR2IhJwたとえばgcc系のmingwでwinソフト作成していても、データを埋め込む時はリソースファイル
に記述して埋め込むんじゃないのか?
リソースファイル使わないで強制的にexeの後に埋め込んで使うって、
どういう場合なんだ? リソースファイル記述では巨大ファイルは埋め込めないとか
0045デフォルトの名無しさん
2014/12/22(月) 01:48:03.02ID:+BOkQn0HWIN32以降はリソースセクションのサイズ制限は無かったと思う
0046デフォルトの名無しさん
2014/12/22(月) 12:43:41.32ID:SmxPQr0lhttps://developer.gnome.org/gio/stable/gio-GResource.html
C++とは何の関係もないが
0047デフォルトの名無しさん
2014/12/22(月) 15:31:59.76ID:O5kTxGCI巨大って何Gバイトとかのオーダーか?
0048デフォルトの名無しさん
2014/12/23(火) 00:22:06.66ID:BmzYTsD1それともデータファイルが単独で見えたら困る理由でも有るのかな
0049デフォルトの名無しさん
2014/12/23(火) 00:25:42.07ID:BmzYTsD10050デフォルトの名無しさん
2014/12/23(火) 00:58:34.70ID:ZhKtxXT7インストーラーとか何も気にする必要が無いし
0051デフォルトの名無しさん
2014/12/23(火) 01:00:27.89ID:BmzYTsD10052デフォルトの名無しさん
2014/12/23(火) 01:06:14.31ID:ZhKtxXT7CのランタイムがOSにプリインストールされているんで、
exe単体で配布出来た記憶が有る
0053デフォルトの名無しさん
2014/12/23(火) 01:10:09.62ID:BmzYTsD1XP以降だと居るね
しかしVC6.0って、初版からもう16年も経ってるよw
0054デフォルトの名無しさん
2014/12/23(火) 01:21:26.39ID:563YOSgG0055デフォルトの名無しさん
2014/12/23(火) 01:50:29.25ID:JtDLB+nl10年後も同じことを言っているに違いない。
一生脳みそが進化しない人たち
0056デフォルトの名無しさん
2014/12/23(火) 01:58:08.01ID:3P5/e2xd装置が動かなければ文句は言うけど
0057デフォルトの名無しさん
2014/12/23(火) 02:56:42.09ID:BmzYTsD10058デフォルトの名無しさん
2014/12/23(火) 03:50:42.80ID:JpaksaBx0059デフォルトの名無しさん
2014/12/23(火) 04:04:39.78ID:BmzYTsD1その前に2038年問題を乗り越えなくちゃ
0060デフォルトの名無しさん
2014/12/23(火) 06:56:41.49ID:ZhKtxXT7会社でやってると、別に自分の意思なんて関係ないぞ
個人的には、C、C++、C#、SQLとか、Azureなんかも少し勉強しているし、
IDEとしてはCommunityを入れているが、
"当時"の製品を保守していくのに、VC6.0も入れないといけないんで
0061デフォルトの名無しさん
2014/12/23(火) 09:27:39.48ID:BmzYTsD164bitも生成できないしMFCも古いし
0062デフォルトの名無しさん
2014/12/23(火) 10:14:57.29ID:S/HWfghB静的リンクすりゃいいんじゃね?
MFC はできないんだっけ?
0063デフォルトの名無しさん
2014/12/23(火) 12:54:35.99ID:BmzYTsD1出来るけど、クソでかく成る
MFC無しのコンソールアプリとかなら静的リンクしても小さいんだけど
0064デフォルトの名無しさん
2014/12/23(火) 12:59:56.43ID:zn+tl5Qaデカイと言っても数メガバイト程度じゃあないか?
0065デフォルトの名無しさん
2014/12/23(火) 13:03:00.57ID:EhLsW63JVC6が現役バリバリ ≠ 新しい製品は使っていない
だろ
0066デフォルトの名無しさん
2014/12/23(火) 13:07:22.00ID:CttU++jz流石に今はそれで製品は作らないけど、ちょっとした自分用ツール作るのには軽くて楽
バッチ処理用のツールはC++2013でコンソールアプリにするけどね
0067デフォルトの名無しさん
2014/12/23(火) 14:40:52.35ID:S/HWfghBちょっとしたツールなら C# で十分
VB6 は文字コードの扱いが面倒だし
0068デフォルトの名無しさん
2014/12/23(火) 16:29:16.63ID:zkNCry36間違いなく老害
またの名をブビ厨
0069デフォルトの名無しさん
2014/12/23(火) 16:36:32.79ID:ATuB6kuL0070デフォルトの名無しさん
2014/12/23(火) 16:47:09.04ID:T7GjWYCO今も普通にVB6互換のインタプリタだよ
0071デフォルトの名無しさん
2014/12/23(火) 18:11:47.47ID:ATuB6kuL0072デフォルトの名無しさん
2014/12/23(火) 18:42:56.49ID:3P5/e2xdおよびでない?およびでない?
0073デフォルトの名無しさん
2014/12/23(火) 18:45:22.55ID:T7GjWYCOならないよ
VB6がVB.NETになって早12年
その間VBAはVB6アーキテクチャーのまま変わらなかった
0074デフォルトの名無しさん
2014/12/23(火) 22:10:04.89ID:yx1q+yG3へ〜、こんなこともできるんだ‥個性の強い言語でやってくんないかな‥haskell とか‥
0075デフォルトの名無しさん
2014/12/23(火) 22:51:43.86ID:EhLsW63JVBAがC#になったらどうなるんだろう?
0076デフォルトの名無しさん
2014/12/23(火) 22:54:32.47ID:27luq57f「事務員がExcel VBAをシコシコ」
一番迷惑なパターンだな
0077デフォルトの名無しさん
2014/12/23(火) 22:54:46.13ID:ZhKtxXT70078デフォルトの名無しさん
2014/12/23(火) 23:01:43.83ID:BmzYTsD1Excel自体も.NETになっていて糞遅いVBAになってるだろう、しかも既存のExcelマクロも言語仕様の違いで動かない
0079デフォルトの名無しさん
2014/12/23(火) 23:12:16.94ID:EhLsW63J迷惑って、他人とどう関係があるのか?
それにExcelVBAをシコシコって事務員のデフォルトではないか?
0080デフォルトの名無しさん
2014/12/23(火) 23:15:07.53ID:EhLsW63Jツール全体をC++で作るのは技術もないし、なによりかったるい。
0081デフォルトの名無しさん
2014/12/23(火) 23:27:16.44ID:BmzYTsD1VC++/ATLでCOMベースのDLLを書き、それをVBAから使う、というのがよく使う手法
0082デフォルトの名無しさん
2014/12/23(火) 23:30:17.59ID:3wq9WRg20083デフォルトの名無しさん
2014/12/23(火) 23:57:24.52ID:EhLsW63JMicrosoftテクノロジーにはいまいち関心が湧かないので自分はCOMベースにはしていませんね。
なんというか、素のdll。
そのへんは人によってさまざまだとおもう。
0084デフォルトの名無しさん
2014/12/24(水) 00:01:01.27ID:BmzYTsD1OfficeマクロはC#とかには絶対に成らないで欲しい
0085デフォルトの名無しさん
2014/12/24(水) 00:05:01.61ID:7o13BBmg俺の64ビットExcelから呼び出せるように作れよ。
フォーマットエラーで落ちるなよ
0086デフォルトの名無しさん
2014/12/24(水) 00:05:43.89ID:taMbM64Eそうそう
VBAというかExcelは単なる入出力装置で、とっととデータをC++側に取り込んでしまって、あとは優雅に処理したい。
データのやり取りはVAB配列で十分だし、safearrayがらみの決まりきった手順は変えたくないんだよね。
0087デフォルトの名無しさん
2014/12/24(水) 00:05:45.53ID:iAWb/cKM有るとすれば、Excelじゃない新製品とか?
0088デフォルトの名無しさん
2014/12/24(水) 00:07:06.94ID:taMbM64E俺は一介の事務員だから他人のためのツールなんか作らん。
0089デフォルトの名無しさん
2014/12/24(水) 00:08:36.68ID:6WAQclhgExcelって今は64bitビルドなの?
2007以降買い換えてないから知らなかったんだけど
0090デフォルトの名無しさん
2014/12/24(水) 00:17:25.96ID:ndV3e2GaOffice 2010から32と64の両方がある。
64のsetup.exeを実行しない限り32が入る。
0091デフォルトの名無しさん
2014/12/24(水) 00:27:34.81ID:6WAQclhgそうなのか、知らなかったサンクス
そうすると疑問が湧いてくるのはVBAエンジンの仕様
新しい64bit VBAでExcelと同じプロセス空間で動くのか、それとも従来通りの32bit VBAでプロセス間通信を駆使してExcelを制御するのか
0092デフォルトの名無しさん
2014/12/24(水) 03:00:12.04ID:8ripkqoL0093デフォルトの名無しさん
2014/12/24(水) 07:24:09.81ID:taMbM64E意外とC++利用者の多くの部分は非開発者なんじゃない?
だとするとそんな使い方もけっこう主流なのかも。
0094デフォルトの名無しさん
2014/12/24(水) 07:51:43.07ID:qF3zxr2Yペタバイトくらい
0095デフォルトの名無しさん
2014/12/24(水) 08:27:30.54ID:8qOauR0wペタとなるとデータを舐めるだけでも 22,500時間≒940日≒ 3年弱
0096デフォルトの名無しさん
2014/12/24(水) 09:05:56.86ID:TctVZDZ1RAID-0 も知らんのか
0097デフォルトの名無しさん
2014/12/24(水) 11:54:37.10ID:rAxAPjJRお前よりは有能だよ
0098デフォルトの名無しさん
2014/12/24(水) 18:28:03.85ID:SBMAfTrT計算違わないか?
1PiB=1,048,576GiB
1GiB/sなら100万秒=12日じゃないの。
実際は1GiBあたり10〜30秒ほどかかるだろうから1年弱か
0099デフォルトの名無しさん
2014/12/24(水) 21:13:56.59ID:z2dSDQxc>C++利用者の多くの部分は非開発者なんじゃない?
何をわけのわからんこと言ってるんだおまいは
0100デフォルトの名無しさん
2014/12/24(水) 21:59:30.41ID:taMbM64E仕事で使うプログラムをC++で書いている人の多くは、「いわゆる職業プログラマー」以外の人ではないだろうか?
、と書けば理解できるか?
0101デフォルトの名無しさん
2014/12/24(水) 22:14:40.33ID:CYhtUQ39それがC++言語の主な使われ方であるとふむふむ
0102デフォルトの名無しさん
2014/12/24(水) 22:29:20.50ID:taMbM64E事務員はそのさらに一部だろうが。何を言ってるんだ?
「いわゆる職業プログラマー」ってのはSIerやソフト開発会社に勤めてプログラマーを名乗っている人を指すんだろう。
それ以外は文字通り「それ以外の人」に当たるわけで、それが5割以上いればいいだけじゃないか。
おまえら昭和の時代から来た人たちなのか?
0103デフォルトの名無しさん
2014/12/24(水) 22:46:53.20ID:o8tVCazP0104デフォルトの名無しさん
2014/12/24(水) 23:13:12.25ID:tTQk+YUl0105デフォルトの名無しさん
2014/12/24(水) 23:17:06.93ID:taMbM64E一人1台PCを持たされて、EUC用のDBは用意されてて、Expressだったら申請すれば入れてもらえる。
セキュリティ上の問題さえなければ自由なんだし、これでどうして自分用のツールを作らないと思うんだ?
理系で若けりゃ言語のひとつくらい知ってるし、C++は比較的多い部類だよ。もちろんVB/VBAが圧倒的だが。
0106デフォルトの名無しさん
2014/12/24(水) 23:22:59.52ID:+1mcRXwz0107デフォルトの名無しさん
2014/12/24(水) 23:52:51.73ID:taMbM64E営業はさすがにプログラムなんか書かない。
あとシステム部門も除外。
なんというか・・・プログラミングなどしない層がシステム部門に集まってる感じwww
0108デフォルトの名無しさん
2014/12/25(木) 17:46:00.35ID:JcI9w0820109デフォルトの名無しさん
2014/12/25(木) 19:33:01.61ID:X2VFu+qzちょっと前まではデフォルトでそうしてたけどなあl。
0110デフォルトの名無しさん
2014/12/25(木) 19:38:56.63ID:pPXFAV2W代わりに何書くの?なんか新しいキーワードできたん?
0111デフォルトの名無しさん
2014/12/25(木) 20:24:20.43ID:1LrWAMeK0113片山博文MZ ◆T6xkBnTXz7B0
2014/12/25(木) 20:28:24.89ID:gEw73of10114デフォルトの名無しさん
2014/12/25(木) 20:33:45.55ID:JhLNRnCpデストラクタをvirtualにするパターン
仮想関数テーブルを持ち、new(あるいはmake_sharedなど)で確保して基底クラスにキャストし、基底クラスのポインタをdeleteする可能性があるクラス
デストラクタをvirtualにしないパターン
継承されない、あるいは継承されたとしても基底クラスにキャストしてdeleteを行わないクラス
なおC++11では継承されないクラスにはfinalを付けることができるようになった
スマポがあればデストラクタはいらない? 確かに後者のパターンならそうだ
しかし、前者のパターンであれば、実体を書かずに=defaultとしてしまってもいいが、virtualをつけたデストラクタは書く必要がある
0115デフォルトの名無しさん
2014/12/25(木) 20:38:33.24ID:iVu6887z0116デフォルトの名無しさん
2014/12/25(木) 20:49:30.26ID:JhLNRnCp0117デフォルトの名無しさん
2014/12/25(木) 20:59:28.89ID:JE3+431H0118デフォルトの名無しさん
2014/12/25(木) 21:03:34.38ID:kEJw445D0119デフォルトの名無しさん
2014/12/25(木) 21:10:25.77ID:JE3+431Hでも普通は何らかの基底型でまとめちゃう気がするけど
あとメンバー変数を増やさない継承もvirtualいらなかったりする?
0120デフォルトの名無しさん
2014/12/25(木) 21:14:02.14ID:GL+VZ+hlhttp://vjoystick.sourceforge.net/site/index.php/dev/89-modifying-the-installer
HMODULE hLib = LoadLibrary(_T("vJoyInterface.dll"));でライブラリは読み込めたのですが
GetProcAddressで中から関数の取り出しが失敗してしまいます。
typedef BOOL (*FUNC)(void);で宣言して
FUNC lpFunc = (FUNC)GetProcAddress(hLib, "is_vjoy_installed");で取り出すというのはおかしいでしょうか
0121デフォルトの名無しさん
2014/12/25(木) 21:17:41.18ID:JhLNRnCp0122デフォルトの名無しさん
2014/12/25(木) 21:22:01.18ID:GL+VZ+hlDLLを使うということ事態、よくわからないので、__stdcallとはなんなのか教えてください。
0123デフォルトの名無しさん
2014/12/25(木) 21:30:30.87ID:amq1PajCもしこれが本当なら何でだろ?
sharaed_ptrにはvirtualデストラクタが要らなくて,unique_ptrには
virtualデストラクタが必要と言うのならその理由はなんだろう?
まさか、整備が遅れてる?そんなバナナ
0124デフォルトの名無しさん
2014/12/25(木) 21:43:42.74ID:gEw73of1時間があれば、ソースやレファレンスでも読んでろ
0125デフォルトの名無しさん
2014/12/25(木) 21:51:55.82ID:JhLNRnCpM$のコンパイラの呼び出し規約の一つ
普通のC関数は_cdeclで、関数呼び出した側が積んだスタックを戻す
__stdcallは呼び出された側がretの時に積まれた分のスタックを戻す
呼び出し規約違うのを無理やり呼ぶとスタックが壊れるから別の名前にマングリングされる
Win32APIだと
#define WINAPI __stdcall
ってなってるから、WINAPIで宣言された関数はみんな__stdcall関数になる
__stdcallが付けられた関数はdllexportされた時に
_関数名@X
って名前になるから(Xは引数が消費するスタックのサイズ)、GetProcAddresに渡す名前もそうしなきゃいけない
ちなみに、FUNCのtypedefもWINAPI付けたものにしないと多分死ぬよ
>>123
俺もそこら辺の細かい実装どうなってたっけと思って調べてみたけど、default_deleteは単純にdeleteする仕様だからvirtual付けないといけないみたい
多分、unique_ptrはshared_ptrと違って、生のポインタを扱うのとパフォーマンスに差が出ないような設計になってるんじゃないかな
0126デフォルトの名無しさん
2014/12/25(木) 21:52:19.93ID:TJm+7M94読み込むDLL自体間違ってるしC++関係ないし
0127デフォルトの名無しさん
2014/12/25(木) 21:57:00.80ID:GL+VZ+hlあ、失礼しました。
>>125
あざす
0128デフォルトの名無しさん
2014/12/25(木) 22:01:48.21ID:GL+VZ+hl0129デフォルトの名無しさん
2014/12/25(木) 22:11:42.45ID:XFKTSJbC宣言が
BOOL WINAPI �get_inf_file(TCHAR * InfFile);
なんだから
typedef BOOL WINAPI (*FUNC)(TCHAR * InfFile);
にしろ。と言えばいいだろう
>dllexportされた時に _関数名@X って名前になるから
どこの糞ライブラリだよそんなアホなことするのは
0130デフォルトの名無しさん
2014/12/25(木) 22:17:39.52ID:EvzfwKHqusing FUNC = BOOL (WINAPI *)(TCHAR * InfFile);
が正しいな。
0131デフォルトの名無しさん
2014/12/25(木) 22:22:10.66ID:pPXFAV2W普通に目から鱗だった
呼ぶべきデストラクタを他の実体(shared_ptrとか)が覚えてるような状況ではvirtualはイランってことで、
C++11的なコードではその状況が一般的ってことか。
0132デフォルトの名無しさん
2014/12/25(木) 22:24:36.47ID:y44O8lon派生型でデータメンバー増やしたかどうかは関係ないよ、派生型で追加のデストラクション処理があるかどうか。
データメンバー増やしてもintみたいのは自然に任せておけばいいし、データメンバー増やさなくても派生型でのdtorで何か追加の処理が必要ならvirtualが要る。
例えば外部に通信で何か送るとか、重要なリソースの復帰手続きがいるとか。
0133デフォルトの名無しさん
2014/12/25(木) 22:34:36.97ID:JhLNRnCpM$の糞ライブラリだよ、試してみろよ
__declspec(dllexport) void __stdcall test1(void) {}
__declspec(dllexport) void _cdecl test2(void) {}
これを cl /c でコンパイルして出来たobjファイル見てみろ
_test1@0
になってなかったら謝るわ
0134デフォルトの名無しさん
2014/12/25(木) 22:36:16.31ID:YrgD4jS6そのクラスの使い方変えてリークさせないとも限らないし、それをコンパイルエラーにする仕組みも無いし。
0135デフォルトの名無しさん
2014/12/25(木) 22:37:22.63ID:HdmTbtKU0136デフォルトの名無しさん
2014/12/25(木) 22:43:28.37ID:kLGZywI80137デフォルトの名無しさん
2014/12/25(木) 22:43:47.88ID:X2VFu+qz絶対ってことはないけどさ...
昔 : 実装継承は悪手。インターフェース継承に備えてvirtualが基本。デストラクタでは必須!
今 : 継承させるぞって明確なもくろみがなければクラスの派生なんてしない
っていう感じになってきた。
0138デフォルトの名無しさん
2014/12/25(木) 22:44:11.94ID:y44O8loninterfaceにもvirtual
interface IFooBar {
...
virtual ~IFooBar() {}
};
0139デフォルトの名無しさん
2014/12/25(木) 22:47:14.74ID:iVu6887z0140デフォルトの名無しさん
2014/12/25(木) 22:48:10.77ID:vBicrBA8それはMSのライブラリじゃなくて君の糞ライブラリだろう
まさか>>128がマングリ名で解決したと思ってるの?
0141デフォルトの名無しさん
2014/12/25(木) 22:48:51.28ID:X2VFu+qzちょっと観点が違うかな。
原則派生はしない。だからvirtualは付けないのがデフォ。
継承させるつもりがあるときは、そういう明確な計画のもとにやる。
あんたのは頭に I を付けてるから、まあ同じことを言ってるのかもしれない。
0142デフォルトの名無しさん
2014/12/25(木) 22:50:17.00ID:gcGcIdF4>デストラクタを持つメンバーを追加したときも必要だし
何故?
0143デフォルトの名無しさん
2014/12/25(木) 22:51:24.92ID:X2VFu+qzデストラクタにvirtualが付いてないだけで「こいつ分かってない」
なんていう時代は去った。
0144デフォルトの名無しさん
2014/12/25(木) 22:54:37.17ID:YrgD4jS6俺はinterfaceにvirtualデストラクタは無いかな。
interfaceで渡すような物は所有権持たないようなスマートポインタでいうならweak_ptrで渡すようなものに限定してinterfaceをdeleteする事は無いし。
寿命管理するためのinterfaceってのを作るなら入れるだろうけど、今の所そういうものを作ったことが無い。
>>142
>>134 は >>132 とかその元の >>119 からの流れな。
0145デフォルトの名無しさん
2014/12/25(木) 22:58:34.09ID:y44O8lon..
delete base;
みたいな時は?
0146デフォルトの名無しさん
2014/12/25(木) 23:08:21.35ID:N5DAFkoTそんな非常識なコードを書く人は
夜道で刺し殺されても仕方ないだろうね
0147デフォルトの名無しさん
2014/12/25(木) 23:11:05.49ID:N5DAFkoT「auto base = shared_ptr<IBase>{ shared_ptr<Derived>{new Derived{}} };
がわかりやすくてオススメ」
と言っていた気がするが、長すぎる
0148デフォルトの名無しさん
2014/12/25(木) 23:11:34.76ID:y44O8lonどう非常識なのかわからんわ
普通にあるだろ
変数は抽象型でオブジェクトはその時々のどれかの具象型ってのは
インーターフェースベースの記述した事ないんかい
0149デフォルトの名無しさん
2014/12/25(木) 23:16:58.27ID:pPXFAV2Wvirtualが必要になる典型例でかつshared_ptr使えよって弄られる典型例じゃね?
0150デフォルトの名無しさん
2014/12/25(木) 23:19:13.83ID:uEY+MDR3make_sharedつかえば少し短くなる
0151デフォルトの名無しさん
2014/12/25(木) 23:19:40.05ID:y44O8lon0152デフォルトの名無しさん
2014/12/25(木) 23:21:35.26ID:hS0cw+d6>>123読んだ?
0153デフォルトの名無しさん
2014/12/25(木) 23:22:25.15ID:X2VFu+qz0154デフォルトの名無しさん
2014/12/25(木) 23:24:19.46ID:y44O8lon変数の型とnewする型が同じとは限らないからvirtual dtorが要るか要らないかの話になってるわけで
0155デフォルトの名無しさん
2014/12/25(木) 23:25:21.45ID:hS0cw+d6>sharaed_ptrにはvirtualデストラクタが要らなくて,unique_ptrには
>virtualデストラクタが必要と言うのならその理由はなんだろう?
そりゃデリーターをtype-erasureするにはnewが要るからねぇ。
スマポのコンストラクターで例外が出るような作りを
なるべく避けたかったんだろう
0156デフォルトの名無しさん
2014/12/25(木) 23:26:09.55ID:uEY+MDR3shared_ptrのコンストラクタを見て来いよ
0157デフォルトの名無しさん
2014/12/26(金) 00:00:28.79ID:BylUSmvJポリモーフィック型にしとけよ
でないとクロスキャストできないだろ
0158デフォルトの名無しさん
2014/12/26(金) 00:03:05.35ID:8z4xGjwP何がインターフェースクラスになるの?
0159デフォルトの名無しさん
2014/12/26(金) 00:19:17.91ID:KoiWwuqz0160デフォルトの名無しさん
2014/12/26(金) 00:23:59.33ID:oJENaxkLshard_ptr<Base> obj(new Derived);
だと、スコープから抜ける時Derivedのdtorは呼ばれる
unique_ptr<Base> obj(new Derived);
だと、スコープから抜ける時Derivedのdtorは呼ばれない
sharedの場合でも
Base* obj = new Derived;
shard_ptr<Base> base(obj);
だと、スコープから抜ける時Derivedのdtorは呼ばれない
0161デフォルトの名無しさん
2014/12/26(金) 00:44:22.29ID:oJENaxkL0162デフォルトの名無しさん
2014/12/26(金) 00:55:37.19ID:rmtyj285Ptr<T_1>::Ptr(T_2 *p)
0163デフォルトの名無しさん
2014/12/26(金) 01:03:55.61ID:8z4xGjwPいまVC2013で実装追ってみたけど、平凡だったよ。
shared_ptr<base>のコンストラクタはテンプレートメソッドになっていて、derived* を渡したときは
_Ref_count<derived>という型のオブジェクトがnewされてメンバとして設定されてる。
_Ref_count<derived>のデストラクタはもちろんderivedを正しくdeleteできる。
キモは「コンストラクタがテンプレートメソッドになっている」ということだけに見えるがね。
0164KUSO KOTE ◆unko./w.Osri
2014/12/26(金) 08:26:57.02ID:JEFGxAPQshared_ptr<T>クラスのテンプレート引数は
保持するオブジェクトの型だけですが、
その型とは関係なく
コンストラクターで受け取る型に対する解放処理も保持しています。
つまりshared_ptr<base>がDerivedの解放処理を保持していることがあります。
これはtype erasureという技で実現しています(たぶん)
↓こんな感じで
class 解放処理base {
virtual void 解放(void *) = 0;
}
template<typename T> class ref_count : 解放処理base {
virtual void 解放(void *) override;
};
0165デフォルトの名無しさん
2014/12/26(金) 22:01:38.11ID:rxtr6QZyそれなら文句は言えない。
でも、俺は学校関係者だ。俺の素性も公安か、しかるべきグループでわかってん
だろうけど。
でも、マイクロソフトの
Windows7→Windows8、8.1への様変更
officeの仕様変更
DirectX9→DirectX11, 13への仕様変更
kinectの仕様変更
には我慢できない。学校関係者はこんなソフト使いたくない。C#は一応、
規格委員会があるみたいだけど、こんなに兵器で仕様を変更する企業は
信用できない。
だれか、この投稿を英文に翻訳して本社に投げてくれ。
あ、。。。社員じゃ無理か
0166デフォルトの名無しさん
2014/12/26(金) 22:08:38.70ID:bRYgZGxiよくわかってないし、確かめてもいないんだが、
> derived* を渡したときは
> _Ref_count<derived>という型のオブジェクトがnewされてメンバとして設定されてる。
だとすると、基底クラスのデストラクタにvirtualの代わりになってないような?
base→derivedという二つの関係では動くが、
base→derived→derived2以上の関係では最初と最後しか呼ばれないような?
0167デフォルトの名無しさん
2014/12/26(金) 22:15:56.05ID:y3Oe54D2~base() {}
}
class derrived : public base {
~derrived() {}
}
class derrived2 : public derrived {
~derrived2() {}
}
で
derrived2* p = newderrived2;
delete p;
delete pされたら~derrived()は呼ばれないのか?
そんなわけないだろ
0169デフォルトの名無しさん
2014/12/26(金) 22:40:26.15ID:y3Oe54D2shared_ptrの話でvirtualの有無の話をしているのではない
0170デフォルトの名無しさん
2014/12/26(金) 22:57:22.89ID:PVxYr/cwhttp://ideone.com/gtf72m
fack_ptrがもとの型を知らなくても正しくデリートできるのがミソだ
0172166
2014/12/26(金) 23:17:32.71ID:It92ug8gみんなすまん。問題ないっぽかった。
0173デフォルトの名無しさん
2014/12/26(金) 23:18:52.47ID:It92ug8gあっ…盛大にカブってしまった。ごめん。
0174デフォルトの名無しさん
2014/12/26(金) 23:37:44.75ID:It92ug8gとんくす!Uがいつの間に渡ったのかは謎だけど、
本質的には
delete static_cast<C*>(a);
これによってうまく呼んでいるようだね。
恥ずかしながら、このシンプルな挙動を今まで知らなかった。
まさかstatic_cast一発なんて。
0175デフォルトの名無しさん
2014/12/26(金) 23:40:51.91ID:It92ug8gC *c = new C;
delete c;
これでデストラクタが全部呼ばれることも知らなかった…。
ぐっはぁ…。
0176デフォルトの名無しさん
2014/12/26(金) 23:43:50.61ID:fnDLLhrS0177デフォルトの名無しさん
2014/12/26(金) 23:46:33.18ID:58vHoNCu0178デフォルトの名無しさん
2014/12/26(金) 23:51:07.06ID:RziFNgWa0179デフォルトの名無しさん
2014/12/27(土) 00:10:22.07ID:2dHAjI9Bクラス型オブジェクト志向でなくクラス定義できず、それ以外でもほぼC++ソースをそのまま実行できない。
0180デフォルトの名無しさん
2014/12/27(土) 00:12:47.00ID:fhkQhff20181デフォルトの名無しさん
2014/12/27(土) 00:15:27.39ID:rEUVsFml0182デフォルトの名無しさん
2014/12/27(土) 00:15:49.37ID:2dHAjI9B0183デフォルトの名無しさん
2014/12/27(土) 00:17:19.88ID:YyzzLTt4そういうことしてくれるプリコンパイラでも作れば
0184デフォルトの名無しさん
2014/12/27(土) 00:26:45.49ID:RAnMs1TD>クラス型オブジェクト志向でなくクラス定義できず
そこまで知ってるなら その質問は釣りだろ?
0185デフォルトの名無しさん
2014/12/27(土) 00:33:04.65ID:klGGX/zS型省略はC++に既にあるだろ
0186デフォルトの名無しさん
2014/12/27(土) 00:40:07.49ID:rEUVsFml0187デフォルトの名無しさん
2014/12/27(土) 00:40:43.90ID:iYMAmZHx0188デフォルトの名無しさん
2014/12/27(土) 00:42:02.80ID:0F6lGnH7だがもし質問者が型推論でなく
バリアントのつもりだったらどうする?
0189デフォルトの名無しさん
2014/12/27(土) 00:45:16.56ID:klGGX/zS0190デフォルトの名無しさん
2014/12/27(土) 00:45:21.76ID:iYMAmZHxdynamicを使えばいいよ
0191デフォルトの名無しさん
2014/12/27(土) 00:48:04.61ID:W6COMWk10192デフォルトの名無しさん
2014/12/27(土) 01:06:05.09ID:iYMAmZHxつうかメリットが思い浮かばない
0193デフォルトの名無しさん
2014/12/27(土) 01:50:07.09ID:cxgsLJOw変数の型が途中で変わるのは問題だけど。
javascriptは悲惨
0194デフォルトの名無しさん
2014/12/27(土) 03:08:22.79ID:2dHAjI9BC++風擬似コードでアルゴリズムを書いて動作確認もしたいのですが。
C++でいけない理由は記述量とコンパイル時間が増えるためです。
その点でJavascriptやPHPはまあまあですがC++へ直すのに手間が掛かります。
LLVM技術などでコンバートしたのではコード対応がわけわからなくなります。
clingを使ってみます。
0195デフォルトの名無しさん
2014/12/27(土) 03:37:07.98ID:As2Ip7Ibこういう馬鹿って何なんだろうと思ったけど
日本人じゃないよな。
インタプリタはもはや関係ねーよ
0196デフォルトの名無しさん
2014/12/27(土) 03:39:29.65ID:rEUVsFml型書くのだってそれ省略したら何秒稼げるんだってレベルだわ
0197デフォルトの名無しさん
2014/12/27(土) 03:45:24.81ID:YyzzLTt40198デフォルトの名無しさん
2014/12/27(土) 06:22:41.59ID:klGGX/zSあほくさ。真面目に答えて損したわ。
0199デフォルトの名無しさん
2014/12/27(土) 08:25:11.07ID:uH9r1QwEソースコードとにらめっこする時間のほうがはるかに長い
0200デフォルトの名無しさん
2014/12/27(土) 08:27:41.33ID:k+EH4nQM数十行でもえらく時間がかかることはある。
0201デフォルトの名無しさん
2014/12/27(土) 10:05:02.70ID:PS8qPAgg> 数十行でもえらく時間がかかることはある。
どんなコードよ
テンプレートとマクロ使いまくりで、30行ぐらいのコードを展開したら 30,000行ぐらいになったのを見たことあるけど、そんな奴じゃね?
0202デフォルトの名無しさん
2014/12/27(土) 10:06:23.02ID:0SDe1dTr馬鹿にこれ以上ふれないでください。
みんなの迷惑になります。
0203デフォルトの名無しさん
2014/12/27(土) 10:06:38.53ID:klGGX/zS0204デフォルトの名無しさん
2014/12/27(土) 11:18:48.99ID:UR7fgfZMビルド時間も気になってるだろうけど、一番時間がかかってるのは、デバッガの
アタッチだと思うんだよね。
IDEって大体同じものを使い続けることが多くて、ほかのものを使うことってないから、
話がかみ合わないことあると思う。
VS使ってる人は、他のも一度使ってみると良いよ。
どれだけ恵まれてるかわかるから。
0205デフォルトの名無しさん
2014/12/27(土) 12:38:34.83ID:/f2LNY7fjavaでいう
arraylist<自作クラス> al = new arraylist<自作クラス>();
al.add(new 自作クラス(ほにゃらら));
みたいなのを書きたいんですがどうすればいいんですか?
0206デフォルトの名無しさん
2014/12/27(土) 13:23:38.90ID:ObSPDQYnv.emplace_back(ほにゃらら);
0207デフォルトの名無しさん
2014/12/27(土) 13:34:55.49ID:iYMAmZHx> javascriptは悲惨
PythonとかRubyも同じバリアント(動的)型だろ
動的型の話しをしてたんだぞ
0208デフォルトの名無しさん
2014/12/27(土) 18:41:42.87ID:k+EH4nQM展開したら増えるのはズルじゃないか。
インデックスシーケンスを使いまくってたりすると、結構コンパイル時間が増えるよね?
0209デフォルトの名無しさん
2014/12/27(土) 18:56:07.48ID:szXNn9Dxさすが、マイクロソフト、Windows7 から Windows8、8.1に匹敵する仕様変更。
こんな会社の作ったソフトにいちいち付き合ってられるか!
ビル・ゲイツはここまでひどくはやらなかっただろうな
0210デフォルトの名無しさん
2014/12/27(土) 19:07:42.93ID:PS8qPAgg> 展開したら増えるのはズルじゃないか。
俺もそう思うが、他の状況が思い付かん
0211デフォルトの名無しさん
2014/12/27(土) 19:14:21.04ID:9x3jij6YExcel嫌いだが、XPの頃に比べると2013で大分マシになったと思う
0212デフォルトの名無しさん
2014/12/27(土) 20:06:00.17ID:k+EH4nQMだからインデックス・シーケンス使いまくったりしたとき、って書いてるじゃないの。
型シーケンスとかと合わせてだよ。
0213デフォルトの名無しさん
2014/12/27(土) 20:36:48.64ID:PS8qPAggそれって、
> 数十行でもえらく時間がかかることはある。
になるんか?
コード示してみてよ。
0214デフォルトの名無しさん
2014/12/27(土) 21:01:06.03ID:k+EH4nQMusing types_65536 = type_seq<type0, type1, type2, ・・・, type65535>::type;
こういう時に、下の1行だけで結構時間かかったりするから、
using type32768 = elem_type_at<32768, types_65536>::type;
ちょっと複雑なことするとなかなか帰ってこない
0215デフォルトの名無しさん
2014/12/28(日) 00:16:36.02ID:Lg3Cm6Jiおう。こんなのはじめて見た。
差し障りなければどんなとき使うのか教えて。
0216デフォルトの名無しさん
2014/12/28(日) 00:36:34.31ID:nc3me1Mq0217デフォルトの名無しさん
2014/12/28(日) 01:16:46.27ID:lSEOZgzZだけど可変長テンプレートで 0...9999999 に展開してもそれは1行だから。
0218デフォルトの名無しさん
2014/12/28(日) 01:18:56.53ID:j9UEZndf「数十行でもえらく時間がかかることはある」の例を示せばいいと思う。
0219デフォルトの名無しさん
2014/12/28(日) 01:34:37.37ID:lSEOZgzZ>>200=>>214 みたいですよ
0220デフォルトの名無しさん
2014/12/28(日) 10:14:35.85ID:eHJNmj1fで、avastに変えたら、cygwin gccで作るものをことごとく撥ねる。
もうやだ。
0221デフォルトの名無しさん
2014/12/28(日) 11:30:00.76ID:Jo+HFORJC++は記述量が多くてコンパイルは時間がかかるという認識レベルの人に対する話なのだから
constexprや可変長テンプレートを駆使すれば短いコードでも遅くなるという
その通りではあるけれど極論を持ち出されてもなあ
0222デフォルトの名無しさん
2014/12/28(日) 12:08:04.57ID:Kx1DljV80223デフォルトの名無しさん
2014/12/28(日) 12:30:20.50ID:lSEOZgzZ0224デフォルトの名無しさん
2014/12/28(日) 12:56:37.15ID:xYJMSdQX左辺値になるバグを嘆いていた人がいたけど、
警告レベルを上げると警告が出るな。
warning C4213: nonstandard extension used: cast on l-value
拡張を無効にすると標準ヘッダーさえコンパイルできない糞コンパイラ
0225デフォルトの名無しさん
2014/12/28(日) 14:52:18.53ID:lSEOZgzZああそれな。
右辺値を取りたいだけなのにstatic_castがダメ。
moveじゃ文字通りmoveされちゃうし。
template <typename T> T&& identity(T&& x) { return std::forward<T>(x); }
template <typename T> T identity(T& x) { return x; }
template <typename T> T identity(const T& x) { return x; }
ちょっと冗長だけどこれが一番効率的なのかなあ。なにか標準にあるような気もするけど。
0226デフォルトの名無しさん
2014/12/28(日) 17:25:47.33ID:vG0thnjX>moveじゃ文字通りmoveされちゃう
ちょっと何言ってるかわからんのだが。
std::move(a)
としただけではムーブされるはずもなく
0227デフォルトの名無しさん
2014/12/28(日) 17:36:17.88ID:QvuCm+lyreturn m_image;
}
あるクラスのpublicにある関数なんですが
constと&の意味を教えて下さい
0229デフォルトの名無しさん
2014/12/28(日) 17:56:43.43ID:QvuCm+ly無駄なリソースを使わずに値だけを読ませるということでいいのでしょうか
0230デフォルトの名無しさん
2014/12/28(日) 18:47:03.10ID:6Z3FAnif関数入力側引数に const + & はほぼ必須の手法だが‥
0231デフォルトの名無しさん
2014/12/28(日) 18:54:16.52ID:AQDitcxr参照先は変更しないってことでしょ
関数の引数と同じだよ?
0232デフォルトの名無しさん
2014/12/28(日) 19:06:18.49ID:UAyuklQemoveしたものをどっかに渡したら、受け取った方は資源を奪い取る可能性があるだろ。
だから左辺値を勝手にmoveするわけにはいかず、コピーを取る必要がある。
もともとが右辺値だったらそのままforwardすればいい。
その場合分けを自動的にやってくれるものが欲しいわけで。
0233デフォルトの名無しさん
2014/12/28(日) 19:09:23.91ID:B20be7Yf「勝手に変えんなハゲ」以外に答えが有るのか?
0234デフォルトの名無しさん
2014/12/28(日) 19:19:13.65ID:8FJd85Wr0235デフォルトの名無しさん
2014/12/28(日) 20:01:48.35ID:wodjdDCA0236デフォルトの名無しさん
2014/12/28(日) 20:51:24.35ID:UeK7l5/E「コピーじゃなくて保持している内部のオブジェクトに触らせてやる」
「マルチスレッドでのアクセス上等」
0237デフォルトの名無しさん
2014/12/28(日) 21:02:41.16ID:ud9CsIxkマルチスレッドだと参照の方がまずいだろ。
生成してから書き換えないならいいけど。
0238デフォルトの名無しさん
2014/12/28(日) 22:35:58.57ID:04pkC8+h0239デフォルトの名無しさん
2014/12/28(日) 23:30:08.99ID:fTdAgh8Iそういう場合はメソッドそのものもconstにするけどよく使う
const取り除いた同名メソッド二つ用意することもあるけどそれはクラスオブジェクトがconstでもconstじゃなくても同名で呼び出せるようにするため
string::begin()もそんな感じ
厳密にはconstじゃないけど、const stringのときはconst_iterator、constついてないstringオブジェクトの時はiterator返す
0240デフォルトの名無しさん
2014/12/29(月) 03:29:57.82ID:Zvu39mrsありがとうございます!
できました!
もう一つ聞きたいのですが
FloatBuffer フロバ;
arraylist <float> リスト= new arraylist<float>();
リスト.add(ほにゃらら);
…
ByteBuffer ばば = ByteBuffer.allocateDirect(リスト.size() * 4);
ばば.order(ByteOrder.nativeOrder());
フロバ = ばば.asFloatBuffer();
for ( i = 0; i < リスト.size(); i++){
フロバ.put(リスト.get(i));
}
フロバ.position(0);
こんなようなことって出来ますか?
0241デフォルトの名無しさん
2014/12/29(月) 07:57:13.86ID:R9uwHG6j> そういう場合はメソッドそのものもconstにするけどよく使う
メソッドの const は意味が違う
const にするケースが多いのは確かだけど
0242デフォルトの名無しさん
2014/12/29(月) 08:14:31.75ID:RCKTbDKZstd::vector内部の要素は連続した領域に確保されるから、
float* フロバ = リスト.data(); // または &リスト[0]
でいいんじゃないの?
もしくは リスト[i] とそのままアクセスしても効率は変わらんよ。
0243デフォルトの名無しさん
2014/12/29(月) 08:35:43.34ID:NcjyMXWK片方だけつくってconst_castはなんか違う気がするし
0244デフォルトの名無しさん
2014/12/29(月) 08:43:07.84ID:RbfS6PMdDECL DEF\
const DECL const DEF
_CONST(void func(),{return ;})
うーん・・・
0245デフォルトの名無しさん
2014/12/29(月) 09:55:34.36ID:KuYXSH39名前も引数も同じでconst有無の違うのを2つ作るの?
紛らわしいからやめとけ
0246デフォルトの名無しさん
2014/12/29(月) 09:58:33.01ID:BlWo3aSQ0247デフォルトの名無しさん
2014/12/29(月) 10:00:37.25ID:KuYXSH39データメンバーに変更を加えるメソッドはconstにできないけど
0248デフォルトの名無しさん
2014/12/29(月) 10:03:06.90ID:BlWo3aSQそれ以外のメソッドにconstなしを作るかって話でしょ?
0249デフォルトの名無しさん
2014/12/29(月) 10:05:54.36ID:NcjyMXWKstd::vectorとか典型的だけど
データメンバの参照を返さなきゃいけないメソッドなんかには結構必要になる
0250デフォルトの名無しさん
2014/12/29(月) 10:07:46.72ID:KuYXSH39ああそれならconstは無条件に付ける
0251デフォルトの名無しさん
2014/12/29(月) 10:14:49.29ID:Dgi09YwQmutableでよくね?
0252デフォルトの名無しさん
2014/12/29(月) 11:26:39.60ID:z79n6Uol何言ってんだ…?
0253デフォルトの名無しさん
2014/12/29(月) 11:37:50.70ID:+aIcAFWQ>>251
理解出来てないのに知ったかぶるのやめた方がいいよ
0254デフォルトの名無しさん
2014/12/29(月) 17:24:11.38ID:KuYXSH390255デフォルトの名無しさん
2014/12/29(月) 18:06:12.34ID:f7raGOFdというのが254の考えなのであった
0256デフォルトの名無しさん
2014/12/29(月) 18:32:58.43ID:z79n6Uolvector<char> rawdata()const
{
unique_lock lk(mutex_);
return data_;
}
のmutex_に付けるとか意味的にconstであることを維持出来る場合に使うもの。
>>243
が言ってるのはvectorのoperator[]とかat、beginみたいな物の話で全く違う。
0257デフォルトの名無しさん
2014/12/29(月) 20:49:36.52ID:4DL1BiPXコンパイラがコード生成する際に、値をコピーしないという判断が可能になる。
0258デフォルトの名無しさん
2014/12/29(月) 20:57:03.77ID:z79n6Uol可能になるって書いたらそうしなくても良いみたいに読み取れるだろ。
0259デフォルトの名無しさん
2014/12/29(月) 22:42:34.36ID:eLFvzmg+具体的には、ODBCのAPIとか、引数がconst SQLCHAR*じゃなくてSQLCHAR*になっているせいで
ユーザーコードの側でmutableとかconst_castを使うはめになってるだろ?
そういうのやめてほしいんだよ。
(詳細忘れたので名前間違ってるかも試練)
0260デフォルトの名無しさん
2014/12/29(月) 23:34:37.63ID:sxuLeXgN>ユーザーコードの側でmutableとかconst_castを使うはめになってるだろ
ライブラリが糞なためにconst_castが必要になることはあるが
mutableを使うのは何かおかしくね?
mutableなんて自分がクラスを定義する時に
ミューテックスかキャッシュに使う奴だろ
0261デフォルトの名無しさん
2014/12/29(月) 23:43:22.44ID:NcjyMXWKライブラリが糞なときはどっちかというと一時バッファにコピーして渡すほうを選ぶわ
例外出しちゃダメとかだとこれはこれで面倒だけど
糞ゆえに実際ほんとに書き換えてるかもしれんもの。
0262デフォルトの名無しさん
2014/12/29(月) 23:51:02.54ID:NJRVwBPjmainはいい加減に
int main(int argc, char const *const *argv)
を許すべき
0263デフォルトの名無しさん
2014/12/30(火) 00:11:34.57ID:/MaaffoK俺もそうしてる。
0264デフォルトの名無しさん
2014/12/30(火) 00:15:55.66ID:jrN3+PoUあんたらの言う通りだ。
オレが言いたかったことはわかってくれ。
0265デフォルトの名無しさん
2014/12/30(火) 00:16:13.97ID:39ECbyHQどんなコードを生成するかは、他にも条件がある。
0266デフォルトの名無しさん
2014/12/30(火) 01:44:21.10ID:1zc8xpv9普段からint main(int argc, const char argv[])って書いてるけど問題あるの?
0267デフォルトの名無しさん
2014/12/30(火) 03:57:45.78ID:SbfdzLBUそれだと値はread-onlyだけどポインタは変更可能になっちゃう
俺はそれを「頭隠して尻かくさず」と今から呼ぶ
0268デフォルトの名無しさん
2014/12/30(火) 04:21:16.22ID:iV8mgJ7+1 規格上保証されていない
2 互換性の無い型を使うな
const char **v = (char **)argv; //エラー
const char *const *v = (char **)argv; // OK
0270デフォルトの名無しさん
2014/12/30(火) 04:31:43.65ID:iV8mgJ7+2 argvを書き換える糞ソースはあるが
*argvや**argvを書き換える糞ソースはそんなにはないだろう
0271デフォルトの名無しさん
2014/12/30(火) 04:32:54.78ID:PFdyrfgS0272デフォルトの名無しさん
2014/12/30(火) 04:37:41.94ID:iV8mgJ7+そんなのは
int main(int argv, char *argv[]) {
魔改造(&argc, &argv);//この膣内でnew
}
でいいんじゃないの
0273デフォルトの名無しさん
2014/12/30(火) 06:56:59.46ID:f6h/n6k9長さ変えず処理すればおk
0274デフォルトの名無しさん
2014/12/31(水) 00:24:27.07ID:oy55ZnpW0275デフォルトの名無しさん
2014/12/31(水) 01:23:52.12ID:n+VO5zpKC++で文字操作に困ってないんだけど、Lua入れたら何が嬉しいの?
0276デフォルトの名無しさん
2014/12/31(水) 02:34:12.62ID:6T3zfuUi0277デフォルトの名無しさん
2014/12/31(水) 02:36:25.59ID:Imw1KDaA0278デフォルトの名無しさん
2014/12/31(水) 02:48:58.93ID:n+VO5zpK0279デフォルトの名無しさん
2014/12/31(水) 06:55:38.56ID:cgqKf6SH暗黙生成のルールは複雑だから4つ書いとけ
struct unko {
unko(unko const &)=delete;
unko(unko &&)=delete;
void operator=(unko const &)=delete;
void operator=(unko &&)=delete;
}
まさにボイラープレートとはこのことだ
0280デフォルトの名無しさん
2014/12/31(水) 23:32:45.41ID:7bpGH/R+0281デフォルトの名無しさん
2015/01/01(木) 21:34:36.43ID:n3V4qFhdこれらのインスタンスの合計が200以下になるように管理したいのですが
200×4を初めに確保してexistFlagなどで管理するべきか
200を越えないようにnew deleteするべきか
どちらが良いでしょうか
0282デフォルトの名無しさん
2015/01/01(木) 21:47:31.22ID:JXjPsVlJ後者ができるなら前者にするメリットがわからないのだが
0283デフォルトの名無しさん
2015/01/01(木) 21:58:47.29ID:aUgqaYf80284デフォルトの名無しさん
2015/01/01(木) 22:04:39.02ID:c7lZY8p60285デフォルトの名無しさん
2015/01/01(木) 22:09:10.05ID:TPRv8yF20286デフォルトの名無しさん
2015/01/01(木) 22:14:47.34ID:A86JtUaP早すぎる最適化はダメって昔から言われてるだろ
0287デフォルトの名無しさん
2015/01/01(木) 22:15:33.05ID:UD8gY9kq0288デフォルトの名無しさん
2015/01/01(木) 22:16:04.26ID:fLF7bH9QABCDのunionのメモリを200個静的に確保して
カスタムアロケーターで管理だな。
だが素人にはオススメできない。
0289デフォルトの名無しさん
2015/01/01(木) 23:28:17.98ID:5bVQoG0Q0290デフォルトの名無しさん
2015/01/01(木) 23:57:28.12ID:flJTiBeb実際業務で扱う場合はnewではなくてスマートポインタが当たり前だったりする?
0291デフォルトの名無しさん
2015/01/02(金) 01:01:42.01ID:jkIjgD0V0292デフォルトの名無しさん
2015/01/02(金) 01:43:11.89ID:7+k4tJMbありがとうございます
vector+スーパークラスのスマートポインタでインスタンスを管理することに決めました
もう一つ質問なのですが
Controlerクラスが、A,B,C,D4つの派生元であるスーパークラスSのスマートポインタのvectorを持っているとして
Controlerがあるインスタンスを実行中にそのインスタンスからBのインスタンスを作りたいとなったとき
インスタンスを作成できるのはポインタを持っているControlerなので、Controlerに確保する関数を作って
Controlerの参照をインスタンスに渡して確保する関数を実行するということになるのでしょうか?
これだと呼び出し先が呼び出し元を呼び出して何か違う気がしました
0293デフォルトの名無しさん
2015/01/02(金) 08:18:56.48ID:2SopZcG5インスタンスの所属に関する良くある問題だと思う。
あなたの用途には当てはまらないかもしれないが、複数のControllerが存在し得て、
それぞれが200個までのA,B,C,Dを持てる場合には、どういう設計になるだろうか?
Controllerがシングルトンなのであれば、それを取得するグローバル変数 or 関数を
用意すれば、Controllerを引き回さなくて済むだろう。
0294デフォルトの名無しさん
2015/01/02(金) 10:19:55.57ID:6s3QU+2UControllerクラス(l一個多い?)が確保してるインスタンスをループで逐次実行するような作りなのかな?
引数で渡すか、インスタンスに変数で持たせるか、シングルトンやグローバル変数でアクセスするかってところだな
0295デフォルトの名無しさん
2015/01/02(金) 12:35:01.81ID:F7Nf/+TCnewかスマートポインタか、という比較は意味不明だな
newはメモリの獲得方法、スマートポインタはその開放忘れを防ぐ仕組みを持つ型の事だろ
0296デフォルトの名無しさん
2015/01/02(金) 12:52:35.55ID:5Yq30nMG0297デフォルトの名無しさん
2015/01/02(金) 13:15:09.87ID:7+k4tJMbControllerは実質シングルトンなのでアクセスさせる関数をグローバルに用意することにしました
ありがとうございます
0298デフォルトの名無しさん
2015/01/02(金) 13:24:49.90ID:4efdvCq8for_each(v.begin(),v.end(),[](int& n){ n *= 3; });
for_each(v.begin(),v.end(),[](int n){ cout << n << endl; });
このfor_eachの[](int& n)や[](int n)の部分がよくわからないです。
なんで( )の前に[ ]がつくのか、参照で値を渡してるのか渡してない時もあるのか。
たまに[&]な時もあったり、とにかくfor_eachがよく分からないので教えて下さい・・・
0299デフォルトの名無しさん
2015/01/02(金) 13:34:12.89ID:zzU87XUx0300デフォルトの名無しさん
2015/01/02(金) 13:46:21.12ID:7JlS4zBvget_inf_file(InfFile); // ←ここでInfFileにファイル名が入る。
_tprintf(_T("%s\n"), InfFile); // 文字化けする。
printf("%s\n", InfFile); // 文字化けしない。
誰かが作ったget_inf_file(TCHAR * InfFile)という関数があり、実行すると
_tprintfで表示すると文字化けして、printfだと文字化けしないのですが
意味がわかりません。TCHARなのだから_tprintfを使うのではないのでしょうか
実際にこの関数を使わないで文字リテラルを指定すると文字化けしません。
0301デフォルトの名無しさん
2015/01/02(金) 13:50:58.27ID:A83rtBgHVisual C++と理解したけど
#include <clocale>
#include <tchar.h>
_tsetlocale(LC_CTYPE, _T(""));
しても文字化けする?
0302デフォルトの名無しさん
2015/01/02(金) 13:56:47.60ID:7JlS4zBv文字化けします。
_tsetlocale(LC_ALL, _T("Japanese_Japan.932"));を指定してたのを_tsetlocale(LC_CTYPE, _T("")); にしました
0303デフォルトの名無しさん
2015/01/02(金) 14:01:08.04ID:7UbCEqjn0304デフォルトの名無しさん
2015/01/02(金) 14:06:48.36ID:A83rtBgHならget_inf_fileがおかしいんだろう。
UnicodeビルドでUTF-16が入るべき所に
シフトジスが入ってるとみた。
printf("%04X", InfFile[0]&0xffff)
が二桁になってるだろ?
0305デフォルトの名無しさん
2015/01/02(金) 14:12:02.67ID:F7Nf/+TC0306デフォルトの名無しさん
2015/01/02(金) 14:33:20.81ID:7JlS4zBvまじっすか、そんなこともあるんですね
作ったのが外人なので、なかなか直してももらえないと思うのですが
変換とかできるのでしょうか、VSだとコンパイル時にシンタックスエラーになるのですが
0307デフォルトの名無しさん
2015/01/02(金) 14:45:56.25ID:F7Nf/+TCまず、自分のプロジェクトはunicodeなのかansiなのか
関数が充填したパス文字列は、バイト配列としての中身がunicode文字列なのかansi文字列なのか
0308デフォルトの名無しさん
2015/01/02(金) 14:48:01.53ID:9E+XPI9z要するに、
get_inf_file(char * InfFile)
実際にはこういう定義で、マルチバイト固定で作られてるので
自アプリがUnicodeビルドならUnicodeに文字コード変換する処理を
かましてやればいい
0309デフォルトの名無しさん
2015/01/02(金) 14:54:46.06ID:7JlS4zBvなるほど
英語圏の人はそこらへんいいかげんなのかもしれませんね
やってみます
0310デフォルトの名無しさん
2015/01/02(金) 16:51:47.96ID:F7Nf/+TC世界中の物の単位がインチやマイル、ポンド、華氏、だと思ってるしそれを外国人に押し付けてくる
0311デフォルトの名無しさん
2015/01/02(金) 17:11:39.19ID:2SopZcG5桁区切りはカンマ、小数点はピリオドだと思い込んでるし、tm_isdstの確認もしない。
0312デフォルトの名無しさん
2015/01/02(金) 17:53:40.11ID:SdwiTPDPいずれ慣れるんだろうけど
0313デフォルトの名無しさん
2015/01/02(金) 18:10:23.94ID:F7Nf/+TCソース書く人は開発者の端くれだから、C/C++ソースが米国文化をデフォルトとするのはそう言うものだとおもってたんじゃないかな
数値や年月日書式はOSやライブラリでも面倒見てくれたし
0314デフォルトの名無しさん
2015/01/02(金) 18:21:32.55ID:lBKtUQs00315デフォルトの名無しさん
2015/01/02(金) 18:31:24.40ID:U8M1VAWr本多勝一さんが、ずっと前からそう主張されて
いますね。わたしも同感です。
日本語の記数法からいって、4桁が合うと思います
0316デフォルトの名無しさん
2015/01/02(金) 20:04:31.50ID:mlj15zVW日本語ではね
英語圏ではサウザンド、ミリオン、ビリオンの世界だから3桁がいいんだろうけど
0317デフォルトの名無しさん
2015/01/02(金) 20:15:50.21ID:buPBY5a2日本では確かに4桁の方がわかりやすいけど、
混同しないように別の記号にした方がよさそうだね。
0318デフォルトの名無しさん
2015/01/03(土) 00:43:47.56ID:/WOuYfDaSI単位使わないじゃあねえか。
いつまで、インチ、フット、ポンド使うつもりなんだ! liars!
0319デフォルトの名無しさん
2015/01/03(土) 00:48:50.05ID:4e+tzVBFシャネッス
0320デフォルトの名無しさん
2015/01/03(土) 00:56:34.82ID:Z3HMQ9o8日本に対してだけではない
アメリカ人は世界中がアメリカと同じ文化で生活してると思ってる
0321デフォルトの名無しさん
2015/01/03(土) 01:15:07.40ID:kbrpwiZV0322デフォルトの名無しさん
2015/01/03(土) 02:15:38.61ID:2MH2vTPIイギリス人の頭の古さには脱帽する
イギリス=後進国
0323デフォルトの名無しさん
2015/01/03(土) 02:18:41.65ID:AuGuhWCh0324デフォルトの名無しさん
2015/01/03(土) 02:23:04.51ID:AuGuhWCh逆に英語はコンピューターに向いてる
0325デフォルトの名無しさん
2015/01/03(土) 02:57:12.14ID:kbrpwiZVと思っていた時期もあったような
0326デフォルトの名無しさん
2015/01/03(土) 03:03:05.64ID:pcdNaXmhhttp://www.entis.jp/doc/japanese/
0327デフォルトの名無しさん
2015/01/03(土) 03:26:48.71ID:AuGuhWChつうか文法を全く説明してないしw
まじめにやったら結構大変な分野だろうけど
0328デフォルトの名無しさん
2015/01/03(土) 04:37:47.93ID:UGnRQrnS0329デフォルトの名無しさん
2015/01/03(土) 04:40:19.30ID:Cj8CgFQv0330デフォルトの名無しさん
2015/01/03(土) 04:41:53.98ID:UGnRQrnSそんな簡単だったんですね
0331デフォルトの名無しさん
2015/01/03(土) 23:18:32.07ID:Mi3y7m+Bでも、SI単位系だと3桁区切りなんだよなぁ
0332デフォルトの名無しさん
2015/01/04(日) 00:28:41.62ID:WmAHCkndconst char* const first0 = &hoge[ 0 ];
const char* const last0 = &hoge[ 3 ];
const char* const first1 = &hoge[ 5 ];
const char* const last1 = &hoge[ 9 ];
strcmp???( first0, last0, first1, last1 );
こんな感じで二組の文字列の範囲から辞書順比較する方法おしえてください
本多勝一氏か‥
懐かしい名前だね‥
氏の「日本語の作文文法」の特に読点に関する考察はなかなか示唆に富むものだったが‥
しかし、あの体臭はどうにかならんかねえ‥ポルポトを擁護したという過去は忘れてあげるからさあ‥
0334デフォルトの名無しさん
2015/01/04(日) 01:14:59.66ID:JaJcpRWI自分でコードを書く
以上
0335デフォルトの名無しさん
2015/01/04(日) 01:16:25.64ID:WmAHCkndそういうのは別にいらないので消えてください
0336デフォルトの名無しさん
2015/01/04(日) 01:25:27.23ID:cj3MqVPN写真捏造の人だよね
0337デフォルトの名無しさん
2015/01/04(日) 01:30:12.10ID:0uOcaWII質問の意味がよくわからん
0338デフォルトの名無しさん
2015/01/04(日) 08:35:31.27ID:99+RPTin比較アルゴリズムをしたい→スレ違いだ
ライブラリありませんか→ねーよ
それは違うね‥
0340デフォルトの名無しさん
2015/01/04(日) 13:09:46.78ID:+b+eo/V4それも規格でどっちでもいいことになってて結構あいまいさ残ってる
あとlong scale、short scaleアジア圏でも万進、万万進、ベトナム式下数とか数の問題は複雑
0341デフォルトの名無しさん
2015/01/04(日) 13:11:09.63ID:XPPzqmKUソースは?
0342デフォルトの名無しさん
2015/01/04(日) 13:16:11.02ID:+b+eo/V4聞く前にググればすぐ出てくる
とりあえず
http://www.s-yamaga.jp/opinions/doryoko.htm
>日本は英米流で小数点には<.>派で、<,>は位取りに使っているが、仏独など多くの国では小数点は<,>で、<.>は位取り(位取りのため空白を使う場合もある)である。
>2003年10月にパリで開かれた国際度量衡会議でこの問題が検討された。
>17日の1国1票の投票の結果、「小数点は<,>か<.>のどちらかである」とすることで(つまりどちらでもよいということで)、当面の決着がついた。
0343デフォルトの名無しさん
2015/01/04(日) 13:20:42.93ID:+b+eo/V4・位取りはなるべく空白を使うこと(カンマでもピリオドでもない)
ただし強制ではない
・小数点は、カンマでもピリオドでもよい
というものだった
0344デフォルトの名無しさん
2015/01/04(日) 13:29:23.35ID:TMi+DxjAVB6やC#/VBのFormat関数はデフォで小数点記号考慮してくれるけど、C++ではOS設定を見て自前処理だ
0345デフォルトの名無しさん
2015/01/04(日) 13:31:24.47ID:pqc5lw4y123,45 なら、何とか分かるけど
123.456 は小数なのか位取りなのか判断できないことになるね?
0346デフォルトの名無しさん
2015/01/04(日) 13:39:40.70ID:TMi+DxjAThreadCultureをニュートラルにいちいち設定しないといけないし、あ、VB/C#の話ね
0347デフォルトの名無しさん
2015/01/04(日) 13:41:50.88ID:HIHn1oXxC#でXMLを生成すんのに自前で変換すんなタコ
0348デフォルトの名無しさん
2015/01/04(日) 14:41:25.06ID:LHqo9g84戻り値が bool で良ければ lexicographical_compare
0349デフォルトの名無しさん
2015/01/04(日) 14:49:44.93ID:cj3MqVPNいやあってるよ
朝日らしく捏造ではなく誤用だという形で
本人も認めてるよ
0351デフォルトの名無しさん
2015/01/04(日) 15:25:04.85ID:FkvmMkr7へー こんなのあるんだ。
今までは長さの min() とって memcmp() してた。
0352デフォルトの名無しさん
2015/01/04(日) 15:32:55.25ID:UrD0d14K優秀な人がたくさん集まったスレッドなんですね
0353デフォルトの名無しさん
2015/01/04(日) 15:40:14.36ID:B3IvvgpA0354デフォルトの名無しさん
2015/01/04(日) 15:51:23.91ID:VyogYpyR>>348と>>351はQの自演だぞ
0355デフォルトの名無しさん
2015/01/04(日) 18:54:03.72ID:ZWEZbTe4a = a - b;
a = a + b;
みたいな感じにしたいのですが
今だと,下みたいにやってます
もっと簡潔にかけませんか?
set<int> a = { 1, 2, 3, 4 };
set<int> b = { 3, 4, 5, 6 };
set<int> c;
set_difference(a.begin(), a.end(), b.begin(), b.end(), inserter(c, c.end()));
a.clear();
copy(c.begin(), c.end(), inserter(a, a.end()));
for (int i : a) {
cout << i << " ";
}
cout << endl;
0356デフォルトの名無しさん
2015/01/04(日) 19:10:46.28ID:FLoKSBkbboost::range版ならset_difference(a, b, inserter(c, c.end()));と書ける。
あとはa.swap(c);としたほうが簡単速い。 これ以上短くしたいなら関数にまとめる。
0357デフォルトの名無しさん
2015/01/04(日) 19:16:50.27ID:L6fkGxZkググりゃ転がってそう
0358デフォルトの名無しさん
2015/01/04(日) 19:37:56.46ID:VX3mvVTy試してないけど、↓これじゃダメなの?
for(int i; b) { a.erase(i); } // a = a - b
a.insert(b.begin(), b.end()); // a = a + b
0359デフォルトの名無しさん
2015/01/04(日) 20:06:04.40ID:LHqo9g84これより簡潔にしたいなら自分でラッパーなり書くしかないと思うお…
0360デフォルトの名無しさん
2015/01/04(日) 20:30:47.31ID:LHqo9g84コンテナを受け取るラッパー関数書くだけで意外とすっきりしたお
https://ideone.com/YikJPu
0361355
2015/01/04(日) 20:58:50.58ID:ZWEZbTe4競プロで書いているときにbeginとかendを書くのが大変だったので
なにか楽な方法を探してました
a.swap(c)とかa.insert(b.begin(), b.end())は全然思いつかなかったので参考になりました.使わせてもらいます
とりあえず他のintersectionとかはラッパ書いて処理してみます
ありがとうございました
0362デフォルトの名無しさん
2015/01/04(日) 22:30:48.07ID:kU4tFNpUなるほど、確認した。半年前の話か‥
0363デフォルトの名無しさん
2015/01/05(月) 22:33:25.30ID:f33/Q9TDほぼコピペだが記念に貼っとく
http://ideone.com/GVpGlQ
0364デフォルトの名無しさん
2015/01/06(火) 01:36:28.96ID:vDyOmCN+0365デフォルトの名無しさん
2015/01/06(火) 14:33:17.28ID:SaW7LnEXフラグメンテーション起こさないようにするためにはどっか別に固定領域を確保してそっからデータ持ってくるようにしないと
ダメでしょうか?
0366デフォルトの名無しさん
2015/01/06(火) 14:40:08.17ID:C2mmH5Le0367デフォルトの名無しさん
2015/01/06(火) 18:04:47.26ID:22vat4mdマークアンドスイープ方式のガベージコレクションをしてないだけで
0368デフォルトの名無しさん
2015/01/06(火) 18:34:47.65ID:0kbQZJFE0369デフォルトの名無しさん
2015/01/06(火) 19:11:45.23ID:XxVOSZ3zしかし、時代はGCじゃないよねぇ。時代は参照カウントだよ。
C++11でも、shared_ptrが追加されたし。
シンタックスがどんどん汚くなっていくのはC++の悲しいところだな。
0370デフォルトの名無しさん
2015/01/06(火) 19:24:03.99ID:Ey7XFEeMへー、そいつは凄いな
0371デフォルトの名無しさん
2015/01/06(火) 22:59:26.61ID:Y26C2d1q0372デフォルトの名無しさん
2015/01/06(火) 23:01:02.23ID:a1JT3SDg遅くなりましたがあなたのお陰で解決しました。ありがとうございます!
0373デフォルトの名無しさん
2015/01/06(火) 23:11:59.71ID:Z2lMmRuz標準ライブラリは「constメンバ関数=マルチスレッド対応」で統一していたはずだが
0374デフォルトの名無しさん
2015/01/06(火) 23:53:02.99ID:kiKfNKwrシンタックスそんなに汚いかなあ、C++11
0375デフォルトの名無しさん
2015/01/07(水) 00:17:19.84ID:Y9yyLQNcじゃあ、コピーコンストラクタや代入演算子はダメなのかねー。
スマポの魅力半減。
昔、参照カウンタ方式のstringでエライ痛い目みたからなー…
0376デフォルトの名無しさん
2015/01/07(水) 00:20:45.94ID:A8Vu2ukb代入はだめだろ
けどコピーコンストラクタは、仮にもコンストラクタだし、オブジェクトを構築してるスレッド以外から手の触れようがないと思うが
0377デフォルトの名無しさん
2015/01/07(水) 00:23:58.83ID:J9Js0gVSマルチスレッドでどれだけ参照を増やそうが減らそうがdeleteされなかったり2重deleteしたりしない
0378デフォルトの名無しさん
2015/01/07(水) 07:10:13.57ID:Re9e7Fnn0379デフォルトの名無しさん
2015/01/07(水) 09:05:13.51ID:DkZd7T6Dttp://faithandbrave.hateblo.jp/entry/20130328/1364463249
同じshared_ptrに対する更新などの操作をデータ競合を発生させずに行うためのものも提供されてる
ttp://en.cppreference.com/w/cpp/memory/shared_ptr/atomic
0380デフォルトの名無しさん
2015/01/07(水) 09:13:45.90ID:v+HQiVT1型がTなのでより進化してるけど
0381デフォルトの名無しさん
2015/01/07(水) 13:47:42.98ID:rq5tkzs4それと所有するオブジェクト自体を複数のスレッドから操作する場合はmutexが必要になると。
0382デフォルトの名無しさん
2015/01/07(水) 22:03:50.34ID:YcQby5xYお前の脳内定義で保証されても
0383デフォルトの名無しさん
2015/01/08(木) 02:00:31.36ID:AWCwNpvrわざわざ解説書いてるリンク張ったのに理解できなかったのかな?
0384デフォルトの名無しさん
2015/01/08(木) 02:11:41.75ID:5JSA30KWわざわざ解説書いてるリンク張ったのに理解できなかったのかな?
0385デフォルトの名無しさん
2015/01/08(木) 05:54:17.11ID:5XvFQQU/複数のDIBファイル、通称ビットマップファイル、から
無圧縮aviファイルにする方法教えてください
2ギガ以上書き込みたいです
ホームページを探してもみつかりませんでした
0386デフォルトの名無しさん
2015/01/08(木) 12:58:11.16ID:hmv0dwlGDIBやaviのフォーマットは検索すれば見つかるだろ。
後はそれを実装するだけだ。
それがめんどくさい? 当たり前だ、その手間を省く為にライブラリーがあるんだから。
0387デフォルトの名無しさん
2015/01/08(木) 13:08:02.49ID:5XvFQQU/もうみつけたんですけど、
ウインドウズ固有のソースで読みにくいんだよね
ウインドウズは本当に害ですね
0388デフォルトの名無しさん
2015/01/08(木) 13:25:59.97ID:ycTR+1MK0389デフォルトの名無しさん
2015/01/08(木) 20:06:08.43ID:5XvFQQU/なのでもう一つ教えてください
ofstreamでオープンモードを読み込みにしたり書き込みにすることの
意味を教えてください
0390デフォルトの名無しさん
2015/01/08(木) 21:39:03.88ID:EP4BCdt8では教えてやろう
「ボクはバカです」
わかったらもう来るな
0391デフォルトの名無しさん
2015/01/09(金) 01:49:38.56ID:bQFLimh00393デフォルトの名無しさん
2015/01/09(金) 08:16:29.86ID:zK+nkrjj0394デフォルトの名無しさん
2015/01/09(金) 09:15:52.74ID:+YxGEmiz調べたところこのような感じのことがネットに出ていたのですが、間違いないでしょうか
・systemではウィンドウを非表示にできない。
・ShellExecuteでは終了待ちができない。
・CreateProcessでは32bitから64bitを呼び出せない。
0395デフォルトの名無しさん
2015/01/09(金) 09:20:52.80ID:Y0WqIXzkWin32API質問箱 Build11
http://peace.2ch.net/test/read.cgi/tech/1418181169/
0396デフォルトの名無しさん
2015/01/09(金) 18:58:31.35ID:BbdtG7U632ビット(32-bit)のこと?
0397デフォルトの名無しさん
2015/01/10(土) 04:12:57.15ID:UxwFWFbBmjd?
ソースは?
0398デフォルトの名無しさん
2015/01/10(土) 06:35:20.82ID:FA75abzu0399デフォルトの名無しさん
2015/01/10(土) 08:15:50.16ID:ne+P9AZV0400デフォルトの名無しさん
2015/01/10(土) 08:48:42.20ID:G15R7o4E証明だから、プログラミングから手を引いた方が幸せになれるよ。
0401デフォルトの名無しさん
2015/01/10(土) 12:29:41.92ID:fcdmAEW8引退宣言かな
0402デフォルトの名無しさん
2015/01/11(日) 00:10:12.68ID:6BuzDaMrlongはintと同じかintより広い範囲の数値を表現できる
longはどんなコンパイラーでも-2147483647〜2147483647を表現できる
コンパイラーによるがたいてい4バイトか8バイト
例え同じサイズでも別の型なのでint *とlong *は互換性が無い
0403デフォルトの名無しさん
2015/01/11(日) 02:01:29.39ID:vgCazd4z(i&0x01) == 0;
と
((i+1)&0x01) == 0x01;
って同値だよなぁ・・・?
0404デフォルトの名無しさん
2015/01/11(日) 05:09:34.24ID:6BuzDaMr0405デフォルトの名無しさん
2015/01/11(日) 05:38:49.31ID:wv9edWGyint8_tポインターにreinterpret|castするとuint8_t[4]にリトルエンディアン
で並べたuint32_tデータになりますが、
これを全マシーンでやるには
uint32_tのLSByteからMSBbyteまでをビット演算子でuint8_t[4]に
コピーしなければなりません。
これは非効率です。
それなのでエンディアンを判別して場合分けするのが効率的と思いますが
みなさんはどのようにお考えなのでしょうか?
0406デフォルトの名無しさん
2015/01/11(日) 05:44:07.92ID:wv9edWGyusing namespace std;
void b(char * x){
cout<<static_cast<int>(x[0])<<endl;
cout<<static_cast<int>(x[1])<<endl;
cout<<static_cast<int>(x[2])<<endl;
cout<<static_cast<int>(x[3])<<endl;
}
int main() {
int a;
b(reinterpret_cast<char *>(&static_cast<int>(1)));
a=1;
b(reinterpret_cast<char*>(&a));
return 0;
}
のようなコードで2-番目のbの呼び出しはaに値をコピーする効率が悪いので
1-番目のように直接値を渡したいのですができません。
0407デフォルトの名無しさん
2015/01/11(日) 05:59:55.85ID:6BuzDaMr>これは非効率です
そうか? 完全なコードだから精神衛生上いいだろ。
第一、バイトオーダーを意識するのはファイルI/Oや通信の時だけで
そんなに性能にシビアなケースは極めてまれでは
void b(int const &x);
cout<<static_cast<int>(1)<<endl;
cout<<static_cast<int>(a)<<endl;
0408デフォルトの名無しさん
2015/01/11(日) 06:50:52.79ID:6BuzDaMrvoid b(int const &x)
{
auto *p = reinterpret_cast<unsigned char *>(&x);
cout<<static_cast<int>(p[0])<<endl;
}
0409デフォルトの名無しさん
2015/01/11(日) 07:11:04.07ID:/K47z1BX0410デフォルトの名無しさん
2015/01/11(日) 07:32:00.10ID:6BuzDaMrそんなことより↓この程度の関数作るのがそんなに面倒なのか
void b(int const &x, char out[4]) {
out[0] = static_cast<char>(x>>24);
out[1] = static_cast<char>(x>>16);
out[2] = static_cast<char>(x>>8);
out[3] = static_cast<char>(x>>0);
}
int a(char t[4]) {
auto *in = reinterpret_cast<unsigned char *>(t);
return (in[0]<<24) | (in[1]<<16) | (in[2]<<8) | (in[3]<<0);
}
0411デフォルトの名無しさん
2015/01/11(日) 08:15:07.21ID:K+Zx5WuEポインタや参照はあくまでもint32_tで扱って、値として解釈するときにuinl8_tにキャストすればいい
LANのプロトコル変換はみんなそうしてるし
0412デフォルトの名無しさん
2015/01/11(日) 08:48:35.05ID:ahE2N+rE処理内容が同じなら関数使い回しですねわかります
NWプログラムに限定してないのに環境依存の関数をホイホイ持ち込むなよ
0413デフォルトの名無しさん
2015/01/11(日) 09:17:58.13ID:wv9edWGy静的にエンディアンを調べる関数作ってつくれませんか?
reinterpret_castはconstexprに対応してないので無理ですか?
0414デフォルトの名無しさん
2015/01/11(日) 09:48:15.71ID:2TgcD1grで検索すると最初に出てくるのでは?
0415デフォルトの名無しさん
2015/01/11(日) 10:29:54.82ID:wv9edWGy0416デフォルトの名無しさん
2015/01/11(日) 11:10:16.45ID:wv9edWGyusing namespace std;
static constexpr union { // C++11
int one;
char isLittle;
} endian2 = {1};
static constexpr int endian4 = 1;
int main() {
static_assert(endian2.isLittle,"a");
static_assert( *(reinterpret_cast<const char *>(&endian4)),"b");
return 0;
}
5番目に出てきたやつもエラー
0417デフォルトの名無しさん
2015/01/11(日) 11:16:06.50ID:3ahz/Tk9#include <iostream>
using namespace std;
void b(const char * x){
cout<<static_cast<int>(x[0])<<endl;
cout<<static_cast<int>(x[1])<<endl;
cout<<static_cast<int>(x[2])<<endl;
cout<<static_cast<int>(x[3])<<endl;
}
int main() {
static const int a = 1;
b(reinterpret_cast<const char*>(&a));
return 0;
}
でいいだろ。
0418デフォルトの名無しさん
2015/01/11(日) 11:44:40.56ID:pJY5lLXpmyMap.erase(it++);
後置インクリメントだと最初にitのコピーとるからOKってのは
こいつらのイテレータって実際のところ現在要素へのポインタに加えて次の要素へのポインタも常に所持してるってこと?
0419デフォルトの名無しさん
2015/01/11(日) 12:53:48.13ID:pJY5lLXpmyMap.erase(it++);
は結局後置インクリメントもどき(演算子オーバーロード)だからit++の副作用完了点がはっきりしていてOKなだけで
元々の後置インクリメントの仕様に従うなら
itTmp = it++;
myMap.erase(itTmp);
でないと不自然なのか…
なんでC++11がmapのeraseでイテレータを返すようになったのか分かったわ
0420デフォルトの名無しさん
2015/01/11(日) 12:59:35.81ID:pJY5lLXp0421デフォルトの名無しさん
2015/01/11(日) 13:20:07.13ID:JubpmIiZ++it;
map.erase(e);
これと同じ
eraseしたときにそのiteraterだけ無効になる場合は問題ないってだけ
vectorはそうじゃないからダメ。
C++11でiterater返すようにされたのはコンテナのインターフェースを統一する為じゃない?
0422デフォルトの名無しさん
2015/01/11(日) 13:47:43.02ID:K+Zx5WuEint is_big_endian(void)
{
union {
uint32_t i;
char c[4];
} bint = {0x01020304};
return bint.c[0] == 1;
}
0423デフォルトの名無しさん
2015/01/11(日) 15:38:36.63ID:SsF5QjFe03で脳みその進化とまってるの?
0424デフォルトの名無しさん
2015/01/11(日) 15:49:17.75ID:q6k5ufXA>マクロしか出てこないんですけど
constexpr auto is_little_indian_byte_order() -> bool {
return そのマクロの結果;
}
わかったら二度と来るな
0425デフォルトの名無しさん
2015/01/12(月) 00:04:05.36ID:niAqRLwj理解するにはどうしたらよいですか?
0426デフォルトの名無しさん
2015/01/12(月) 00:09:39.01ID:Zdz3bMQt右に置けるのが右辺値
0427デフォルトの名無しさん
2015/01/12(月) 00:23:12.35ID:Aen7KAsb右辺値と右辺値参照は全く別の直交する概念なのに区別が付いていない
0428デフォルトの名無しさん
2015/01/12(月) 00:25:26.47ID:Zdz3bMQt0429デフォルトの名無しさん
2015/01/12(月) 00:34:40.73ID:UKDDVsgKstruct X {};
X x; // 明示的に自動ストレージ上に確保
X *x = new X; // 明示的に動的ストレージ上に確保
auto return_object_function(){
X x;
return x;
}
X x = return_object_function(); // 関数から戻る途中に非明示的に確保されたオブジェクト、または関数から抜けた後には寿命が尽きるオブジェクトが存在する。
↑これへの参照。
その辺が何となく分かってきたらついでにstd::moveやstd::forward周りに目を向けていくとかで。
0430デフォルトの名無しさん
2015/01/12(月) 00:39:20.05ID:Aen7KAsb右辺値参照ってのは型の用語
変数や式には型がある
右辺値ってのは式の分類の用語
分類には左辺値(lvalue)と右辺値があって、右辺値にはxvalueとprvalueがある
例えばint &&a=0; b=a;の二つ目のaは型が右辺値参照型(int &&)で、式の分類が左辺値(lvalue)だ
int f(); f();の二つ目のf()は型がintで、式の分類が右辺値(prvalue)だ
0431デフォルトの名無しさん
2015/01/12(月) 00:54:16.61ID:Aen7KAsb左辺値参照型(X &)の変数は参照初期化時に右辺値(lvalue)を受け取れる
非参照型(X)の変数は初期化時に(コピーする事で)何でも受け取れる
例外的にconstな左辺値参照型(const X &)の変数は右辺値も左辺値も受け取れる
0432デフォルトの名無しさん
2015/01/12(月) 01:20:01.94ID:sbycDOHU0433デフォルトの名無しさん
2015/01/12(月) 08:16:50.67ID:J2tnL5cC屋上屋かさねた割には整然としたルールだな
例外も多いんだろうか
0434デフォルトの名無しさん
2015/01/12(月) 08:53:03.53ID:wfmgjEuFwが初めにつくのはワードdwが付くのはdwということはわかるんですけど
ワードでもnがついていたりcbが付いていたりするのもあります。
何を意味するのかおしえてください
0435デフォルトの名無しさん
2015/01/12(月) 08:58:58.23ID:XyI4+M3+飾りです。気にする必要はありません。
0436デフォルトの名無しさん
2015/01/12(月) 09:00:40.68ID:wfmgjEuF0437デフォルトの名無しさん
2015/01/12(月) 09:19:12.95ID:6zu7sfus0438デフォルトの名無しさん
2015/01/12(月) 09:20:38.53ID:mp+hxBsF「ハンガリアン記法」で調べろ。
答えだけ書くと、n は 「数」で、cb は「バイト数 (count in bytes)」だな。
0439デフォルトの名無しさん
2015/01/12(月) 09:40:33.97ID:wfmgjEuF#include <iostream>
using namespace std;
class A{
public:
virtual void print(){
cout<<"A"<<endl;
}
};
class B:public A{
public:
void print(){
cout<<"B"<<endl;
}
};
int main() {
B b;
A &a =b;
b.print();
a.print();
// your code goes here
return 0;
}
出力
B
B
となるのはなぜでしょう?
B
A
になるはずなんですが
0440デフォルトの名無しさん
2015/01/12(月) 09:44:13.76ID:9hDSjIUk0441デフォルトの名無しさん
2015/01/12(月) 09:50:13.80ID:J2tnL5cC0442デフォルトの名無しさん
2015/01/12(月) 12:23:36.08ID:idPPFXw9勝手にvirtualになる糞言語だから
0443デフォルトの名無しさん
2015/01/12(月) 13:10:17.65ID:M7RGznEr継承による多態はポインタだけでなく参照のときでも機能するから
というレベルの話ではなかろうか
0444デフォルトの名無しさん
2015/01/12(月) 13:14:24.87ID:8uRWmwlS俺もフツーにそういう話かとおもったが…
0445デフォルトの名無しさん
2015/01/12(月) 13:54:49.26ID:ytosSIWd何でですか?
0446デフォルトの名無しさん
2015/01/12(月) 13:58:14.39ID:ytosSIWd右辺値参照なんていうのはc++だけの
文法ですか?他の言語にもこんな変な
文法有りますか?
c#には、こんなの無いように思うんですが。
どうしてc++はこんな変な方向に
拡張されて行くんですか?
0447デフォルトの名無しさん
2015/01/12(月) 14:32:57.40ID:XyI4+M3+0448デフォルトの名無しさん
2015/01/12(月) 14:41:52.32ID:mp+hxBsF煽っているように見えて、真実なんだよなぁ
0449デフォルトの名無しさん
2015/01/12(月) 17:54:30.45ID:wfmgjEuF#include <iostream>
using namespace std;
template<typename T>
void print(T a){
cout<<a<<endl;
}
template<typename... T>
void print(T a,T... b){
cout<<a<<endl;
print(b...);
}
int main() {
print(1,2,3,4);
return 0;
}
このように可変引数でそれぞれの引数の型をTに統一したい場合どうやって書けばいいのでしょうか?
上のようにやるとエラーになります。
0450デフォルトの名無しさん
2015/01/13(火) 03:23:48.60ID:2zJXl9HCtemplate <typename T>
void print( T a )
{
std::cout << a << std::endl;
}
template <typename Head, typename ...T>
void print( Head a, T... b )
{
std::cout << a << std::endl;
print( b... );
}
int main()
{
print( 1, 2, 3, 4 );
}
じゃあかんのか。型を統一したいというが、それであれば可変長テンプレート引数を用いるのは間違いな気がする(テンプレート引数というのは基本的に型を実引数に受け取るものだ。)
0451デフォルトの名無しさん
2015/01/13(火) 03:24:16.56ID:2zJXl9HC#include <iostream>
template <typename Head, typename ...T>
struct print {
void operator()( Head a, T... b ){
std::cout << a << std::endl;
print<T...>{}( b... );
}
};
template <>
struct print<int> {
void operator()( int a ){
std::cout << a << std::endl;
}
};
// 実使用部.
template <typename ...T>
void serial_print( T... a ){
print<T...>{}( a... );
}
int main()
{
serial_print( 1, 2, 3, 4 );
//serial_print( 1, 2.0f, 3.0, 4ul ); // こちらを入れるとエラー.
}
0452デフォルトの名無しさん
2015/01/13(火) 11:01:26.11ID:rpb923HK0453デフォルトの名無しさん
2015/01/13(火) 11:26:02.29ID:9boVeRRQいつの間にか std::min() max() もそうなっていたし。 → std::min( { 1, 2, 3 } )
0454デフォルトの名無しさん
2015/01/13(火) 11:32:36.65ID:Na/JFQe7うーんこの
理屈は通ってもこの無駄な{}が感情的になぁ・・・
0455デフォルトの名無しさん
2015/01/13(火) 11:59:37.92ID:9OgL8QDIprint<T...>{}( b... );
print<T...>{}( a... );
これどういう意味ですか?
0456デフォルトの名無しさん
2015/01/13(火) 12:06:08.01ID:cjipnmCJ何か間違っている。C#がネイティブ
になれば、皆んなC#へ行くだろう。
0457デフォルトの名無しさん
2015/01/13(火) 12:33:38.89ID:GS0/TJB90458デフォルトの名無しさん
2015/01/13(火) 12:52:02.60ID:9boVeRRQ今は関数型言語っぽい書き方が必須になるのが難点だけど、
次の規格では手続き型っぽく書ける改良案も出ていると聞いた。
0459デフォルトの名無しさん
2015/01/13(火) 12:57:44.24ID:n6XeFbSoprint :クラステンプレート
<T ...> :テンプレートパラメータパックTを展開しそれを引数としてクラス定義を生成(インスタンス化)
{} :デフォルトコンストラクタでクラスの一時変数を構築
(b ...) :関数パラメータパックbを展開しそれを引数としたクラスのメンバ関数operator()の呼び出し
0460デフォルトの名無しさん
2015/01/13(火) 12:58:46.94ID:MFk51EzE0461デフォルトの名無しさん
2015/01/13(火) 13:05:04.90ID:Na/JFQe70462デフォルトの名無しさん
2015/01/13(火) 13:07:22.47ID:rpb923HK#include <iostream>
using namespace std;
template<typename... T>
void print(T... args){
for (auto&& v : {args...})
cout<<v;
cout << endl;
}
int main() {
print(1,2,3,4);
return 0;
}
0463デフォルトの名無しさん
2015/01/13(火) 16:06:28.44ID:t3KRTwNeintBitsToFloatに変わる方法無いですか?
0464デフォルトの名無しさん
2015/01/13(火) 16:45:31.53ID:9boVeRRQfloat f = reinterpret_cast<float&>(i);
0465デフォルトの名無しさん
2015/01/13(火) 16:50:17.98ID:x7fsXOyWなんやよ〜わからへんけど、共用体一発ちゃうんか
0466デフォルトの名無しさん
2015/01/13(火) 18:11:30.57ID:rpb923HKstrict aliasing ruleで未定義動作やね
0467デフォルトの名無しさん
2015/01/13(火) 18:35:38.34ID:JqWo+LRV*reinterpret_cast<float *>(&i)ならわかる
0468デフォルトの名無しさん
2015/01/13(火) 19:09:50.47ID:9OgL8QDIすみません
{args...}
ってなんですか?
0469デフォルトの名無しさん
2015/01/13(火) 19:16:35.25ID:9boVeRRQ恥ずかしながら >>467 と同じ意味だと思ってた。
この使い方だと最適化の有無で動作が変わっても文句言えないってことなんだね。
0470デフォルトの名無しさん
2015/01/13(火) 19:30:36.95ID:rpb923HK同じ意味だよ。>>467も未定義動作
0471デフォルトの名無しさん
2015/01/13(火) 20:42:56.94ID:k+Bq5xibstrcpy(a,"0");
と
a[0]='0';a[1]='\0'
どっちが良いですかね。速度的にけっこう違うんですかね
0472デフォルトの名無しさん
2015/01/13(火) 21:04:14.51ID:rpb923HKinitializer_listの構築。for以外でも使いたいなら auto lst = { args... }; とするといいよ。
>>471
それを0クリアというのか?
それはともかくstd::stringを使えよ。C形式の文字列なんぞ人生の無駄。
0473デフォルトの名無しさん
2015/01/13(火) 21:17:24.37ID:8O2Z+zCUa[0]='0', a[1]='\0', a[2]以降は未定義
下は
a[0]='0', a[1]='\0', a[2]以降は未定義
だと思うんだが…配列長がいくつかは分からないけど全く0クリアできてなくないか
0474デフォルトの名無しさん
2015/01/13(火) 21:23:59.73ID:k+Bq5xib聞き方が悪かったです。どうもありがとうございました。
0475デフォルトの名無しさん
2015/01/13(火) 22:06:04.28ID:kD9wDfw4wcharとか_TCHARとかあってわけわかりません。
多くのモダン言語では、asciiもShift-JISもUnicodeも統一的に扱えるようになっていると思いますが、
C++では、
ascii文字列ではstd::string
ワイド文字列ではstd::wstring
…
という風に使い分けないといけないんでしょうか。
0476デフォルトの名無しさん
2015/01/13(火) 22:16:27.73ID:Ph/HUQCj変換は必要だろう
0477デフォルトの名無しさん
2015/01/13(火) 22:17:43.73ID:Lg8oVsZy何でも入るよ
0478デフォルトの名無しさん
2015/01/13(火) 22:28:24.20ID:9boVeRRQ複数の文字コードをそのまま扱える言語なんて、Rubyと一部DBのSQLくらいじゃないの?
読み込みの際に変換しているだけだと思うが。
mbstowcs なり MultiByteToWideChar なり ICU なり、用途に叶うものを使えば良い。
リテラルも "..." と L"..." があって使い分けることになる。
0479デフォルトの名無しさん
2015/01/13(火) 22:42:07.36ID:kD9wDfw4> 読み込みの際に変換しているだけだと思うが。
そういうことです。
モダン言語では、初期化の際に共通の内部表現に変換するようになっていると思いますが、
C++では速度を重視しますから、常に文字コードを意識しないといけないんですね。
そこが辛いなと。Windows界隈ではさらにShiftJISまで混ざってきますから。
0480デフォルトの名無しさん
2015/01/13(火) 22:48:55.18ID:3wxgn30UShiftJISを取るAPIもこっそり文字コード変換してるんだけどな
0481デフォルトの名無しさん
2015/01/13(火) 23:37:30.93ID:xMsK2Lyvいやそんなことはない
C#: new StreamReader("fname", Encoding.UTF8)
C/C++: _ftopen(_T("fname"), _T("r, ccs=UTF-8"))
何が違うというのか
0482デフォルトの名無しさん
2015/01/13(火) 23:38:35.93ID:Ph/HUQCj0483デフォルトの名無しさん
2015/01/13(火) 23:46:17.82ID:Lwgt1osN実行速度が劇的に変わる訳でも無いのにネイティブコード吐くぐらいで移行してる人なら既に移行してないとおかしい。
.Net Nativeってのが既に発表されてるし。
>>470
float& f = reinterpret_cast<float&>(i);
f = 2;
ってやったとき、iの値が未定義なのがstrict aliasing ruleじゃねえの?
0484デフォルトの名無しさん
2015/01/13(火) 23:52:48.64ID:x7fsXOyWunicode対応といってもu16stringやu32stringみたいな固定ビット数のばっかで、
utf8を文字数単位で操作とかできんし。所詮は配列の延長。
LL系ならutf8を文字数単位とか普通にできるっしょ。
0485デフォルトの名無しさん
2015/01/13(火) 23:55:30.09ID:SFP9piLh0486デフォルトの名無しさん
2015/01/14(水) 00:05:25.89ID:JfPiamoAu32stringに変換して使えばええやん。
それとも他の言語だと結合文字も考慮された文字数返すの?
AndroidなんかはUTF-16で組み込みのTextViewがサロゲートペアすらちゃんと扱えてなかったけど
0487デフォルトの名無しさん
2015/01/14(水) 00:05:32.85ID:mXgizPwsistringstream辺りを使ってByte配列→Intにしようとしたのですがこれって
"0100"→100 みたいな動作ですよね。
'01' '00'→1 みたいな動作にするのになにか良い方法は無いでしょうか?
c#のBinalyReaderみたいなのが欲しいのですが。
0488デフォルトの名無しさん
2015/01/14(水) 00:07:26.39ID:kmmQ1SrFstring index "fooあほbar禿" 4
とかやればちゃんと4文字目を返すぞ。
0489デフォルトの名無しさん
2015/01/14(水) 00:42:43.62ID:mWlEZDlJ適当にシリアライズしてくれるライブラリ使え
0490デフォルトの名無しさん
2015/01/14(水) 00:46:33.63ID:IAjpd3c2色々あると思うけど
Poco::BinaryReaderとか
0491デフォルトの名無しさん
2015/01/14(水) 01:06:06.18ID:yeQHjBGO: の後ろに改行せずに書くと長くなりますし
: の後ろで改行すると初期化リストの後で { を置く場所が微妙になります
{ の前で改行しない派ですが、
初期化リストの後ろは{}内の文と分けるために{の前で改行か{の後ろに空白行を挟みたくなります
みなさんどのように書いていますか?
0492デフォルトの名無しさん
2015/01/14(水) 01:54:17.10ID:PZtFq0gGダメな型で読み取りあるいは書き込みしただけでプログラムの動作が未定義になる。それが aliasing rule
https://www.google.co.jp/search?q=aliasing+rule
0494デフォルトの名無しさん
2015/01/14(水) 06:41:52.32ID:OCa2o/9X0495デフォルトの名無しさん
2015/01/14(水) 07:02:04.08ID:Z38vlg9A短い時
int foo::foo(int i): bar(i) {
長い時
int foo::foo(int i)
: bar(i)
{
引数が長い時
int foo::foo(
int i
): bar(i)
{
0496デフォルトの名無しさん
2015/01/14(水) 07:21:03.59ID:NO/MtwMN0497デフォルトの名無しさん
2015/01/14(水) 07:25:03.59ID:9mIVwc3/reinterpret_cast や intptr_t の存在意義を否定しているし、
バイト配列を他の型として解釈することもできなくなる。
万が一ダメだとしても、"aliasing" という名前ではないだろう。 エイリアスしてない。
「未定義」の意味が「環境依存」ということなら、一理ある。
floatの内部表現はIEEE754とは限らないし、その場合intとして解釈した際のビット表現は異なるから。
0498デフォルトの名無しさん
2015/01/14(水) 07:50:37.62ID:XJt8CAXI>>490
回答ありがとうございます。
外部ライブラリに頼った方がいい感じなんですね。
自分でも探してみます。
0499デフォルトの名無しさん
2015/01/14(水) 08:06:14.46ID:Z38vlg9Aああ、すまん
寝ぼけてたわ
0500デフォルトの名無しさん
2015/01/14(水) 09:14:54.40ID:NO/MtwMNvoid f();
template<typename T>
void f<true,T>(){
cout<<2<<endl;
}
template<typename T>
void f<false,T>(){
cout<<1<<endl;
}
がエラーになるのですがどうしたら治せますか?
typename Tが無ければコンパイルできます
0501KUSO KOTE ◆unko./w.Osri
2015/01/14(水) 17:30:39.42ID:QxKXhXqS関数テンプレートは部分特殊化できないので
クラスの静的関数にしてクラスの部分特殊化します。
template<bool , typename T>
struct unko {
static void f();
};
0502デフォルトの名無しさん
2015/01/14(水) 18:05:05.38ID:NO/MtwMN0503KUSO KOTE ◆unko./w.Osri
2015/01/14(水) 19:55:07.79ID:1m+aHuMwもしくは関数のオーバーロードで見苦しい判定をします。
http://ideone.com/dccIYJ
どうして関数テンプレートが
明示的特殊化できて部分特殊化できないのかは謎。
0504デフォルトの名無しさん
2015/01/14(水) 21:28:06.62ID:zTGSPoHK0505デフォルトの名無しさん
2015/01/14(水) 21:52:16.82ID:49lpCiLZどうしたらいいでしょうか?
http://www1.axfc.net/u/3392298.png
0506デフォルトの名無しさん
2015/01/14(水) 21:58:33.46ID:bm2MApp4画像で見せるとか嫌がらせか
>>1見ろよ
0507デフォルトの名無しさん
2015/01/14(水) 21:58:49.58ID:ZzJLW/vDという表示しかでないんだが
0508デフォルトの名無しさん
2015/01/14(水) 22:00:45.52ID:lSekNf1Khtonlとかntohlとかじゃダメなのか?
ネットワークバイトオーダーからホストバイトオーダーではなく、また別のエンディアンにしたいとか?
0509505
2015/01/14(水) 22:12:04.41ID:49lpCiLZ49行目あたりです
http://codepad.org/j6q5zVzR
0510デフォルトの名無しさん
2015/01/14(水) 23:09:34.38ID:0+tysiB00511デフォルトの名無しさん
2015/01/14(水) 23:18:11.49ID:C/fj4qd2gccでコンパイルして実行してみたけど増えなかった
コンパイラ何使ってんの?
0512デフォルトの名無しさん
2015/01/14(水) 23:20:54.98ID:Vq7xvVBbチンコがおっきくなるって話だぞ
0513505
2015/01/15(木) 00:12:20.40ID:v4qaNDh8なんか調子が悪かったみたいです。
$ gcc --version
gcc.exe (Built by MinGW-W64 project) 4.8.2
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
ちなみにちんこがおっきするのは正常です
0514デフォルトの名無しさん
2015/01/15(木) 01:00:51.69ID:cO4EXxPxそういう勘違いをしてる人が多かったからリンク先のように多くの記事がある。
まずはひとつふたつでも目を通してから出直してこいよ。
0515デフォルトの名無しさん
2015/01/15(木) 08:23:42.79ID:xGg1V32bhttp://blog.qt.digia.com/blog/2011/06/10/type-punning-and-strict-aliasing/
がわかりやすいかも。 ただ、エンディアンの違いを除けば、
問題が表面化したのはやはり書き換えを伴うケースだけのようだ。
unionまで禁止されるとかなり手段が限定されるな。 memcpyなら問題ないのかな?
memcpy(&intVal, &fltVal, sizeof(float))
0516デフォルトの名無しさん
2015/01/15(木) 09:09:19.37ID:fAB5K+xN何が言いたいのか解らないんだけど
0517デフォルトの名無しさん
2015/01/15(木) 18:55:52.43ID:sN1/S68Lそれなのに
file.seekg(0);
のような実装依存の使い方がなんで許されるんですか?
0518デフォルトの名無しさん
2015/01/15(木) 19:58:24.98ID:TqxoI/230519デフォルトの名無しさん
2015/01/15(木) 20:16:47.78ID:aaSxoVnFvoid*から元の型でないものにキャストするのは不定だから。
あと、sizeof(int)とsizeof(float)が同一じゃないと飛ぶ。
結局、こういう操作は機種依存、コンパイラ依存ということで腹をくくるしかないかと。
で、機種依存は標準ライブラリが吸収すると。
0520デフォルトの名無しさん
2015/01/15(木) 20:38:10.90ID:Nl0/WaUmstrict aliasing ruleの話だったのになんでそういう話に行っちゃうの?
sizeが一致してる事なんて当たり前のこととして誰も触れてなかったのに
0521デフォルトの名無しさん
2015/01/15(木) 22:41:18.20ID:xGg1V32bintptr_t というポインタ値を格納できる整数がある以上、不定なんて簡単に斬り捨てるのはナンセンスだ。
異なる環境で結果の生ビットのイメージが異なると言いたいのか、
同じ環境でも例えば最適化の有無で結果が変わるのか、
明確にすべきではないのか? 前者なら覚悟の上だし、後者なら確かに注意が必要だ。
0522デフォルトの名無しさん
2015/01/16(金) 00:57:50.61ID:7ptlesNF元のポインタ型に reinterpret_cast で戻せば元のポインタの値が得られることは保証されてる。
整数としての値について規格での保証はなく、処理系定義となっている。
ポインタ間の reinterpret_cast もだいたい同じ。ただし aliasing rule で許される範囲の型で
あれば、変換されたポインタを通したアクセスはできる。要件に合わない型でアクセスした場合の
動作は未定義。
規格で未定義とされた結果についても、コンパイラベンダがユーザーからの要望を受けるなどして
何かしらの結果を保証することは考えられる。
0523デフォルトの名無しさん
2015/01/16(金) 10:59:13.92ID:6pAX4ek90524デフォルトの名無しさん
2015/01/16(金) 13:31:51.37ID:5KcpH9lX0525デフォルトの名無しさん
2015/01/16(金) 16:10:28.75ID:TPIs3k360526デフォルトの名無しさん
2015/01/16(金) 17:28:22.93ID:lE2P5Fdtググったらコンパイラによる最適化が働くとあったのですが
0527デフォルトの名無しさん
2015/01/16(金) 17:42:22.71ID:b+iOL8G+0528デフォルトの名無しさん
2015/01/16(金) 17:52:28.97ID:lE2P5Fdtそんなに神経質になる必要ないですよね?
0529デフォルトの名無しさん
2015/01/16(金) 18:54:26.90ID:XnO0vYpJfile.put(0)を10000回す方法に
疑問を感じるのですが
これであってますか?
0530デフォルトの名無しさん
2015/01/16(金) 19:08:46.79ID:49OvZmoV0531デフォルトの名無しさん
2015/01/16(金) 19:42:47.87ID:5KcpH9lXfile.puts("0 x 10000")
0532デフォルトの名無しさん
2015/01/17(土) 00:27:55.42ID:gZ92P3CR0533デフォルトの名無しさん
2015/01/17(土) 02:47:46.15ID:A0mHqxo/0534デフォルトの名無しさん
2015/01/17(土) 10:19:37.62ID:+Mt2ocGr0535デフォルトの名無しさん
2015/01/17(土) 11:40:25.95ID:lX6OVvpV0536デフォルトの名無しさん
2015/01/17(土) 13:00:04.69ID:cwk2gnL90537デフォルトの名無しさん
2015/01/17(土) 17:48:09.90ID:8pCUt2oz0538デフォルトの名無しさん
2015/01/17(土) 21:00:26.16ID:KOOYDoMc0539デフォルトの名無しさん
2015/01/18(日) 07:38:41.69ID:u9sBSLL+void f() noexcept {throw 0;}
0540デフォルトの名無しさん
2015/01/18(日) 07:55:20.39ID:AOSxsRnsis_unko<T>() の書き方の方がいいんですか?
0541デフォルトの名無しさん
2015/01/18(日) 08:01:37.80ID:Qm+dorGN0542デフォルトの名無しさん
2015/01/18(日) 08:24:53.10ID:AOSxsRnsあすみません is_unko<T>()() です
0543デフォルトの名無しさん
2015/01/18(日) 11:37:47.66ID:P6WGkqwh0544デフォルトの名無しさん
2015/01/18(日) 22:23:35.79ID:bHrYEHGAバグっぽいんですが,どうしてもwindowsでto_string使いたいならvisual studio使うしかないですか?
0545デフォルトの名無しさん
2015/01/18(日) 22:29:58.97ID:jDPvnKP10546デフォルトの名無しさん
2015/01/18(日) 23:26:59.29ID:a8z2TDtD未実装でもどうしても使いたければ自分で書けばいい
boost.lexical_castに丸投げしとけばだいたいは充分だろ
0547デフォルトの名無しさん
2015/01/18(日) 23:59:19.39ID:zFYM1lrS0548デフォルトの名無しさん
2015/01/19(月) 07:19:01.71ID:FNsfOjWe0549デフォルトの名無しさん
2015/01/19(月) 07:47:27.60ID:Cyk/lQNq0550デフォルトの名無しさん
2015/01/19(月) 10:20:13.34ID:KaaVf0G80551デフォルトの名無しさん
2015/01/19(月) 10:48:53.28ID:2mIA9VDnそれを本家が取り入れることは別の話
0552デフォルトの名無しさん
2015/01/19(月) 13:18:15.00ID:Tsvh6ToP-std=c++11
0553デフォルトの名無しさん
2015/01/19(月) 15:17:08.76ID:Tsvh6ToP自家ビルド4.9.2 on cent6ではいける。
ヘッダにはちゃんとto_stringあるのにプリプロセスで消えてるわ。
0554デフォルトの名無しさん
2015/01/19(月) 17:15:48.17ID:Tsvh6ToPビルド時にやらかしたのだろう。
旧バージョン4.8.3に戻せば使えるかもね、to_string
0555デフォルトの名無しさん
2015/01/19(月) 17:31:53.40ID:FNsfOjWefor(int i=0;i<10000000000;++i)
a[i]=i;
for(int i=0;i<10000000000;++i)
*(a++)=i;
while(a!=a+10000000000)
*(a++)=i;
早い順に並べてください
もしこれ以外にもあったらそれも入れて良いです
0556デフォルトの名無しさん
2015/01/19(月) 17:55:39.74ID:zs9lS2Em始めの奴と見なせばどれも変わらない
最適化で差は消えるし、最適化かけずとも
そんなにでかいメモリ領域へのアクセスをしたらメモリ帯域で制限される。
0557デフォルトの名無しさん
2015/01/19(月) 19:19:24.77ID:G7rK5Vbu0558デフォルトの名無しさん
2015/01/19(月) 20:42:07.30ID:JaWjPBIfなんかもっと特殊なカテゴリーに入るんだと思ってた
0559デフォルトの名無しさん
2015/01/19(月) 22:26:46.76ID:xXNXoN/7嘘つきに騙されないで下さい
0560デフォルトの名無しさん
2015/01/19(月) 22:39:28.43ID:5YlZfexYlvalue required as increment operand
a++;
0561デフォルトの名無しさん
2015/01/19(月) 22:43:35.22ID:op5GXgGv1 An lvalue or rvalue of type “array of N T” or “array of unknown bound of T” can be converted to a prvalue of type “pointer to T”. The result is a pointer to the first element of the array.
とある。
0562デフォルトの名無しさん
2015/01/19(月) 23:02:01.28ID:5YlZfexYでaは左辺値にはならんだろ。
void func(int a[10])
なら、aは左辺値になるだろうが、実態はポインタだけどな。
0563デフォルトの名無しさん
2015/01/19(月) 23:14:11.45ID:W9kUD6JHどうみても左辺値です
ISO/IEC 14882:2011 5.1.1p8
The result is an lvalue if the entity is a function, variable,
or data member and a prvalue otherwise.
0564デフォルトの名無しさん
2015/01/19(月) 23:37:54.50ID:op5GXgGvT (&ar)[N] で受ければ左辺値かもしれないが、自分的にはちょっとあやふやだ。
しかし>>555の書き方だと暗黙のポインタ変換されたあとの値ではないだろうか。
つまり右辺値だと思う。
static_cast<int*>(a)++; とやったらエラーなのと同じだ。
0565デフォルトの名無しさん
2015/01/19(月) 23:49:28.75ID:5YlZfexYint a[10];
a++;
とやると>>560となるわけよ。
lvalueをくれと言われる。
まあ、constのlvalueなのかもしれんけど。
0566デフォルトの名無しさん
2015/01/19(月) 23:49:38.83ID:QfMkzxCwfunc(T (&ar)[N])のarは左辺値
だろ? 違うのか?
0567デフォルトの名無しさん
2015/01/19(月) 23:50:31.01ID:W9kUD6JH>暗黙のポインタ変換されたあとの値ではないだろうか
それは>>560のようなバギーなコンパイラだけ
正しいコンパイラは配列名を左辺値として扱う
0568デフォルトの名無しさん
2015/01/20(火) 00:01:36.36ID:g9uhdRDJcl v15では、
'++' needs l-value
困ったもんですな。
まあ、どちらにせよ、++はconstのlvalueはつかえないから、int a[10]; a++;はダメなんだけどね。
(関数引数はOK)
0569デフォルトの名無しさん
2015/01/20(火) 00:16:57.39ID:g9uhdRDJcannot increment value of type 'int [10]'
ですな。
lvalueかどうかという理由ではなく配列型だからダメと。
これがマトモなコンパイラということでよろしいですかな?>>567
0570567
2015/01/20(火) 00:20:35.92ID:xmwiqoSRそだね
++演算子の仕様を読んでいたら そういうメッセージになるはず
VCとg++は式のvalue categoryをきちんと実装してないと見た
0571デフォルトの名無しさん
2015/01/20(火) 00:31:01.30ID:Vtu26NEG自分はそれが正解だと思う。
実引数である a は右辺値だけど仮引数である ar は左辺値だと。
func(int&& a)
の a は右辺値参照で右辺値しか受け取れないけど、 a そのものは左辺値だしね。
0572デフォルトの名無しさん
2015/01/20(火) 00:48:29.69ID:gowFJy9K仕様的には左辺値でも右辺値でもない特殊扱いってこと?
0573デフォルトの名無しさん
2015/01/20(火) 00:57:13.79ID:Vtu26NEGの根拠はちょっとおかしいと思う。
どう見ても左辺値だって言うけど、それは関数仮引数の ar がそうだってだけでは?
0574デフォルトの名無しさん
2015/01/20(火) 01:16:04.26ID:MYJPw26Jint ar[1];
int (&& rr)[1] = (ar); // もしint[1]型の右辺値ならint(&&)[1]型変数を初期化できるはず
int (& lr)[1] = (ar); // もしint[1]型の右辺値ならint(&)[1]型変数を初期化できないはず
0575デフォルトの名無しさん
2015/01/20(火) 01:24:19.84ID:MYJPw26Jusing array = int[1];
array a1:
array & lr = a1; // OK
array && rr = a1; // error
0576デフォルトの名無しさん
2015/01/20(火) 01:34:04.82ID:MYJPw26Jusing array = int[1];
struct A {array v;};
array & lr = A{}.v; // error, rvalue of type int[1]
array && rr = A{}.v; // OK
0577デフォルトの名無しさん
2015/01/20(火) 12:45:49.02ID:sX5O42FC右辺値=実体はともかく意味している値そのもの
と考えるとわかりやすい。配列は前者
0578デフォルトの名無しさん
2015/01/20(火) 14:08:10.14ID:gowFJy9K議論になってるのは配列そのもののことじゃないだろ
int a[10] のaそのもののアドレス(&a)は取れるようなもんじゃないっしょっていう。
0579デフォルトの名無しさん
2015/01/20(火) 14:29:31.86ID:KvM0UR0/アドレスが取れないと判断した理由は?
template<typename T> struct X;
int main() {
int a1[100];
X<decltype(&a1)> dummy;
}
0580デフォルトの名無しさん
2015/01/20(火) 17:56:40.12ID:aVZQpFMFMessagePack RPC for C++でwindowsで動くもの(UDPも)を知ってる方いますか?
探してるんですが、それっぽい物を落としてVCでビルドしてみたり、
Cygwinでビルドしてみたり色々やっているんですが、UDPを送受信できるもので、
それらしいものが見当たりません。
知ってる方がいらっしゅいましたらURLを教えてください。
0581デフォルトの名無しさん
2015/01/20(火) 19:00:57.56ID:lX6RmyQp0582デフォルトの名無しさん
2015/01/20(火) 19:01:36.10ID:lX6RmyQp0583デフォルトの名無しさん
2015/01/20(火) 19:53:54.71ID:YD3reShvというか配列型って左辺値になるの?
0584デフォルトの名無しさん
2015/01/20(火) 20:27:11.19ID:cuVWHT+g4.8.3もダメだったので諦めてvs使います
ありがとうございました
0585デフォルトの名無しさん
2015/01/20(火) 20:50:59.07ID:cuVWHT+ghttp://stackoverflow.com/questions/12975341/to-string-is-not-a-member-of-std-says-so-g
0586デフォルトの名無しさん
2015/01/21(水) 21:48:08.89ID:C2GgMmPAおまいらの会社はこういうの買ってくれるの?
0587デフォルトの名無しさん
2015/01/21(水) 22:55:28.65ID:0pZDWm7E0588デフォルトの名無しさん
2015/01/21(水) 22:56:02.68ID:8VLGtKQrMinGWのバグとかテキトーな議論になってるな。
cygwinで入れれるx86_64-w64-mingw32-g++は4.8.3で問題なく動くってのに。
c++config.hってどうせconfigureしたらできるヘッダだから、その時のC99機能みおとしなだけだが。
インライン関数だしc++config.hイジるだけで使えると思う。
0589デフォルトの名無しさん
2015/01/21(水) 23:10:02.61ID:EXEjsO330590デフォルトの名無しさん
2015/01/22(木) 07:32:47.90ID:TKjQWfO9#include<sstream>
using namespace std;
int main() {
stringstream s;
s<<'a';
s.ignore(1);
cout<<s.eof()<<endl;
s.ignore(1);
cout<<s.eof()<<endl;
s.clear(ios::eofbit);
cout<<s.eof()<<endl;
// your code goes here
return 0;
}
出力
0
1
1
このコードで2つ質問します
sのサイズが1なのに2回ignoreしないとeofフラグが付きません
ファイルストリームの場合はファイルサイズが1のとき1回ignoreするとeofフラグが付きました
s.clear(ios::eofbit)をしたのにeofフラグがクリアーされません
教えてください
0591デフォルトの名無しさん
2015/01/22(木) 08:13:30.99ID:oI9MVddqeofフラグがセットされるのはeofを超えて読み込もうとした時だから、むしろファイルサイズが1でも1文字ignoreしただけならeofフラグは付かないはずだけど
0592デフォルトの名無しさん
2015/01/22(木) 08:38:20.73ID:TKjQWfO9http://www.cppll.jp/cppreference/cppio_details.html
には指定したフラグをクリアーすると書いてありますけど
そして
#include <iostream>
#include <fstream>
using namespace std;
int main() {
fstream f{"aaa",ios::in|ios::out|ios::trunc};
f.put(1);
f.put(1);
f.seekp(0,ios::beg);
f.ignore(2);
cout<<f.eof()<<endl;
return 0;
}
出力
1
これはなぜなんですか?
0593デフォルトの名無しさん
2015/01/22(木) 09:37:03.15ID:QfKlzsaMどのように型定義をすれば良いでしょうか?
クラスであれば boost::basic_string_ref から null_terminated_ref を派生して
型の差を表現できたのですが、配列を指すポインタでも強い型付けをしたいのです。
0594デフォルトの名無しさん
2015/01/22(木) 09:40:23.01ID:m3Bf/Hej0595デフォルトの名無しさん
2015/01/22(木) 10:10:37.91ID:QfKlzsaM長さ (int か size_t) とセットで扱うケースです。
const NonTerminatedCharSeq seq;
size_t len;
getStringBuffer(&seq, &len);
requireNonTermAndLen(seq, len); // ← OK
requireTerminatedString(seq); // ← NG: これをエラーにしたい
0596デフォルトの名無しさん
2015/01/22(木) 11:29:36.55ID:qwgPojtQthrowしたら?
0597デフォルトの名無しさん
2015/01/22(木) 11:39:27.71ID:QfKlzsaM>>596
末尾が分からないので、throw 前に、ヌル終端を確認する段階で segfault で落ちると思います。
0598デフォルトの名無しさん
2015/01/22(木) 11:54:09.90ID:ks/7g+OJ問答無用でthrowすれば確認する必要ないじゃないのよ
0599デフォルトの名無しさん
2015/01/22(木) 12:01:19.12ID:ks/7g+OJオレオレされてもどのように定義されてるのか分からないので
エスパーするにも限度があるよ
0600デフォルトの名無しさん
2015/01/22(木) 12:09:57.68ID:m3Bf/Hej型に同じcharを使う限りヌル終端だの非ヌル終端だのを区別するのは無理じゃね?
0601デフォルトの名無しさん
2015/01/22(木) 12:34:43.11ID:QfKlzsaMそうですね。 スマートポインタ的な型を噛ませることにします。
>>598
コンパイル時に区別する話に throw が出てくるのはナンセンスです。
0602デフォルトの名無しさん
2015/01/22(木) 12:34:43.39ID:lh8u5jbds.assign(buffer,buffer+len);
これでええやん
0603デフォルトの名無しさん
2015/01/22(木) 12:39:13.96ID:lh8u5jbd分けること自体ナンセンスだと思うんだけど何がしたいの?
0604デフォルトの名無しさん
2015/01/22(木) 12:50:57.01ID:m3Bf/Hejぎりぎりまで最適化されたパーサ作るときなんかも両者が混在するケースはなくはないかもよ
分けることがナンセンスかどうかは判断つかぬ。
0605デフォルトの名無しさん
2015/01/22(木) 13:01:13.47ID:ks/7g+OJそれなら
requireTerminatedString(seq); // ← NG: これをエラーにしたい
これを定義しなきゃいいじゃないの
0606デフォルトの名無しさん
2015/01/22(木) 13:21:39.79ID:ks/7g+OJほんまかいや
L'\0'ってオチでは?
0607デフォルトの名無しさん
2015/01/22(木) 13:26:19.67ID:m3Bf/Hej地デジの8単位符号とか
0608デフォルトの名無しさん
2015/01/22(木) 13:31:20.39ID:TKjQWfO9#include<sstream>
using namespace std;
int main() {
stringstream s;
s.put('a');
s.put('b');
s.ignore(1);
cout<<s.tellg()<<s.eof()<<s.fail()<<endl;
s.ignore(1);
cout<<s.tellg()<<s.eof()<<s.fail()<<endl;
s.ignore(1);
cout<<s.tellg()<<s.eof()<<s.fail()<<endl;
return 0;
}
100
200
-110
これはふつうじゃないですか。
0609デフォルトの名無しさん
2015/01/22(木) 13:32:21.67ID:TKjQWfO9#include<sstream>
using namespace std;
int main() {
stringstream s;
s.put('a');
s.put('b');
s.ignore(2);
cout<<s.tellg()<<s.eof()<<s.fail()<<endl;
return 0;
}
-110
これはなぜですか?
0610デフォルトの名無しさん
2015/01/22(木) 13:36:23.92ID:lh8u5jbdそんなんparserで読める形にして返すべき
仕様を知らないと使えないような糞parser作るなよ
0611デフォルトの名無しさん
2015/01/22(木) 13:48:18.82ID:TKjQWfO9Extracts characters from the input sequence and discards them,
until either n characters have been extracted, or one compares equal to delim.
キャラクターを取り出して捨てる
n文字を取り出されるまで あるいは 取り出された文字の中の文字がEOFと一致するまで
じゃないですか
上の例だとaとbの2文字を取り出す aとbの文字の中にEOFは含まれないから
2文字読み捨てるだけのはずなんですよ
0612デフォルトの名無しさん
2015/01/22(木) 14:03:41.07ID:TKjQWfO9#include<sstream>
using namespace std;
int main() {
stringstream s;
s.put('a');
s.put('b');
s.ignore(2);
cout<<s.tellg()<<s.eof()<<s.fail()<<endl;
s.clear();
cout<<s.tellg()<<s.eof()<<s.fail()<<endl;
return 0;
}
-110
200
なぜかクリアーすると正常にもどりますが
0613デフォルトの名無しさん
2015/01/22(木) 15:27:00.20ID:KXkPACSPgccのバグっぽいね。clangだと正常
0614デフォルトの名無しさん
2015/01/22(木) 16:21:05.14ID:TKjQWfO9もしかしてライブラリーもclangに出来るですか?
0615デフォルトの名無しさん
2015/01/22(木) 16:22:06.07ID:TKjQWfO90616デフォルトの名無しさん
2015/01/22(木) 16:41:45.61ID:KCvkCnbbcodepadも同じでした
0617デフォルトの名無しさん
2015/01/22(木) 17:18:44.66ID:KXkPACSP0618デフォルトの名無しさん
2015/01/22(木) 18:55:32.00ID:WdOYbvBgignoreはバグで使えないことがわかったので
seekpを使うことにします
0619デフォルトの名無しさん
2015/01/23(金) 07:11:35.45ID:2AoMrA3W自動生成されないのですか?
0620デフォルトの名無しさん
2015/01/23(金) 07:34:45.99ID:xxltq5Yq0621デフォルトの名無しさん
2015/01/23(金) 08:10:15.96ID:2AoMrA3WそのうちC++でつかえなくなるということですか?
0622デフォルトの名無しさん
2015/01/23(金) 09:52:38.55ID:Mcjm1ThGメッセージのローカライズを考えたら最悪の設計だろ?
バイナリデータの入出力には大げさすぎるし
0623デフォルトの名無しさん
2015/01/23(金) 11:01:12.37ID:VC3FF7uiバイナリデータに使ってる。
localeが糞なのであってiostream自体はそれ程問題ないと思うけど
0624デフォルトの名無しさん
2015/01/23(金) 11:06:23.24ID:9vqKWjl6ハゲが進むぞ
0625デフォルトの名無しさん
2015/01/23(金) 13:08:03.97ID:Mcjm1ThGlocaleはiostream以外の全てに絡むから、ちょっと置いておきたいが、
置換ではなく、連結で書式化するのが問題だと言いたかったんだ
単純な英日ローカライズでも
stringstream << I << _(" have ") << pens;
だとつらくないか?
sprintf(str, _("%s have %s"), I, pens);
ならまだ最後の %s の後に文字列を補う余地があるが
0626デフォルトの名無しさん
2015/01/23(金) 13:30:21.20ID:iNkbBRr10627デフォルトの名無しさん
2015/01/23(金) 14:06:31.12ID:CKWB/WqA上がダメで下がOKな理由が解らん。
でもstream演算子とそれを使った書式指定は確かに使いづらいからあんまり使ってない。
マニュピレーターまで行くと出力方法を再設定するまでずっと変化させるのが個人的に受け付けないから絶対使わない。
ss <<std::hex(123)<<std::endl;
こんな感じで指定できて内部状態変えなかったらまだマシな感じがするんだが
思い返すと結構不満あるけど不満があるところ全く使ってないな。
0628デフォルトの名無しさん
2015/01/23(金) 14:24:22.42ID:Mcjm1ThG某ゲームで「へ <地名>」という謎の日本語訳を見て、
cout << localize("To ") << localize("Skyrim");
printf(localize("To %s"), localize("Skyrim"));
の場合、後者ならまだ "To %s" → "%s へ" という語順の入れ替えもできるのになと思ったんだ。
もちろん、ちゃんとやろうとすると、複数形やら男女性名詞やらも入ってくるから
もっと複雑な仕組みを使っているんだろうが、シンプルなケースでもCよりも退化している気がしてな。
0629デフォルトの名無しさん
2015/01/23(金) 15:01:12.34ID:CKWB/WqAsk○rimの事かー!
その辺ちゃんとやろうと思ったら他言語とかunix仕様のprintfみたいな引数の番号指定できるようなもの作るしかないよな
0630デフォルトの名無しさん
2015/01/23(金) 15:20:05.29ID:+4s/SmeM1人→one hage
2人→two hages
%d人→%s hage%s
とかやり始めたら地獄 (実際はもう少し複雑)
0631デフォルトの名無しさん
2015/01/23(金) 17:19:12.03ID:2AoMrA3W入れ替えられますが
0632デフォルトの名無しさん
2015/01/23(金) 18:20:03.26ID:iNkbBRr1文字列リテラルだけ弄ることをローカライズと呼ぶっぽいよ
まあコード全体を把握せずにロジックまで変えるのは危ないっちゃあ危ないけど、
printfのフォーマット文字列部まで弄るのはそれはそれでかなりリスキーだよね
0633デフォルトの名無しさん
2015/01/23(金) 20:22:00.05ID:hXVAGJ+Lpublic:
int operator+() {
return 2;
}
};
int main() {
CManiac maniac;
int iValue = +maniac;
printf("iValue = %d\n", iValue); // 答えは 2 になります。
return 0;
}
ベクトルの計算で使われるoperatorは何とか使い方わかったのですが、上記のオペレータの
使い方がわかりません・・・
int iValue = +maniac;
とありますが、なぜ左辺なしでいいのか、+の右辺は引数じゃないのか・・・
馬鹿な私にもわかるように教えてください・・・
0634デフォルトの名無しさん
2015/01/23(金) 20:23:30.39ID:B6TLxfZL0635デフォルトの名無しさん
2015/01/23(金) 20:48:15.94ID:+4s/SmeM+と-には単項演算子(unary operator)の役割もあるからだ
https://en.wikipedia.org/wiki/Unary_operation
0636デフォルトの名無しさん
2015/01/23(金) 20:54:56.31ID:k2EHLgKoC 演算子
ttp://ja.wikipedia.org/wiki/C%E3%81%A8C%2B%2B%E3%81%AE%E6%BC%94%E7%AE%97%E5%AD%90#.E7.AE.97.E8.A1.93.E6.BC.94.E7.AE.97.E5.AD.90
+は単項演算子と二項演算子と二つあるんですよ。
その単項演算子を書き換えただけ。
演算子オーバーロードは好き勝手な機能を作ってよい。
引き算したりかけ算したりでも結構。
だけど、見た目の意味と反する機能を載せると混乱するからやめませう。
まあ普通の関数でも、
void oppaigazou()
みたいな関数を実行して、
ようこそバーボンハウスへ
とか表示されても困るっしょ。
0637デフォルトの名無しさん
2015/01/23(金) 21:06:23.38ID:hXVAGJ+Lおおおoperator 単項演算子でググったらわかりました! ありがとうございます。
単項演算子にもなるんですね。というか単項演算子の意味がよく分かってませんでした。感謝です。
0638デフォルトの名無しさん
2015/01/24(土) 05:15:10.98ID:nRHL+kQx0639デフォルトの名無しさん
2015/01/24(土) 18:16:20.54ID:pTbu8ydo0640デフォルトの名無しさん
2015/01/24(土) 18:49:21.39ID:6Ll+V+b6でも&&,||がオーバーロード出来るのはバカが規格作ったとしか言いようが無い。
0641デフォルトの名無しさん
2015/01/24(土) 22:29:23.89ID:uB8Zp40F出来るの?
どう解釈されるんだよ。
標準の演算子は左側の結果次第で右側処理しないのに。
オーバーロードしたら右側は演算子関数の引数として評価されたものが渡されちゃうじゃん。
0642デフォルトの名無しさん
2015/01/24(土) 22:51:38.43ID:b+FSusAQ特に今はlambdaも有るから、どう解釈されるかも分かりやすいだろう。
0643デフォルトの名無しさん
2015/01/24(土) 23:32:54.36ID:6Ll+V+b6オーバーロードしたものは動作が異なる
短絡評価はしない
0644デフォルトの名無しさん
2015/01/24(土) 23:37:22.52ID:pTbu8ydoなんだそれは…役に立つ見込みがないな
deprecatedしちゃえばいいのに
0645デフォルトの名無しさん
2015/01/24(土) 23:49:54.77ID:uB8Zp40Fバグの元だな。
0646デフォルトの名無しさん
2015/01/24(土) 23:53:06.74ID:fkphD0bY言語の意味的に問題があるかの区別がつかないハゲが
考えた糞言語だからね
0647505
2015/01/25(日) 02:39:31.72ID:jonHqlx4libtool: error: can't build x86_64-w64-mingw32 shared library unless -no-undefined is specified
ってどういう意味でしょう?
0648デフォルトの名無しさん
2015/01/25(日) 02:47:56.64ID:jonHqlx40649デフォルトの名無しさん
2015/01/25(日) 10:22:42.68ID:ETJbvR7Utemplate < size_t N > void foo(const char (&s)[N])
とすれば文字列へのポインタと配列を区別することはできたのですが、リテラルと区別する方法が欲しいです。
0650デフォルトの名無しさん
2015/01/25(日) 11:08:29.46ID:VvVj4cWmfoo(s1);
foo("abc");
を区別したいってことだったらちょっと思い浮かばない。
0651デフォルトの名無しさん
2015/01/25(日) 11:25:45.65ID:4oCs0q670652デフォルトの名無しさん
2015/01/25(日) 11:27:10.73ID:GkPu8jFaつまり、 void foo(const char*) に文字列リテラルを渡せるという仕様がおかしいんだよ!
0653デフォルトの名無しさん
2015/01/25(日) 11:32:21.21ID:4Wfo0lBBvoid foo(char*)に渡せるのはおかしいと思うけど
0654デフォルトの名無しさん
2015/01/25(日) 11:58:44.67ID:VvVj4cWmどういう意味?
0655デフォルトの名無しさん
2015/01/25(日) 12:11:01.00ID:kIxCnLDS>文字列リテラルって、本来的な定義的では const char* const じゃないの?
違うよ。どこが違うか20字以内で回答せよ。
0656デフォルトの名無しさん
2015/01/25(日) 12:24:13.51ID:ETJbvR7U直接リテラルを指定した場合のみを区別したいです。 foo("abc")
マクロを使えば、リテラルの連結を利用して使い方のミスだけは回避できる、
#define foo(literal) foo_impl("" literal)
という方法があるようなのですが、テンプレートとオーバーロードでできないでしょうか?
0657デフォルトの名無しさん
2015/01/25(日) 13:36:49.08ID:6175FHBnすっこんでろホゲ荒らしめ
あとちゃんとクソコテつけろ
0658デフォルトの名無しさん
2015/01/25(日) 14:13:16.81ID:4V3JyQfq文字列リテラルは配列なのでプリプロセス後は区別が不可能。
配列変数 const char ar1[5] の場合
型:const char [5]
プライマリ式(ID式)の分類:lvalue
文字列リテラル "abcd" の場合
型:const char [5]
プライマリ式(リテラル)の分類:lvalue
型もvalue categoryも両方同じなので、オーバーロードも部分特殊化も使えない。
ノンタイプテンプレートパラメーターにはリテラルが使えないので
SFINAEで何とかならないかとも考えたけど思いつかず
0659デフォルトの名無しさん
2015/01/25(日) 14:47:27.34ID:ETJbvR7Uありがとうございます。 難しそうですね。
もしかするとconstexprで何かできるかもしれないので、対応したコンパイラが手に入ったらまた試してみます。
0660デフォルトの名無しさん
2015/01/25(日) 15:15:44.96ID:WsD7AEIl0661デフォルトの名無しさん
2015/01/25(日) 15:34:50.83ID:VvVj4cWm目的を教えて。
それによって全然違う方向性もありえるし。
0662デフォルトの名無しさん
2015/01/25(日) 16:12:10.04ID:ETJbvR7U元々の目的は「プログラム終了まで寿命を持っており、変更されない文字列だけを特別扱いしたい」ということでした。
リテラルなら十分条件だと思ったのですが、もし別の方向で実現可能ならば全く問題ないです。
ただ、「それ専用の名前」を関数やマクロにつけるのではなく、
他の文字列用の関数との使い分けを意識せずにオーバーロードさせたいです。
0663デフォルトの名無しさん
2015/01/25(日) 16:34:05.07ID:WsD7AEIl> 元々の目的は「プログラム終了まで寿命を持っており、変更されない文字列だけを特別扱いしたい」ということでした
元々の目的は ? であり、その手段として
プログラム終了まで寿命を持っており、変更されない文字列だけを特別扱いする必要性が生じた
って事でしょ?
手段が目的化してる
0664デフォルトの名無しさん
2015/01/25(日) 17:04:10.83ID:JtbeKPv3const intでもintでも
を
func(int), func(const int)
どっちに渡してもいいだろ。
参照やアドレスを渡すならともかく、値を渡すだけなんだから。
文字列リテラルも一緒。
0665デフォルトの名無しさん
2015/01/25(日) 17:06:10.90ID:q//XhoOIコピーしてもっとけ
0666デフォルトの名無しさん
2015/01/25(日) 17:13:30.59ID:tn73IjQ8VCでビルド化でlinux用のソースコードが動く率が高い組み合わせはどれですか?
0667デフォルトの名無しさん
2015/01/25(日) 17:43:26.11ID:WsD7AEIlおちついて
0668デフォルトの名無しさん
2015/01/25(日) 18:05:45.40ID:tn73IjQ8コンパイラ格差を減らしlinux向けのソースコードがコンパイルできるようにしたいですが
どの標準ライブラリ、STLの実装がいいですか?
特にGCC専用のC言語拡張命令が多いといいです。
0669デフォルトの名無しさん
2015/01/25(日) 18:13:48.96ID:pVReJ80Y0670デフォルトの名無しさん
2015/01/25(日) 18:40:12.27ID:gAd5OZDm0671デフォルトの名無しさん
2015/01/25(日) 18:47:20.67ID:/0qLCOtg0672デフォルトの名無しさん
2015/01/25(日) 19:03:32.79ID:tn73IjQ8標準ライブラリはこういうやつですが、コンパイルに同包されてるやつよりlinux寄りになる期待ができます。
ビルド可能か、と何が内蔵されてるかに差はあるんですが。
glibc
dietlibc
musl
uClibc
Newlib
Gnulib
0673デフォルトの名無しさん
2015/01/25(日) 19:11:45.72ID:tn73IjQ8Visual C++でビルドできて、LinuxのGCCコンパイラの命令(インクルードファイル)が使えるやつを探してます。
musl - Wikipedia
最新版 1.1.6 / 2015年1月13日
対応OS Linux 2.6以降
プラットフォーム x86, x86-64, ARM, MIPS, MicroBlaze, PowerPC
muslは MIT Licenseでリリースされている Linux の標準Cライブラリ。
クリーンで、効率的で、標準に準拠した標準Cライブラリの実装を目標としている。
1から設計されており、アプリケーションを単一のポータブルなバイナリファイルとして配布できるように静的リンクに最適化している。
POSIX:2008 と C99 準拠であるとしている。Linux, BSD, glibc の非標準な関数も実装されている。
0674デフォルトの名無しさん
2015/01/25(日) 19:15:59.93ID:WsD7AEIl0675デフォルトの名無しさん
2015/01/25(日) 19:37:21.56ID:tn73IjQ8linuxの標準命令・関数で実装されていたらできると思うんですが。
Wine - Wikipedia
Wineは、オープンソースの Windows API 実装を通じて、Unix系OSにおいてWindows用アプリケーションをネイティブ動作させることを目標とするプログラム群である。
エミュレータと異なり、Wineは基本的にはCPUエミュレーションを行っていない。アプリケーションによってはWindows上より高速に動作することもあるという。
Wineに含まれるWindows API実装はWinelibと呼ばれ、これを用いてWindowsプログラムのソースコードからプラットフォームネイティブなバイナリをビルドすることも可能である。
0676デフォルトの名無しさん
2015/01/25(日) 21:39:07.93ID:q//XhoOI無理じゃね
0677デフォルトの名無しさん
2015/01/25(日) 22:02:04.94ID:3yf8YM/m0678デフォルトの名無しさん
2015/01/25(日) 22:03:51.60ID:VvVj4cWm0679デフォルトの名無しさん
2015/01/25(日) 22:13:58.66ID:u5v7I2U8もしかしてwine をVC でビルドしてWindows で動かしたいわけかな?
0680デフォルトの名無しさん
2015/01/25(日) 22:16:37.41ID:iRaJjyt20681デフォルトの名無しさん
2015/01/25(日) 22:18:45.24ID:VvVj4cWm0682デフォルトの名無しさん
2015/01/25(日) 22:21:28.89ID:iRaJjyt2客はカニカマを持ち込んで思い思いのソースを掛けて食べる
0683デフォルトの名無しさん
2015/01/25(日) 22:49:30.53ID:oqd1KBB3コートって、ショッピングモールにあるフードコートか
0684デフォルトの名無しさん
2015/01/25(日) 23:00:22.59ID:HJERafoRもっといいのがあったらそっちがメジャーになっているだろうに
0685デフォルトの名無しさん
2015/01/25(日) 23:16:49.63ID:MwbE0lEmソースバイキングならホテルのレストランで見かけたことがある
ソースが何種類もあって客は小皿に取り分けてくというw
ライスがパッサパサでフードコート以下だったな
ソースばかりに気をとられて基本が疎かになってるのは良くない
0686デフォルトの名無しさん
2015/01/26(月) 00:11:10.54ID:EVnleu0D0687デフォルトの名無しさん
2015/01/27(火) 06:06:23.73ID:CbndgpqM0688デフォルトの名無しさん
2015/01/27(火) 06:25:35.31ID:NrHYAzh70689デフォルトの名無しさん
2015/01/27(火) 06:44:30.81ID:CbndgpqM(*^_^*)
0690デフォルトの名無しさん
2015/01/27(火) 07:22:45.70ID:bJWDyyzEやっぱり変わってるなLisp
正規表現か何か?
0691デフォルトの名無しさん
2015/01/27(火) 14:22:59.84ID:gMYysETi0692デフォルトの名無しさん
2015/01/27(火) 16:57:52.40ID:bJWDyyzE0693デフォルトの名無しさん
2015/01/27(火) 19:17:52.66ID:tavqsaWy「いい加減右アングルブラケットにスペース入れるのやめて下さい先輩」
0694デフォルトの名無しさん
2015/01/27(火) 20:56:43.30ID:ijcuALOqC++03なら仕方ないだろ
それともC++11以外存在も認めないのか
0695デフォルトの名無しさん
2015/01/27(火) 21:37:13.16ID:eg3NzOKG>>694は会話のできないアスペ
0696デフォルトの名無しさん
2015/01/27(火) 21:47:30.63ID:KRe6og0K0697デフォルトの名無しさん
2015/01/27(火) 22:15:44.53ID:H3vCWtkz0698デフォルトの名無しさん
2015/01/27(火) 22:34:14.31ID:RrImLxtB0699デフォルトの名無しさん
2015/01/28(水) 17:12:05.44ID:bV4yRAzcttps://paiza.io/projects/jCGMw6888hiwBbXRfJm7NQ
あと、これ以外の方法でforeachで配列逆からなめる方法無いですか?
0700デフォルトの名無しさん
2015/01/28(水) 17:35:48.62ID:bV4yRAzc0701デフォルトの名無しさん
2015/01/28(水) 17:45:56.59ID:8qkuY6PV0702デフォルトの名無しさん
2015/01/28(水) 17:48:52.76ID:UK1aUFc00703デフォルトの名無しさん
2015/01/28(水) 17:59:15.94ID:bV4yRAzcで、逆からなめるスマートな方法ってない?foreachで。
0704デフォルトの名無しさん
2015/01/28(水) 22:44:08.65ID:anpOJbJr0705デフォルトの名無しさん
2015/01/28(水) 22:52:02.75ID:tVdW+eQ40706デフォルトの名無しさん
2015/01/28(水) 23:18:34.92ID:bV4yRAzcこれが最適なら安心だ。ご意見ありがとう。
0707デフォルトの名無しさん
2015/01/28(水) 23:59:08.46ID:P4n3EC8x0708デフォルトの名無しさん
2015/01/29(木) 00:02:38.77ID:0Sn1bNfj0709デフォルトの名無しさん
2015/01/29(木) 17:46:17.16ID:NaBCaSZN0710デフォルトの名無しさん
2015/01/29(木) 18:49:06.99ID:0Sn1bNfj0711デフォルトの名無しさん
2015/01/29(木) 21:15:53.29ID:pKGFftLshttps://paiza.io/projects/gJ3slfe6OcXTnQpP1wIPzg
0712デフォルトの名無しさん
2015/01/29(木) 21:50:07.72ID:EJcHYbw80713デフォルトの名無しさん
2015/01/29(木) 21:53:45.85ID:pKGFftLsエラー出して遊んでて忘れてた
0714デフォルトの名無しさん
2015/01/30(金) 23:05:17.71ID:4sRq6VBsをヘッダに書くのは未定義動作になるんですか?
0715デフォルトの名無しさん
2015/01/30(金) 23:06:57.58ID:izyMlQ+20716デフォルトの名無しさん
2015/01/31(土) 06:49:29.15ID:QojJdjq00717デフォルトの名無しさん
2015/01/31(土) 08:14:46.14ID:twuLHPdyいま、A、Bいずれかの名前が入っていると期待される文字列に応じて
Aの名前が入っていたらAをnew
Bの名前が入っていたらBをnew
と動的に切り替えることはできますか?
0718デフォルトの名無しさん
2015/01/31(土) 08:31:30.99ID:twuLHPdy切り替えるコードでは、クラスA、クラスBは未知とします。
例えば、切り替えるクラスの型だけ文字列を比較して分岐するということはしないということです。
ようするにObjective-CのNSCodingのようなことをやりたいのです。
ポインタ(正確にはshared_ptr)で参照するオブジェクトを、型情報を保ったままディスクに保存し、
元の型として復元したいのです。
0719デフォルトの名無しさん
2015/01/31(土) 08:39:32.96ID:22jr/cuQ0720デフォルトの名無しさん
2015/01/31(土) 08:48:10.90ID:sjGzdXck文字列を比較して一致したクラスをnewして返せばいいじゃん。
if文の羅列
0721デフォルトの名無しさん
2015/01/31(土) 09:21:35.44ID:QYjeED09真に定義が未知なクラスのインスタンスは作れんだろう。
NSCodingだってそれぞれの型のデシリアライズの仕方を知っている人がどっかに存在するわけで、
本質的には「切り替えるクラスの型だけ文字列を比較して分岐」と変わらん。
0722デフォルトの名無しさん
2015/01/31(土) 09:27:51.46ID:22jr/cuQaからzアルファベットの10文字のクラスを27の10乗個のクラスを
前もって作っておいて文字列と比べるということだろう
0723デフォルトの名無しさん
2015/01/31(土) 09:28:08.78ID:3hGQPgsJおそらくあなたの想像しているような処理だけでは「できない」。
少なくとも、その処理をサポートする全てのオブジェクトは同一のクラス/インタフェースから派生し、
さらに「文字列 (ID) → インスタンスをnewして返す関数」のマッピングどこかに持たなければならない。
C/C++で動的にオブジェクトを生成/シリアライズする方法は
MicrosoftがCOM/OLEで20-30年前に通った道だから、
CoCreateInstance なり IPersistStreamInit をキーワードに調べてみるといい。
Objective-C のほうはよく知らないが、どちらかといえば全てのインスタンスが
map<string, any> みたいなものだから、C++のクラスとは本質的に異なると思う。
0724デフォルトの名無しさん
2015/01/31(土) 09:45:16.19ID:sjGzdXckそりゃ無理だ。
コンパイル時に定義されていないクラスは生成できないし。
ポリモーフィックに扱うにしても基底クラスはコンパイル時に知っておかないと(コンパイル時に知らない派生クラスを他モジュールからもらって扱うのは可能。ちゃんと派生クラスを知ってるモジュールが静的/動的リンクされてないといけないが)。
0725デフォルトの名無しさん
2015/01/31(土) 09:50:16.24ID:22jr/cuQ0726デフォルトの名無しさん
2015/01/31(土) 09:53:37.26ID:3hGQPgsJエクスポート名をdemangleして関数ポインタを得ることはできるかもしれない。
その場合、「コンストラクタの関数ポインタ」という珍しいものを扱うことになるんだろうか。
コンパイラに依存しすぎるし、やりたくは無いな。
0727デフォルトの名無しさん
2015/01/31(土) 09:53:39.16ID:oXb68sm+コンストラクタじゃ無理だからファクトリー関数を用意して、
クラス名とファクトリー関数のマッピングをどっかに保持して、
そんな感じでやってみたら。
いずれにしろ、
C++ シリアライズ
で検索して既存のコードやコンセプトは理解してから開発着手した方がいい
0728デフォルトの名無しさん
2015/01/31(土) 11:07:02.51ID:NVotuPvn実行時にソースコンパイルして動的リンクすればいいだけでしょ
>>717 がやりたいことかどうかは知らんけど w
0729デフォルトの名無しさん
2015/01/31(土) 12:24:05.64ID:sjGzdXck名前を見てオブジェクトを生成する関数(dll等になげてもよい)を用意
基底関数にシラアライズ仮想メンバ関数を用意して各派生クラスに実装
名前を基に生成されたオブジェクトのシリアライズ関数を呼ぶ
でいいよ。
コンストラクタにまかせるとデータの仕様を統一しないといけないのでポリモフィックする意味がほとんどなくなる。
0730デフォルトの名無しさん
2015/01/31(土) 12:27:55.27ID:F5r8Sgl4汚いけど生成クラスを使うのが手かと。
http://ideone.com/4A5E1C
>>729の通りシリアサイザーを仮想にしておけばOK
0731デフォルトの名無しさん
2015/01/31(土) 13:17:22.95ID:rnTLCwKcただしファクトリー関数の実装には当然クラスAやBの素性がわからないと作りようがない。
結局やってることはCOMを使ったプラグイン設計みたいなもんだな。
0732デフォルトの名無しさん
2015/01/31(土) 13:22:42.92ID:DdagF+N60733デフォルトの名無しさん
2015/01/31(土) 13:26:42.08ID:rnTLCwKc気づいてるよ
要するにそういう方法論しかないて事よ
0734デフォルトの名無しさん
2015/01/31(土) 14:31:33.63ID:1XVXay7T0735デフォルトの名無しさん
2015/01/31(土) 15:38:38.04ID:shQn+v+X違うの
0736デフォルトの名無しさん
2015/01/31(土) 15:51:20.30ID:j6V8jxSf0737デフォルトの名無しさん
2015/01/31(土) 22:56:04.95ID:tOT84aIP結局のところ、リフレクションが無いC++では、難しいということなんですね。
共通のインターフェースで、シリアライズするのはともかく、
コンストラクタが、やはり静的に結びついてしまっていますから、
どこかで分岐してコンストラクタを呼び出すとか、そういうことになってしまうんですね。
0738デフォルトの名無しさん
2015/01/31(土) 23:02:34.32ID:VoCOaD6Kいまいち想像できない。
0739デフォルトの名無しさん
2015/01/31(土) 23:03:02.31ID:VoCOaD6K〇状況
0740デフォルトの名無しさん
2015/01/31(土) 23:08:02.34ID:DdagF+N60741デフォルトの名無しさん
2015/01/31(土) 23:15:31.01ID:Jp7RHa0h0742デフォルトの名無しさん
2015/01/31(土) 23:17:34.65ID:scB1FLY/0743デフォルトの名無しさん
2015/01/31(土) 23:17:37.67ID:DdagF+N6俺も同じこと言っちまったww
0744デフォルトの名無しさん
2015/01/31(土) 23:21:57.60ID:Jp7RHa0hファクトリ関数という手法は別に例外的な苦肉の策みたいなものじゃなくて、
普通に使われるものだから、こういう時の設計手法として憶えておくといい。
0745デフォルトの名無しさん
2015/01/31(土) 23:34:12.95ID:3hGQPgsJスクリプト言語用のバインダで結構欲しいケースがあるんだよな
0746デフォルトの名無しさん
2015/01/31(土) 23:35:53.42ID:tOT84aIPですからそれをやると、クラスを追加したり変更したりするたびにその辞書を手作業で更新することになりますよね。
ランタイムがプログラム中のクラスをすべて把握して、動的にクラスオブジェクトを取得したり
そのクラスオブジェクトにメッセージを送信してインスタンスを作成したりできたりするObjective-Cに比べれば
そういう辞書を手作業で作らなきゃいけないのは苦肉の策以外の何物でもないと思いますが、、、
0747デフォルトの名無しさん
2015/01/31(土) 23:50:26.91ID:3hGQPgsJ動的に作成されるべきクラスと、そうでないクラスがあるはずで、どちらに属するかはコンパイラが判断できるものじゃない
0748デフォルトの名無しさん
2015/01/31(土) 23:51:30.76ID:2jhTSE71>クラスを追加したり変更したりするたびにその辞書を手作業で更新
>>730のように動的に辞書を作るのでは不満?
どうしてもmain実行前のグローバル変数初期化で使いたいとか
0749デフォルトの名無しさん
2015/01/31(土) 23:53:51.94ID:GX7Z3ahN0750デフォルトの名無しさん
2015/02/01(日) 00:01:34.22ID:3unsKMiE0751デフォルトの名無しさん
2015/02/01(日) 00:11:55.42ID:Elw+oH7fC++にそういった機能が用意されてなくても実装は可能だし
元から無いことで不要なメモリ消費等を抑えていることになる。
0752デフォルトの名無しさん
2015/02/01(日) 00:25:23.58ID:uqbaW6bGユニットテストフレームワークとかそんな感じでテストケース追加できるようにしてると思う
0753デフォルトの名無しさん
2015/02/01(日) 00:30:41.90ID:Drklm6UP最適化厨だらけのC++でリフレクションなど受け入れられそうにないけどな
0754デフォルトの名無しさん
2015/02/01(日) 00:57:57.32ID:plm7tRtI太古からあるMFCでさえクラス定義と実装の際にマクロで
簡単にファクトリーのテーブルへの登録を自動化してるよ。
たいていのことには先行事例があるから、無闇に考えず
いくつか例を学習してから考えた方がいいと思う。
あと Objective-C でも alloc はできても init できないから
結局 NSCoder という共通インタフェイスでシリアライズしてるわけで
そこのところだけ取ってみると C++ と大差ない。
0755デフォルトの名無しさん
2015/02/01(日) 15:13:40.44ID:+Wu4plDOファクトリーメソッドで名前により派生クラスをnewをして
全てのクラスを基底クラスで操作すれば
ダックタイピングなんだよな
0756デフォルトの名無しさん
2015/02/01(日) 15:34:16.15ID:4FFwxC1Hまあ結局普通のポリモーフィズムそのものに帰着するんだな
0757デフォルトの名無しさん
2015/02/01(日) 21:57:14.71ID:a7daD80f多くて何世代くらいですか?
0758デフォルトの名無しさん
2015/02/01(日) 21:59:14.31ID:ckgWNtQ30759デフォルトの名無しさん
2015/02/02(月) 08:02:23.54ID:VcM6Bw55allocできてもinitできないというのはちょっとよくわかりません。
allocとinitはほぼ必ずセットで呼び出すので、initできないなんてことはないと思いますが。
ポリモーフィズムを使ってシリアライズを行うスキームにおいて、
共通インターフェースが必要になるのは当たり前だと思います。
なんでそこが論点になるのかちょっとよくわかりません。
当たり前のことです。java.io.Serializableだってそうです。
問題は、C++では共通インターフェースを定めたところで、コンストラクタをポリモーフィズムにできない、
つまり、NSCodingにおけるinitWithCoder:が、通常の方法では実現できないということだと思います。
0760デフォルトの名無しさん
2015/02/02(月) 08:14:10.37ID:JrjmjvyB0761デフォルトの名無しさん
2015/02/02(月) 08:46:38.92ID:9S8Foh710762デフォルトの名無しさん
2015/02/02(月) 09:12:31.65ID:k5HPKynx- Java における java.io.Serializable
- Objective-C における NSCoding
- C++ (COM) における IPersistXXX 系インタフェース
全部同じ目的のためのものだ。勝手に実装して、勝手に使えよ。
C++では標準ライブラリではなく、MS製だからサポートされないケースが多いってだけ。
まぁ Obj-C もどこまでが標準で、どこからがApple製なのかわからないけど。
0763デフォルトの名無しさん
2015/02/02(月) 20:23:24.05ID:YMa8AXvIそれを特定の場合をとって苦肉の策とか
某 kenokabe と同じにおいがする
0764デフォルトの名無しさん
2015/02/02(月) 21:42:01.59ID:TDQVyoRLなんて存在するの
0765デフォルトの名無しさん
2015/02/02(月) 21:45:58.70ID:BTw9Mjmbどうやってフィルタリングしようか。
0766デフォルトの名無しさん
2015/02/02(月) 22:39:58.39ID:9qb16I9S0767デフォルトの名無しさん
2015/02/03(火) 00:06:41.88ID:kePsD8YS0768デフォルトの名無しさん
2015/02/03(火) 11:57:14.03ID:qMrjKJFk君の言ってることは10年も前にファクトリを使うって方法で解決されているので、
コンストラクタがテーブル化できないというのは誰にとっても別に問題じゃないんだ。
「ダイナミックだからって alloc できても init できない」というのは、
CoreFoundation (NextStep 由来のクラス群)の一部のオブジェクトが
シリアライズ・デシリアライズできるのは君が言う
>>746
>ランタイムがプログラム中のクラスをすべて把握して、動的にクラスオブジェクトを取得したり
>そのクラスオブジェクトにメッセージを送信してインスタンスを作成したりできたりする
こととはあまり関係なく、単に NSCoder という共通インタフェイスを
実装しているから仕様の分かってい initWithCoder: で初期化できるからである、
ってこと。そうしてこのパターンはC++でも使われている。
あと、勘違いされないように先に書いておくけど、
君と議論する気少しもないよ。何も得るものもないし。
問われたので説明しただけ。
これで分からないならヤフー知恵袋ででもきいてくれ。
vipでもいいし。
0769デフォルトの名無しさん
2015/02/03(火) 12:21:51.01ID:AqPQb7sP0770デフォルトの名無しさん
2015/02/06(金) 18:04:57.47ID:R9mupi/Wstd::vector<int> getList();
void checkList(const std::vector<int>& list);
checkList(getList());→「C4238: 非標準の拡張機能が使用されています : 右辺値のクラスが左辺値に使用されます。」
0771デフォルトの名無しさん
2015/02/06(金) 18:19:01.41ID:JzdRSKiT0772デフォルトの名無しさん
2015/02/06(金) 18:40:13.81ID:QZdLn77T0773デフォルトの名無しさん
2015/02/06(金) 19:12:15.39ID:eDHY2J9J0774デフォルトの名無しさん
2015/02/06(金) 19:23:23.27ID:a7dCLNna黙らせてokだけどそれ黙らせると非const参照やら
std::vector<int> *p = &getList();
もエラー出なくなりそうだから気をつけろ。
0775デフォルトの名無しさん
2015/02/06(金) 19:42:09.00ID:PHMIv/5N0776デフォルトの名無しさん
2015/02/06(金) 21:19:00.39ID:XofOsMKd0777デフォルトの名無しさん
2015/02/06(金) 21:20:33.76ID:PNoWHx2cバシバシ使ってる
0778デフォルトの名無しさん
2015/02/06(金) 21:26:40.50ID:w1qaGmGlVS2010は昔使ったけどそんなワーニング出た覚えないけどなあ
0779デフォルトの名無しさん
2015/02/07(土) 07:42:03.87ID:X0JGbSqQconst付け忘れてるんだろ。cppだけ直してヘッダー修正忘れとか。
constでvolatileの付いていない参照型は右辺値を受け取れるので
ソースを見直せとしか言いようがない
0780デフォルトの名無しさん
2015/02/07(土) 08:04:14.12ID:2PYtlFBn>const付け忘れてるんだろ。cppだけ直してヘッダー修正忘れとか。
それはワーニングじゃ済まないのでは?
0781デフォルトの名無しさん
2015/02/07(土) 08:32:42.92ID:7NtuxcOF0782デフォルトの名無しさん
2015/02/07(土) 09:32:44.93ID:4cqwcWM8おれもそう思って一通り調べた上でつけ忘れでは
ないと判断して>>774を書いたよこんにちは低脳www
0783デフォルトの名無しさん
2015/02/07(土) 10:40:30.38ID:scHB89CY0784デフォルトの名無しさん
2015/02/07(土) 10:46:19.56ID:scHB89CYやっぱり何か勘違いしてるんじゃない?
0785デフォルトの名無しさん
2015/02/07(土) 13:55:11.99ID:CMxScs3p0786デフォルトの名無しさん
2015/02/08(日) 00:24:28.42ID:5gL+vLXV0787デフォルトの名無しさん
2015/02/08(日) 12:10:38.91ID:JwkQ/TxRどうして?
0788デフォルトの名無しさん
2015/02/08(日) 12:17:49.18ID:vGudLyzY0789デフォルトの名無しさん
2015/02/08(日) 12:18:53.44ID:FEtsp/Se規格上絶対に呼ばないと言う決まりは無いんじゃないの?
最適化で単なる静的オブジェクトにされているとか。
0790デフォルトの名無しさん
2015/02/08(日) 12:30:53.52ID:vGudLyzYそんなものデバッガでデストラクタを誰が呼び出してるか見ればすぐ分かること
0791デフォルトの名無しさん
2015/02/08(日) 12:41:47.17ID:V4veLeCPmallocすればいいなじゃない?
暗黙でfree呼ばれてもデストラクタ呼びそうにないし
0792デフォルトの名無しさん
2015/02/08(日) 12:45:05.19ID:FEtsp/Se0793デフォルトの名無しさん
2015/02/08(日) 12:45:43.28ID:JKFx7boS0794デフォルトの名無しさん
2015/02/08(日) 19:35:43.09ID:4Mroy5Xc0795デフォルトの名無しさん
2015/02/08(日) 19:49:10.30ID:yAnR3shiなんにせよ再現するコードをideoneにでも張ってみろ
話はそれからだ
0796デフォルトの名無しさん
2015/02/08(日) 22:06:30.03ID:vhN8tDg+関数のリターンコードしかないんじゃね
WindowsのCOM例外だって、DLL越しに例外出してるわけじゃなく、関数のマイナスリターンを受け取ったラッパークラスがthrowしてるだけだし
0797デフォルトの名無しさん
2015/02/08(日) 22:07:56.97ID:lrvjZnd4テキストファイルに画像名を入力しておいて、その画像を読み込むことってできませんかね?
テキストファイルの読み込みは分かるんですが、画像名を変数値において読み込むことが出来ません
0798デフォルトの名無しさん
2015/02/08(日) 22:28:23.70ID:JJBPIwXc読み込むだけならstd::ios::binaryつけてテキストと同じように読み込めばいい
0799デフォルトの名無しさん
2015/02/08(日) 22:34:50.30ID:VuJgIzCjファイル名の書き方はフルパスで書いてるんだよね?
0800片山博文MZ ◆T6xkBnTXz7B0
2015/02/08(日) 22:42:42.46ID:ogx/tY05テキストファイルから読み取った文字列でパスファイル名を構築。
パスファイル名を使って画像ファイルを読み込む
0801デフォルトの名無しさん
2015/02/08(日) 22:43:06.66ID:lrvjZnd4そうです
0802デフォルトの名無しさん
2015/02/08(日) 22:55:18.22ID:OjIKeA7u1. テキストファイルに、別のテキストファイルのパスを書いておいて、その別のテキストを読み込む。
2. プログラムに画像ファイルのパスを直接書いておいて、それを読み込む。
3. 両方を合体させる。
0803デフォルトの名無しさん
2015/02/08(日) 22:57:35.82ID:9fccusUdこの言い回しに罠が潜んでいる気がする
0804デフォルトの名無しさん
2015/02/08(日) 22:59:48.26ID:lrvjZnd4勘違いしていまして、普通に出来ました。
お騒がせしてすみませんでした。
0805デフォルトの名無しさん
2015/02/09(月) 12:15:10.44ID:uXRkJv4Sthrowするだけで問題なく飛んでいくだろ
0806デフォルトの名無しさん
2015/02/09(月) 12:26:45.33ID:Z/OgJqfRC言語の関数とみなされるものがあると、そこで terminate() されちゃう。
よく知らないが、コンパイラオプションや extern "C++" みたいなものが要るのかも。
MSVCだと /EH (例外処理モデル) オプションに相当するのかな?
まぁ、そもそも C++ はライブラリの境界を越えて使うべき言語じゃないよ。
関数の名前付けも、例外や仮想関数の実現方法も、STLも、ライブラリ内外で同じものを使っている保証がない。
0807デフォルトの名無しさん
2015/02/09(月) 15:08:03.45ID:uXRkJv4SCリンケージで公開している関数からthrowで届くが、なにか?
0808デフォルトの名無しさん
2015/02/09(月) 15:14:09.52ID:uXRkJv4S0809デフォルトの名無しさん
2015/02/09(月) 15:26:59.40ID:x5pP7N8elibstd++の話なんか出てない
dlopenとかで繋げられる動的ライブラリーの話だろ
0810デフォルトの名無しさん
2015/02/09(月) 15:29:15.24ID:uXRkJv4SdlopenでCリンケージの関数で問題なく飛んでいきますが、なにか?
0811デフォルトの名無しさん
2015/02/09(月) 16:22:44.68ID:5H5MU55hg++はextern "C"関数の中に例外を通せるようになったということ?
0812デフォルトの名無しさん
2015/02/09(月) 16:54:08.92ID:y+25O55h人から情報貰っといて試しもせずに文句つけてたのか?
0813デフォルトの名無しさん
2015/02/09(月) 17:22:18.84ID:Qj3ltr0R0814デフォルトの名無しさん
2015/02/09(月) 17:23:34.92ID:Qj3ltr0R○ 無意味だろうよ
させん
0815デフォルトの名無しさん
2015/02/09(月) 18:41:48.75ID:U1Ilmw0Rお前の環境で動いたとかチラシの裏はどうでもいいから。
例外をサポートしないリンケージで例外スローしておいて「なにか?」とか、
お前のアタマが心配だぜ
0816デフォルトの名無しさん
2015/02/09(月) 18:50:28.25ID:5H5MU55h文句って、何のことやら
0817デフォルトの名無しさん
2015/02/09(月) 18:54:45.92ID:sphOw1wN機能的に出来るよって話でしょ
0818デフォルトの名無しさん
2015/02/09(月) 19:15:19.22ID:y+25O55hほー
c関数にc++関数をコールバックに登録して例外出したらいけないとでも?
0819デフォルトの名無しさん
2015/02/09(月) 19:18:06.24ID:y+25O55h例外を投げるのだから、リンケージに関係なくコンパイラはc++。
これで投げられない理由がない。
0820デフォルトの名無しさん
2015/02/09(月) 19:43:05.53ID:dMqS5RFC昔のgccでコンパイルされたC関数は例外投げられたらちゃんとクラッシュしたし、今でも-fno-unwind-tables -fno-asynchronous-unwind-tables付けてコンパイルすりゃやっぱりクラッシュする
まして他のコンパイラでコンパイルされたC関数なら同じように例外サポートされてる保証などどこにもない
逆に言えば、全部モダンなgccで例外サポート付きでコンパイルされていることを前提とするなら、例外投げても特に問題はない
0821デフォルトの名無しさん
2015/02/09(月) 19:53:57.68ID:M8FU3jIU呼び出し側でキャッチしたそうな雰囲気だから
双方が互換性のあるコンパイラで適切にビルドされてれば
問題ない、という回答になるのかな。
0822デフォルトの名無しさん
2015/02/09(月) 20:03:22.36ID:Z/OgJqfR>>819 無能
0823デフォルトの名無しさん
2015/02/09(月) 20:13:03.35ID:sphOw1wN0824デフォルトの名無しさん
2015/02/09(月) 20:14:07.31ID:X6dIQ9ex0825デフォルトの名無しさん
2015/02/09(月) 20:18:33.53ID:dMqS5RFC有り得ないケースって何を指してるんだ?
0826デフォルトの名無しさん
2015/02/09(月) 20:47:55.49ID:LaqkBFHJおまえが無能だろwwwww
ライブラリを越えて例外投げれないとか言うから、libstdc++を例に出してやってもまだ凝りないかよw
0827デフォルトの名無しさん
2015/02/09(月) 20:51:37.15ID:sphOw1wNextern "C"で例外ってな話のつもり
やればやれるけどやる意味がない
キンタマ踏み合うケースを想定したらきりがない
0828デフォルトの名無しさん
2015/02/09(月) 21:01:52.28ID:dMqS5RFC0829デフォルトの名無しさん
2015/02/09(月) 21:03:56.84ID:sphOw1wNテスト通らないからなぁ
0830デフォルトの名無しさん
2015/02/09(月) 21:43:29.63ID:g8dM0PXc0831デフォルトの名無しさん
2015/02/09(月) 21:58:16.40ID:dMqS5RFC0832デフォルトの名無しさん
2015/02/09(月) 22:02:15.69ID:M8FU3jIU-fexception だか何だかで適切にビルドされていれば
ライブラリ超えて比較関数内で投げた例外が届く、と。
でも普通に c から呼んでも例外投げてくるライブラリなんてのを
もし作るなら C リンケージにしないでおいてくれるべきだよね。
0833デフォルトの名無しさん
2015/02/09(月) 22:48:41.52ID:9mlZ/Vie>規格の時点でCリンケージと定められているC由来の関数
ほうほう、それは規格の何ページに書かれているのですか?
0834デフォルトの名無しさん
2015/02/09(月) 22:52:29.27ID:jqtu7JjKqsortを例に出すのは不適切だろ
qsortはCリンケージの関数を受け取るものとC++リンケージの関数を受け取るものの二種類あるんだよ
ほとんど、まともに実装されていないけど
0835デフォルトの名無しさん
2015/02/09(月) 22:55:40.19ID:n06hI/j/ロベールのC++入門と迷う
0836デフォルトの名無しさん
2015/02/09(月) 22:58:22.18ID:0Iq2ks5nほうほう、それはISO/IEC 14882:2014のどこに書いてあるのですか?
0837デフォルトの名無しさん
2015/02/09(月) 23:03:16.98ID:dMqS5RFC2 Whether a name from the C standard library declared with external linkage has extern "C" or extern
"C++" linkage is implementation-defined. It is recommended that an implementation use extern "C++"
linkage for this purpose.
……すまん、実装依存だったわ。
0838デフォルトの名無しさん
2015/02/09(月) 23:10:51.38ID:0Iq2ks5nfloat abs(float)とか
0839デフォルトの名無しさん
2015/02/09(月) 23:29:54.61ID:VT0alxaD素数を求めるアルゴリズムを
教えてください
0840デフォルトの名無しさん
2015/02/09(月) 23:32:26.56ID:kCdpER4+多倍長変数とAKS実装してください。
0841デフォルトの名無しさん
2015/02/09(月) 23:33:03.18ID:6W03z7LQ標準Cライブラリーの話してんだよな?
0842デフォルトの名無しさん
2015/02/09(月) 23:34:11.63ID:jqtu7JjK25.5
0843デフォルトの名無しさん
2015/02/11(水) 13:32:48.37ID:Y/yz+yzvどうでもいいけどね
0844デフォルトの名無しさん
2015/02/11(水) 15:11:08.17ID:fznki0OC0845デフォルトの名無しさん
2015/02/11(水) 17:38:43.86ID:oz4RTyK1あるいは単なるpushとか
英語圏では自然な感覚なのか
0846デフォルトの名無しさん
2015/02/11(水) 18:46:33.47ID:nxT/cTMW0847デフォルトの名無しさん
2015/02/11(水) 20:46:52.43ID:fznki0OC他のデータを後から入れたら最後じゃなくなるし。
最後にセットします!と宣言しておきながらすぐずれたらおかしい
0848デフォルトの名無しさん
2015/02/12(木) 00:58:54.15ID:G6mvybFN0849デフォルトの名無しさん
2015/02/12(木) 01:02:46.66ID:pVKW26htfront, backは方向をざっくりイメージさせるだけ
0850デフォルトの名無しさん
2015/02/12(木) 01:32:46.54ID:CBdFIpzZ現時点での、って考えたら矛盾してないし
backも一緒だよね
>>849
そのイメージがなんか逆なんだよなー
キューならラーメン屋の列に並ぶような感じで
back=後ろ、背中 なんだけども。
new_tail/headとかでもよかった
0851デフォルトの名無しさん
2015/02/12(木) 07:12:15.92ID:CKPSod+9これでおk
0852デフォルトの名無しさん
2015/02/12(木) 07:51:10.72ID:cY6jzjUB先頭、最後尾と前、後ろの違いだな。
字面からして日本語でも同じじゃないか。
0853デフォルトの名無しさん
2015/02/12(木) 11:50:46.70ID:RvtVdJIV0854片山博文MZ ◆T6xkBnTXz7B0
2015/02/12(木) 22:10:50.65ID:PE152xwmレベルアップ!
0855デフォルトの名無しさん
2015/02/12(木) 22:27:19.70ID:5OHRavMJあまり使わないね。
unique_ptrで大抵すんでしまう。
0856デフォルトの名無しさん
2015/02/12(木) 22:49:49.78ID:jvsVLl3C0857デフォルトの名無しさん
2015/02/12(木) 22:51:29.82ID:kUpijB8jshared_ptrの出番は少ない
0858片山博文MZ ◆T6xkBnTXz7B0
2015/02/12(木) 23:12:20.94ID:PE152xwm0859デフォルトの名無しさん
2015/02/12(木) 23:19:44.13ID:hBWmgXOx循環参照が問題にならないケースは、生成と破棄が明確で、unique_ptr + 一時的な生ポインタで済んじゃう。
指定したオブジェクトだけ循環参照対応のGCで管理してくれるライブラリってあるかな?
特定のクラスを継承したり、指定された連想配列を使うよう強制される形式でも良いからさ。
0860デフォルトの名無しさん
2015/02/12(木) 23:30:45.25ID:Rk3YDU9i0861デフォルトの名無しさん
2015/02/13(金) 00:10:41.33ID:v7o1vyZw本当はunique_ptrでいきたいんだが、それだとweak_ptrが使えないんで仕方なく。
0862デフォルトの名無しさん
2015/02/13(金) 00:44:32.58ID:G7jPEu4l0863デフォルトの名無しさん
2015/02/13(金) 03:13:01.65ID:RI9GoVWK0864デフォルトの名無しさん
2015/02/13(金) 04:53:27.36ID:dikEWRXf俺の場合、共有したいのってなかったら作るで作ったら消さないってのが多いからナマポで十分だな
カウンタなんかいらん
消すのは最後にコンテナ全部なめてdelete
0865デフォルトの名無しさん
2015/02/13(金) 05:51:04.58ID:iao0OBU7お前のコードは例外安全性が終わってるに1000ペリカ
0866デフォルトの名無しさん
2015/02/13(金) 07:50:48.14ID:6T0J+IN6毎回キャッシュオブジェクトに問い合わせさせてインスタンスへの生ポ返せばいいのだから。
それこそcpuのキャッシュシステムみたいに
0867デフォルトの名無しさん
2015/02/13(金) 07:56:19.57ID:6T0J+IN6オブジェクトの操作するなら
解放されないようロック機構はいるが、
これはsharedにしたところで状況かわらない。
0868デフォルトの名無しさん
2015/02/13(金) 08:15:25.32ID:VTAHyJPfキャッシュといっても、少なくとも2タイプあるってことだね。
A. 他で使用中の場合に同じものを返す → shared_ptr/weak_ptr 向き
B. 他で使われなくなってもしばらく保持 → 独自の管理システムがいる
0869デフォルトの名無しさん
2015/02/13(金) 13:14:33.09ID:G7jPEu4l参照してるものがキャッシュから外れて解放されたらアウトじゃん
0870デフォルトの名無しさん
2015/02/13(金) 15:24:56.18ID:RYKXgmC/ユニークはコピーできないのが利点欠点はっきりしすぎて使いづらい。
0871デフォルトの名無しさん
2015/02/13(金) 15:33:48.16ID:DIvXC7OYこういうのって例外使わないスタイルだったら基本的に問題なくね?
bad_allocなんて上がって来たらどうせ死ぬしかないし、
一般的なOSのリソースもプロセス終了とともに消えるし。
0872デフォルトの名無しさん
2015/02/14(土) 00:38:40.53ID:yb84CiHLそういう環境ばかりではないけどね。
0873デフォルトの名無しさん
2015/02/14(土) 00:50:01.72ID:a6xGr1RHマルチスレッドで動かした時の事もちゃんと考えてね
0874デフォルトの名無しさん
2015/02/14(土) 12:57:25.03ID:Zwqn9ydgmake_uniqueでも採用されてないよね?
0875デフォルトの名無しさん
2015/02/14(土) 14:36:48.05ID:xvNWKp270876デフォルトの名無しさん
2015/02/20(金) 23:53:28.09ID:Tylgw+9Ttrue/falseで何か不都合あるんか
0877デフォルトの名無しさん
2015/02/21(土) 00:07:47.59ID:4U2Jdz4k0878デフォルトの名無しさん
2015/02/21(土) 00:13:25.08ID:gHUeTDm+テンプレートでコンパイル時に判定するため、主にSFINAEの為に使う。
enable_ifでググると具体的な使い方が見つかると思う。
それで理解出来ない場合はまだ早かったと思って諦メロン
0879デフォルトの名無しさん
2015/02/21(土) 00:39:01.25ID:kGLUOU7n0880デフォルトの名無しさん
2015/02/21(土) 00:40:24.58ID:bXnxwHVe0881デフォルトの名無しさん
2015/02/21(土) 01:30:28.70ID:K/I0UgM60882デフォルトの名無しさん
2015/02/21(土) 04:51:44.24ID:XrYFE+GASFINAEでつかうのにtrue/falseで何か不都合がある?
0883デフォルトの名無しさん
2015/02/21(土) 05:12:32.88ID:bXnxwHVetrue/falseは値だから。
0884KUSO KOTE ◆unko./w.Osri
2015/02/21(土) 06:05:03.90ID:RMvJBifBtemplate<typename T, bool mode>
auto f(T);
template<typename T>
auto f<T, true>(T); // コンパイルエラー
実装を切り替えを、特殊化でなくオーバーロードで行う必要あるため(たぶん)。
template<typename T>
auto f(T, std::true_type);
template<typename T>
auto f(T, std::false_type);
enable_ifを使うならtrue/falseでもいいような気もする(たぶん)。
template<typename T>
auto f(T) -> typename std::enable_if<criteria1, ret_t>::type;
template<typename T>
auto f(T) -> typename std::enable_if<!(criteria1), ret_t>::type;
0885デフォルトの名無しさん
2015/02/21(土) 10:37:40.11ID:Z5eoqA4p仕様にそったis_xyz系のtraitsクラスを容易かつ正確に定義できるように
適切に継承するだけで仕様で要求されるインターフェイスとその機能を
自動的に実装できるようにするための部品として用意されている
traitsクラスの仕様で要求されることがstaticメンバのvalueでtrue/falseを
保持するだけ程度なら個々のクラスで個別に実装してもたいしたことはないが
要求が多ければ正確に実装することに手間がかかり間違える可能性も多くなる
そこを継承一つですませばその手間とリスクは大きく低減される
また将来traitsに要求される仕様が拡張された場合に
既存のtraitsクラス全てを直接変更することは大変だが
仕様が要求する機能を継承で実装しておけばその基底クラスを変更するだけですむ
0886デフォルトの名無しさん
2015/02/21(土) 13:11:37.33ID:K93htcIB0887デフォルトの名無しさん
2015/02/21(土) 14:49:51.37ID:IRLoC/e2マイクロソフトのSTLさんが「自分もよくわからない。検討の時間が無かったんじゃね」と言っていた
0888デフォルトの名無しさん
2015/02/21(土) 16:21:13.08ID:IBIJdEhzというメッセージじゃないかな
関数に限らんが
0889デフォルトの名無しさん
2015/02/21(土) 18:54:48.04ID:ZH1KgKQ40890デフォルトの名無しさん
2015/02/21(土) 18:55:22.62ID:FlDtTMp/template<typename T, bool b> struct A {
static void func(T t) {}
};
template<typename T> struct A<T, true> {
static void func(T t) { cout<<"specialized"; }
};
0891デフォルトの名無しさん
2015/02/21(土) 18:56:06.58ID:FlDtTMp/0892デフォルトの名無しさん
2015/02/21(土) 19:13:17.03ID:Wtgcife50893デフォルトの名無しさん
2015/02/21(土) 19:25:06.46ID:IBIJdEhzカオスだよねえ
0894デフォルトの名無しさん
2015/02/21(土) 23:29:58.20ID:vamQqIKP部分特化を可能にするとさらに混乱を深めるだけと判断したからという話がある
ttp://www.gotw.ca/publications/mill17.htm
まず基礎として特殊化関係ないところから
呼ばれるのはどのf?
#include <iostream>
using namespace std;
template<class T, class U>
void f(T, U) { cout << "f-1" << endl; }
template<class T>
void f(T, T*) { cout << "f-2" << endl; }
template<class T, class U>
void f(T, U*) { cout << "f-3" << endl; }
int main()
{
int x = 10;
f(x, &x);
}
0895デフォルトの名無しさん
2015/02/21(土) 23:32:39.43ID:vamQqIKP#include <iostream>
using namespace std;
template<class T, class U>
void f(T, U) { cout << "f-1" << endl; }
template<>
void f<int, int*>(int, int*) { cout << "f-1-s1" << endl; }
template<class T>
void f(T, T*) { cout << "f-2" << endl; }
template<class T, class U>
void f(T, U*) { cout << "f-3" << endl; }
int main()
{
int x = 10;
f(x, &x);
}
0896デフォルトの名無しさん
2015/02/21(土) 23:47:24.87ID:VEVe47d3確かにキモイな
0897デフォルトの名無しさん
2015/02/22(日) 00:34:45.55ID:jH4ZIjnM混乱を増すだけ
0898デフォルトの名無しさん
2015/02/22(日) 01:40:08.60ID:njA91bPMどうしても部分特殊化が必要なったときダミーのクラスを介して実現することになって
最も混乱する結果になるんだろ
0899デフォルトの名無しさん
2015/02/22(日) 05:37:31.11ID:J+2bP69Kオーバーロード解決が直感的でないだけで
f<int, int *>(x, &x);
って書けばクラステンプレートと変わらない?
0900デフォルトの名無しさん
2015/02/22(日) 07:13:49.31ID:I8UIKXVn整数型をバイト長で仕分けるのにはどうやりますか?
0901デフォルトの名無しさん
2015/02/22(日) 07:27:57.69ID:JzmwW28pまず日本語を勉強します
0902デフォルトの名無しさん
2015/02/22(日) 07:43:41.36ID:J+2bP69Kstruct unko_traits {
static constexpr bool is_8bytes = sizeof(T) == 8;
};
0903デフォルトの名無しさん
2015/02/22(日) 08:23:43.54ID:7T2uBnBdそこに、is_4bytes とか is_2bytes とかを付け加えていくの?
template<typename T, int size>
struct unki_traits : std::integral_constant<bool, sizeof(T) == size> {
};
みたいにした方がよくない?
0904デフォルトの名無しさん
2015/02/22(日) 09:30:01.33ID:+WCHq4X50905デフォルトの名無しさん
2015/02/22(日) 09:39:09.58ID:jAanobMm0906デフォルトの名無しさん
2015/02/22(日) 10:09:56.22ID:7T2uBnBd間違えた
template<typename T, std::size_t size>
struct unki_traits : std::integral_constant<bool, sizeof(T) == size> {
};
0907デフォルトの名無しさん
2015/02/22(日) 11:49:06.94ID:wHKlPZGJ>>900=>>903=>>904は糞コテQzの自演だぞ
0908デフォルトの名無しさん
2015/02/22(日) 12:06:18.27ID:DVQv7PP40909デフォルトの名無しさん
2015/02/22(日) 12:59:38.49ID:DgG010jF0910デフォルトの名無しさん
2015/02/22(日) 16:44:58.83ID:6xu9nlzVこれって合法?
0911デフォルトの名無しさん
2015/02/22(日) 16:53:54.94ID:Ay80JrCNはい。
プログラミング言語の文法は法律で制限されていませんし、
C++の言語仕様上も,の時点でaが宣言されたとして扱われます
0912デフォルトの名無しさん
2015/02/22(日) 16:59:31.83ID:6xu9nlzVサンクス。もやもやが解決しておなかスッキリ
0913デフォルトの名無しさん
2015/02/22(日) 18:48:42.82ID:D2MNyIcZ法律ではないが、それに近い形で制限されているともいえる
int a = a;
馬鹿げているがこれも合法
0914デフォルトの名無しさん
2015/02/22(日) 18:50:48.56ID:RCi6HQ/x老人はそろそろ引退した方がいい
0915デフォルトの名無しさん
2015/02/22(日) 20:08:17.58ID:I8UIKXVnそんなことしなくても
sizeof(T)==size
でいいじゃないですか?
0916デフォルトの名無しさん
2015/02/22(日) 20:14:12.60ID:DOWqpBMt0917デフォルトの名無しさん
2015/02/22(日) 20:14:59.64ID:I8UIKXVn間違えた
0918デフォルトの名無しさん
2015/02/23(月) 07:25:58.50ID:ZxA135k5#include <vector>
using namespace std;
int main() {
vector<int> a;
typeof(*(a.begin())) b=2;
cout<<b<<endl;
return 0;
}
このほうがiterator_traitsを使うよりvalue_typeが定義されてなくてもよくて
より一般的で優れた方法だと思いませんか?
0919デフォルトの名無しさん
2015/02/23(月) 07:56:57.30ID:ikUNweEd0920デフォルトの名無しさん
2015/02/23(月) 08:47:22.22ID:bZptJtSh0921デフォルトの名無しさん
2015/02/23(月) 09:03:15.76ID:xos6Ur9w0922デフォルトの名無しさん
2015/02/23(月) 11:13:43.08ID:1tjsQW0r未初期化の値の読み出しになるから未定義動作じゃないの?
0923デフォルトの名無しさん
2015/02/23(月) 11:15:42.25ID:Su9wFgfT0924922
2015/02/23(月) 11:23:12.19ID:1tjsQW0r8.5 [dcl.init] p12
> If an indeterminate value is produced by an evaluation, the behavior is undefined
> except in the following cases: ...
続けて列挙されてる例外は unsigned narrow character type つまり char, unsigned char の
場合だけ。
0925デフォルトの名無しさん
2015/02/23(月) 12:10:13.08ID:bZptJtShえ、いつから?
0926デフォルトの名無しさん
2015/02/23(月) 12:31:59.58ID:ZxA135k5あつかえません。
0927デフォルトの名無しさん
2015/02/23(月) 13:54:47.27ID:alAJyPLIhttps://www.youtube.com/watch?v=cBFE2dWTVQg
日本はなぜ、「基地」と「原発」を止められないのか
出版社: 集英社インターナショナル (2014/10/24)
矢部 宏治 (著)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
日本の最高権力者は日米合同委員会です。
日米合同委員会は日本国憲法より上にあります。
だから原発が止められないし日本人の被害者を助けようとしないのです。
国連憲章では日本は敵国とされています。
日本は敵国なので、いまだにアメリカ軍が駐留して日本が再軍備しないか監視しているのです。
国連憲章で敵国とされなくなるにはアジア各国と仲良くする必要があります。
日本と中国と韓国が仲良くなれば、日本は国連憲章で敵国扱いされなくなります。
そうなればアメリカ軍が日本から出ていかなければなりません(アメリカの支配から脱する)。
そうさせないために「2ちゃんねる」「ニコニコ」で中国叩きや韓国叩きのアジア分断工作が行われているのです。
「2ちゃんねる」「ニコニコ」「自民党」「2ちゃんを転載してるブログ(ニコニコが運営してる)」は日米合同委員会の下部組織です。
「2ちゃんねる」「ニコニコ」「2ちゃんを転載してるブログ(ニコニコが運営してる)」の役割は東アジアの分断工作です。
0928デフォルトの名無しさん
2015/02/23(月) 14:15:39.40ID:ycMDsrXQ1998年ごろじゃね
0929デフォルトの名無しさん
2015/02/23(月) 15:20:40.38ID:bZptJtSh>>918にあるtypeofはdecltypeとして規格化されて無くなったと認識している。
0930デフォルトの名無しさん
2015/02/23(月) 17:43:10.70ID:ZxA135k5これさえあれば関数の特殊化いらね
0931デフォルトの名無しさん
2015/02/23(月) 19:42:39.96ID:bZptJtSh前者は切り捨てる原理、後者は採用する原理だから、片方あればいいってのはどうかね
0932デフォルトの名無しさん
2015/02/23(月) 19:48:10.21ID:Xqa/R1TZ何をわけのわからんことを。
vector<bool>は要素アクセスにプロキシーと呼ばれる技を使うから
decltype(*a.begin())が多くの人の予想に反してboolにならないって話だろ。
このvector<bool>の仕様はC++98から。
ついでにtypeof(C++98)はdecltype(C++11)を
置き換えるものではなく>>918はdecltype()の書き間違えと思われ
0933デフォルトの名無しさん
2015/02/23(月) 19:50:01.59ID:Xqa/R1TZtypeidと勘違いした。
んなものはC++には無い
0934デフォルトの名無しさん
2015/02/23(月) 19:51:32.16ID:14G+SWgQ非常に迷惑
0935デフォルトの名無しさん
2015/02/23(月) 19:57:39.44ID:ybCQEz/D0936デフォルトの名無しさん
2015/02/23(月) 20:00:06.77ID:ybCQEz/Ddecltypeと同じようなもの
0937デフォルトの名無しさん
2015/02/23(月) 20:05:36.15ID:KIT5eqTK0938デフォルトの名無しさん
2015/02/23(月) 20:46:30.87ID:4wnI7kSvわかって頂けたようで恭悦でござる
0939デフォルトの名無しさん
2015/02/23(月) 20:57:35.27ID:cHI4P7p2Effective C++ 第3版
28ページ、下から13行目、
「コンストラクタが生成するデストラクタは…」
「コンストラクタ」→「コンパイラ」の間違いかと思うのですが
あっていますでしょうか?
よろしくお願いいたします.
0940デフォルトの名無しさん
2015/02/24(火) 00:06:38.57ID:nvPp02220941デフォルトの名無しさん
2015/02/24(火) 08:26:44.14ID:DiBh8ZGt0942デフォルトの名無しさん
2015/02/24(火) 12:52:14.82ID:lOtrXj7U一応うまくいったけど、GCCで-fpermissiveをつけないとコンパイルエラーになる
-fpermissiveをつけないでうまく行く方法があったら教えてください!
#include <stdio.h>
class Base { public: virtual void print() {} };
class Derive0 : public Base { public: virtual void print() {} };
class Derive1 : public Base {};
void IsOverride(void (Base::*p)()) { printf("Base::print\n"); }
void IsOverride(void (Derive0::*p)()) { printf("Derive0::print\n"); }
void IsOverride(void (Derive1::*p)()) { printf("Derive1::print\n"); }
int main(int argc, char* argv[]) {
Base* base = new Base();
Derive0* derive0 = new Derive0();
Derive1* derive1 = new Derive1();
IsOverride(&base->print); //→ Base::print
IsOverride(&derive0->print); //→ Derive0::print
IsOverride(&derive1->print); //→ Base::print
}
0943デフォルトの名無しさん
2015/02/24(火) 13:35:29.77ID:h139alvjそもそも「オーバーライドされてるかの判定」って何なんだ?
目的無いだろそれ。
0944デフォルトの名無しさん
2015/02/24(火) 13:50:08.22ID:lOtrXj7U目的は速度最適化
例えば大量の派生クラスのオブジェクトがあったとして
事前にオーバーライドされてない事が分かったら、
ループしてメソッド呼び出しをごっそり削除できる
(Base::printは何もしないとわかってるので)
0945デフォルトの名無しさん
2015/02/24(火) 13:57:06.95ID:lOtrXj7U事前に選り分けておくから確実に速くなる事は間違いないけどどれだけ速くなるかは不明…
0946デフォルトの名無しさん
2015/02/24(火) 14:36:25.53ID:QjkvKQyzそれ仮想メソッドそのものを否定してるよな
メソッドにiterator渡して、仮想メソッドの中でループしなよ
0947デフォルトの名無しさん
2015/02/24(火) 14:41:04.53ID:QjkvKQyzget_print_methodという仮想関数を作っちゃいな
baseだけnull返せばいい
0948デフォルトの名無しさん
2015/02/24(火) 15:03:04.53ID:U4onsSs4virtual使う必要ねえ
0949942
2015/02/24(火) 15:27:24.93ID:lOtrXj7Uすんません、例が間違ってました
Base* base = new Base();
Base* derive0 = new Derive0();
Base* derive1 = new Derive1();
IsOverride(&base->print); //→ Base::print
IsOverride(&derive0->print); //→ Base::print
IsOverride(&derive1->print); //→ Base::print
という事で出来ませんでした…
多分vtblの中身を確認するような方法じゃないと無理っぽい
ポータブルな方法でなくてもいいので、もしお分かりになるようでしたら教えてください
自分も調べてみます…
0950デフォルトの名無しさん
2015/02/24(火) 15:54:08.87ID:h139alvjなんか釈然としない目的だな。
対象のクラス(baseとderived)をいじっちゃいけないという制約はある?
0951デフォルトの名無しさん
2015/02/24(火) 16:00:11.74ID:lOtrXj7U単なる最適化なんで基本的にderivedはそれ用の処理を強制したくは無いです
baseに何か仕込むのは問題ないです
0952デフォルトの名無しさん
2015/02/24(火) 16:01:04.59ID:QjkvKQyzCRTPにする
iteratorのfirst lastを渡して呼び出し先でループする
printメソッドの呼び出しが必要かのbool値を返すvirtual関数を作る
printメソッドへのポインタもしくはproxyを返すvirtual関数を作る
0953デフォルトの名無しさん
2015/02/24(火) 16:02:28.08ID:QjkvKQyz一般的には無駄な小細工という
ベンチマークとれば何の意味もないことが分かる
0954デフォルトの名無しさん
2015/02/24(火) 16:18:50.73ID:lOtrXj7Uどうもです
> CRTPにする
既にあるものの最適化なので、これが適用出来るのか調べてみます
>>953
派生クラスのインスタンスが万単位であった場合は多分変わると思われ…
0955デフォルトの名無しさん
2015/02/24(火) 16:48:32.82ID:h139alvjオーバーライドされてれば、万単位で存在する派生グラスインスタンスのメソッド呼び出しを実行するんだろ?
そういうものの中に空メソッドの呼び出しが混ざったところで誤差の範囲内だろう。
0956デフォルトの名無しさん
2015/02/24(火) 17:02:45.01ID:u708kfp8初期段階からなぞの自己流最適化(?)に固執
なお、実測はしないもよう
0957デフォルトの名無しさん
2015/02/24(火) 17:04:29.73ID:lOtrXj7U少なくとも半分近くは空メソッドです…
0958デフォルトの名無しさん
2015/02/24(火) 17:08:52.77ID:lOtrXj7Uもう実装されてるものの最適化をしています
実測も何も最適化の実装が出来てません><
0959デフォルトの名無しさん
2015/02/24(火) 17:18:50.32ID:yrkY1acaもしかしてインスタンスごとにIsOverride呼びだそうとしてる?
それじゃ逆効果になるとしか思えんが
0960デフォルトの名無しさん
2015/02/24(火) 17:28:55.57ID:lOtrXj7U仮想関数の呼び出しは激重で空の関数であっても万単位で呼び出すと物凄い事になります…(ミリSecの世界ですが)
取り合えず今手元のPCで計測して確認しても同じでした
>>959
いえ事前に選り分けるので、最適化出来れば完全にコストがゼロになります
0961デフォルトの名無しさん
2015/02/24(火) 17:38:53.43ID:U4onsSs4こいつdllも一切使わない気かよ
0962デフォルトの名無しさん
2015/02/24(火) 17:41:15.96ID:cKh5eW/Nアルゴリズムよりもデータ構造よりもそこなんだろうなw
0963デフォルトの名無しさん
2015/02/24(火) 17:41:17.50ID:J9mxQKtDってのがよくわかる
0964デフォルトの名無しさん
2015/02/24(火) 17:51:11.33ID:I5dsQs7x0965デフォルトの名無しさん
2015/02/24(火) 17:53:58.33ID:lOtrXj7U空の仮想関数呼び出しでも数万になると1フレーム(16〜32ms)全部使ってしまうよ…(もちろん-O3で)
将来的な事を考えて最適かしておきたかったけど、取り合えず荒れそうなんでこれで失礼します
ありがとうございました
0966デフォルトの名無しさん
2015/02/24(火) 17:58:15.86ID:maVIDPRwいえいえ、どういたしまして
0967デフォルトの名無しさん
2015/02/24(火) 18:16:21.69ID:lOtrXj7U0968デフォルトの名無しさん
2015/02/24(火) 18:36:29.58ID:4kvaLxjl最初の1オブジェクトだけはメソッド呼び出しをして、空ならbreakするとかじゃダメなのか?
メソッドをvoidじゃなくてboolを返すとかに改造すればいい。
0969デフォルトの名無しさん
2015/02/24(火) 18:50:04.46ID:qpgWNqCE0970デフォルトの名無しさん
2015/02/24(火) 19:10:25.34ID:QjkvKQyz何通りも小細工を試して測定してみなよ
全部無駄だったと分かるのも必要な勉強
0971デフォルトの名無しさん
2015/02/24(火) 19:14:24.51ID:1AZ7OyIV0972デフォルトの名無しさん
2015/02/24(火) 19:22:27.69ID:lOtrXj7U>>965で計測してるよ
こんな単なるループ(と言うほど単純じゃないけど)処理はCPU負荷は数%程度に収めておくべきだけど
逆算すると1000回程度が限界になってしまう (空の仮想関数呼び出しだけでね)
最適化出来たので、数%以内に収める場合は倍の2000ぐらいを最大に出来る (半分が空なんで)
取り合えず派生クラスのソースを一切いじらずに倍の呼び出しが出来るようにはなったよ
(使えるCPU負荷が数%が前提だけど)
0973デフォルトの名無しさん
2015/02/24(火) 19:24:21.21ID:+CwBepxb1回で100nsということになる。
そんなにかかるわけ無いだろ。
0974デフォルトの名無しさん
2015/02/24(火) 19:39:16.45ID:nXbhU8yM0975デフォルトの名無しさん
2015/02/24(火) 20:01:48.14ID:wUt0v/PUメモリ速度を統一してから語れ
0976デフォルトの名無しさん
2015/02/24(火) 20:21:16.53ID:1AZ7OyIV最適化なしでも空の仮想関数なんてこんなもんだよ
それとも1Fで250万回くらい呼び出してるのだろうか
0977デフォルトの名無しさん
2015/02/24(火) 20:42:39.71ID:lOtrXj7Uこれのマシンスペックってどうなの?かなり速いと思われる
あと同一インスタンスじゃなくて3万位インスタンス作ってみて
0978デフォルトの名無しさん
2015/02/24(火) 20:49:51.07ID:RU+6zZPL0979デフォルトの名無しさん
2015/02/24(火) 20:58:42.58ID:3bOMA4P1そこが間違ってる。
0980デフォルトの名無しさん
2015/02/24(火) 21:15:43.86ID:1AZ7OyIV0981デフォルトの名無しさん
2015/02/24(火) 21:36:38.59ID:BgZzwVFO1000とか2000じゃねーの?さっきの話だと。
てか3万もインスタンス作るなんてしたら最適化云々以前にキャッシュミス起きない?まぁそれこそマシンスペック次第だろうけど。
0982デフォルトの名無しさん
2015/02/24(火) 21:58:09.18ID:tK3k6wpp3マンコで十分なことも多いだろうが
わけがないとまで言い切られると根拠が知りたいね
どうせ出せないだろうけど
0983デフォルトの名無しさん
2015/02/24(火) 22:04:11.48ID:1AZ7OyIVそれとも三万個ってポリゴンとかの話? だったらGPUでやれよってレベルだけど
0984デフォルトの名無しさん
2015/02/24(火) 22:06:42.71ID:13AsGslFC++相談室 part116
http://peace.2ch.net/test/read.cgi/tech/1424782918/
0985デフォルトの名無しさん
2015/02/24(火) 22:19:47.40ID:3bOMA4P1何表示してんだよそれ
0986デフォルトの名無しさん
2015/02/24(火) 22:31:09.16ID:RU+6zZPL0987デフォルトの名無しさん
2015/02/24(火) 22:39:44.75ID:3bOMA4P10988デフォルトの名無しさん
2015/02/25(水) 10:19:08.84ID:PWFuTKbn処理に2msかけたくないこともあるわな。
ってのは別として単にメンバ関数ポインタとって
比較すれば済む話なんじゃね?これは。
0989デフォルトの名無しさん
2015/02/25(水) 10:40:47.33ID:rpMKp3K5基底クラスのメソッドは空という条件だって永久に成り立つわけじゃなからう。さう考えるとvtable覗くとか悪手だ。
0990デフォルトの名無しさん
2015/02/25(水) 10:59:59.05ID:PWFuTKbnとても最適とは言えないものになることは良くある。
古めのスマフォでもサクサク動くように、たった
2倍程度の高速化のために醜いコードにすることなんてまだまだあるよ。
俺なら空の仮想関数呼び出しを省きたいほど大量に
空の仮想関数を持つインスタンスがあるなら、
そいつらを別のコンテナに入れることを考えるな。
0991デフォルトの名無しさん
2015/02/25(水) 12:08:27.45ID:OrAC26C7つか2倍も高速化できる腕があるならそう醜くはならんだろ
0992デフォルトの名無しさん
2015/02/25(水) 12:19:31.30ID:Wk2wN7sa仮想関数の関数ポインタ取得しても実体はvtableのインデックスだから比較できないよ
0993デフォルトの名無しさん
2015/02/25(水) 12:41:15.48ID:NWtD0Nmd0994デフォルトの名無しさん
2015/02/25(水) 13:01:04.66ID:rpMKp3K50995デフォルトの名無しさん
2015/02/25(水) 14:09:39.61ID:DG/ZSa4b間接参照はキャッシュの先読み出来ない、
これ考えたらポリモフィックは使えん。
間接参照が速くなるハードウェアアーキテクチャを考えんとな。
0996デフォルトの名無しさん
2015/02/25(水) 14:42:18.45ID:rpMKp3K50997デフォルトの名無しさん
2015/02/25(水) 17:49:31.81ID:UX9WnKJE0998デフォルトの名無しさん
2015/02/25(水) 17:59:09.70ID:qrwKMS1Y0999デフォルトの名無しさん
2015/02/25(水) 18:24:58.60ID:mKx2rGPv1000デフォルトの名無しさん
2015/02/25(水) 18:32:42.90ID:Wk2wN7sa10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。