C++相談室 part140

■ このスレッドは過去ログ倉庫に格納されています
2019/01/13(日) 05:56:22.70ID:9RrR7Arz
次スレを立てる時は本文の1行目に以下を追加して下さい。
!extend:on:vvvvv:1000:512

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

前スレ
C++相談室 part137 (正しくはpart138)
http://mevius.5ch.net/test/read.cgi/tech/1535353320/
C++相談室 part139
https://mevius.5ch.net/test/read.cgi/tech/1538755188/

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

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

[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)

----- テンプレ ここまで -----
-
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
102デフォルトの名無しさん
垢版 |
2019/01/21(月) 01:09:51.66ID:6CjQd7tm
>>99
テンプレート使うときはテスト用のプロジェクト作ってネチネチ単体テスト書かんとダメだね。PODで具現化して肌で感覚つかんでおかないと本番コードでしくじるとハマる。コンパイル時間短縮のためにもテスト用のプロジェクトは必要。
declval, decletype, SFINAE, static_assertでコンセプト記述、必要に応じてtraits定義すれば、頭抱えるようなイミフエラーはほぼ撲滅できる。
無の心で手を動かさないといけないけど、これがテンプレの現状。
2019/01/21(月) 01:51:32.70ID:c5b5w6pA
型の解決は実行時点でいろいろやってほしいわ
2019/01/21(月) 06:17:25.15ID:NbFzEAOW
>>103
それはC++の理念から外れるから違う言語を使うべきじゃね?
2019/01/21(月) 13:52:50.10ID:9a4kB+2V
>>95に一票
ていうか最近のC++標準ライブラリはテンプレートで何でもやろうとしすぎだわ
メタプログラミングとか突き詰めていったら
例えばテンプレートに渡す型と定数値の違いをまとめて扱える
テンプレートテンプレートメタメタプログラミングとかサポートすんのかと
所詮は裏技やトリックの類だと再認識した方がいい
106デフォルトの名無しさん
垢版 |
2019/01/21(月) 14:35:14.38ID:6CjQd7tm
std委員会の人、自分で作った仕様をハックしてるもんな。それはどうかと思うわ。
テンプレに専用デバッガが必要、ってのは賛成。
2019/01/21(月) 14:47:30.54ID:d2jk7vmr
ステップ実行までとは言わないがコードがどのよう実体化したのかプレビューするツールとかないのかね
2019/01/21(月) 17:03:26.68ID:QaxUTqW0
例えばどんな感じに表示して欲しい?
2019/01/21(月) 17:44:06.66
コンパイルエラーの文字列を横取りしてヒューマンリーダブルに書き換えられるようにして

○○さんのエラー報告再解釈パッチが人気〜みたいにして
2019/01/21(月) 19:44:31.28ID:awq8xDBs
そんなくだらんことに時間使うくらいなら型付コードジェネレーターの標準でも定めた方が
なんぼか生産的だろうに。
なんでもコンパイラにブラックボックス処理させるのが根本的問題だわ。
111デフォルトの名無しさん
垢版 |
2019/01/21(月) 19:46:20.57ID:TwxiaWJQ
そこでRubyですよ。
2019/01/21(月) 20:32:09.87ID:5kYBxhZB
ゴミはやだぁ
2019/01/21(月) 21:57:35.19ID:awq8xDBs
結局makeもまともにかけないバカの意見を重視してるだけなんだよね。
2019/01/21(月) 21:59:46.43ID:d2jk7vmr
CMakeではいかんのか
2019/01/21(月) 23:07:50.66ID:awq8xDBs
そういうとこだよ。
ヘッダー依存を地道に解決させるだけで十分なところを無駄にデラックスな仕組みを入れようとする。
2019/01/22(火) 00:09:21.90ID:a1X2ytWX
地道にする意味あるか?
2019/01/22(火) 01:09:39.72ID:6S+2YJAI
最近のC++の使用を考えてる人は、頭が悪いのかも知れんな。
特に、boostや、標準テンプレートライブラリを考えた人は
アホなんじゃないかと思う。設計がへたくそ。
2019/01/22(火) 01:10:06.96ID:6S+2YJAI
使用--->仕様。
119デフォルトの名無しさん
垢版 |
2019/01/22(火) 01:14:06.94ID:9jnVrHe3
C++は抽象を実装しているのだ。
数学とかそっち系の人だべ。
2019/01/22(火) 02:13:13.69ID:a1X2ytWX
小綺麗にすることは目指していないので下手くそに見えるかも知れんな
2019/01/22(火) 07:26:00.12ID:SqrOcoDp
>>116
そりゃエラーメッセージをデバッグしずらい状況が問題だからな。
デバッグの根本原理は昔から地味にわからん領域を刻んでけってのが鉄則だわ。
2019/01/22(火) 07:46:01.37ID:yRak9Ndf
天才プログラマー現る
2019/01/22(火) 08:00:25.37ID:a1X2ytWX
エラーメッセージは言うほど分かりづらいかってのとそれコンパイラの問題じゃねっていう流れじゃなかったのか
そこで道具を改良するではなく人力で対応しようとするとか原始人か?
2019/01/22(火) 08:02:39.53ID:btZJwVmZ
boostは下から上まであるけど、STLの設計が下手くそとはまあ・・・
2019/01/22(火) 08:09:49.17ID:Hw20mf8u
googleはtemplate禁止だっけ?
チーム開発ではなかなかレベル揃えるの大変だ
2019/01/22(火) 08:47:48.92ID:rVf1VxF0
>>124
メジャーな物を否定する俺カッコイイみたいな奴じゃないかな
2019/01/22(火) 09:27:28.56ID:a1X2ytWX
>>125
boostの一部を許可と過度なメタプログラミング禁止じゃないか?
最新のは知らないけどさ
2019/01/22(火) 11:55:17.71ID:xs8/V/zK
>>121
そりゃ一つずつちゃんと追っていけば原因はいつかわかるけど、
自分が書いたテンプレートならともかく他人が書いたもののエラー追うのは
他人が書いたメタプログラミングの意図を正確に把握する必要が出てくる(特にboostとか地獄)
コンセプトが導入されたらその辺はマシになるだろうけど
結局それはそれでテンプレート使うときにやらなきゃいけない作業が増えるというw
129デフォルトの名無しさん
垢版 |
2019/01/22(火) 12:34:08.56ID:MeB+96eJ
>>125
Googleは例外禁止、templateなしはさすがに無理がある
130デフォルトの名無しさん
垢版 |
2019/01/22(火) 13:47:49.58ID:9jnVrHe3
細かいバグを拾うために out_of_range を投げる位はありだと思うが、「構造化された例外」の使い方が俺には判らん。
2019/01/22(火) 14:50:43.43ID:Hw20mf8u
禁止はtry-catchか。
曖昧な状態を許すだけで、使いどころがよくわからんな。使えるひとすごい。
2019/01/22(火) 19:10:41.32ID:SqrOcoDp
>>128
だからやってることを刻めるようにしろって意見だよ。
テンプレートが担ってる役割は恐ろしく多い。
型のオーバーロード(推論)、マクロコードの展開、コンパイル。
これらを暗黙に一気にやってるからデバッグしずらいんだよ。
2019/01/22(火) 21:15:35.78ID:btZJwVmZ
std::expectedはまだかいな・・・
2019/01/22(火) 22:35:07.16ID:yVg1Ud1H
クラスのprivate変数として vector<int> a を宣言したいとき、
vector<int> a(8, 0);
みたいに初期化できないのはなんでですか?
2019/01/22(火) 22:51:05.39ID:a1X2ytWX
こうしろ
class hage {
public:
  hage(): a(8,0) {}
private:
  vector<int> a;
}
2019/01/22(火) 22:53:48.16ID:btZJwVmZ
>>134
関数宣言と曖昧になるから、らしい
ちなみに、{}を使えば出来る
2019/01/22(火) 23:27:53.08ID:yVg1Ud1H
>>136
vector<int> a{0, 0, 0, 0, 0, 0, 0, 0};
ってこと?
2019/01/22(火) 23:50:31.62ID:btZJwVmZ
>>137
そう
2019/01/23(水) 01:15:58.41ID:OuY8oVZH
>>138
n 個ゼロで埋めるみたいのは、クラス変数として宣言してから使う前に
a = vector<int>(n, 0);
みたいにするしかないですか?
2019/01/23(水) 01:52:04.42ID:eok9TVn7
>>139
コンストラクタで初期化するのはダメなのか?
2019/01/23(水) 02:10:57.88ID:OuY8oVZH
>>140
コンストラクタで初期化するとしても>>139みたいな感じですよね?
142デフォルトの名無しさん
垢版 |
2019/01/23(水) 02:13:42.34ID:b+R6E+3S
>>135 が答え書いてる。
2019/01/23(水) 02:23:09.47ID:OuY8oVZH
済みません今やっと意味分かりました


ありがとうございました
2019/01/23(水) 07:48:31.28ID:lyUDutjU
>>139
それも同じようにすれば行けるはずだけど
2019/01/24(木) 12:36:30.49ID:u9eVW+6J
前々から思ってたんだけどなんでprivateのを下に書くの
上の方がよくね?
2019/01/24(木) 15:35:52.58ID:IARMQrId
本来、privateは利用者にとっちゃ興味ない内容だから、C++では伝統的に下で書かれることが多いけど、java登場以来、上に書く人が増えたと思う。
上に書いたほうがクラスの規模感や役割が把握しやすいみたいなメリットはあるかもね
2019/01/24(木) 15:46:55.29ID:2OUib2sy
C++は他の言語からすると書き方流派の縛りは緩いから(歴史長すぎてさまざまな流派が発生しては消えてるから)
自由に書いていい
ただ、C++ではメンバは上から初期化されるルールなので初期化順によって何らか問題が発生する場合のみ
どの位置に書くか注意すべきだがそんなケースは滅多にない
2019/01/24(木) 16:15:51.04ID:iPES0qac
上がいいよ。
でもそもそもprivateなんてだらだら書かんで実装に隠せよと。
149デフォルトの名無しさん
垢版 |
2019/01/24(木) 17:00:47.34ID:9qFVeQ4q
上からprivate変数、public関数、private関数の順かな。
インナークラスや型情報、static があるときはそれらが一番上。
2019/01/24(木) 18:23:27.95ID:/05KE7l4
>>146
おいらは前から、privateを最初に書くのは、アメリカや英語文化の影響では
ないかと思っていた。
・英語では、First name, Last name の順。
・地名も、小さい場所から、大まかな場所へ書かれる。町名、市名、県名、国名
 の順のように。
・アメリカでは、public 的なものより、private が優先されるイメージがある。
・変数名も、大まかな所属は後の方に書かれ、pszName, lenName, idxData の
 ようになる。

でも、class を使う側の目線で見た時、private や protected のデータは、
何の意味も無いし、今後のバージョンアップで変化することもあるから、
上に書くのは無駄のように思える。
2019/01/24(木) 18:49:58.73ID:+mTbExzf
class だと private がデフォだから
private なメンバから書き始めるとちょっと省略できて楽って程度の
つまらない理由なんじゃないかと思ってる。
2019/01/24(木) 19:16:04.39ID:yn3EoOxl
同じ理由でstructにしてpublic省略してる
2019/01/24(木) 19:26:04.87ID:ms7KdBo9
privateな変数は使う側に関係ないから下だな。
2019/01/24(木) 20:38:16.78ID:DHqv5UTj
【移民】
留学生以外の、海外大学卒の外国人採用、過去最高に 4社に1社 エンジニアでは日本語能力を問わない企業も
https://asahi.5ch.net/test/read.cgi/newsplus/1548315122/
2019/01/24(木) 20:49:10.50ID:tLfj0brW
windowsだとcondition_variableを使う理由ってなにがありますか?

平気でspurious wakeup問題があるなんていってるし、
Event使ったほうがいいと思うのですが?
2019/01/24(木) 21:06:26.36ID:ux0AymZg
移植性が上がる
157デフォルトの名無しさん
垢版 |
2019/01/25(金) 00:36:17.92ID:ps5S8w5k
責任を持つデータを明示する。
保守担当者に「このデータ壊すな」というメッセージでもある。
メンバ関数はデータに対する操作なので、変数という名詞が必要。
なのでクラスの頭に書く主義。
2019/01/25(金) 01:28:17.20ID:1j93aj/B
privateに入れてる変数は壊しても構わないと考えてる。
publicやprotectedは上でもいいや
2019/01/25(金) 03:22:49.47ID:GAV2PKJV
壊してもいいのはprivate
publicは原則として壊してはいけない
2019/01/25(金) 06:47:27.24ID:x34OdHkB
本当はprivateのメンバなんてヘッダに書きたくないんだよな
使う側にとってはどうでもいいことなんだし

まあデータメンバーはsizeof確定させるためにヘッダに書かざるを得ないんだけど
privateメンバ関数はcppに隠す手段が欲しい
2019/01/25(金) 06:52:07.07ID:9AQeTihm
そこでインクルードですよ
162デフォルトの名無しさん
垢版 |
2019/01/25(金) 07:13:33.15ID:ps5S8w5k
>>160
Pimpl がそれじゃなかった?
2019/01/25(金) 07:28:33.12ID:x34OdHkB
できるけどポインタ経由になるしめんどくさいし
2019/01/25(金) 07:39:18.36ID:3fp3RkdD
どうでもいい実装は別に無名のnamespaceに入れてもいいわけだしね。
なんか全部privateに書けって開発チームもいるけど。
2019/01/25(金) 07:46:20.34ID:GAV2PKJV
テンプレートのときどうすんの
2019/01/25(金) 09:33:40.77ID:081QfTJ8
templateクラスみたいなのは、独立したヘッダに素直に書くのが良いんだと思う
2019/01/25(金) 12:11:07.30ID:58XK3b4v
Windows で動いて、かつ、llc.exe --version で Registered Targets に、

WASM32

と表示が出るタイプの(-march=WASM32 と指定出来るタイプの)
llc.exe のバイナリって、どこかで DL できない?

ソースからビルドするのは、当方は VS 15 以上を持ってないので無理。
cygwin からだとビルド出来るらしいけど、出来たバイナリが cygwin なしで起動
できないかもしれないのが問題。
2019/01/25(金) 12:50:28.30ID:58XK3b4v
https://stackoverflow.com/questions/51310020/is-there-a-pre-built-clang-library-for-windows

↑を見つけたのでDL中。289MB だけど、残り3時間と表示されるうちの環境。

https://github.com/ziglang/zig/wiki/Building-Zig-on-Windows

ひきこもりのLより。
2019/01/25(金) 16:37:51.73ID:e3Ig3DX7
>>168
三時間経過して確認してみたら、ありがたいことに、ちゃんと、
ビルド済みの llc.exe があり、Win7, 64BIT で実行できて、
llc --help では、Registered Target がものすごく大量に出てきて、
その中に、wasm32, wasm64 の文字があった。
x86, x86-64 の文字もある。

ちなみに、Emscripten の emsdk に含まれている llc.exe の、
Registered Target は、js, x86, x86-64 の3つのみ。
Emscripten ではこれを使って LLVM を、いったん asm.js という
JavaScript の subset 的な言語に変換してから、自前で色々な
処理を行い、後から binaryen の asm2wasm などで
wasm に変換している。

今回 DL できた llc.exe では、LLVM を直接 wasm の wast (S式)
形式に直せるらしい。
170デフォルトの名無しさん
垢版 |
2019/01/26(土) 04:41:46.50ID:stTjLhtD
>>159
public変数を書いてる奴と仕事したくないわ。
171デフォルトの名無しさん
垢版 |
2019/01/26(土) 07:26:23.40ID:Xt/1tXeH
変数はアクセス関数を通して公開すると変更に強くなると設計の本に書いてあるけど、だったらC++に元からプロパティ型があれば良いのでは。
2019/01/26(土) 07:44:38.56ID:xGyN5S0n
114514回目のプロパティ談義が始まったぞ〜
うんざりしてない人だけ集まれ
2019/01/26(土) 09:28:36.59ID:LnCU6M5B
リファクタリングもテストもベンチマーク取りもやらんバカに限って
そういうことに興味持つよな。
174デフォルトの名無しさん
垢版 |
2019/01/26(土) 09:50:44.23ID:Xt/1tXeH
プロパティ型が無いから不毛な議論が続くのであって、プロパティ型が入れば世の中から争いが一つ消える。
不要論者は争いたいだけのくず。
2019/01/26(土) 11:05:06.38ID:ASUOD9dJ
プロパティのアドレス取ったらどうなるべきなのか解決するまでC++にプロパティは入りません
2019/01/26(土) 11:34:57.90ID:OQu6JdJq
>>174
皆を納得させられるだけの仕様を君が提案して、この不毛な議論に終止符を打ってくださいな。
2019/01/26(土) 11:43:59.62ID:mG/AnkbD
メンバ変数宣言と初期化時に、コンストラクタ引数からのテンプレート引数推定を許してくれればいい感じのができそうなんだが
autoが許可されないのと同じで無理そう
2019/01/26(土) 11:54:28.30ID:UuAHSy+r
変数と同じ名前の関数の作成を許可するだけで良い気がする。
クラス外からは関数優先で解決して、クラス内からは変数優先で解決みたいな。
2019/01/26(土) 12:43:50.56ID:bIuYL8G2
コピコンや代入とも相性悪そう…
プロパティーはプロパティーだけで完結するならまだ良いが、
読み書き可能なプロパティーが別途存在するデータメンバと関係を持っていたりしたら、
プロパティーAとその実体の一部を構成するところのデータメンバBのコピー順順序が非常に取り扱いにくいことに…

C#とかで大手を振ってプロパティーが導入できているのは奴らのクラスが参照型であることと無関係ではないと思う
(C++/CXは忘却の彼方なので忘れた;
2019/01/26(土) 12:52:15.23ID:bIuYL8G2
ていうかC++/CXのコードを今見直したらバッキングストアとしてのデータメンバBの存在を必ず仮定しており、
コピーはBのみ行う仕様らしい
これの仕様ではプロパティーAのコードを他クラスのオブジェクトと関係を持つような書き方をされたとき、コピー時に破綻する

ウィンドーズホンでネイティブC++とC#の橋渡しでしか使わない機能なので今まであんま深く考えてなかった;;
2019/01/26(土) 12:55:48.33ID:lXnCadeF
>>175
とりあえずエラーにしとけばいいんじゃね

>>176
とりあえずC++Builderみたいな方式でいいんじゃね
http://support.embarcadero.com/jp/article/35947
2019/01/26(土) 13:05:26.17ID:xGyN5S0n
存在しないプロパティの話はもういいいいいいいいいいいいいいいい
2019/01/26(土) 13:08:30.94ID:bIuYL8G2
いやすまん>>179>>180はデフォルトのコピコンと代入の話しやったわ
自前でコピコンや代入演算子を定義するならどうだってなる話やったわ寝ぼけてたわスマンorz
2019/01/26(土) 13:27:11.25ID:ZArwr6Ji
std::arrayの実態はスタック領域に格納されるの?
高機能配列と考えてよければ生配列使いたくない
2019/01/26(土) 13:35:18.29ID:IW4Z4Y6+
C#のgetsetなんでパクらないの?
2019/01/26(土) 13:50:54.53ID:VUJQK2E4
実装
2019/01/26(土) 13:51:38.09ID:VUJQK2E4
実装依存だけどひーぷ
2019/01/26(土) 14:01:13.68ID:mG/AnkbD
>>184
std::arrayをnewで作ってたりしなければスタック
そして最適化の結果として普通の配列との違いはなくなる
2019/01/26(土) 14:41:57.45ID:xGyN5S0n
>>185
あれば使うけどなくても困らん
そんなことよりやることが多すぎてあっても無くてもいいものに手をかける時間はない
ネットワークライブラリですらC++20でも決まらなさそうな感じになってきたし
2019/01/26(土) 15:02:57.27ID:ixrTaENi
>>185
前提が違うのに、一部だけそのまま持ってこれるわけないだろ。
既存の仕様を変更せずに、互換性を維持したままで整合性を取るのが大変だっつー話なんだよ。
2019/01/26(土) 15:03:42.60ID:ixrTaENi
このスレではプロパティとか #pragma once が何度でも蒸し返されるけど、
そんなに簡単に出来ることならやっとるわ。
出来ないか、出来るとしても割に合わんという判断があるからやってないの。
2019/01/26(土) 15:06:49.78ID:xGyN5S0n
そりゃこのスレにプログラミング言語の専門家いないし
理論も実装も知りません
2019/01/26(土) 16:31:28.38ID:YyqpBypo
>>191
だからなんでお前は勝手に委員会の代弁してんだよ
実際の提案や議論を追っかけててそれを説明してくれるならありがたいが、
マウント取りたいだけなら黙れ
194デフォルトの名無しさん
垢版 |
2019/01/26(土) 16:39:59.85ID:stTjLhtD
時々言語仕様の話になる現象何なの。
2019/01/26(土) 18:48:43.58ID:ixrTaENi
>>193
説明してもまた蒸し返すんだから無駄だっていうことがわかったから。
2019/01/26(土) 19:03:05.70ID:YyqpBypo
俺何度かプロパティに関する議論参加したけど、はちみつが
事実に即した採用されない理由を説明した場面を見たことないよ、勝手な妄想くっちゃべってるところは見たが
2019/01/26(土) 19:05:00.12ID:ixrTaENi
そうか。
2019/01/27(日) 00:16:21.08ID:Br2P5aSl
採用されるべき理由を説明した人も居ないけどな
俺が欲しいから以外の理由を見たことがない
2019/01/27(日) 00:45:15.54ID:8lOUNKLd
採用されるべき理由なんてあると便利だからでいいんだよ
そこに入るツッコミの数々に耐え抜いたものだけが標準入りするだけ
2019/01/27(日) 00:46:42.48ID:UseBSW0P
別にあーでもないこーでもないと議論する分にはいいだろ、ってことだよ
蒸し返すとか何様だ、と。
結構有意義な話(テンプレートでそれっぽいものを実現する試みとか)もあったしな
2019/01/27(日) 00:49:33.88ID:uLg7jbtK
つーかそんなにC#風のプロパティつかいたいなら素直にC#つかっとけ、みたいな
「なんでC#風のプロパティがないんだよ!」って言ってるやつを野放しにしておくと
そのうち「そもそも言語仕様でガベージコレクションが無いのがおかしい」とか
「今時テキストのソースから直にネイティブコードにコンパイルするのは設計が古い!
一旦中間コードにしてJITで実行するスタイルにすべき!」とか言いだすからな
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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