[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 04/19 16:45 / Filesize : 311 KB / Number-of Response : 1020
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C++相談室 part132



1 名前:デフォルトの名無しさん mailto:sage [2017/10/10(火) 00:11:34.01 ID:nc/5PI4P0.net]
次スレを立てる時は本文の1行目に以下を追加して下さい
!extend:on:vvvvv:1000:512

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

前スレ
C++相談室 part131
mevius.2ch.net/test/read.cgi/tech/1501295308/

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

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

[C++ FAQ]
https://isocpp.org/wiki/faq/
www.bohyoh.com/CandCPP/FAQ/ (日本語)
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured

944 名前:デフォルトの名無しさん mailto:sage [2017/11/21(火) 19:53:50.67 ID:GhiisSyt0.net]
(?<=^xxx=)\d+$

945 名前:デフォルトの名無しさん mailto:sage [2017/11/21(火) 20:30:32.65 ID:0pu32Yjt0.net]
float演算がdoubleよりも遅いってアジですか?

946 名前: mailto:sage [2017/11/21(火) 21:02:58.77 ID:xJ15vzkZ0.net]
>>929
何が計算するかによる、としか

947 名前:デフォルトの名無しさん mailto:sage [2017/11/21(火) 21:12:53.35 ID:0pu32Yjt0.net]
さいですか

948 名前:デフォルトの名無しさん mailto:sage [2017/11/21(火) 21:19:38.81 ID:muR8Mwv6r.net]
>>922
ほれ
https://wandbox.org/permlink/YK6UEOGxMToYE1SK

949 名前:デフォルトの名無しさん mailto:sage [2017/11/21(火) 21:44:16.41 ID:6BA+Ife8d.net]
>>932
すんごく綺麗なコードありがとう
見事に魔改造して糞コードにしてしまう自信がある

950 名前:デフォルトの名無しさん [2017/11/21(火) 21:55:27.92 ID:6jcLJvUW0.net]
>>927
そういう設定ファイル的なものを読むならkeyとvalueのペアのリストつまりmapを返す実装を考えた方がいい

951 名前:デフォルトの名無しさん mailto:sage [2017/11/21(火) 22:16:59.77 ID:6BA+Ife8d.net]
>>934
俺もそうは思ってるのだけどその読み込む処理をどうしたら綺麗にできるかなぁって悩みなんだ
マップ作ったあとに検索が綺麗なのかなとは思ってる

952 名前:はちみつ餃子 mailto:sage [2017/11/21(火) 22:33:26.16 ID:KkY90WH60.net]
文法的には LL(1) かな?
素朴なパーサコンビネータでも充分に足りるのでその手のライブラリを導入すると楽にパーサを作れると思う。

それはともかく、「>>922 みたいな」というだけの仕様では

・数値以外が設定値にくることもあるのか?
・要素に改行を含められるのか?
・エスケープも出来るようにするのか?

等々が読み取れないし、多分 >>922 は考えてないんじゃないかなと思う。
オレオレ設定ファイルフォーマットを考えるくらいなら TOML とかいったよくあるフォーマットを採用すれば
ライブラリが充実してたりして便利なので考えてみるといいかも。



953 名前:デフォルトの名無しさん [2017/11/21(火) 22:42:43.82 ID:uRVBPn0b0.net]
ってかboostのPropertyTreeにiniパーサーがあるからそれ使うといいよ

954 名前:デフォルトの名無しさん mailto:sage [2017/11/21(火) 22:42:58.28 ID:6BA+Ife8d.net]
>>936
回答すると
数値以外もありうる
改行は値として入れない
エスケープってなんだろう?
xxxに関しては最大16文字の文字列(大文字小文字計52文字の組み合わせ)

たったこれだけでも深いね
ソフトウェアって神秘

955 名前:デフォルトの名無しさん mailto:sage [2017/11/21(火) 23:00:05.88 ID:GhiisSyt0.net]
ini-parser

956 名前:てのがなかなか良さそう
picojson,rapidxmlなどが好きな人にはいいかも
[]
[ここ壊れてます]

957 名前:デフォルトの名無しさん mailto:sage [2017/11/22(水) 02:34:39.84 ID:9vladmL60.net]
構文解析したいならbisonでも使ったらいいんじゃね?

958 名前:デフォルトの名無しさん [2017/11/22(水) 03:34:34.44 ID:ft6g9THr0.net]
ム板で公開されたのがあったじゃないか。

959 名前:デフォルトの名無しさん mailto:sage [2017/11/22(水) 10:29:13.01 ID:wHcXBwMz0.net]
>>938
>>922の完璧無欠なロジックてのは
最初に完璧無欠な入力規則を作ってから議論できるものだろ

>数値以外もありうる
数値だけでもいろんな型があるわけだしこの程度じゃ何も語れない
xxxx=3のような単純な形式はINIファイルとか>>936のようなのとか利用するのが便利
最近はXML形式が推奨されてる
ただしどれもが完璧無欠とは言えないけど

960 名前:デフォルトの名無しさん [2017/11/22(水) 10:59:36.64 ID:jvBgNmmT0.net]
>>942
どこの最近?

961 名前:デフォルトの名無しさん mailto:sage [2017/11/22(水) 11:55:13.96 ID:/unloUf+0.net]
XMLは配列が直接表現できないし手で書くのがクソめんどくさいし見づらい
その点JSONの方がずっとマシなんだけど標準JSONだとコメント書けない

962 名前:デフォルトの名無しさん mailto:sage [2017/11/22(水) 12:48:47.95 ID:PiUoYWXr0.net]
適材適所、の一言で片付く問題
好きな方使え



963 名前:デフォルトの名無しさん [2017/11/22(水) 13:52:54.31 ID:gFgFfMOWM.net]
人が書く設定ファイルならtomlがパースのしやすさと書きやすさでバランスが良いと思う

964 名前:デフォルトの名無しさん mailto:sage [2017/11/22(水) 16:17:23.80 ID:HDCbnteD0.net]
>>946
dein.vimで使われてるの見て知ったけどまったくと言っていいほど広まらないね

>>944
ド定番のYAMLでいいじゃん

965 名前:はちみつ餃子 mailto:sage [2017/11/22(水) 20:12:53.57 ID:Rn9KsJdK0.net]
Cargo の設定ファイルも TOML やぞ。 モダーンな言語のモダーンなツールは TOML がトレンド。 これ。
YAML みたいにインデントで構造を表現するのってパースめんどくさい。

個人的に YAML は不格好に見えて好きじゃないっていう主観もあるんだけど、
YAML ってそんなに定番ってほど目にしたことが無いな〜と思って考えたら
たぶん俺の巣は Scheme スレやからやな。
Lisp 界隈では設定ファイルにはS式を使ってまうもんな。

966 名前:デフォルトの名無しさん mailto:sage [2017/11/22(水) 21:00:11.47 ID:h+KIZtFy0.net]
luaなんかもよく使われるけど、schemeやluaが設定ファイルとして使われるのは
呼び出し側の言語が同じであるか、他の用途で使うためにすでに組み込んでる場合がほどんどで
設定ファイルだけの為にLL組み込むにはお手軽とは言えないかな
TOMLはいいとは思うんだけど
自分が使うなら仕様が固まってからの1.0〜は必須で
↓で300程度は使われてからかな

$ apt-file search toml | grep "\.toml$" | wc -l
0
$ apt-file search json | grep "\.json$" | wc -l
3611
$ apt-file search yaml | grep "\.yaml$" | wc -l
1480

967 名前:デフォルトの名無しさん mailto:sage [2017/11/22(水) 21:10:35.27 ID:W0SJQGiTM.net]
最近この手の話題に疎いからtomlとか知らんかったのでちょっとググったけどまあ好きなの使えや
って感想しかないわ
https://gist.github.com/miyakogi/e8631ce5f7c956db2313

968 名前:はちみつ餃子 mailto:sage [2017/11/22(水) 21:16:10.07 ID:Rn9KsJdK0.net]
パースの楽さだけで言えば JSON が優勝だけど人が手書きするには色々アレだからな。

969 名前:デフォルトの名無しさん mailto:sage [2017/11/22(水) 21:20:22.39 ID:3/I2dLA90.net]
好きなの使えっつっても全部導入して試すの面倒や

970 名前:デフォルトの名無しさん mailto:sage [2017/11/22(水) 21:56:28.30 ID:+hB2MqUt0.net]
ES5以降ケツコンマOKになったんだからJSONも新規格にすりゃいいのに。

971 名前:デフォルトの名無しさん mailto:sage [2017/11/22(水) 23:47:16.65 ID:AAzHTorM0.net]
>>936
正規表現で済んでいるのになんでスタックが要るんじゃ!!!!!!11!1!!!!

972 名前:はちみつ餃子 mailto:sage [2017/11/23(木) 00:25:32.50 ID:fj1LdTry0.net]
>>954
意味がわからないので説明して。



973 名前:デフォルトの名無しさん mailto:sage [2017/11/23(木) 00:36:02.97 ID:h8NdPAUM0.net]
文脈自由文法は解析にスタック(理論上は無限の段数のやつ)が要るクラスだが
正規言語は有限状態マシンで済む言語のクラス
今話題の設定言語は無限の入れ子は持たなそうなので正規言語で逝ける、

974 名前:デフォルトの名無しさん mailto:sage [2017/11/23(木) 00:37:37.76 ID:h8NdPAUM0.net]
と、
言いたいのでわ…

975 名前:はちみつ餃子 mailto:sage [2017/11/23(木) 01:07:08.12 ID:fj1LdTry0.net]
ん〜、そのへんの学問的な分類はよう知らんけど、取りうる状態は有限でもバックトラックは起こるしそのためのスタックは要るんちゃう?
同じ文法の構文解析器を作ればどっちのアプローチでもスタックの消費量はかわらんと思うんだけど。

より制限の強い方で「十分」っつーならそれはわかる。 C++ 標準に入ってる機能で出来りゃ楽だしな。
ただ、正規表現ライブラリだとエラーの検出場所の伝達方法とかで融通が利かなかったりするので、
ユーザーが入力する設定ファイルを解析するパーサを作るとなると作りこみ難いという感触があるかな。

976 名前:デフォルトの名無しさん mailto:sage [2017/11/23(木) 06:39:00.31 ID:NFzuGiE50.net]
「チョムスキー階層」でググれ

977 名前:デフォルトの名無しさん mailto:sage [2017/11/23(木) 07:23:17.08 ID:NFzuGiE50.net]
>>958
>ん〜、そのへんの学問的な分類はよう知らんけど、取りうる状態は有限でもバックトラックは起こるしそのためのスタックは要るんちゃう?
非決定性有限オートマトンは決定性有限オートマトンに変換できるので、
バックトラックが一切起こらない形に書き換えることは可能。
lexなんかだと、そのような変換を行ったコードを生成していたはず。
ただし、プログラム言語などで一般的に使われる正規表現は、
ここでいう正規言語を拡張したものなので、この限りではない。

978 名前:デフォルトの名無しさん mailto:sage [2017/11/23(木) 14:40:51.51 ID:QeiOUUJtx.net]
C++のプロジェクトに戻りたい。

979 名前:デフォルトの名無しさん mailto:sage [2017/11/23(木) 18:06:46.17 ID:5yPMgLrz0.net]
どうぞどうぞ

980 名前:デフォルトの名無しさん mailto:sage [2017/11/23(木) 18:56:01.32 ID:h8NdPAUM0.net]
もう次スレ要らないのでは

981 名前: mailto:sage [2017/11/23(木) 19:03:52.53 ID:fGVRHt7J0.net]
またまた低レベルな質問で恐縮しております。よろしくお願いいたします。
https://ideone.com/MXvhkC

ここまで実装できている状態で、演算子 += を定義するには、どのように書けばいいでしょうか?
なお実際に作業している対象は自作の多桁長演算ライブラリで、operator+=() を operator=() や operator+() を再利用できればうれしいな、と考えております。
operator+() や operator=() に書いていることを、繰り返して書くのは避けたいと考えているのです。

982 名前:デフォルトの名無しさん mailto:sage [2017/11/23(木) 19:07:30.71 ID:IGgCkWwq0.net]
普通はoperator+=()を実装してから、それを使ってoperator+を実装する



983 名前: mailto:sage [2017/11/23(木) 19:44:55.34 ID:fGVRHt7J0.net]
>>965
なるほど
https://ideone.com/t89oo1

しかし、+=, -= ならまだしも、 *=, /=, %= を考えると、なんだか似たようなコードを二箇所に書きそうな雰囲気がします…

984 名前:デフォルトの名無しさん mailto:sage [2017/11/23(木) 19:54:00.12 ID:IGgCkWwq0.net]
だからboostにこんなのがあったりする
https://boostjp.github.io/tips/operators.html

985 名前:デフォルトの名無しさん mailto:sage [2017/11/23(木) 19:56:33.11 ID:5nCr5Wf60.net]
CRTP使って自動実装

986 名前:はちみつ餃子 mailto:sage [2017/11/23(木) 20:01:00.33 ID:fj1LdTry0.net]
>>964
なんで friend がついてんの?

987 名前:デフォルトの名無しさん mailto:sage [2017/11/23(木) 20:17:56.76 ID:j5z8beti0.net]
>>967
これってなんでprivate継承なのか分からない

988 名前:はちみつ餃子 mailto:sage [2017/11/23(木) 20:23:32.48 ID:fj1LdTry0.net]
>>970
スライシングを起こさないようにじゃないの。
デストラクタを virtual にすると要らん仮想関数テーブルが作られちゃうからな。
それでいて定義する関数は friend 関数にしてるから外側からでも見えるんだな。

989 名前: mailto:sage [2017/11/23(木) 20:46:50.20 ID:fGVRHt7J0.net]
>>969
こんな小題でもいろいろと試されるんですね…

たしかに operator+=() は、意味からいっても friend である必要はまったくないですね。
一方 operator==(), operator+() は式の表現としての対象性を保存したいので、friend をつけたいと考えています。
operator<<() に対しては friend を必ずつけないといけないようですが、その理由はよくわかっていません。
https://ideone.com/pR0EP1

990 名前:デフォルトの名無しさん [2017/11/23(木) 22:59:38.32 ID:vKpvx9Uha.net]
IDE使っていて思うのがtemplate関数でデフォルト引数classAを設定すれば、

template<typename T=classA>
void Test(T tmp){
tmp.func(1, 2, 3);
}
上記のtmp.のところでclassAの関数とかが出て来るようになると嬉しいとか思ったり
コンセプトとかで対応できるようになるんでしょうか?

991 名前:デフォルトの名無しさん mailto:sage [2017/11/23(木) 23:16:02.95 ID:WYrOiD8s0.net]
mix-inもまともに知らないやつがなぜ回答してるのか…

992 名前:デフォルトの名無しさん mailto:sage [2017/11/24(金) 00:17:10.75 ID:mELw8YtS0.net]
>>973
言語仕様っていうよりIDEの性能のような。
コンセプトまで構文解析してサジェストするようになれば確かにできるかもしれんけど。



993 名前:デフォルトの名無しさん mailto:sage [2017/11/24(金) 01:03:21.71 ID:/7rxT1Yr0.net]
>>973
技術的には可能だからlibclangでなんとかなるようになるなら誰かやってくれるかもね
コード補完にプラグインを使えないIDEなら開発元にリクエストするしかない

994 名前:デフォルトの名無しさん mailto:sage [2017/11/24(金) 01:39:31.39 ID:Z3szivMI0.net]
mix-inで理解が止まっている人がなんか吼えてますな

995 名前:デフォルトの名無しさん mailto:sage [2017/11/24(金) 08:42:41.97 ID:ZeExn92sr.net]
>>973
コンセプトはシンタックスの誤りを判定するのみで型情報を持っていないため
その補完は期待できない

996 名前:デフォルトの名無しさん mailto:sage [2017/11/24(金) 09:00:16.20 ID:nFkUcp0I0.net]
>>977
boost operatorsのprivate継承がmix-in以外のなんだと思ってるんだ?

997 名前:デフォルトの名無しさん mailto:sage [2017/11/24(金) 10:03:13.88 ID:dhAYmdbT0.net]
静的リフレクションが欲しい

998 名前:デフォルトの名無しさん mailto:sage [2017/11/24(金) 10:21:33.74 ID:Un7I7rhA0.net]
後のプリプロセッサである

999 名前:デフォルトの名無しさん [2017/11/24(金) 12:38:49.19 ID:p8RxfMqqa.net]
C++を勉強しようとしてるんだが
基本的にCの書き方が一般なのか
C++の書き方が一般なのか教えてもらいたい

1000 名前:デフォルトの名無しさん [2017/11/24(金) 12:51:25.91 ID:l1+FhW7v0.net]
コーディングスタイル?
そんなの好きにすればいいよ

1001 名前:デフォルトの名無しさん mailto:sage [2017/11/24(金) 13:21:28.52 ID:w0OmJEj50.net]
>>982
Cの書き方とかC++の書き方とか一般的とかない
「一般的」なるものを求めたいならメジャーなIDEのデフォルトのオートフォーマットだろうな

1002 名前: mailto:sage [2017/11/24(金) 13:44:06.80 ID:ZNkp8uW60.net]
>>964
結局こうなりました
https://ideone.com/SUSTBj



1003 名前:はちみつ餃子 mailto:sage [2017/11/24(金) 14:07:55.96 ID:lG8HVUMw0.net]
>>985
operator+= の返却値は参照にしといた方が辻褄が合うので良いよ

1004 名前:デフォルトの名無しさん mailto:sage [2017/11/24(金) 14:10:30.10 ID:/RqU0h4Pd.net]
関数内で作ったベクターやマップは関数を抜けたらメモリ解放されると考えてよかです?

1005 名前:はちみつ餃子 mailto:sage [2017/11/24(金) 14:13:40.22 ID:lG8HVUMw0.net]
>>987
記憶クラスによる。

1006 名前:デフォルトの名無しさん mailto:sage [2017/11/24(金) 14:25:57.62 ID:/RqU0h4Pd.net]
>>988
記憶クラスによるとは


スマホで打ってるから書式とかガタガタだけど下みたいなことしてる
createmapってのを抜けたときにvectorもmapも解放されると信じている
vector XX( *map)
{
要素数二個のstring型のvectorデータを作成
return vector<string> ←要素数2
}

createmap ()
{
map<string,string> y
{
vector<string> tmp = XX(&y)
y.insert( tmp[1] , tmp[2])
}
}

1007 名前:デフォルトの名無しさん [2017/11/24(金) 14:36:50.33 ID:9/UAKu4i0.net]
うん、信じていい
XXから抜けるときにムーブコンストラクタでtmpへ移動され
createmapから抜けるときに解放される
このときoperator deleteが呼び出されるが
operator deleteがどのようなタイミングで解放しているかには依存すべきでない
我々が関心を持つべきはoperator deleteが呼び出されるタイミングで実装の詳細ではない

1008 名前:はちみつ餃子 mailto:sage [2017/11/24(金) 15:15:03.03 ID:lG8HVUMw0.net]
>>989
static 付きで宣言してればプログラムの終わりに解体されるし、
new で作れば delete されたときが解体されるし、
そうでなければスコープの終わりに解体される。
「関数内で作った」というだけでは情報不足。

>>989 のような例であればスコープの終わりで解体されることは保証される。

それと >>990 はムーブコンストラクタの話を出してるけど C++17 以降ではこういう場合は RVO の発動が必須になってなかったっけ?

1009 名前:デフォルトの名無しさん [2017/11/24(金) 15:33:02.71 ID:9/UAKu4i0.net]
>>991
990だが、何を言っているのか、悪いがよくわからん
XXがcreatemapとは別の翻訳単位から外部結合されている場合でも
その何だ、ムーブコンストラクタの回避(?)が必須になったのか?

1010 名前:はちみつ餃子 mailto:sage [2017/11/24(金) 16:06:58.81 ID:lG8HVUMw0.net]
>>992
そう。 RVO 必須だからコピーコンストラクタもムーブコンストラクタも無いクラスでも OK っていう新しいルール。

https://wandbox.org/permlink/X6g7JSpkSl82VvtZ

1011 名前:デフォルトの名無しさん [2017/11/24(金) 16:44:55.52 ID:9/UAKu4i0.net]
>>993
OK? それは03でも同じことやん

1012 名前:はちみつ餃子 mailto:sage [2017/11/24(金) 16:48:44.24 ID:lG8HVUMw0.net]
>>994
いや >>993 みたいなのは C++14 以前では NG になるよ。



1013 名前:デフォルトの名無しさん mailto:sage [2017/11/24(金) 16:54:03.03 ID:WoNXR2ax0.net]
C++相談室 part133
mevius.5ch.net/test/read.cgi/tech/1511509970/

1014 名前:デフォルトの名無しさん mailto:sage [2017/11/24(金) 16:58:12.64 ID:jkTO/gHT0.net]
乙。

1015 名前:デフォルトの名無しさん mailto:sage [2017/11/24(金) 17:04:12.57 ID:BCw6/Ft50.net]
彼。

1016 名前:はちみつ餃子 mailto:sage [2017/11/24(金) 17:07:25.34 ID:lG8HVUMw0.net]
>>999 なら長門有希は俺の嫁

1017 名前:はちみつ餃子 mailto:sage [2017/11/24(金) 17:07:54.81 ID:lG8HVUMw0.net]
>>1000 なら双葉杏も俺の嫁

1018 名前:1001 [Over 1000 Thread.net]
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 45日 16時間 56分 20秒

1019 名前:過去ログ ★ [[過去ログ]]
■ このスレッドは過去ログ倉庫に格納されています






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<311KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef