2ch勢いランキング アーカイブ

C++相談室 part134


デフォルトの名無しさん (ワッチョイ 5fcb-Q2eK) [sage] 2018/01/20(土) 09:05:42.21:mJKRg6iz0
次スレを立てる時は本文の1行目に以下を追加して下さい。
!extend:on:vvvvv:1000:512

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

前スレ
C++相談室 part133
ttp://mevius.5ch.net/test/read.cgi/tech/1511509970/

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

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

[C++ FAQ]
ttps://isocpp.org/wiki/faq/
ttp://www.bohyoh.com/CandCPP/FAQ/ (日本語)
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
デフォルトの名無しさん (ワッチョイ e3cb-Q2eK) [sage] 2018/01/20(土) 09:07:45.45:mJKRg6iz0
STLつかうと一気に実行ファイルサイズが10倍に?!

環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない

すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。

C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?

#include <stdafx.h>
後死ね。

言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。

いつまでこの糞テンプレ張り続けるんだおい

---- テンプレ ここまで ----
デフォルトの名無しさん (ワッチョイ 3d46-7dS8) [sage] 2018/01/20(土) 09:24:34.73:i+Y70H5F0
前スレのvectorのsize_tの質問した者だけど

実際gprofでvectorの[]が重い原因になってることを確認してる
次に重い原因がイテレータの比較なんだけど
デフォルトの名無しさん (ワッチョイ 23b3-3fO/) [sage] 2018/01/20(土) 09:35:10.31:CFAgCrzx0

> 実際gprofでvectorの[]が重い原因になってることを確認してる
どんな確認したのか知らんけど、確認しててあんな質問してるなら単なるバカとしか思えないが...
デフォルトの名無しさん (ワッチョイ 2334-wln7) [sage] 2018/01/20(土) 09:50:30.10:AVDgMNZq0
またトンデモな使い方をしているのだろうな
デフォルトの名無しさん (ワッチョイ 9d23-bNKV) [sage] 2018/01/20(土) 11:02:33.41:Bd+LbacS0
メモリ帯域が律速になる処理はわりとあるので
大容量のデータを処理してるならおかしくはない

キャッシュ効かないメモリアクセスするコストに比べたら整数の拡張など微々たるもんだ
デフォルトの名無しさん (ワッチョイ e3bd-16v+) [sage] 2018/01/20(土) 11:46:34.01:slOCvU7H0

↓前スレの続き
std::vector<double> vec((size_t)1000);
...
size_t sz = vec.size();
for (int i = 0; i < (int)sz; ++i) {
 cout << i << " " << vec[i] << "\n";
}
の方がiをsize_tにするよりループ命令の部分が軽量化されることにより早いかも試練(x64では気のせい?
およびループ内で他に32 bit演算をやる場合、x64だと全てレジスタ上で賄える可能性が高まるから
速くなるかも試練、

結論: アセンブリコードを確認せよ
デフォルトの名無しさん (ワッチョイ e3bd-16v+) [sage] 2018/01/20(土) 12:06:11.44:slOCvU7H0
いやスマン
例が不適切やったわ;
ループ内でstd::coutみたいな重量のある関数呼び出しをしたら
「全てレジスタ上で賄える」とか
「キャッシュが有効活用で劇速化」とかも糞も無いな
デフォルトの名無しさん (ワッチョイ 25b3-GP+B) [sage] 2018/01/20(土) 12:31:55.30:w1mvJepJ0
noexceptってどういうときにつけたらいいですか。
デフォルトの名無しさん (スップ Sd03-3us9) [sage] 2018/01/20(土) 13:45:44.65:gdCBjjapd

[ ] が問題なら生ポ使えと書いてるんだけど無視?
デフォルトの名無しさん (スップ Sd03-3us9) [sage] 2018/01/20(土) 13:51:38.35:gdCBjjapd

重量の有り無しの前に
数値の文字列変換がsize_tとintじゃ違うだろ

それがなければどっちでも変わらんよ
64bit環境ならレジスタも64bitなんで
デフォルトの名無しさん (スップ Sd03-3us9) [sage] 2018/01/20(土) 14:00:41.11:gdCBjjapd

ん?
プロファイラの確認?
だとしたら[ ] が遅いんじゃなくてメモリの読み込みが実際に遅い可能性があるのでは?

そもそも、
[ ] が問題になるような小さなループで
[ ] の時間を正しく測れるのか?

いずれにしろ、生ポと比較してみるのが一番
デフォルトの名無しさん (スップ Sd03-3us9) [sage] 2018/01/20(土) 14:02:23.47:gdCBjjapd
メモリ帯域の問題なら
もっと大きな視野で最適化をしないとな

複数ループをくっつけてメモリアクセスを減らすとか
細切れに処理をしてキャッシュを効かすとか
デフォルトの名無しさん (ブーイモ MM43-Q2eK) [sage] 2018/01/20(土) 14:04:10.50:C2bNNCkKM
[]が問題になるわけ無いだろ。ソースコード見たのかよ。
ナマポで書き直すなんて無意味。抜本的にアルゴリズム見直せ
デフォルトの名無しさん (スップ Sd03-3us9) [sage] 2018/01/20(土) 14:05:12.48:gdCBjjapd
あ、可能性だけで言えば
signedよりunsignedの方が速い
32bit から 64bit の符号拡張はコストが微妙にかかることもあるが、
ゼロ拡張はなにもしなくて良いから
レジスタの上位32bitは勝手にゼロになる
デフォルトの名無しさん (スップ Sd03-3us9) [sage] 2018/01/20(土) 14:07:10.18:gdCBjjapd

問題になることもある
君こそソースを見たかな?
デフォルトの名無しさん (ワッチョイ 23b3-3fO/) [sage] 2018/01/20(土) 14:50:38.90:CFAgCrzx0

今時のプロセッサでそんな奴見たことないけど?
妄想じゃないなら具体例よろしく
デフォルトの名無しさん (スップ Sd03-3us9) [sage] 2018/01/20(土) 14:56:00.07:gdCBjjapd

そんなやつって何だ?

符号拡張にコストがかかってゼロ拡張にコストがかからない例ならx86-64がそうだが
デフォルトの名無しさん (ワッチョイ 3d8a-ajZX) [sage釣] 2018/01/20(土) 19:43:21.88:J+aY78FJ0
MOVSXもMOVZXも0クロックでは処理できないと思うんだが
ZXが0クロックで出来るってエビデンスはあるのかな?

ttps://stat.ameba.jp/user_images/20180105/17/genten-nippon/2b/2b/j/t02200142_0640041414105871600.jpg
デフォルトの名無しさん (ドコグロ MM91-3fO/) [sage] 2018/01/20(土) 20:07:30.62:aYLVMpQqM
32bitデータをレジスタに書き込んだら上位32bitが0クリアされることを言ってるんでしょ
コスト0って言うのはどうかと思うけど
デフォルトの名無しさん (ワッチョイ 25b3-GP+B) [] 2018/01/20(土) 20:30:37.09:w1mvJepJ0
質問させてください。
以下のコードで push_back 時にコピーコンストラクタが呼ばれます。
ttps://ideone.com/Zodd94

こちらとしては、下のページにあるように、ムーブコンストラクタが呼ばれることを期待しています。
ttps://qiita.com/_meki/items/90f9815a1e899593daa3

なぜムーブではなくてコピーになるのか、教えて頂けないでしょうか。
デフォルトの名無しさん (ワッチョイ a3a2-GP+B) [sage] 2018/01/20(土) 20:43:12.42:kYo2uzfm0

ムーブコンストラクタが定義されていないから

A(A &&) = default;
とでもしておけ。
デフォルトの名無しさん (ワッチョイ 25b3-GP+B) [sage] 2018/01/20(土) 20:49:44.91:w1mvJepJ0

ありがとうございます。解決しました。
デフォルトの名無しさん (ワッチョイ 25b3-GP+B) [] 2018/01/20(土) 21:07:26.00:w1mvJepJ0
追加で質問させてください。

コンパイラが自動生成する関数で、noexceptがついているのは
・デストラクタ
・ムーブコンストラクタ
・ムーブアサインメントオペレーター
の3つでよろしいでしょうか。

よろしくお願いします。
デフォルトの名無しさん (ワッチョイ e3e7-x16F) [sage] 2018/01/20(土) 21:11:18.68:Z4eZ5+gd0
残り3つもデータメンバと基底クラスの同じものが全部noexceptなら付くよ
デフォルトの名無しさん (ワッチョイ 25b3-GP+B) [] 2018/01/20(土) 21:18:07.18:w1mvJepJ0
回答ありがとうございます。

データメンバと基底クラスのそれぞれのデフォルトコンストラクタが全て noexcept なら、
noexcept なデフォルトコンストラクタが自動生成される。
コピーコンストラクタ、コピーアサインメントオペレーターも同上
という理解でよろしいでしょうか。

また、その条件が成立しないときは、で挙げた3つということになるのですしょうか。

よろしくお願いいたします。
デフォルトの名無しさん (ワッチョイ 25b3-GP+B) [] 2018/01/20(土) 21:36:13.58:w1mvJepJ0
について自己解決しましたので、質問を取り下げます。
ありがとうございました。
デフォルトの名無しさん (ブーイモ MMe9-Q2eK) [sage] 2018/01/21(日) 11:30:18.34:LU9Vj3hRM

noexceptなしに = defaultで宣言した場合はどうなるの?
デフォルトの名無しさん (ブーイモ MMe9-Q2eK) [sage] 2018/01/21(日) 11:32:32.53:LU9Vj3hRM

>> 25の間違いです
デフォルトの名無しさん (ワッチョイ e3e7-x16F) [sage] 2018/01/21(日) 13:25:22.34:XRSBBZxr0
もちろん宣言通りになる
デフォルトの名無しさん (ブーイモ MMe9-Q2eK) [sage] 2018/01/21(日) 13:32:54.03:LU9Vj3hRM

thx
デフォルトの名無しさん (ワッチョイ 559f-x16F) [sage] 2018/01/21(日) 19:49:20.49:FwsOgvVZ0
記述上 int* であるが、上書きされた場合に自動的に中身を delete してくれるポインタの入れ物を、
operator= のオーバーロードなしで定義できますか?

ちょっと変な質問なのだけど、native C++なら多分以下コードで出来る。

struct PatHead {
int* ptr;
int* operator=(int* value){
if (ptr) delete [] ptr;
ptr = value;
return value;
}
operator int*(){ return ptr;}
};

void test(){
PatHead ph[10]; // int* ph[10] と同じ記述で通るのがミソ

ph[1] = (int*)1;
int* tgt1 = ph[1];
}

問題はこちらが使っているのはVC++/CLIで、
なぜか value struct では operator= のオーバーロードが出来ず、(C3194)
マネージ配列に直接入るのは value型だけなのでちょっと詰んでいる。
なお ref struct なら出来るのだが、こちらは逆に初期化部分で記述が増えるので、
それなら諦めようかな、って感じ。

というわけで回避策を思いつく人がいればお願いします。
何で値型で禁止されているか分かる人も居ればよろしく。
デフォルトの名無しさん (ワッチョイ ae81-MBfL) [] 2018/01/26(金) 13:51:50.30:duEsoqcC0
イテレータでendの一つ前を表すのはありますか。
endからの引き算必須ですか。
デフォルトの名無しさん (ワッチョイ ba34-0fOh) [sage] 2018/01/26(金) 13:58:16.53:SmrT25am0
&back()
デフォルトの名無しさん (ブーイモ MMaf-nzgF) [sage] 2018/01/26(金) 14:00:31.27:27cZOHeHM

用途に合うかどうか分からないけど
rbegin, crbegin
33 (ワッチョイ ae81-MBfL) [sage] 2018/01/26(金) 14:14:09.94:duEsoqcC0
サンクスです。できました。
デフォルトの名無しさん (ワッチョイ 9ae7-fPTX) [sage] 2018/01/27(土) 07:12:46.54:ZP0gkUPd0
rbeginはちょっとトリッキーな実装になってることがあるから注意
デフォルトの名無しさん (ワッチョイ daf9-Ddy8) [sage] 2018/01/27(土) 11:46:50.10:RraDQJG10
実装に依存しないような仕様に沿った使い方をすればいいんでないの?
仕様に合致していない実装ならどうしようもないが。
デフォルトの名無しさん (アウアウウー Sa77-fQjY) [sage] 2018/01/27(土) 19:12:13.06:Boft2e8Ea
SHA256のハッシュをkeyにしたmapを高速で扱いたいんだが、
keyのoperator <,>それぞれでmemcmpしてて、多分このせいで性能悪くなってる

なんか良い解決策ってないですかね?
Linuxのrbtreeと比較すると100万件あたり150msec程度差がついてました
デフォルトの名無しさん (ワッチョイ aa7e-rgA5) [sage] 2018/01/27(土) 19:13:43.71:IajdzWB80
simd
デフォルトの名無しさん (ワッチョイ 6e62-WBz1) [sage] 2018/01/27(土) 19:44:42.49:MtS5alc90
unordered_mapにsha256の関数渡せばええやん
デフォルトの名無しさん (ブーイモ MMda-FYQJ) [sage釣] 2018/01/27(土) 20:08:58.78:6QrTsC7zM
fpga
デフォルトの名無しさん (ワッチョイ ba34-0fOh) [sage] 2018/01/27(土) 22:07:02.09:bqR9C45e0
mapじゃなくてハッシュを実装しろとしか
デフォルトの名無しさん (アウアウウー Sa77-fQjY) [sage] 2018/01/27(土) 22:15:03.18:Im+FAy1Qa

便利そうだと思ったけど、データ構造的にアライメント揃えられないから使えなさそう


ソート済みデータを扱いたいパターンもあるので使えないです

コード的にさっくり改善する方法がなさそうなので
map諦めてそこだけ完全自作することにしました
レスしてくれた方々サンクスです
デフォルトの名無しさん (ワッチョイ 9ae7-fPTX) [sage] 2018/01/27(土) 22:53:57.64:ZP0gkUPd0
Compareの自作で何がいけなかったのかわからないけど解決おめ
デフォルトの名無しさん (スップ Sd7a-4fyU) [sage] 2018/01/27(土) 23:05:46.83:r2gR5oNyd
赤黒木ってスマートポインタを使って実装できますか?
親を弱参照で書いたらわけわかめに
デフォルトの名無しさん (スプッッ Sd7a-g7kd) [sage] 2018/01/28(日) 01:55:54.91:B1112Jntd
ハッシュをソートかあ
デフォルトの名無しさん (ワッチョイ 9abd-xSVK) [sage] 2018/01/28(日) 03:22:06.75:vIDP+sWr0
コピーしたくないオブジェクトへのポインタ(ていうか全体をシリアライズするの可能性も考えたらindexがマジお勧め)の配列おソートすれば良い
そういった実装の詳細はクラスの中に隠すことができる 何のためにC++を使っているのやヽ(`Д´)ノ!!!11!1
デフォルトの名無しさん (ワッチョイ aee8-7ZJK) [sage] 2018/01/28(日) 08:17:39.92:abHZXNlp0

なんかモヤモヤするなそれw
デフォルトの名無しさん (ブーイモ MMaf-nzgF) [sage] 2018/01/28(日) 11:41:38.50:/ypN0hd6M

hashは値に対してユニークじゃないけどいいの?
デフォルトの名無しさん [] 2018/01/28(日) 14:41:11.23
そりゃハッシュ衝突用のフィールドくらい作ってるだろうよ
質問にないことは心配しなくていいよ
デフォルトの名無しさん (ワッチョイ f723-g7kd) [sage] 2018/01/28(日) 15:09:59.60:RaXbFAH70
心配してるんじゃなくてバカにしてるんだよw
デフォルトの名無しさん (ワッチョイ bab3-dVd5) [sage] 2018/01/28(日) 15:44:58.16:C2Jb//yt0
バカにしようとして失敗してるとしか見えないけど w
デフォルトの名無しさん (ワッチョイ bbb3-rgA5) [sage] 2018/01/28(日) 20:33:36.08:NzqukFwp0
Impliment.h

class Impliment
{
public: base;
};


Interface.h

class Interface
{
デフォルトの名無しさん (ワッチョイ bbb3-rgA5) [sage] 2018/01/28(日) 20:42:03.84:NzqukFwp0
すいません。途中で書き込んでしまいました。

以下のようなクラスを作ったのですが、
derivedがImp::baseを継承しているため、
インクルードの順番が固定されてしまいます。(Impliment.hが先でないといけない)

こういったクラスは使う人から見て嫌がられるでしょうか。
ご意見をいただけるとありがたいです。

Impliment.h

class Impliment
{
public:
class base {}
};


Interface.h

template<class Imp>
class Interface
{
private:
class derived : public Imp::base {}
}
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 966f-rgA5) [sage] 2018/01/28(日) 20:56:07.47:Xl/BPHGJ0

「XXの実装とインターフェイスが分かれている」ということをユーザが意識しないといけないのは抽象化の不足だと思う。
分離した形のデザインで開発するのはかまわないけど、ユーザに対してはなるべく隠すのが望ましい。

#include<Implement.h>
#include<Interface.h>

と書いたヘッダファイルを用意しておく程度のことでもだいぶんマシになる。
(インクルードガードはしておくこと)
デフォルトの名無しさん (ワッチョイ f723-g7kd) [sage] 2018/01/29(月) 02:50:08.46:gQcv+kbG0

普通は interface.h の冒頭で implement.h をインクルードしておく
デフォルトの名無しさん (ワッチョイ efef-WRop) [sage] 2018/01/29(月) 05:39:18.37:+mqzfkB+0

このコードだけならインクルード順が逆でも問題ない。
デフォルトの名無しさん (ワッチョイ bbb3-rgA5) [sage] 2018/01/30(火) 20:17:26.27:fsahOVUj0
レスありがとうございます。


Implimentは複数あって、ユーザーが選ぶことができる
というのを想像して作っていました。


template化する前はそこでインクルードしていました。


たしかに、このコードだけでは大丈夫ですね。
正確にはこのコードだけではないので、他に原因があるのかもしれません。
ご指摘ありがとうございます。
デフォルトの名無しさん (ワッチョイ 16e7-fPTX) [sage] 2018/01/30(火) 21:08:08.01:VkcoBYQV0
Implement入れ替えさせたいならユーザーに適当な所で
template Interface<MyImplement>;
って書かせりゃいいだけじゃないの?
デフォルトの名無しさん (ワッチョイ ba34-0fOh) [sage] 2018/01/30(火) 21:19:19.29:Lbh+cCVN0
typename imp::base
デフォルトの名無しさん (ワッチョイ 9fbd-CNA0) [sage] 2018/02/04(日) 11:20:04.76:r6E1M8790
質問ですが
「このクラスはバイト列としてコピーできる」ということを明らかにするために
明示的にコピーコンストラクタを書くとして、
どう書けば処理系に依存することなくデフォルトのコピーコンストラクタ以上の性能になることを保証できますか
(もしくは、「このクラスはバイト列としてコピーできる」ということを明示する構文はありますか)
片山博文MZ ◆T6xkBnTXz7B0 (スププ Sdbf-vcz1) [sage] 2018/02/04(日) 11:26:54.06:i7yJvuTcd

MyClass(const MyClass&) = default;
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-wbgk) [sage] 2018/02/04(日) 11:36:31.71:H9FebDBN0
デフォルトのコピーコンストラクタはメンバのコピーコンストラクタを起動するので、
そのクラス (に属するオブジェクト) 全体がバイト列としてコピーするわけではない。

trivially copyable class の要件を満たすように書けばバイト列としてコピー可能と保証される。
コンストラクタの書き方だけでは保証できない。
デフォルトの名無しさん (ワッチョイ ffd7-wbgk) [sage] 2018/02/04(日) 13:04:56.23:WecC8o2P0
memcpyするコピコンをユーザー定義すればええやん
デフォルトの名無しさん (ワッチョイ 9fbd-CNA0) [sage] 2018/02/04(日) 13:46:35.82:r6E1M8790

なるほど「= default;」のありがたみがわかりた


なるほどそれだと安全性の点でイマイチ…
バイト列としてそのままリモートPCに送ったりするクラスに誰かが
バイト列としてのコピーが可能でないコードを追加したとしても
コンパイラで検出する術が無いっぽいように読める
デフォルトの名無しさん (ワッチョイ 9fbd-CNA0) [sage] 2018/02/04(日) 13:47:37.01:r6E1M8790
訂正
誤:バイト列としてのコピーが可能でないコード
正:バイト列としてのコピーを不可能にするコード
デフォルトの名無しさん (ワッチョイ 1f7e-wbgk) [sage] 2018/02/04(日) 13:47:46.54:HBpG+TPK0

std::is_trivially_copyable<T>がtrueになるように書いて
ttps://cpprefjp.github.io/reference/type_traits/is_trivially_copyable.html
トリビアル型とは何かは検索して
デフォルトの名無しさん (ワッチョイ 1f7e-wbgk) [sage] 2018/02/04(日) 13:52:58.38:HBpG+TPK0

なおさらtype_traitsで条件に合わなければコンパイルを失敗させればよい
デフォルトの名無しさん (ワッチョイ 9fbd-CNA0) [sage] 2018/02/04(日) 14:08:05.83:r6E1M8790

おk
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-wbgk) [sage] 2018/02/04(日) 16:47:05.72:H9FebDBN0

まあ書こうと思えば書けないことはないが、
やった結果に整合性がとれるかどうかは別問題なのでな……。
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-wbgk) [sage] 2018/02/04(日) 17:24:06.38:H9FebDBN0
流れをぶった切って質問するんだけど、
配列の一部をとる参照とかって作れない?
実際にはコンパイルが通らないけど、やりたいことはこんな感じ。

int a[3];
int (&b)[2] = static_cast<int (&)[2]>(a);
デフォルトの名無しさん (ワッチョイ 9fa2-wbgk) [sage] 2018/02/04(日) 18:06:17.19:B+seqFts0
reinterpret_castすれば?
デフォルトの名無しさん (ワッチョイ 7723-Us3F) [sage] 2018/02/04(日) 18:22:52.47:HJ1AdVlZ0
ポインタにして剥がせばいい
デフォルトの名無しさん (ワッチョイ 1f7e-wbgk) [sage] 2018/02/04(日) 18:28:31.26:HBpG+TPK0
配列型はポインタではないので途中からとかない
デフォルトの名無しさん (ワッチョイ bfe7-j4Dg) [sage] 2018/02/04(日) 18:55:06.41:i/oNqC3f0
一応うまく行ったけど規格で保証された挙動かどうかはよくわからない
ttps://ideone.com/wVzc6b
デフォルトの名無しさん (ワッチョイ 9fcb-qyJP) [sage] 2018/02/04(日) 19:14:07.38:NcR26d4z0
でもポインタにしてしまうと困るシチュエーションなんてありうるの?
マクロの中でsizeofしてるとか?
デフォルトの名無しさん (ワッチョイ ffd7-wbgk) [sage] 2018/02/04(日) 20:30:26.18:WecC8o2P0

意味わかんねえ
どーゆーこと?
デフォルトの名無しさん (ワッチョイ 9fbd-CNA0) [sage] 2018/02/05(月) 23:20:37.74:y5vbQcAP0
メンバのコピーコンストラクタを起動すべきところをmemcpy()しかしない手製コピーコンストラクタで済ませようとしたら破滅が訪れる

MyClass(const MyClass&) = default; なら勝手にやってくれるのでその心配が無いので安心
デフォルトの名無しさん (ワッチョイ 9f23-Us3F) [sage] 2018/02/05(月) 23:28:20.73:QTKEhMlZ0
しかしまあ なんていう便利なモノがあるとは
フラフラこういうスレ読んでるのもためになるなあ
デフォルトの名無しさん (ワッチョイ ffd7-wbgk) [sage] 2018/02/06(火) 07:54:17.35:CtmFRYuD0

デフォルトの名無しさん (ワッチョイ ff8a-phf3) [sage] 2018/02/06(火) 08:05:48.85:cp/uvOeq0

処理系に依存することなく「保証」なんて出来ない
以上
デフォルトの名無しさん (ワッチョイ 7723-Us3F) [sage] 2018/02/06(火) 08:27:38.08:rGp9SuaC0
で解決している
もしくは以下への回答もで出ている
デフォルトの名無しさん (ワッチョイ ffd7-wbgk) [sage] 2018/02/06(火) 09:14:20.61:CtmFRYuD0
バイト列コピーが = default; なわけねーだろアホ
デフォルトの名無しさん (ワッチョイ 7723-Us3F) [sage] 2018/02/06(火) 11:45:28.85:rGp9SuaC0
よく読め
バイト列コピーでokの保証は
遅くならないコンストラクタの書き方が
デフォルトの名無しさん (ワッチョイ 7723-Us3F) [sage] 2018/02/06(火) 11:48:04.39:rGp9SuaC0
そもそも「どうコンストラクタを書けば」ってのを質問してるんで
バイト列コピーでコンストラクタを書けってのは単にの珍解答に過ぎない
デフォルトの名無しさん (ワッチョイ ffd7-wbgk) [sage] 2018/02/06(火) 11:51:41.68:CtmFRYuD0
すまんが日本語でたのむ
デフォルトの名無しさん (ワッチョイ 7723-Us3F) [sage] 2018/02/06(火) 11:54:37.03:rGp9SuaC0
元の質問
・処理系に依存せずデフォルトより遅くならないことが保証されているコンストラクタの書き方
もしくは
・バイト列コピーでokと明示する構文

だろ。
前者は
後者は
デフォルトの名無しさん (ワッチョイ ffd7-wbgk) [sage] 2018/02/06(火) 12:36:57.61:CtmFRYuD0
元質問: デフォルトのコピーコンストラクタ以上の性能
おまえ: デフォルトより遅くならないこと

よく読めをそのまま返す
デフォルトの名無しさん (ワッチョイ 9fe1-pzKJ) [sage] 2018/02/06(火) 12:57:03.34:bHMYZ9Vj0
以上っていうのは等しいかまたはそれを越えるという意味だぞ
デフォルトの名無しさん (ワッチョイ 7723-Us3F) [sage] 2018/02/06(火) 14:01:35.47:rGp9SuaC0
そもそも memcpy は前者の性能保証も後者の仕様の保証もどちらも満たしてない
仕様が保証されてるなら多分性能的に大丈夫だろうという程度

間違いを認めると死ぬ病気なんだろうからもうこれ以上は言わない。
デフォルトの名無しさん (ワッチョイ ffd7-wbgk) [sage] 2018/02/06(火) 14:38:54.29:CtmFRYuD0
バイトコピーでmemcpyより高性能な手段を1つでも例示したらどうなんだ

> 間違いを認めると死ぬ病気なんだろうから

ああ、おまえがか
デフォルトの名無しさん (ワッチョイ ff8a-uMb5) [sage] 2018/02/06(火) 18:18:02.35:cp/uvOeq0
ttps://stackoverflow.com/questions/28623895/why-is-memmove-faster-than-memcpy
62 (ワッチョイ 9fbd-CNA0) [sage] 2018/02/06(火) 22:02:19.27:MckGyr3K0
memcpy()より速いコピー手段Xが仮にあったとして
論理的にmemcpy()で済むケースについてコンパイラが提供する
デフォルトのコピーコンストラクタがコピー手段Xにならない理由がわからん…

個人的には「=default;」と書いたら最高性能なんなら毎回手でmemcpy()とか書きたくないカンジ
デフォルトの名無しさん (ワッチョイ ffd7-wbgk) [sage] 2018/02/06(火) 22:06:49.77:CtmFRYuD0

class A {
public:
A() {}
A(A const&) { std::cout << "aho"; }
};

class B {
public:
A a;
B() = default;
};

int main()
{
B b, c = b; //this will call you.
}
デフォルトの名無しさん (ワッチョイ 9fbd-CNA0) [sage] 2018/02/06(火) 22:09:42.68:MckGyr3K0
は「論理的にmemcpy()で済むケース」では無いからちげう
デフォルトの名無しさん (ワッチョイ ffd7-wbgk) [sage] 2018/02/06(火) 22:29:22.47:CtmFRYuD0
だから日本語でたのむって言っただろ
デフォルトの名無しさん (ワッチョイ 9fbd-CNA0) [sage] 2018/02/06(火) 22:29:24.08:MckGyr3K0
どうした?
訂正はよ
デフォルトの名無しさん (ブーイモ MMcf-9NhG) [sage] 2018/02/06(火) 23:07:57.82:hdfY5rL3M
間違いを認めて・・・死んだのか?
デフォルトの名無しさん (ワッチョイ 9fbd-CNA0) [sage] 2018/02/06(火) 23:21:41.18:MckGyr3K0
仕方ないので漏れが訂正するわ;
ttps://ideone.com/TZnGv4

↑のコードの
(*1)は「=default;」でデフォルトのコピコンの使用を明示
(*2)は手でmemcpy()でコピーするように書いたコピコン

次の条件で試したら(*1)も(*2)も同じコードになったわ
x86-64 gcc 7.2
-O2 -fno-strict-aliasing -std=c++14 -pedantic -Wall -Wextra

こことかで試せるが保存と公開方法がわからんかったのでideoneを使わせてもろうた
ttps://gcc.godbolt.org/

漏れの国語力ではようわからんが、さすがに多分は間違いなんジャマイカ、
デフォルトの名無しさん (ワッチョイ 9f34-FPX7) [sage] 2018/02/06(火) 23:34:18.80:Ur4dB7lv0
Cから来た連中ってどうしてmemcpyやmemset使いたがるんだろうな
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-wbgk) [sage] 2018/02/07(水) 04:09:18.59:OAPGz/K+0

reinterpret_cast でなければ通らないときはだいたい駄目なときやわ。
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-wbgk) [sage] 2018/02/07(水) 04:22:37.75:OAPGz/K+0

「default がバイト列コピーとは『限らない』」という意味で は真。
デフォルトの名無しさん (ブーイモ MMcf-EKSC) [sage釣] 2018/02/07(水) 05:00:09.29:1UF8v8gcM
開始アドレス、終了アドレス、サイズが64bit等で割り切れれば
バイトコピーより早いコピーはあるだろうね
デフォルトの名無しさん [] 2018/02/07(水) 07:27:28.65
頭のいいコンパイラなら勝手にベクトル処理とかしてくれるんじゃないの?

知らんけど
デフォルトの名無しさん (ワッチョイ 57b3-wbgk) [] 2018/02/07(水) 22:28:51.20:MTpdY7NJ0
"!"!"!MOHYO!"!"!"2"

1.[[[HUn≒MUL=POSI≠MAHO+Set*HUGE=SAGE=LOGE=NOISIA=0≒1]]]

2-[[[[[[[E=RAT%2^10%SPELAn!%]&!TOWA&!PEG#!NOLNOL8!#!HYAGO!2#]1*2=1]U]S]0]O]!#PAL!

3--->PAGODOL7&!@17,2222734.15&[[[%%RENRAK6,9,99"^10"]#$11.2%}]KAIJ]{

41.2SSS = RALQI2.β{{{RA4,0,238^97,1,$.S.L.E.I.L."Q5352.15Q"JOL"5*3>.3q}}}>1.2<0
.3φTALHOSI"0">.10<1.235<1.2>51≠52===55.632>V="E=0.835"of"1.32","632",0.683,1.end

{
片山博文MZ ◆T6xkBnTXz7B0 (スププ Sd62-d/x4) [sage] 2018/02/10(土) 19:52:35.19:x9I4Wn6Pd
C++では、
int i;
for (i = 0; i < 9; ++i) { ... }
が、
for (int i = 0; i < 9; ++i) { ... }
って書けるのは知っているだろう。( )の中で、変数を宣言できる。

だが、ifやwhileの( )の中で、変数を宣言できることを知らない人は多い。
デフォルトの名無しさん (ワッチョイ 99b3-BC1W) [sage] 2018/02/11(日) 04:31:12.99:9irhhPDg0
C++17では
if ( auto v = n; conditions ) {
...
}
が可能になるし、これからは広がってくれるかのう
デフォルトの名無しさん (ワッチョイ 2ee8-8oIi) [sage] 2018/02/11(日) 06:11:03.22:l3GMmVaq0

これホント待ち遠しい
デフォルトの名無しさん (ワッチョイ 4539-102K) [] 2018/02/11(日) 17:00:15.07:RGzNlubj0
それほど待ち遠しいか?
デフォルトの名無しさん (ワッチョイ 99b3-7Au1) [] 2018/02/11(日) 17:27:44.93:QA9xO9uU0
待ち遠しくない
デフォルトの名無しさん (ドコグロ MM0a-/0XS) [sage] 2018/02/11(日) 17:34:07.64:A61Ds/EIM
for( ) の制御変数はそのループでしか使わないことが多いから意味あったけど、if( ) でそんなケースはまれだしなぁ
あれば使うけど待ち遠しいって言うほどじゃない気がする
◆QZaw55cn4c (ワッチョイ 2260-nHV3) [sage] 2018/02/11(日) 17:36:34.68:bT0HWvJB0
理想主義的な文法ですが、実効性はあるのか疑問ですね
デフォルトの名無しさん (ワッチョイ ed9b-gPIt) [sage] 2018/02/11(日) 17:40:12.67:KWDwqk940
一瞬意図が分からなかったが
()の中が;で区切れるという話?
デフォルトの名無しさん (ブーイモ MMb6-ZT4h) [sage] 2018/02/11(日) 17:41:52.24:rD0gl3AiM
dynamic_castとの組み合わせで使うとかどうよ
デフォルトの名無しさん (ワッチョイ c27c-jA6l) [sage] 2018/02/11(日) 19:11:10.58:av7bQMHG0
結構あると思うけどね
if(DWORD err = GetLastError(); err != NO_ERROR)
この場合NO_ERRORが0だって分かってるから
if(DWORD err = GetLastError())
で済むから無意味だけど
デフォルトの名無しさん (ワッチョイ 22f9-YiuZ) [sage] 2018/02/11(日) 19:17:28.82:yo2OB3cP0

前者の方が意図が明確だし意味はあると思う
デフォルトの名無しさん [] 2018/02/11(日) 20:06:43.52

>if(DWORD err = GetLastError(); err != NO_ERROR)

普通こうやろ
if((DWORD err = GetLastError()) != NO_ERROR)

変数宣言は少しは意味あるかもしれんが(Perlと同じことができるってこと)
複文書けるのは特にメリット感じないわ
デフォルトの名無しさん (ワッチョイ 86e7-zMUp) [sage] 2018/02/11(日) 20:41:29.80:Ag9E1Urq0
それ通らんよ
こうだろ

DWORD err;
if((err = GetLastError()) != NO_ERROR)

if内でしか使わないerrが外部に漏れてるのがよろしくないってこと
デフォルトの名無しさん [] 2018/02/11(日) 20:56:03.30

それが通るという変更だと思ってたわ

こう書けるPerlのほうがまだ優位性あるね

if((my $err = GetLastError()) != NO_ERROR)
デフォルトの名無しさん (ワッチョイ d27e-jA6l) [sage] 2018/02/11(日) 22:10:23.49:p+z832PL0
if(init ; expr)だと初期化と式が関連していなくてもいいのでとは違う構文になる
だからこんなのでもよい
if(int err = GetLastError(); hoge.aho())

lock_guardもしておける
if(std::lock_guard<std::mutex> lock(m); flag)

構造化束縛も使える
if(auto [a, b, c] = f(); b > c){ std::cout << "b > c" << std::endl; }
デフォルトの名無しさん (ワッチョイ ddc3-saCW) [] 2018/02/12(月) 12:22:30.52:sATukCOa0
Cでは名前空間っていうのをすごい扱っていた気がするんだけどC++は名前空間扱うことってないの?
一つのアプリケーションも完成させたことがないど素人の質問ですまんが
デフォルトの名無しさん (ワッチョイ 62cb-ZT4h) [sage] 2018/02/12(月) 12:43:48.54:qekpeHDJ0

まずは"C"の入門書を読んで、何を見間違えたのかはっきりさせてからにしようか。
デフォルトの名無しさん (ワッチョイ e1eb-IGFW) [sage] 2018/02/12(月) 14:08:57.84:sGdsmrZD0
初心者スレに池
デフォルトの名無しさん (ワッチョイ 319f-R9JW) [] 2018/02/12(月) 20:44:41.93:gfcybQxo0

気のせい。
デフォルトの名無しさん (ワッチョイ 6e8a-9Kvu) [sage] 2018/02/13(火) 00:10:36.10:YGwN9DGw0

Cにnamespaceは無いだろ
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 066f-jA6l) [sage] 2018/02/13(火) 17:30:20.31:tUR5ZBgZ0
構造体タグと型名の名前空間が分かれているといったような意味での名前空間は C に有るが
C++ では構造体タグはそのまま型名としても使えるし、そういう意味での名前空間の話かな?
デフォルトの名無しさん (ワッチョイ c26e-jA6l) [sage] 2018/02/13(火) 17:45:08.06:a1RYP/Gm0
こんな名前空間もあるね
int x;
int main(void)
{
x = 1;
int x;
x = 2;
{
int x;
x = 3;
}
return 0;
}
デフォルトの名無しさん (ブーイモ MM6d-ZT4h) [sage] 2018/02/13(火) 17:55:17.58:Xr6xvVy+M
それはスコープでは
デフォルトの名無しさん (ワッチョイ c26e-jA6l) [sage] 2018/02/13(火) 18:15:03.36:a1RYP/Gm0
変数だよ
代入でもあるね
デフォルトの名無しさん (ワッチョイ d27e-jA6l) [sage] 2018/02/13(火) 20:09:02.02:NNOtJgpO0
謎すぎワロタがそこから上のスコープのxを参照してくれ
デフォルトの名無しさん (ラクッペ MM61-cyyJ) [sage] 2018/02/13(火) 20:19:22.41:Za/EZbH7M
ブロックって言ってる
デフォルトの名無しさん (ワッチョイ c26e-jA6l) [sage] 2018/02/13(火) 21:49:01.90:a1RYP/Gm0
アホばっかり
がっかり
デフォルトの名無しさん (ワッチョイ 9f23-TT3E) [sage] 2018/02/15(木) 12:08:37.28:Sgd3BwBT0
std::mapのように文字列や構造体をキーにした高速アクセスができて、
要素の数が一定数を超えたらLRU形式で勝手に削除してくれる、
キャッシュのような機能を実装したいのだけど、
C++でそのような仕組みを作れるクラスはないですか?
デフォルトの名無しさん (ワッチョイ 378a-TkRA) [sage] 2018/02/15(木) 17:00:44.45:GbCJk+7h0
自分で実装するならどうにでもなるだろ
そのための道具は全て標準で揃っている
デフォルトの名無しさん (ワッチョイ ff8a-NmL4) [sage] 2018/02/15(木) 18:15:51.96:6url8MQd0
バックグラウンドならスレッド使うしかないんじゃないかな
デフォルトの名無しさん (ブーイモ MMbf-4Nx+) [] 2018/02/15(木) 19:13:27.39:CSnzpiZpM
C++のプログラマーって性格ねじ曲がってるなあ
初めてGo応援したくなったわ
デフォルトの名無しさん (ワッチョイ 9f60-qi38) [sage] 2018/02/15(木) 19:34:35.63:95vLe5Bi0

どんな点が、性格悪い、と思わせるのですか?
デフォルトの名無しさん (ワッチョイ d7eb-1VRC) [sage] 2018/02/15(木) 20:03:21.73:qihnyYvs0
それだよそれ
デフォルトの名無しさん (ワッチョイ 9fbd-RFe/) [sage] 2018/02/15(木) 21:14:35.68:MoAPifjS0
C++は多分チューリング完全だと思う
デフォルトの名無しさん (ドコグロ MMdf-dLOu) [sage] 2018/02/15(木) 21:20:32.50:6nYos/bmM

要素数が閾値を超えるのは要素が追加される時だからその時に古い奴を削除すりゃいいだけじゃね?
デフォルトの名無しさん (ブーイモ MM1b-goL+) [sage] 2018/02/15(木) 23:50:52.95:fG1U9Z3qM

簡単で良いのでサンプルコード書いてもらえませんか?
デフォルトの名無しさん (ワッチョイ 9fa8-yZIn) [sage] 2018/02/16(金) 00:43:14.82:uaG+5sVQ0
じゃないけどシンプルにいくなら
{
map<key,value> data; // 本来のデータ
map<key,list<key>::iterator> lruindex; //
list<key> lrulist; // LRUリスト
... // mapと同じインターフェイス
}
みたいなクラスで要素の追加・削除・参照とかの時にLRUリスト見て処理すればいい
デフォルトの名無しさん (ワッチョイ ff80-Pey1) [sage] 2018/02/16(金) 03:16:29.76:DpsRPWWQ0
辞書・線形リスト・2分木を、組み合わせる。Ruby で書くと、

class LRU_hash
def initialize (max_size = 3)
# ary は、hash に追加・アクセスした順
@hash = {}; @ary = []
@max_size = max_size
end

def push (key)
if @hash.has_key? key
# 一旦、要素を削除してから、最後尾に追加しなおす
@ary.delete key
else
if @max_size == @hash.size
# 先頭要素を削除してから、最後尾に追加する
@hash.delete(@ary.shift)
end
@hash[key] = true
end
@ary.push key
end

def print_buf
puts @ary.join ', '
end
end

ary = ["あ", "a", "あ", "い", "b", "あ", "c"]
hash = LRU_hash.new 4
ary.map { |key| hash.push key }
hash.print_buf #=> い, b, あ, c
デフォルトの名無しさん [] 2018/02/16(金) 04:31:51.17

> # ary は、hash に追加・アクセスした順

参照のたびに最後尾に追加しなおすの?
デフォルトの名無しさん (ワッチョイ d7e3-2H/C) [sage] 2018/02/16(金) 06:27:04.53:HICjIKnm0
プログラムを作っていて困っています。
プログラム動作環境、windows 7 x86_x64

プロセスをExplorerを親として、
起動したプロセスにファイルの存在するディレクトリを作業ディレクトリとして
割り当てたい。

ただし、プロセスへのアタッチによる変更は禁止とする。

ようするにファイルをダブルクリックして起動するのと同じ状況を再現したいのです。



C:\hoge\fuga.exe

[現状]
Explorer C:\hoge\fuga.exe

explorer.exe
カレントディレクトリ
C:\Windows\System32\

[理想]
Explorer C:\hoge\fuga.exe

explorer.exe
カレントディレクトリ
C:\hoge\
144 (ワッチョイ ff80-Pey1) [sage] 2018/02/16(金) 07:56:00.35:DpsRPWWQ0



で、LRU と書いてあるから、Hash に追加しようとした度に、
すでに存在する場合でも、配列の最後尾に追加しなおした

どういう意味か、正確にはわからないけど
デフォルトの名無しさん (ワッチョイ 57fc-T3WU) [sage] 2018/02/16(金) 08:03:01.53:TOIQut300

explorer.exeへのショートカットを作ってプロパティで作業ディレクトリを指定するか、
COMでIShellLink::SetWorkingDirectoryを使って同じことをするあたりか?
134 (ワッチョイ 9f23-TT3E) [sage] 2018/02/16(金) 09:56:21.20:+b2iJMK40
みなさんありがとうございます。
std::mapにLRUや最大要素数の仕組みを持たせた派生クラスでも
無いかと思ったのですが、標準ではやっぱり無いですか。

のように、std::mapをメンバの一つに持たせた独自クラスを
一から作っていくことになるんですかね。
デフォルトの名無しさん (ワッチョイ 9f12-pjg9) [sage] 2018/02/16(金) 10:11:55.71:JoalkiMd0
amazonランキングの謎を解く とか言う本でmove-to-frontを見た

本の紹介「Amazonランキングの謎を解く」
ttp://www.kenkyuu.net/whatsnew/2011/08/book2011-08-01.html
>「move-to-front規則」(最後に売れた順に並べる、つまり、注文のたびに1位にジャンプする)

Move To Front - Wikipedia
ttps://ja.wikipedia.org/wiki/Move_To_Front
デフォルトの名無しさん (ワッチョイ 57fc-T3WU) [sage] 2018/02/16(金) 10:54:10.09:TOIQut300
ageだね
デフォルトの名無しさん (ワッチョイ 378a-TkRA) [sage] 2018/02/16(金) 14:25:37.67:UjPhOEUu0

「c++ lru map」でググったか?
いくつかサンプルになりそうなコードが見つかるんだけど
デフォルトの名無しさん (ブーイモ MM3b-mhGK) [sage] 2018/02/16(金) 18:05:58.99:GGXfeEqkM
江添さんのC++17本予約しようかな
デフォルトの名無しさん (ワッチョイ 1f7e-T3WU) [sage] 2018/02/16(金) 18:26:06.12:waI0am5S0
予約しなくても売れ残るからいつでも買える
デフォルトの名無しさん (アウアウカー Sa6b-s4hu) [sage] 2018/02/16(金) 20:04:35.13:1Lr9lxEpa
C++を勉強しようと思ってる者ですが書籍を探しております。Cはある程度書けるのでそれを前提とした書籍が欲しいです
デフォルトの名無しさん (ワッチョイ bf0e-qi38) [sage] 2018/02/16(金) 20:33:50.33:Rc+MuzY40
C++ クイック入門&リファレンス
プログラミング言語C++ 第4版
デフォルトの名無しさん (ワッチョイ 9f60-qi38) [sage] 2018/02/16(金) 20:36:34.10:9b60nRDg0

C++11 以前だが accelerated c++, ここでフォローするよ
デフォルトの名無しさん (ワッチョイ 57fc-T3WU) [sage] 2018/02/16(金) 20:37:11.23:TOIQut300
禿4は俺も推奨する
C++11の良本だ
デフォルトの名無しさん (アウアウカー Sa6b-s4hu) [sage] 2018/02/16(金) 21:09:12.34:+EaaPhKWa
めっちゃ高いけどその価値あるのね
デフォルトの名無しさん (ブーイモ MMbf-zxnT) [sage] 2018/02/16(金) 21:46:03.21:5AmFsIq1M
こっちはフッサフサやでttps://images-na.ssl-images-amazon.com/images/I/51fYzbYoXFL._UX250_.jpg
デフォルトの名無しさん (ワッチョイ 9f4c-C9DI) [sage] 2018/02/16(金) 22:03:34.89:qDhjnryl0
誰がハゲやねん
デフォルトの名無しさん (マクド FF6b-xgEu) [sage] 2018/02/17(土) 09:43:48.64:Lqib7/b9F
以下のようにconst char*型の文字列でchar*型の変数を初期化したいときに
strcpyやstrlenを書かずにstd::stringを利用して短くかけないかと思うのですが
msvcだとエラーにならず、clang, gccだとdeleteでセグメンテーション違反になります。
どうすればより良い感じになるでしょうか?const_castはできれば使いたくないです。

#include <string.h>
#include <string>
#include <iostream>
int main()
{
const char* asdf = "asdf";
// char* psz2 = new char[strlen(asdf)+1];
// strcpy(psz2, asdf);
std::string *psz = new std::string(asdf);
char* psz2 = &(*psz)[0];

std::cout << psz2 << std::endl;
delete psz2;
return 0;
}
デフォルトの名無しさん (ワッチョイ 378a-TkRA) [sage] 2018/02/17(土) 09:51:35.08:mykV+fTk0
delete psz2なんてしちゃだめconst関係ない
デフォルトの名無しさん (ワッチョイ 1f7e-T3WU) [sage] 2018/02/17(土) 10:21:38.22:4SqFrjwY0
何故stringそのものじゃなくて内部データをdeleteしようと思ったのか
newで確保した配列じゃないからdeleteはできない
stringの内部データは静的な配列と動的な配列を組み合わせて表現されている
mscvの場合先頭16文字はchar[16]でそれ以降は動的な配列に入るようになっている
psz[0]のアドレスはchar[16]の先頭アドレスなので当然deleteできない
msvcはdeleteに失敗しても落ちないのかな
デフォルトの名無しさん (ワッチョイ ff80-Pey1) [] 2018/02/17(土) 10:47:53.57:IU1gsQgu0

本格的な本なら、ロベール、ハーバート・シルトの独習

軽めの本なら、柴田 望洋、林 晴比古、猫
デフォルトの名無しさん (ワッチョイ 9fcb-8YMj) [sage] 2018/02/17(土) 11:22:13.08:++v6vSjK0
ハンガリー人まだ絶滅してないのか。
stringはnull terminatedでないからpszはおかしい。
psz2もnull terminatedの保証がないからc_strを使うべき。
うまくいったらstrdupも調べとこうな。
デフォルトの名無しさん (ワッチョイ d793-MfWd) [sage] 2018/02/17(土) 11:25:45.81:szUqPRvW0

char* psz2 = &(*psz)[0]; って
char* psz2 = psz->c_str(); と同じなのかな?

いずれにせよ delete psz; は出来る(するべき?)だけど、
delete psz2; は出来ないんじゃないかな。
デフォルトの名無しさん (ワッチョイ 378a-TkRA) [sage] 2018/02/17(土) 11:30:29.43:mykV+fTk0
必要ないところでnew/delete使う人は根本からして何も分かってない
デフォルトの名無しさん (ワッチョイ ff8a-NmL4) [sage] 2018/02/17(土) 15:18:23.73:YAgvIyFy0

お前はstringがただの配列だと思っているのか?
このトンチキ野郎!
デフォルトの名無しさん (ワッチョイ bf0e-qi38) [sage] 2018/02/17(土) 16:50:38.35:Q4Uv6cZz0

弁護士の唐沢です
しっかり「char* const」と「const char*」の違いを認識しなさい
const char*は参照先の定数を変更しない事を保証する宣言であり、char*は参照先の定数を変更できる為、const char*で保持するアドレスをchar*にコピーする事は言語仕様により禁止されています。それは分かるよね?
最初に宣言したポインタを間違えて別アドレスで上書きしないようにconstで固定したいのなら、char* constを使うようにしましょう。とりあえずとりいそぎ
デフォルトの名無しさん (ワッチョイ 9fe1-/1mG) [sage] 2018/02/17(土) 17:22:58.60:0j+aLKWi0

strdupという手があるが何がしたいのか今一つ分からない

const char* asdf = "asdf";
char *p = strdup(asdf);
std::cout << p << std::endl;
delete p;
デフォルトの名無しさん (ブーイモ MM3b-zxnT) [sage] 2018/02/17(土) 17:31:15.32:CLg9GPlRM

それ誰に指摘してんの?とりいそぎ。
デフォルトの名無しさん (ワッチョイ 1f7e-T3WU) [sage] 2018/02/17(土) 17:34:22.09:4SqFrjwY0

データは連続しているので同じになる
16文字まではスタックを使い、それ以上の長さになるとヒープにコピーされる
実装ではメンバの配列には何かしらのエスケープ文字が入る
ちなみにmsvcでは実装の都合上free(&str[0])で強引に解放できる
173 (ワッチョイ 1f7e-T3WU) [sage] 2018/02/17(土) 17:49:08.26:4SqFrjwY0
補足
スタックとヒープを使い分けるかどうかは実装依存
gcc、clang、msvcでは行われている
したがって短い文字列でnewを避けるためにstringを使わないというのは意味が無い
デフォルトの名無しさん [] 2018/02/17(土) 18:06:03.81

strdupで確保した領域をfreeでなくdeleteするのは正しいの?
デフォルトの名無しさん (ワッチョイ 5781-qput) [sage] 2018/02/17(土) 18:09:26.31:Lp1rq1Kt0
良いみたいだ
中でmallocで確保している
デフォルトの名無しさん (ワッチョイ 5781-qput) [sage] 2018/02/17(土) 18:10:04.88:Lp1rq1Kt0
違う、freeで開放する
デフォルトの名無しさん (ワッチョイ bf0e-qi38) [sage] 2018/02/17(土) 18:14:21.37:Q4Uv6cZz0

弁護士の唐沢です
mallocとdeleteは併用厳禁です。freeを使用してください
デフォルトの名無しさん (ワッチョイ 9fb3-dLOu) [sage] 2018/02/17(土) 18:18:24.62:DOQJ47ER0
昔から気になってるんだが「解放」だよね...
デフォルトの名無しさん (ワッチョイ 5781-qput) [sage] 2018/02/17(土) 18:25:00.27:Lp1rq1Kt0
そうでした、ごめんね
デフォルトの名無しさん (ワッチョイ 9f5a-T3WU) [sage] 2018/02/17(土) 18:25:45.10:JVoP/9zU0

良くねえだろ ぼけ


開放はpublic的なニュアンスだよな
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-T3WU) [sage] 2018/02/17(土) 18:45:39.74:uBckbaXI0

ぶっちゃけた話、 strcpy が一番短いと思う。
デフォルトの名無しさん [] 2018/02/17(土) 18:59:50.35

strdup という答えが出てるのに何言ってるの?
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-T3WU) [sage] 2018/02/17(土) 19:05:58.96:uBckbaXI0

strdup は C++ の仕様の範囲内ではないので……。
POSIX と MSVCRT に有るからほとんどの場合に十分といえば十分なのかもしんないけど。
デフォルトの名無しさん (ワッチョイ 9fbd-RFe/) [sage] 2018/02/17(土) 19:07:20.59:u7LZaTzx0

接頭辞を見ればデータ内容の属性がワカルというメリットは他に代え難い
ttp://local.joelonsoftware.com/wiki/間違ったコードは間違って見えるようにする

あといちいちthis->xと書くよりも、すすんでm_xと書きましょう
デフォルトの名無しさん (ワッチョイ 9fbd-RFe/) [sage] 2018/02/17(土) 19:21:01.63:u7LZaTzx0
strdup()だと明示的に開放コードをどっかに書かなくてはならなくて必ず忘れるので
せっかくC++なのでスマポ的にwrapすると良いと思う
デフォルトの名無しさん (ワッチョイ 9f5a-T3WU) [sage] 2018/02/17(土) 19:37:41.81:JVoP/9zU0
ホワイトボックスなCでは許せるが
ブラックボックスなC++の流儀には全く合わない
それがstrdup
167 (ワッチョイ d793-MfWd) [sage] 2018/02/17(土) 19:53:11.68:szUqPRvW0
教えてくれてありがとう。
返されるアドレスは等しい値なのか、という単純な質問だったんだけど、
読み直してみたら分かりにくい質問文だと思っていた次第。

それにしても &(*psz)[0] って結構ややこしいのね。
オーバーロードされた[]演算子が返すcharへの参照、
に対してアドレス演算子&を作用させた結果、て感じかな。
162 (ワイモマー MMbf-xgEu) [sage] 2018/02/17(土) 20:37:30.76:uaRb1j8RM
すみません、たくさんレスありがとうございます。
_strdupにしてみたら期待の動作ができました。
ありがとうございました。
162 (ワイモマー MMbf-xgEu) [sage] 2018/02/17(土) 21:27:34.68:uaRb1j8RM
また質問してすみません。
msvc(vs2017)だとコンパイラをC++17にしても以下のプログラムで
C2664 'void (T *&)': 引数 1 を 'hoge *' から 'hoge *&' へ変換できません。
となってしまうのですが、コードにバグが有るでしょうか?msvcのバグでしょうか?
GCCやClangではコンパイルできます。

#include <memory>
struct hoge {};
template <class T>
inline void safe_delete(T*& p) {
if (p) {
delete p;
p = nullptr;
}
}
int main() {
std::unique_ptr<hoge, decltype(&safe_delete<hoge>)> sp{new hoge(), safe_delete<hoge>};
return 0;
}
デフォルトの名無しさん (ワッチョイ ff80-Pey1) [sage] 2018/02/17(土) 22:11:53.16:IU1gsQgu0
(T *&)

そもそも、ポインタ・参照を、同時に使えるのか?
片山博文MZ ◆T6xkBnTXz7B0 (スププ Sdbf-ZgEC) [sage] 2018/02/17(土) 22:23:52.63:EwTJGG8Pd
new hoge()は変数じゃないから、代入できない。
◆QZaw55cn4c (ワッチョイ 9f60-qi38) [sage] 2018/02/17(土) 22:35:58.53:I0BNlfaX0

独習C++ はいいですね、特に演習問題「std::stringを再実装する」を絶賛します
これが書けるようになったらC++初級者をかたってもいいかもしれない、もしかすると解答は載ってなかったかもしれないけれども
デフォルトの名無しさん (ワッチョイ 9fcb-zxnT) [sage] 2018/02/17(土) 22:35:58.70:++v6vSjK0

どこから引用したのか知らんけど、そのページ読んでないだろ…
システムハンガリアンはまるで役に立たないって書いてあるぞ。
◆QZaw55cn4c (ワッチョイ 9f60-qi38) [sage] 2018/02/17(土) 22:43:42.94:I0BNlfaX0

(システム)ハンガリアンってそんなに悪いものなんですかねえ
いや、win32api がバンバンハンガリアンしているので、そんなもんか、と思っていましたが
デフォルトの名無しさん (ワッチョイ 9fcb-zxnT) [sage] 2018/02/17(土) 22:51:12.84:++v6vSjK0

OOPともTMPとも型推論とも相性が悪いからね。
MS自身ももう使うなって言ってる。
デフォルトの名無しさん (ワッチョイ ff8a-NmL4) [sage] 2018/02/17(土) 22:52:19.16:YAgvIyFy0
頭悪いヤツが多様するハンガリアン
デフォルトの名無しさん (ワッチョイ ff8a-NmL4) [sage] 2018/02/17(土) 22:54:25.25:YAgvIyFy0
嫌いだからハンガリアン意地でも使わなかった
dwやらszやらせっかくのフリーフォーマッとが台なしだよ
デフォルトの名無しさん (ワッチョイ bf0e-qi38) [sage] 2018/02/17(土) 22:59:56.16:Q4Uv6cZz0
フリーフォーマットはクソコードの温床ナリよ
デフォルトの名無しさん (ワッチョイ 1f7e-T3WU) [sage] 2018/02/17(土) 23:03:12.11:4SqFrjwY0
型を変えるたびに変数名も変えるのか
ごくろうやな
◆QZaw55cn4c (ワッチョイ 9f60-qi38) [sage] 2018/02/17(土) 23:08:35.57:I0BNlfaX0

それは「ポインタ変数の参照」で、たしか便利に使えた気がしますが…
明日にでもちょっと書いてみます、今日は疲れました…
デフォルトの名無しさん (ワッチョイ 9ff9-GHyv) [sage] 2018/02/17(土) 23:22:18.45:2kmwzB0g0

システムハンガリアンは弊害ばかりだろうけど、アプリケーションハンガリアンは適切に使えば有益だよ。
デフォルトの名無しさん (ワッチョイ 1f7e-T3WU) [sage] 2018/02/17(土) 23:25:09.87:4SqFrjwY0
mとかいらなくねってなって削ったら_から始まるようになった
デフォルトの名無しさん (ワッチョイ 9fbd-RFe/) [sage] 2018/02/17(土) 23:38:55.74:u7LZaTzx0
データの属性としてサイズとか型そのものを明示したいときはシステムハンガリアンするしかないし、
よってWIN32APIがシステムハンガリアンを使って定義されるのは全く正しい

問題なのはアプリケーションハンガリアンすべきときと
システムハンガリアンすべきときが区別できない香具師が適当に使うと
被害甚大だということやがな…
デフォルトの名無しさん (ワッチョイ d77f-T3WU) [] 2018/02/17(土) 23:41:05.97:YmD9lILj0
今時システムハンガリアンは無いだろ
20年前で時間が止まってるのかよ
デフォルトの名無しさん (ワッチョイ 9fbd-RFe/) [sage] 2018/02/17(土) 23:42:44.53:u7LZaTzx0

なぜシステムハンガリアンが有り得ないのかkwsk
DWORDを渡すABIがある日突然気まぐれにUSHORTに変わったりしたら困りはしまいか
デフォルトの名無しさん (ワッチョイ d77f-T3WU) [] 2018/02/17(土) 23:49:32.45:YmD9lILj0
ググればいいだろ

積極的批判

システムハンガリアンを使っているソースコードを修正してデータ型を変更した際、同時に変数名も変更するコストがかかる。変更を怠ると、たちまち不整合となり、保守の障害となるだけで一利もない。
C++やC#のような言語では型付けが存在するためにシステムハンガリアンを使用することによる利点はない[3]。
移植性を阻害する。
総称型、メタプログラミングとの相性が悪い。

消極的批判

いわゆる良書と呼ばれるようなC++本で、現在[いつ?]システムハンガリアンを採用している例が皆無。
かつてWindows API/MFCにおいてハンガリアンを全面的に採用していたMicrosoft自身が、.NET Frameworkではハンガリアンを禁止[1]している。
デフォルトの名無しさん (ワッチョイ d7b3-hxII) [sage] 2018/02/17(土) 23:52:28.19:YEFSbrC50
申し訳ないがコピペディアからのウィキペはNG
デフォルトの名無しさん (ワッチョイ 1f7e-T3WU) [sage] 2018/02/17(土) 23:54:40.85:4SqFrjwY0
型なんてマウスオーバーなりすれば表示されるだろ
変数名に書いておかなきゃわからないとかメモ帳で書いてるのかよ
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-T3WU) [sage] 2018/02/18(日) 00:10:56.39:OOIPfNvY0

デリータはポインタが指す先のリソースを後始末するのが仕事であって、
ポインタが無効になるという処理は unique_ptr の側でやってくれるので、
ヌルを代入する必要はない。
むしろ unique_ptr 内で管理しているものをデリータが勝手に弄るのは好ましくないので、
参照で受けるのはやめてさしあげろ。

私なりに仕様を読んでこの場合をエラーにする根拠は発見できなかったが、
エラーになってくれる方がありがたい場面だと思う。
デフォルトの名無しさん (ワッチョイ d7f2-T3WU) [sage] 2018/02/18(日) 00:16:38.53:Ct2k6iqr0
デリータに渡されるのは左辺値と限らないからだろう。
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-T3WU) [sage] 2018/02/18(日) 00:25:54.07:OOIPfNvY0
N3337 だと 516 ページの説明がデリータの要件だと思うんだけど、
デリータ d の型が D で ptr の型が unique_ptr<T, D>::pointer のとき式 d(ptr) が valid であることと書いてあって、
ptr が rvalue か lvalue かってのは特に指定がない。 (どこかに書いてあったりする?)
この説明で言ってる ptr が変数名なのだとしたら暗に lvalue とほのめかしてるようにも思えなくもないし、よくわからん。
わからんことは避けて通りたい。
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-T3WU) [sage] 2018/02/18(日) 00:30:57.46:OOIPfNvY0
私なりの見解としては未定義だと思ってる。
未定義ならばやったらエラーになる方向にしてくれる方がありがたいという思い。
デフォルトの名無しさん (ブーイモ MM3b-zxnT) [sage] 2018/02/18(日) 00:35:36.09:ju8BsRCFM

ABIにシステムハンガリアン関係ないだろ…
APIを指してるとして、呼び出し側はリファレンスマニュアルなりIDE機能なりを利用して引数の型情報も
システムハンガリアンが付いている仮引数名と同時に参照しているはずだよね?情報重複してるけど本当に必要?
仮引数名のシステムハンガリアンの有無に関わらず、APIのシグネチャは用意に変更してはならないものだけど、
そもそも仮引数名はシグネチャじゃないからシステムハンガリアンがついていたって何の保証にもならないよ?
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-T3WU) [sage] 2018/02/18(日) 00:51:32.90:OOIPfNvY0
重複する情報をコンパイラの支援なく一致させ続けることが出来るだろうか。 いや、できない。
って話よね。
まあ世の中にはそういうのを検査するツールとかもあるんだろうけどさぁ、
そういうツールを導入できる環境ならまともな IDE だって使えるだろう。
162 (マクド FF6b-xgEu) [sage] 2018/02/18(日) 08:06:35.40:F3zIry6ZF


レスありがとうございます。
shared_ptrだと行けるのでなんかすればコンパイル通るのではないかと
思ったのですがだめなんですね〜。
普通に使う用とカスタムデリータに使う用と二種類用意してやり過ごしてみたいと思います。
template <class T>
inline void safe_release(T*& p) {
if (p) {
p->Release();
p = nullptr;
}
}
template <class T>
inline void custom_deleter(T* p) {
p->Release();
// p = nullptr; no meaning
}
デフォルトの名無しさん (ワッチョイ 9fbd-RFe/) [sage] 2018/02/18(日) 12:41:44.81:OWXn9djh0

藻前はレスをきちんと読んでいないのではないか
>システムハンガリアンを使っているソースコードを修正してデータ型を変更した際、同時に変数名も変更するコストがかかる。(
に直接対応する元レスは、
>データの属性としてサイズとか型そのものを明示したいとき(
について述べているのでデータ型変更時のコストを言い立てても批判にならない

消極的批判については、アプリケーションハンガリアンすべきときと システムハンガリアンすべきときが
区別できない香具師の的外れな批判がクソウゼーからそうなったのかもしれん、
(ちな両者を区別できない香具師への警戒もで言及済み
デフォルトの名無しさん (ワッチョイ 9fbd-RFe/) [sage] 2018/02/18(日) 12:42:38.82:OWXn9djh0

十分賢いIDEが人間のミスを完璧に排除してくれるんならそうかもしれんが
システムハンガリアンをしてはいけないという積極的理由にはやはりならないのであった
それとも「間違ったコードは間違って見えるようにする 」()の効能を全否定する?

APIの定義は変わらなくとも、それを利用するソースコードがころころ変わり得るわけで、
byStrLength
にある日だれかがDWORD型の値を突っ込んだとしたら…

こういうケースを考えたら、「接頭辞を見ればデータ内容の属性がワカルというメリット()」は
ありえないぐらい賢いIDEでも使わないと他に代え難いと思うがどうか、


>嫌いだからハンガリアン意地でも使わなかった
おk ようやく建設的な議論に着手できる、
デフォルトの名無しさん (ワッチョイ 1f7e-T3WU) [sage] 2018/02/18(日) 13:01:54.53:Tc3/Tap60
あり得ないくらいバカなプログラマのことなんか考慮してない
デフォルトの名無しさん (ワッチョイ d7b3-hxII) [sage] 2018/02/18(日) 13:02:14.72:hSV7DJYb0
マウスオーバーで変数の型を確認できたり、縮小変換に警告を出してくれたりする程度のありふれた機能が、ありえないぐらい賢いとな
お前さんはメモ帳でコーディングしてるのか
◆QZaw55cn4c (ワッチョイ 9f60-qi38) [sage] 2018/02/18(日) 13:06:54.12:AAhzNgFK0

emacs にもそんな機能がほしいと思うことがあります
デフォルトの名無しさん (スッップ Sdbf-0Jtz) [] 2018/02/18(日) 13:20:53.92:y51LwXumd
システムハンガリアンでミスを減らせるなんて事はない
むしろ害悪
デフォルトの名無しさん (ワッチョイ 1f7e-T3WU) [sage] 2018/02/18(日) 13:27:53.30:Tc3/Tap60

俺のemacsには搭載されてるんだが
環境構築もプログラマの腕のうちだからな
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-T3WU) [sage] 2018/02/18(日) 13:30:05.77:OOIPfNvY0

有るよ。
irony-eldoc や company-mode を入れろよ。
Emacs こそ最強の IDE だろうが。
デフォルトの名無しさん (ワッチョイ 378a-TkRA) [sage] 2018/02/18(日) 13:38:55.48:R2RwPqEs0
今時システムハンガリアンを使うやつはあり得ないくらいのバカだということが決定しました
デフォルトの名無しさん (ブーイモ MM3b-zxnT) [sage] 2018/02/18(日) 13:41:43.01:IMbK2zhKM

間違ったコードは間違ったように見えるようにする、について、
あなたが指し示した引用元が言及してるのはアプリケーションハンガリアンについてなんだけど…
システムハンガリアンについては否定的意見。
ちゃんと読んだの?
◆QZaw55cn4c (ワッチョイ 9f60-qi38) [sage] 2018/02/18(日) 14:10:40.14:AAhzNgFK0

thanks a lot!!
デフォルトの名無しさん (ブーイモ MM3b-zxnT) [sage] 2018/02/18(日) 14:15:44.65:IMbK2zhKM

APIの仮引数にシステムハンガリアンをつけたことで、間違ったAPI呼び出しが間違ったように見えるのはいつ?
APIのリファレンスなり宣言文なりを自分のコードと見比べたときでしょ?その時必ず型情報も見てるよね?情報重複してるよ?
あとIDEが自動でミスを排除してくれるなんて書いてないよ?ちゃんと読んで
デフォルトの名無しさん (ワッチョイ 1f7e-T3WU) [sage] 2018/02/18(日) 15:46:49.02:Tc3/Tap60
入れる変数の型と引数の型を確認しない奴とかいるのか
暗黙の型変換は警告を出せばいいし
どうしても見落とすのならコンパイルエラーにしてしまえばいい
あとメンバ変数もテキストの色を変えればいいからm_もいらない
デフォルトの名無しさん (ワッチョイ ff8a-NmL4) [sage] 2018/02/18(日) 16:01:36.00:dLlRK2Wa0
m_はホント見苦しい
デフォルトの名無しさん (ワッチョイ bfe7-JyXB) [sage] 2018/02/18(日) 20:07:07.34:8oVyjimH0
m_だけならまだ我慢できるけど
this->を必ず付けるルールと併用するのは本当にやめろどっちかにしろ
デフォルトの名無しさん (ワッチョイ 9fb9-T3WU) [sage] 2018/02/18(日) 20:15:52.43:eae4wPFh0
> this->を必ず付けるルール

破門だろ
C++使うなそんなボケどもは
デフォルトの名無しさん (ワッチョイ 9f12-pjg9) [sage] 2018/02/18(日) 21:14:42.68:SQcbDAgv0
ちげえんだよなぁ
thisというキーワードが存在してるから、その存在そのものが、それを書かねばならないような強制力を産み出してる
「存在するが、書かなくてもいい」っていうどっちつかずが、一番論争になる

その反対が「存在しないから書けない」だ
これだと単純明快だ
なんせ、書けない

「書くべきか書かざるべきか」のどーーーでもいい二択に迫られると、とたんに宗教になる
デフォルトの名無しさん (ワッチョイ 9fb9-T3WU) [sage] 2018/02/18(日) 21:16:52.71:eae4wPFh0
キーワードが存在するのと実体が存在することの違いがそんなに大事なのか?
じゃあvtableのキーワードが存在しないことを、おまえはどう考えている?
デフォルトの名無しさん (ワッチョイ bf37-ytZF) [sage] 2018/02/18(日) 21:33:09.71:Pbt6vSqU0

オケツに_をつけてますわ
デフォルトの名無しさん (ワッチョイ ff8a-NmL4) [sage] 2018/02/18(日) 21:33:14.46:dLlRK2Wa0
おれがそのソースを引き継いだらまず初めにやることは一つ
「this->」から「」への全ソース一括置換
デフォルトの名無しさん (ワッチョイ d7f2-T3WU) [sage] 2018/02/18(日) 21:56:25.56:Ct2k6iqr0
「m_」はダメで「_」ならいいってのはなんというか、合理的な理由よりも感覚・感情的なものかね。
◆QZaw55cn4c (ワッチョイ 9f60-qi38) [sage] 2018/02/18(日) 21:57:31.39:AAhzNgFK0
this-> つけるほうが分かりやすくていいと思うのですが、変てこな接尾辞・接頭辞よりも
デフォルトの名無しさん (ワッチョイ d77f-T3WU) [] 2018/02/18(日) 22:00:36.01:tWqaO5mz0
m_xxx も xxx_ もなんの保証にもならんからな
this->は必ずメンバになるけど
デフォルトの名無しさん (ワッチョイ 9f4c-C9DI) [sage] 2018/02/18(日) 22:37:59.28:UEE7OeWn0
_はグーグルスタイルの圧力
デフォルトの名無しさん (ワッチョイ ff76-BAP3) [sage] 2018/02/18(日) 22:42:10.00:WjKwYRHz0
余計な命名規約を作るくらいなら言語機能を使った方が良いわな
this->派だわ
デフォルトの名無しさん (ワッチョイ bf0e-qi38) [sage] 2018/02/18(日) 23:21:23.43:AjuHfv4B0
thisで明示した方が所在がハッキリして良いナリ
当職は名前空間もusingせずに明示しろ派ナリ
安易な省略はタイプ数を減らすという軽微なメリットと引き換えに可読性を落としケアレスミスを誘発するという恐ろしいデメリットを孕むナリ
デフォルトの名無しさん (ワッチョイ 1f7e-T3WU) [sage] 2018/02/19(月) 00:00:39.93:hDVR9PRD0

「m_」はいらないな

ローカル変数とかと名前が被ってめんどくさい

キャメルケースにはしたくない

「_」だけ残る
デフォルトの名無しさん (ワッチョイ ff8a-NmL4) [sage] 2018/02/19(月) 00:14:25.92:o8qstbSZ0
_付けるなら変数の後ろだろ
デフォルトの名無しさん [] 2018/02/19(月) 00:18:14.94
C/C++なら必然的に末尾に付けるしかない
先頭に_付けるような情弱は死ねばいい
Perl/Pythonだと先頭に付けるけどな
デフォルトの名無しさん (ワッチョイ 17c3-T3WU) [sage] 2018/02/19(月) 00:42:17.66:SSx66hQd0
やらんけど、前一つなら規約には引っかからないんじゃなかったけ
デフォルトの名無しさん (ワッチョイ 1f7e-T3WU) [sage] 2018/02/19(月) 00:57:15.60:hDVR9PRD0
未定義なのは
_始まりでグローバルスコープにあるもの
_始まりでアルファベットの大文字が続くもの全て
__で始まるもの全て

1番目の_始まりなだけならローカル変数、引数、メンバでは予約されていないので使ってもよい
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-T3WU) [sage] 2018/02/19(月) 01:15:36.25:gMMBYzvP0

名前に変なルールを導入するか this を付けるかの二択であれば this の方がマシというのはわかる。
わかるが、必ずつけるルールにしちゃうとかなりウザいわって話。
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-T3WU) [sage] 2018/02/19(月) 01:20:40.79:gMMBYzvP0

わかるんだが、そういうルールってすぐに教条主義に陥るからうんざりする。
技巧として使う using にまでグダグダ言うやつが絶対に出てくる。
デフォルトの名無しさん (ワッチョイ 1f7e-T3WU) [sage] 2018/02/19(月) 02:05:55.66:hDVR9PRD0
コーディング規約はうろ覚えだけど自由度の高いBoostスタイルを薦める

publicな識別子はstdに合わせて小文字スネークケース
マクロはBOOST_から始める
インデントはスペース、一行の文字数は80文字を推奨
意味のある名前を付けることを推奨
ファイル構成に関するもの
その他細々としたもの
ライブラリごとのローカルルールがある場合もある

あとは自由
thisを付けろだとか改行の仕方だとかは一切書かれてない
デフォルトの名無しさん (ワッチョイ bf0e-qi38) [sage] 2018/02/19(月) 02:37:36.58:SEa8F8NC0

お互いにマナーを守る世界は過ごしやすいがマナーの厳守を要求し出すと途端に息苦しくなるナリ
自分にも他人にも読み易いコードを書こうという気遣いが見て取れるなら細かく突っ込んだりはしないナリ
デフォルトの名無しさん (ワッチョイ ff3f-T3WU) [sage] 2018/02/19(月) 05:40:18.76:wBFQMwB50
this->で必ずメンバというやつら
じゃあ必ずブロック内変数という表記もしたらどうだ
デフォルトの名無しさん (アウアウアー Sa4f-rtnb) [sage] 2018/02/19(月) 12:45:29.69:yTAVcy/Ya
使うライブラリや開発環境の内部のスタイルに合わせるけどな。
派生クラスとかAPIのラッパークラスとか作り始めると、
どうしても内部の書き方に合わせておいた方が読みやすいし。

今でもWin32とかMFCでやることもあるけど、
そのときはm_とかpとかhとかdwとかバンバンつける。
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-T3WU) [sage] 2018/02/19(月) 13:19:17.15:gMMBYzvP0
使う側の都合に合わせろよ。 ラップしてるのに中身のスタイルが漏れてるんじゃラップの甲斐がなくね?
中身を知ってる人がちょっとした便利のためだけに薄いラッパを作る場合ならそういう選択もあるだろうけど。
デフォルトの名無しさん (ワッチョイ 9f9d-MriG) [] 2018/02/19(月) 14:36:30.11:00nJVfHA0
コンバータにあわせろよ。C#で作ってコンバータかけた方が綺麗スッキリするんだから。
デフォルトの名無しさん (ドコグロ MMcb-dLOu) [sage] 2018/02/19(月) 19:36:41.65:2cNNs3G6M

そりゃAPIに渡す構造体でdwSizeとか使われてたらそこだけは合わせざるを得ないけど自分のコードスタイルを合わせる必要はないだろ
デフォルトの名無しさん (ワッチョイ 9fbd-RFe/) [sage] 2018/02/19(月) 20:29:38.46:czaD+lHv0

m_のmは目立つのm、


ここ構造体メンバとか、
◆QZaw55cn4c (ワッチョイ 9f60-qi38) [sage] 2018/02/21(水) 00:43:21.00:jU0tYaxw0
Windows メインで作業されている方で、
valgrind を併用している方はおられませんか?
もしよろしければ使用感をお聞かせいただけませんか

operator new()/operator delete() 乗っ取りデバッグに限界を感じてしまっている状況です
(cl や bcc32/bcc32c/bcc64 では new/delete 乗っ取りができません)
いや、さっさと入れればいいのですが、仮想環境とかよくわからないし…Vine Linux 以来触ってないし…
デフォルトの名無しさん (ワッチョイ 974f-4dOP) [sage] 2018/02/21(水) 01:13:14.52:wPLJFyuu0
windowsならapplication verifier使えば?
デフォルトの名無しさん (ワッチョイ 1768-xgEu) [sage] 2018/02/21(水) 09:49:28.54:8k15W99L0
以下のURLのプログラムでSFINAEを試してみていて
ttps://wandbox.org/permlink/LqKmn50PaPbtohs5

BOOST_TTI_HAS_MEMBER_FUNCTIONを使えば
has_funcというメタ関数を使わずに済んで、短くできないかと試行錯誤中なのですが
うまく行きません。

どうやったらビルドが通るようになるでしょうか?
デフォルトの名無しさん (ワッチョイ 9fa2-T3WU) [sage] 2018/02/21(水) 18:31:01.90:8+abUSIR0
まずはそのうまく行かないコードを示したら?
片山博文MZ ◆T6xkBnTXz7B0 (スププ Sdbf-ZgEC) [sage] 2018/02/21(水) 19:26:19.92:UifE8nP3d

ttps://stackoverflow.com/questions/87372/check-if-a-class-has-a-member-function-of-a-given-signature
260 (マクド FF6b-xgEu) [sage] 2018/02/21(水) 19:34:37.06:EmINyJBAF
すみません、BOOST_TTI_HAS_MEMBER_FUNCTIONを使って短くする以前に元々が間違っていました。
以下の3つでオーバーロードしたかったのでした。
・funcというメンバ関数を持つダブルポインタ
・funcというメンバ関数を持たないダブルポインタ
・それ以外

それで思ったのですが多分、Boost.TTIライブラリで
〇〇というメンバ関数を持つクラス、を識別するメタ関数は作れても
〇〇というメンバ関数を持つクラスのダブルポインタ、は無理な気がしてきました。
一旦諦めようと思います。
260 (マクド FF6b-xgEu) [sage] 2018/02/21(水) 23:10:49.37:EmINyJBAF
msvcでもGCCでもビルドできるのが
どうにかできました。お騒がせしてすみませんでした。
ttps://wandbox.org/permlink/HDwsuoVReqJEXWsO
デフォルトの名無しさん (ワッチョイ c667-x4Or) [sage] 2018/02/22(木) 10:26:41.79:qwLRFwLN0

あと2年待てばconceptできるかもよ
デフォルトの名無しさん (ワッチョイ 8abd-2pQG) [sage] 2018/02/22(木) 21:31:34.66:SOkZDC9P0
(VBみたいな名前付き引数が実現されたら
 システムハンガリアン否定論者をぎゃふんと言わせられるのに…
デフォルトの名無しさん (ワッチョイ c667-x4Or) [sage] 2018/02/22(木) 21:55:24.65:qwLRFwLN0
システムハンガリアン発祥の会社が何か作ったら否定論者がぎゃふんと言うのか?
おまえの頭の中は論点先取だか循環論法だかがグルグル回っているようだな
デフォルトの名無しさん (ワッチョイ 8abd-2pQG) [sage] 2018/02/23(金) 22:10:42.23:XlnyEs6k0

想像してごらん全ての人々が
 dwRet = ::WaitForSingleObject( hHandle = m_hThread, dwMillisecond = m_hTCTmo )
と書く世界を、
デフォルトの名無しさん (ワッチョイ 8abd-2pQG) [sage] 2018/02/23(金) 22:11:40.62:XlnyEs6k0
ごめ
誤: m_hTCTmo
正: m_dwTCTmo

見れば間違いがワカルのがハンガリアンの極めて良いところ
デフォルトの名無しさん (ブーイモ MM5e-chUR) [sage] 2018/02/23(金) 22:21:40.17:R3lraTlNM

デフォルトの名無しさん (ワッチョイ ba12-SJjx) [sage] 2018/02/24(土) 10:44:07.22:mn7A8TMg0
一分間で間違いに気づいてはいるものの
そもそもの書く瞬間にはどうやら人智を用いても気付けないらしいから
IDEにエラー出してもらった方が早いんじゃあねえの

実は人間の集中力を超えたところにある方法論で、実践するとストレスが溜まるっぽいから、機械任せにした方がいい
それに、書いてる最中は変数の型まで考えたくない

見て分かることは、機械任せにすれば見なくても分かるから、
今のご時世、人間の有限の集中力を目視チェックなんかに使いたくない
脳みそのリソースはもっと別のところに使うべきだ

つまりは、書いてる最中は脳みそが「それが正しい」と思い込んでるから、
間違いは自分自身では絶対に分からない
これがバグを作り込む
hだったかdwだったかを脳が自動的に混同してるから、その分だけ余計に脳のリソースを使っている

「なんで書いている最中に自分自身で気付かないのか」、これ、とても重要だよ
デフォルトの名無しさん (スップ Sd02-2/+O) [] 2018/02/24(土) 11:11:20.01:51zBno3Kd
変数名と型が一致してるという保証がゼロだからシステムハンガリアンなんて無駄以外の何物でもない
無駄というか悪
デフォルトの名無しさん (ワッチョイ 8abd-2pQG) [sage] 2018/02/24(土) 12:15:45.87:mm9B9rZ50

俺のレスもプログラムも表現と意図が一致してるという保証がゼロ、
まで読んだ
デフォルトの名無しさん (ワッチョイ df7f-x4Or) [sage] 2018/02/24(土) 12:23:50.23:b3ZDZ7IS0
その場合、やめられる方だけやめればいいな
つまりハンガリアンを。
デフォルトの名無しさん (ワッチョイ b7b3-x4Or) [sage] 2018/02/24(土) 12:27:42.98:pqM6ijVV0
まともな開発環境使っていれば必要ないのでは
デフォルトの名無しさん (ワッチョイ c6cb-chUR) [sage] 2018/02/24(土) 12:34:43.53:B9f7/evx0
ハンガリアンはもうだめだ。
ポーランドを使おう。
デフォルトの名無しさん (ワッチョイ 520e-MTlB) [sage] 2018/02/24(土) 12:51:07.68:d7+fd25J0

そういう事言い出すと「関数名と機能が一致してる保証がゼロ」や「クラスメンバの隠蔽が完璧である保証がゼロ」などといくらでも難癖を付けれるナリ
ヒューマンエラーを理由に不要と結論付けるのならあらゆるコーディング規約が不要という結論になってしまう、これはいけない
命名規則は可読性の向上に結びつくものでなければならない、規約を違反する事で起きるトラブルはプログラマ側の責任、それは分かるよね?
デフォルトの名無しさん (ワッチョイ df7f-x4Or) [sage] 2018/02/24(土) 13:26:14.86:b3ZDZ7IS0
ヒューマンエラーが起きる部分は極力排除して機械任せにできる部分は機械任せにすればいい
ハンガリアンを導入する理由はもはや無いな。可読性悪いし。
デフォルトの名無しさん (ワッチョイ ea60-MTlB) [sage] 2018/02/24(土) 14:24:10.94:yWQ45jBy0

いや、ハンガリアンは可読性はよくなる方だよ
整合性維持に難があるだけで
デフォルトの名無しさん (ワッチョイ 8abd-2pQG) [sage] 2018/02/24(土) 14:29:08.35:mm9B9rZ50
可読性ぐらいテンプレートによる高度なメタプログラミングに慣れた諸兄なら
ハンガリアンごとき目を慣らして解決できるはずなんじゃ…
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ e66f-x4Or) [sage] 2018/02/24(土) 15:03:19.72:ohURjCBl0
ttps://www.google.co.jp/search?q=%E5%8D%8A%E5%88%88%E3%82%8A&tbm=isch
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ e66f-x4Or) [sage] 2018/02/24(土) 15:06:09.97:ohURjCBl0

Lisper「せやな!」
デフォルトの名無しさん (ワッチョイ 2f93-IXLF) [sage] 2018/02/24(土) 17:03:03.20:agv5rOmv0

両者は共存不可能な対立概念ではないけどね。

細かいことを言わせてもらえば、
「ハンガリアンとポリッシュ」か「ハンガリーとポーランド」と
並べてくれた方が座りがいい気もするけど…。
「ハンガリアン記法とポーランド記法」だとあまり気にならない不思議。
デフォルトの名無しさん (ブーイモ MM5e-Clm8) [sage釣] 2018/02/24(土) 17:08:35.75:4JIC+wG/M
なぁにその内、ロシアが併呑してくれるさ
デフォルトの名無しさん (ワッチョイ 70b3-Tnpk) [sage] 2018/02/25(日) 14:16:53.97:8l5JrV0a0

名前付き引数イディオムとenable_if<is_same<...>::value>が最強と言うことだな

※プログラマが、使用者が型を間違えないようにと気を使うのが正しいなら、間違えたらコンパイルエラーになるこれが最強だろ?
デフォルトの名無しさん (ワッチョイ ba12-SJjx) [sage] 2018/02/25(日) 14:35:24.31:zhzj1IkW0

ちげえんだよんぁ
可読性じゃねえんだよ

を見てみろよ、
読む時じゃなくて書く時のヒューマンエラーだ
なんで入り込んだのか全く分からんようなミステイクだ
プログラミングが工業的生産の一種なら、その手のヒューマンエラーは無い方がいい

で、改めてを見てみると、「可読性」があってプレフィクスの間違いに気付いてはいるものの、
そもそも書く段でなんで間違えたのか、それが全く分からない
他人はおろか本人すらも自覚できない謎の理由でプレフィクスを間違えてる(これがヒューマンエラーなんだけどな)

なんで、後だしジャンケンだと、「プレフィクスが最初から無ければ、間違いも発生しえなかった」、とも言える

もしかすると、書く時に間違える/読む時に間違える の比率を考えると、ハンガリアン記法は書く時に間違えやすいが読むときに間違いにくい……のトレードオフなだけかもしれん
要するに、可読性と生産性のトレードオフだけなんじゃあねえのか?
それに、読む時のヒューマンエラーと書く時のヒューマンエラーをわざと混同してるのはいただけない
デフォルトの名無しさん (ワッチョイ 8a6e-x4Or) [sage] 2018/02/25(日) 16:15:03.29:s5td7qK+0
void func(int a)
{
デフォルトの名無しさん (ワッチョイ 8a6e-x4Or) [sage] 2018/02/25(日) 16:15:31.06:s5td7qK+0
void func(int a)
{
//aが何型かわからない
//アホかおまえは
}
デフォルトの名無しさん (ワッチョイ 8a6e-x4Or) [sage] 2018/02/25(日) 16:46:37.12:s5td7qK+0
template <typename T>
void func(T lpszA)
{
//lpszって書いてあるからTはLPSTR型だな
//アホかおまえは
}
デフォルトの名無しさん (ワッチョイ 8abd-2pQG) [sage] 2018/02/25(日) 19:14:43.19:4jIr3vvu0

func()が常に1画面に収まって1万行の関数とかでありえないという根拠は


テンプレート定義時の引数に対して引数内容固有の命名が難しいのは
ハンガリアンに限ったことではないからハンガリアンに対する批判になんね

テンプレート批判論者には考える力がないのかね…
デフォルトの名無しさん (ワッチョイ 8abd-2pQG) [sage] 2018/02/25(日) 19:15:39.42:4jIr3vvu0
ごめ
×:テンプレート批判論者
○:ハンガリアン批判論者
デフォルトの名無しさん (ワッチョイ df7f-x4Or) [] 2018/02/25(日) 19:29:08.16:s+qaK1zS0
テンプレートに対してはハンガリアンは全くの無力だよなあ
一貫性の観点からやっぱりハンガリアンは無い方がいいわ
デフォルトの名無しさん (ワッチョイ 8abd-2pQG) [sage] 2018/02/25(日) 19:48:52.19:4jIr3vvu0
.のレスを見てテンプレートの実体化時までハンガリアンが無力なことにされてはかないませんなあ…
デフォルトの名無しさん (ワッチョイ 0637-rG1w) [sage] 2018/02/25(日) 20:11:05.52:fbPK05Px0
そもそも関数が長い場合は型情報を持たすのもありだよな
システムハンガリアンをやめさせようとして先に関数を短くしなきゃだめだなと追う結論に至って放置した
デフォルトの名無しさん (ワッチョイ 8a6e-x4Or) [sage] 2018/02/25(日) 20:37:38.24:s5td7qK+0
//1万行の最長不倒関数を書く
//アホかおまえは
デフォルトの名無しさん (ワッチョイ 8a6e-x4Or) [sage] 2018/02/25(日) 21:00:14.67:s5td7qK+0
void func(int lpszA)
{
//lpszって書いてあるからLPSTR型だな
//アホかおまえは
}
デフォルトの名無しさん (ワッチョイ c4e3-x4Or) [sage] 2018/02/25(日) 21:58:30.83:qLuvVokt0
システムハンガリ理解してない人の例上げてね?
デフォルトの名無しさん (ワッチョイ 8abd-2pQG) [sage] 2018/02/25(日) 22:45:03.97:4jIr3vvu0

「1画面に収まらない」を都合よく無視しないように
デフォルトの名無しさん (ワッチョイ 4634-gMjx) [sage] 2018/02/25(日) 23:43:59.89:yscCG2q60
システムハンガリアンはDWORDをintに型名変更するだけでその変数名全部終わるからなしかも一瞬で
デフォルトの名無しさん [] 2018/02/25(日) 23:57:37.89

dwをiに置換するだけだからリファクタリングが楽っていう意味?
デフォルトの名無しさん (ワッチョイ 4634-gMjx) [sage] 2018/02/26(月) 00:59:51.78:VDQLjiDS0
まったく逆だ
dwからiに全部置換していかないと変数名の意味を為さなくなるからシステムハンガリアンは愚かさ甚だしいと云うておる
デフォルトの名無しさん (ワッチョイ 4634-gMjx) [sage] 2018/02/26(月) 01:02:48.27:VDQLjiDS0
アンパンマン調で例えるなら型名変えるだけでメンテ百倍みたいな
デフォルトの名無しさん (ワッチョイ 147e-x4Or) [sage] 2018/02/26(月) 01:10:40.33:jQ6YvoyL0
組み込み型はいいけどクラスはどうすんのさ
意味の分からないサフィックスを付けられても困るぞ
デフォルトの名無しさん (ワッチョイ 4634-gMjx) [sage] 2018/02/26(月) 01:11:26.04:VDQLjiDS0
ハンガリアン!新しい型だよ!
有難う!デザパタ娘ちゃん!
メンテ百倍!ハンガリアン!
デフォルトの名無しさん (ワッチョイ 0637-rG1w) [sage] 2018/02/26(月) 01:55:04.49:4PPe6ndQ0
そもそもDWORDをintに変えることが滅多にない
デフォルトの名無しさん (ワッチョイ 147e-x4Or) [sage] 2018/02/26(月) 02:10:59.71:jQ6YvoyL0
dwとか書かれてもDWORDの定義を知らないと意味不明だし
やるなら符号の有無とサイズが分かるように書かないと意味ないでしょ
デフォルトの名無しさん (ワッチョイ 8a05-x4Or) [sage] 2018/02/26(月) 04:56:46.87:lxlU26hn0

おまえは間違いなく1万行と書いた
その史実を誤魔化すことはできない

「ありえないという根拠は」という問いを反論として用いるのは
俺が「ありえない」と言った(事実と違うが)ことが
おまえが「ありうる」と思っているのと違ったからだろう

いずれにせよ「アホかおまえは」にふさわしいハチャメチャだな
デフォルトの名無しさん (ワッチョイ 769f-PnyW) [sage] 2018/02/26(月) 08:02:35.99:SPD4iDfM0
ポインタのpとか参照のrとかは今でも使ってる
デフォルトの名無しさん [] 2018/02/26(月) 08:09:57.39

史実とか言っちゃうのって。。。
デフォルトの名無しさん (ワッチョイ 520e-MTlB) [sage] 2018/02/26(月) 08:16:32.18:TvC1o7QC0

もうちょっとまとめて喋れ
読みづらい
デフォルトの名無しさん (ワッチョイ 8a05-x4Or) [sage] 2018/02/26(月) 09:55:53.14:lxlU26hn0

俺も使う
ただし名前そのものをポインタっぽくするだけで
ハンガリアンのプリフィックスとしてではない
デフォルトの名無しさん (ワッチョイ 8a05-x4Or) [sage] 2018/02/26(月) 09:56:14.50:lxlU26hn0

ニホンゴワカリマスカ?
デフォルトの名無しさん (ワッチョイ d023-MTlB) [sage] 2018/02/26(月) 10:44:04.77:U+kFnN5D0
ハード直叩きのドライバ屋はデータバスやレジスタの幅を間違えると大変だから
物理層の実装ではハンガリアン使うこともあるよ
デフォルトの名無しさん (アウアウカー Sa11-2orQ) [sage] 2018/02/26(月) 10:55:31.04:n/n1Eejna

むしろそれはアプリケーションハンガリアンじゃね?
デフォルトの名無しさん (スップ Sdc4-aBV2) [] 2018/02/26(月) 11:21:30.74:mt/mMzV6d
間違えると大変だからハンガリアンを使ってはならないんだよ
偽の情報に頼るんではなくて元を逐一確かめないと
デフォルトの名無しさん (ワッチョイ 2f93-0l3D) [sage] 2018/02/26(月) 11:33:14.68:yfGCkThX0
今勉強してるんだけどC++ではポインタを使わずに参照で書くのがデフォルトなの?
デフォルトの名無しさん (ワッチョイ 520e-MTlB) [sage] 2018/02/26(月) 11:36:50.47:TvC1o7QC0

不一致が存在しない事が保証されてれば問題無いんやな
そういう事ならつまり変数宣言とプレフィックスが全て一致してるかチェックするスクリプトとかがあれば満足って事でええんか?
デフォルトの名無しさん (アウアウカー Sa11-2orQ) [sage] 2018/02/26(月) 11:38:09.46:n/n1Eejna

ポインタも必要に応じて使うけど、メモリ管理の煩雑さとミスの危険性を避けるために参照やスマートポインタやコンテナ、イテレータなど他に適切な物がある時はなるべくそちらを使うのが流儀かな。
デフォルトの名無しさん (ワッチョイ 8a05-x4Or) [sage] 2018/02/26(月) 11:51:17.55:lxlU26hn0

デフォ・・・まあ、そう言えなくもないか
参照でもポインタでもどっちでもいい用途には参照
ポインタでしかできないことはNULLに++や絶対番地指定
参照でしかできないことは一時オブジェクトやコピコン類
デフォルトの名無しさん (ワッチョイ ba23-k8Zo) [sage] 2018/02/26(月) 12:15:47.61:z/vehsiL0
書き込むときは参照ではなくポインタにしろと言ってた人がいた。
理由を聞いたら「なんか書き込んでる感がない」だった。
デフォルトの名無しさん (ワッチョイ 8a05-x4Or) [sage] 2018/02/26(月) 12:17:18.65:lxlU26hn0
std::cin >> &a;
やだよ、こんなの
デフォルトの名無しさん (ワッチョイ df7f-x4Or) [] 2018/02/26(月) 12:21:09.58:W3q5coR10
グーグル規約だと書き込む引数は参照ではなくポインタにしろってなってる
でも標準ライブラリが普通に参照で書き込んでるので意味ないかなと思う
デフォルトの名無しさん (スフッ Sd94-OThY) [sage] 2018/02/26(月) 13:05:03.30:LqmnPPXld
やC++糞
デフォルトの名無しさん (ワッチョイ 147e-x4Or) [sage] 2018/02/26(月) 13:30:49.55:jQ6YvoyL0
好きな方使えとしか言いようがない
ただ参照はnullポインタが無いという特性はある
デフォルトの名無しさん (ワッチョイ ba23-k8Zo) [sage] 2018/02/26(月) 13:42:09.37:z/vehsiL0

自分もその人の気持ちは理解できた。
func(a, &b);
と書かれていると、bに結果を書き込んでいる感があるし。
デフォルトの名無しさん (ワッチョイ 2f93-0l3D) [sage] 2018/02/26(月) 13:44:00.32:yfGCkThX0
レスサンクス
cからだからポインタで書いちゃいそうだわ
デフォルトの名無しさん (アウーイモ MM3a-QuQl) [] 2018/02/26(月) 18:25:47.85:aHz4HBvIM
ローカルで宣言したunique_ptrを他のメソッドに渡してデータをつめたいばあいってどういう引数で渡せば良いの?
unique_ptr<Hoge> ptr(new Hoge);
hogehoge(ptr);

Hogehoge::hoge(const unique_ptr<Hoge>& ptr){
ptr->aaa = 123;
}

これでいける?
なんかウェブサイトみてると&&二つとかあったりするの見かけて混乱してきた
デフォルトの名無しさん (ワッチョイ fae7-RzsP) [sage] 2018/02/26(月) 18:46:48.22:6OgFttId0
&&は所有権ごとぶん投げる時に使う
渡した後も呼び出し元で使うんだったらそれて合ってるぞ
デフォルトの名無しさん (ワッチョイ d0e8-z5Dr) [sage] 2018/02/26(月) 19:00:19.12:r2m2Cr000

それだったらunique_ptrじゃなくて参照渡せば良いだけじゃ
デフォルトの名無しさん (ワッチョイ 0a80-IMbs) [sage] 2018/02/26(月) 19:31:15.52:NcBRNf650
知らない間に、&& みたいな参照渡しもできた

Rust の所有権ムーブの事
デフォルトの名無しさん (ワッチョイ 147e-x4Or) [sage] 2018/02/26(月) 19:58:16.47:jQ6YvoyL0
何年も前からある
デフォルトの名無しさん (ワッチョイ 8610-QuQl) [] 2018/02/26(月) 21:01:42.73:k0ghrbBh0
所有権を渡すのってstd:move()だと思ってたんだけどconst &&でもいけるの??
デフォルトの名無しさん (ワッチョイ 38eb-f0ks) [sage] 2018/02/26(月) 21:42:25.99:adcc2IaV0
C++17でstd::iteratorが非推奨ってなっているみたいだけど代わりに何使うの?
デフォルトの名無しさん (ワッチョイ 0637-rG1w) [sage] 2018/02/26(月) 23:56:58.87:4PPe6ndQ0
[]
デフォルトの名無しさん (ワッチョイ 147e-x4Or) [sage] 2018/02/27(火) 00:00:22.09:o+FKgYKC0

自分で実装する
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ e66f-x4Or) [sage] 2018/02/27(火) 02:00:32.40:+XEdVvf40

std::move は rvalue にキャストするだけで、それ自体にはムーブする機能はない。
実際にムーブの処理をするのはムーブコンストラクタやムーブ代入演算子の方やで。
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ e66f-x4Or) [sage] 2018/02/27(火) 02:10:59.44:+XEdVvf40
&& は単純に右辺参照って意味しかないから、 rvalue を受け取れるってだけ。
だけど lvalue でもムーブしてぇってときは std::move で rvalue にキャストすんの。
デフォルトの名無しさん (ワッチョイ 147e-x4Or) [sage] 2018/02/27(火) 02:19:45.35:o+FKgYKC0
そこら辺はめんどくさいからテンプレート使え
デフォルトの名無しさん (ワッチョイ 8610-QuQl) [] 2018/02/28(水) 18:07:41.72:IZRayiSM0
右辺値参照とか難しいなー
最近ようやくC++11使えるようになったから全然いってることがわからん
片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd94-HaFh) [sage] 2018/02/28(水) 18:34:51.95:jmOf6Upnd
右辺値参照が使えなかった頃は、std::swapでスピード最適化していた。ポインタとメモリー確保を含む構造体は、
単純にスワップしたり、単純にバイト単位コピーしたりするのはまずいことがある。
そういうときに、std::swapを使う。右辺値参照は、それよりちょっと速くて賢いが、テンプレート型を理解してないと多分理解できないと思われる。
片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd94-HaFh) [sage] 2018/02/28(水) 18:43:18.32:jmOf6Upnd
右辺値参照の型はテンプレートを使った特殊な型だと考えるのが自然。

T&& === rvalue_ref<T>.

std::move(T&)はrvalue_ref<T>という型。
片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd94-HaFh) [sage] 2018/02/28(水) 18:44:28.64:jmOf6Upnd
訂正。
std::move(T&)の戻り値はrvalue_ref<T>という型。
片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd94-HaFh) [sage] 2018/02/28(水) 19:01:47.21:jmOf6Upnd
すみません、テキトーなことを書いたので、銃殺されます。
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ e66f-x4Or) [sage] 2018/02/28(水) 19:18:07.29:7ezW7mFb0
実際のところヘッダファイルから std::move の定義を抜き出すとこんな感じ。

template<typename _Tp>
constexpr typename std::remove_reference<_Tp>::type&&
move(_Tp&& __t) noexcept {
return static_cast<typename std::remove_reference<_Tp>::type&&>(__t);
}

テンプレートの都合で面倒くさくなってるけど、実態としては static_cast してるだけ。
片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd94-HaFh) [sage] 2018/02/28(水) 19:24:03.59:jmOf6Upnd
そのstd::remove_reference<T>::typeはTから左辺値参照や右辺値参照をはずした型になるね。それに&&を付けるんだから、左辺値参照が右辺値参照になる。
片山博文MZ ◆T6xkBnTXz7B0 (ワッチョイ a6b3-HaFh) [sage] 2018/02/28(水) 19:25:31.22:AZJp7LrB0
やはり、constexprやnoexceptを付けた方が性能がいいんだな。
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ e66f-x4Or) [sage] 2018/02/28(水) 19:35:33.38:7ezW7mFb0
C++17 では noexcept は型の一部という扱いに変更された。
例外を投げないなら投げないと書いておかないと他のライブラリとの組合せで型エラーになったりすることもあるかもしれんぞ。
片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd94-HaFh) [sage] 2018/02/28(水) 19:43:54.33:jmOf6Upnd
やっぱ江添亮様ってスゲーや。
デフォルトの名無しさん (ワッチョイ 147e-x4Or) [sage] 2018/02/28(水) 21:22:30.07:BlsGZA5I0
江添本にこの辺りのチートシートと問題集いれたら100部くらい売り上げ増えるのでは
デフォルトの名無しさん (ワッチョイ eff2-x4Or) [sage] 2018/02/28(水) 21:27:43.47:LDTKKB+20
江添ってあれか。ニートの時にやることないからたまたま目についたC++の仕様書を読み込んでたら
いつの間にかすごく強くなったという、ホリランみたいな。
デフォルトの名無しさん (ワッチョイ 1651-x4Or) [sage] 2018/02/28(水) 21:32:34.60:eOQjYTv40
おまえそれをバカにできるのか?
仕事ってそういうもんだぜ
目の前の案件のために必死こいても付け焼き刃にできることは知れてるんだよ
「ヒマ」なときに遠くを見て投機的にコツコツ努力したことが
あとで花咲くことがあるし咲かないこともある
賭に勝った者を、降りたやつがバカにできるのか? え、おい
デフォルトの名無しさん (ワッチョイ 8abd-2pQG) [sage] 2018/02/28(水) 22:02:12.40:debsNNov0


書き込むときポインタ渡しにするのは
C++には参照渡しがin/out/refのどの意味なのか表すシンタックスが現状無いから
というのが主要な動機だと思うが
inならconst T& aというのは比較的読み筋だが
T* pと書いただけだとoutなのかrefなのかやっぱりわからん…
デフォルトの名無しさん (ブーイモ MM5e-chUR) [sage] 2018/02/28(水) 22:22:45.57:n9jVMobsM

outは**だろ
デフォルトの名無しさん (ワッチョイ f680-IMbs) [sage] 2018/02/28(水) 22:38:47.40:ugxprRf80
&& は、Rust のmove の事。
所有権移転。移転元が空になる

基本的に数年は、ドワンゴ江添と共に、山ごもり!
江添が空海なら、漏れは最澄w

悟りを開くまで、空海・最澄の一問一答が、延々と続くw
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ e66f-x4Or) [sage] 2018/02/28(水) 23:03:26.56:7ezW7mFb0
rvalue reference 自体はムーブしねぇつってるだろ。
デフォルトの名無しさん (ワッチョイ df34-CuRu) [sage] 2018/03/01(木) 02:40:44.97:Cta7ST2f0
&&は所有権付き参照オブジェクトのようなものだな
デフォルトの名無しさん (ワッチョイ bfe7-s382) [sage] 2018/03/01(木) 07:05:17.46:/bb7E7Gp0
&&参照は「このオブジェクトもういらないからぶっ壊してもいいよ」というサイン
言うなれば肉屋へ行く馬車
野生のオブジェクトは誰に断る必要もないので勝手に連れてかれて解体される
家畜を渡す時は解体に同意するサイン(std::move())が必要
デフォルトの名無しさん (アウーイモ MM2b-wIew) [] 2018/03/01(木) 07:13:49.75:YKLxBKOvM
Fooクラスのunique_ptrがつまったvectorを作って、他クラスのメンバ変数にセットするときはどう渡すべき?
作った元ではもう使わないから所有権放棄していいとする

const参照渡しにして、渡された側でvectorの中身を全部std:move()して新しいvectorにつめるのが一番最初に思い浮かんだ
そんなことしなくても最近ここででてる、&&つけて渡してそのままセットすれば解決するのかな?
デフォルトの名無しさん (ワッチョイ bfe7-s382) [sage] 2018/03/01(木) 07:20:14.18:/bb7E7Gp0
vectorを丸ごとmove付けてコンストラクタに渡せばいいよ
出来上がった後で渡したいならswapすればいい
デフォルトの名無しさん (アウーイモ MM2b-wIew) [] 2018/03/01(木) 08:22:01.82:YKLxBKOvM
なるほどー
コードにするとこんな感じかな?

std::vector<std::unique_ptr>vec_hoge;

...

Hoge hoge;
hoge.setHoge(std:move(vec_hoge))


Hoge::setHoge(vector<unique_ptr>&& vec_hoge) {
this-> vec_hoge = vec_hoge;
}
デフォルトの名無しさん (ブーイモ MMcf-pwu8) [sage] 2018/03/01(木) 08:51:22.88:Z75vpagFM

最後にmove必要
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-m1UI) [sage] 2018/03/01(木) 08:54:17.19:1485DW7Q0
せやな。
rvalue reference は lvalue だぞ。
デフォルトの名無しさん (アウーイモ MM2b-wIew) [] 2018/03/01(木) 10:38:08.68:YKLxBKOvM
ありがとう!勉強になりました
デフォルトの名無しさん (ワッチョイ dfbd-lEE9) [sage] 2018/03/01(木) 22:06:37.33:fp7iC0tG0

ちげう
デフォルトの名無しさん (アウアウカー Sabb-5mf3) [sage] 2018/03/02(金) 07:10:33.20:GbvR6g/La
noexceptにtrue,falseがある理由については

#include <type_traits>

template<typename T>
void test(T t)noexcept(is_unsigned<T>){
//Tの型がunsignedの時だけは例外は投げない
}

こういう事が出来ると書いてあったけど、c++17以降も問題なく使えるだろうか?
デフォルトの名無しさん (ワッチョイ df52-m1UI) [sage] 2018/03/02(金) 07:15:24.27:bNTu0vGw0
is_unsigned_vだろ

なぜC++17以後で廃止になると思ったんだ?
デフォルトの名無しさん (アウアウカー Sabb-5mf3) [sage] 2018/03/02(金) 07:38:40.59:GbvR6g/La
stdも抜けてた。。。

廃止になるじゃなく面倒な事になりそうだと。
デフォルトの名無しさん (ワッチョイ df80-zeCZ) [sage] 2018/03/02(金) 08:07:40.62:mIGjbFX+0
unsigned は組み込み用だろ

0 〜 255 のカウンターなどで、無限にループする。
255の次に、0が来る

overflow にされると困る
デフォルトの名無しさん (ブーイモ MMcf-pwu8) [sage] 2018/03/02(金) 08:51:13.35:Du7whmdSM

組み込みでなくても極々普通に使うし、標準ライブラリ使ってれば知らぬ間に使ってる。
デフォルトの名無しさん (ワッチョイ 5f7e-m1UI) [sage] 2018/03/02(金) 09:14:23.17:vziGgrtU0
size_t
デフォルトの名無しさん (ワッチョイ df52-m1UI) [sage] 2018/03/02(金) 09:29:49.65:bNTu0vGw0
それを言うなら
uintptr_t
デフォルトの名無しさん (スプッッ Sd7f-yS6n) [sage] 2018/03/02(金) 12:01:58.77:D+SIA0G1d
普段は uint_xxt と size_t しか使わんわ
int と ptr あんまり相互に変換しないし
デフォルトの名無しさん (マクド FFbb-x7J7) [sage] 2018/03/02(金) 22:27:40.22:3pZ6Fb9JF
visualstudio2017 でスタックトレースがしたいのですができません。
最初はBoost.StackTraceで試みたのですがMSVCでは行数やファイル名の出力が非対応で
アドレスまでしか取れませんでした。

次にWinAPIを使って解決させようとしたのですがこれもうまく行きません。
SymGetSymFromAddrを使うとどうやってもエラー126が帰ってきてしまいます。

以下のプログラムがVisualstudio2017で動作している人はいないでしょうか?
ttps://github.com/shive/blogpost/blob/master/20130918-stacktrace/main.cpp
デフォルトの名無しさん (ワッチョイ 7f95-A/Ur) [] 2018/03/02(金) 23:27:18.83:KYEHMUiK0
スタートレックと空目した
デフォルトの名無しさん (ワッチョイ 5f7e-m1UI) [sage] 2018/03/02(金) 23:40:43.96:vziGgrtU0

こうなった

---- BEGIN BACKTRACE ----
1 : 0x00e76873 : Project1 : mycode::foo : c:\users\\source\repos\project1\project1\main.cpp(116) :
backtrace();
2 : 0x00e76513 : Project1 : mycode::bar : c:\users\\source\repos\project1\project1\main.cpp(120) :
foo();
3 : 0x00e76563 : Project1 : mycode::baz : c:\users\\source\repos\project1\project1\main.cpp(124) :
bar();
4 : 0x00e76b33 : Project1 : mycode::hoge : c:\users\\source\repos\project1\project1\main.cpp(128) :
baz();
5 : 0x00e76f0d : Project1 : main : c:\users\\source\repos\project1\project1\main.cpp(134) : try {
6 : 0x00e7870e : Project1 : invoke_main : f:\dd\vctools\crt\vcstartup\src\startup\exe_common.inl(78) : ?
7 : 0x00e785b0 : Project1 : __scrt_common_main_seh : f:\dd\vctools\crt\vcstartup\src\startup\exe_common.inl(283) : ?
---- END BACKTRACE ----
片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdff-dixK) [sage] 2018/03/02(金) 23:47:44.16:7K8TE86Qd
ttps://stackoverflow.com/questions/22481126/why-isnt-symgetsymfromaddr64-working-it-returns-error-code-126

未確認
373 (ワイモマー MMff-cxM0) [sage] 2018/03/03(土) 01:05:16.48:7bxI8Ps/M

プロジェクトの設定はdbghelp.libを追加しただけでしょうか?
あとWindows10ですか?7ですか?


自分もそれを読んでx86とx64両方試したのですがダメでした、、、
デフォルトの名無しさん (ワッチョイ 5f7e-m1UI) [sage] 2018/03/03(土) 01:52:28.21:e0EB+SLu0

Windows10で実行
ライブラリは追加したのと
このFileNameがchar*でmsvcでは通らないから適当に文字列のバッファを作って渡した
>94 line.FileName = "?";
373 (マクド FFbb-x7J7) [sage] 2018/03/03(土) 07:43:32.07:MjEj/kk+F

自分はWindows7&VisualStudio2017なのですが
dbghelp.lib、dgbhelp.hを探すと以下の場所にあるのでWin10でしか対応していないのかなと…

C:\Program Files (x86)\Windows Kits\10\Lib\10.0.16299.0\um\x86
C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\um

C:\Program Files (x86)\Windows Kitsの下には8.1と10
という名前のフォルダがあるのでOSの番号ぽいです。

dbghelp.dllならそこらじゅうにあるのでLoadModule関数で呼べばいけるのかも
373 (マクド FFbb-x7J7) [sage] 2018/03/03(土) 08:51:25.52:MjEj/kk+F
VisualStudio Installerで構成の変更をしようとすると
'Windows XP Support for C++'というのがあって
これがWindows7用のSDKらしいです。(どんな名前の付け方だ…)

これをインストールするとめでたくdbghelp.libとdbghelp.hが追加されるので
それでコンパイルしようとすると
#include <dbghelp.h>
とかくだけでコンパイルエラーになってしまいました。

エラー C2760 構文エラー: トークン '識別子' は予期されておらず、'型指定子' が予期されています scratch c:\program files (x86)\microsoft sdks\windows\v7.1a\include\objbase.h 239

Windows10を買うかVisualStudio2015をインストールするかしかないのかもしれません;;
デフォルトの名無しさん (ワッチョイ 8723-WWZl) [sage] 2018/03/03(土) 09:17:35.93:iGrPHQq30

Visual Studio 2017 スレの919あたりから話題になっているけど、
VS2017 の Windows 旧バージョンサポートはおかしいみたい。
2015と同じツールセット、SDKを用いても動作が違う。

2015をインストールするのがいい気がする。

参考
Visual Studio 2017 Part4 ・
ttp://mevius.5ch.net/test/read.cgi/tech/1509244956/

ttps://www.visualstudio.com/ja/vs/older-downloads/
デフォルトの名無しさん (スップ Sdff-b+My) [sage] 2018/03/03(土) 10:29:47.52:eUUf6Fhxd
コンパイラを作っているんですが、char 10bit short 18bitの時はsizeofはいくつを返せばいいんですか?
デフォルトの名無しさん (ワッチョイ 078a-Jyeh) [sage釣] 2018/03/03(土) 10:36:52.34:/0Rk5gcF0

アドレス単位を返す。ワードアドレッシングなら通常全て1になる
デフォルトの名無しさん (ワッチョイ 8723-WWZl) [sage] 2018/03/03(土) 10:42:04.53:iGrPHQq30
メモリ上のレイアウト次第
その18ビットを隙間だらけでchar8個分のメモリに置いてるなら8だし、
詰めて2個分で置いてるなら2
デフォルトの名無しさん (ワッチョイ df7f-nnrn) [sage] 2018/03/03(土) 10:51:46.74:sKvL+uoJ0
sizeof(char)は必ず1じゃなかったっけ?
デフォルトの名無しさん [] 2018/03/03(土) 12:49:02.99
sizeofが小数を返しちゃいけないって誰が決めたの?🙄
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-m1UI) [sage] 2018/03/03(土) 13:15:05.21:uc6Z/AdW0

仕様。
C99 だと 7.17 に size_t は sizeof 演算子の結果の符号無し整数型って書いてある。
C++11 だと 5.3.3 に sizeof 演算子の返却値の型は size_t って書いてあって、
18.2 に size_t は符号無し整数型って書いてある。
デフォルトの名無しさん (ワッチョイ df52-m1UI) [sage] 2018/03/03(土) 13:20:00.43:Yc5zIgYv0
sizeof(bool) == 0.125 であって欲しいのかw
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-m1UI) [sage] 2018/03/03(土) 13:43:14.93:uc6Z/AdW0
どうせ汎整数昇格で int になることばかりなので、
アドレス単位以下の小さなオブジェクトにする意味なんてないよ。
大きな配列で扱いたいときは std::bitset が有るし。
デフォルトの名無しさん [] 2018/03/03(土) 14:56:24.32

ありがとう🤣
デフォルトの名無しさん (ワッチョイ dff9-5eZn) [sage] 2018/03/03(土) 15:45:51.52:+GZAkR500

もしsizeofが小数を返したら汎整数昇格は適用されないんじゃない?
デフォルトの名無しさん (ワッチョイ 5f7e-m1UI) [sage] 2018/03/03(土) 16:09:32.75:e0EB+SLu0
使用者が混乱するような仕様はちょっと
デフォルトの名無しさん (ワッチョイ df8f-obH6) [sage] 2018/03/03(土) 18:28:41.77:OIzMcqKj0
この板に書いてあることがほとんどわかっていないようなクソ素人ですみませんがちょっとお聞きしたいことがあります。
Windows 7でOpenCVをTDM-GCCにて動かしたいと思っているのですが、どなたかこの設定で動かされている方など居られますでしょうか?
もしくは素直にVisualStudioなど使ったほうが良いのでしょうか?
昨日からあれこれ試しているのですがまったく動かないです。
片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdff-dixK) [sage] 2018/03/03(土) 19:01:36.20:ZgUZF4A1d

俺ならパッケージマネージャがあるMSYS2+MinGW使うよ。
パッケージマネージャがないTDM-GCCなら、まず、OpenCVをビルドして、リンクできるようにしないといけない。
まあ、めんどうくさい訳で。
片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdff-dixK) [sage] 2018/03/03(土) 19:37:06.06:ZgUZF4A1d
初心者はVSやるとよろし。NuGetというパッケージマネージャがあるよ。
デフォルトの名無しさん (ワッチョイ df8f-obH6) [] 2018/03/03(土) 20:12:29.49:OIzMcqKj0
片山様
レスありがとうございます。
そうですね、VSは重いという理由で避けていましたがやはりまずはちゃんと王道からやっていこうと思います。
慣れたらソースからビルドもしてみたいですが、まずはOpenCVであれこれしたいのでやりやすい環境で頑張りたいと思います。
ありがとうございました。
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-m1UI) [sage] 2018/03/03(土) 20:37:52.59:uc6Z/AdW0
VS の統合開発環境を外したツールセットだけの SDK もあったはず。
でもまあ初心者は統合開発環境があった方がいいってのは同意だな。
デフォルトの名無しさん (アウアウカー Sabb-5mf3) [sage] 2018/03/03(土) 21:19:46.86:oo1zjTPVa
C++の文字列、u16やu32stringとか乱立してるけど今時TCHARとか使わないでしょうか?

string,wstring,u16string,u32string...どれか決め打ち?
デフォルトの名無しさん (ワッチョイ 8723-WWZl) [sage] 2018/03/03(土) 21:37:46.21:iGrPHQq30
主に使ってるライブラリ/フレームワークに合わせれば?

何でもいいなら multibyte で utf-8 一択だろう
ucs2 (16bit) にしても ucs4 (32bit) にしてもどうせ
合字とかで1コードポイント1文字にならないから意味ないし
コンテナは string でも何でも好きなものを
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-m1UI) [sage] 2018/03/03(土) 21:52:22.75:uc6Z/AdW0
どうやろな?
Windows だと API が UTF-16 前提だからそれで揃えるってのは悪くない選択だと思うし。
デフォルトの名無しさん (ワッチョイ 5f7e-m1UI) [sage] 2018/03/03(土) 21:55:03.34:e0EB+SLu0

TCHARはcharとwchar_tをvisual studioのプロジェクトの設定で切り替えてtypedefしてる型だ
マイクロソフトのライブラリの一部

u16stringとu32stringはstd::basic_string<char16_t>とstd::basic_string<char32_t>のエイリアス
UTF-16とUTF-32の文字列を扱うクラスで標準ライブラリの一部

そもそもどっちかというものではない
std::basic_string<TCHAR>とか使ってもいい
デフォルトの名無しさん (ワッチョイ dfbd-lEE9) [sage] 2018/03/03(土) 22:02:34.74:i5AAIiVZ0
OpenCVのビルドぐらいCMakeでGUIでできる
デフォルトの名無しさん (ワッチョイ dfbd-lEE9) [sage] 2018/03/03(土) 22:07:02.05:i5AAIiVZ0
>std::basic_string<TCHAR>とか使ってもいい
ほんとそれ

ていうかWin32APIでサポートされるうちはやっぱマルチバイトが無難
デフォルトの名無しさん (ワッチョイ 4781-atej) [sage] 2018/03/03(土) 22:12:10.73:q1dNIabI0
ShiftJisなんて廃止して、UTF8に統一してしまえば良かったよね
デフォルトの名無しさん (ワッチョイ 078a-Jyeh) [sage釣] 2018/03/03(土) 22:19:12.96:/0Rk5gcF0
UTFはソートのコストが高いから痛し痒しだけどね
SJISはその点は優秀かと
デフォルトの名無しさん (ワッチョイ df4c-jQxp) [sage] 2018/03/03(土) 22:38:49.13:pbvBV+5A0
Windows10はutf8モードにできたような
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-m1UI) [sage] 2018/03/03(土) 22:56:38.78:uc6Z/AdW0
文字コードを統一したところでロケールの切替えはどうせ必要なわけだし、
内部的な処理が UNICODE に統一されたので良しとするしかなかろ。
デフォルトの名無しさん (ワッチョイ 4781-atej) [sage] 2018/03/03(土) 23:43:29.67:q1dNIabI0
utf8に統一したら、ロケールの切替って表示する文字列の言語を決める位の意味しか無いのではないかな
異なる言語の文字列でもそのまま字化けせずに表示出来た方が都合が良いように思うけど
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-m1UI) [sage] 2018/03/04(日) 00:38:00.37:R9gQD4Ga0
Windows はもう 20 年以上前から Unicode 化はやってるんだってば。
UNICODE 版の API を正しく使う限り文字化けしない。
フォントの設定とかで化けることはあるかもしれんけど、
それも今はフォントリンクとかでおおよそ上手いこと処理してまうしな。

UNICODE 化できていない今までに作られたカスなアプリが消し去れないし、
カスなアプリのために ANSI 版の API (の挙動を制御するためのコードページの切替えの仕組み)
は残しておかなきゃならないけど、
Unicode への統一そのものは出来てるから満足するしかない。
っていう話ね。
デフォルトの名無しさん (ワッチョイ bfe7-s382) [sage] 2018/03/04(日) 00:59:55.95:LharAyAs0
だったらVisualStudioで作ったソースファイルのデフォルトがShiftJIS固定なのをそろそろなんとかしてくれよ
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-m1UI) [sage] 2018/03/04(日) 01:01:33.87:R9gQD4Ga0
せやな。
デフォルトの名無しさん (ワッチョイ dfbd-lEE9) [sage] 2018/03/04(日) 01:07:55.85:BtVPmkEs0
LinuxとかのシステムコールもUnicode化されたら考えるわアデューノシ
デフォルトの名無しさん (ワッチョイ 079b-esDK) [sage] 2018/03/04(日) 01:14:01.78:fY1aJvVU0

2017で治ったんじゃなかったか
デフォルトの名無しさん (ワッチョイ dfbd-lEE9) [sage] 2018/03/04(日) 01:15:23.20:BtVPmkEs0
だいたいwchar_tとかcharの倍容量を食うじゃん?
2が3になるとかならまだしも1が2になるというのは精神的にインパクトがデカイ
L"Hello World!"のバイナリをダンプしてみたらトラウマを抱え込むレヴェル
というのもあるし他環境とのソースコード共通化も視野に入れる場合やっぱマルチバイトしか…
デフォルトの名無しさん (ワッチョイ dfe1-9jF/) [sage] 2018/03/04(日) 01:35:20.32:pARrwnK20
WindowsのUNICODE版APIはUTF-8と相性が悪いからクソ
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-m1UI) [sage] 2018/03/04(日) 01:39:19.42:R9gQD4Ga0
せやろか?
内部表現として使う文には UTF-16 って良いと思うけどな。
UTF-8 との間なら変換コストも大したことないし。
デフォルトの名無しさん (ワッチョイ 8723-WWZl) [sage] 2018/03/04(日) 02:20:02.75:8pLLmBBd0

iOS / macOS / Windows / Java と多くのプラットフォームの
API で文字列としてUTF-16 が使われてるから割と使うけど、

近年多用される絵文字とかが全然1文字1符号にならんので
ロジックを基準する上ではUTF-8より便利ってわけでもない。
文字列の処理を描くときは合字以外は1文字1符号になるUCS4 の方が良い。
デフォルトの名無しさん (ワッチョイ 5f7e-m1UI) [sage] 2018/03/04(日) 02:23:18.11:FSOQNU6I0
なぜ世界中の頭脳を集結させても完璧な文字コードは作れないのか
デフォルトの名無しさん (ワッチョイ dfbd-lEE9) [sage] 2018/03/04(日) 02:28:31.88:BtVPmkEs0
x86アーキテクチャーがRISC-Vに置き換わったら考えるわノシ
デフォルトの名無しさん (ワッチョイ dfbd-lEE9) [sage] 2018/03/04(日) 02:42:05.74:BtVPmkEs0
ていうかコルモゴロフ複雑性が計算可能関数だったら考えるわノシ
デフォルトの名無しさん (ワッチョイ df34-CuRu) [sage] 2018/03/04(日) 02:53:03.62:QKjmCs/V0
韓国がUNICODEにすごい文字数予約済みにしてあるとか聞いたことある
デフォルトの名無しさん (ワッチョイ 7feb-Vmra) [sage] 2018/03/04(日) 03:02:28.08:ymM0nha90
あの言語動的に文字生成でもしないと無駄多杉だろ
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-m1UI) [sage] 2018/03/04(日) 03:02:39.39:R9gQD4Ga0

どうせイテレータでアクセスするから、合字はどうしようもないにしても
先頭からコードポイント単位で読む分にはどの符号化を使っててもあんまり変わらん気がするが。
デフォルトの名無しさん (ワッチョイ 8723-WWZl) [sage] 2018/03/04(日) 03:56:38.94:8pLLmBBd0

UTF-16 だとサロゲートペアが出てくるからマルチバイトがマルチワードになるだけ
ucs4 だとそれが要らなくて符合とコードポイントが1:1対応になるんだよ。

何年か前まではサロゲートペア?なにそれおいしいの?でも済んでたけど
今の時代それは無理だし
デフォルトの名無しさん (ワッチョイ 8723-WWZl) [sage] 2018/03/04(日) 04:09:09.92:8pLLmBBd0
要は
utf-8、utf-16 → 1符合 ≠ 1コードポイント ≠ 1文字
ucs4 → 1符合 = 1コードポイント ≠ 1文字
だから完全自作の文字列処理ではucs4が楽だよという意見でした
テキストなんてたいしてメモリ食わないしね
おしまい
デフォルトの名無しさん (ワッチョイ 5f7e-m1UI) [sage] 2018/03/04(日) 04:09:59.70:FSOQNU6I0
charset_cast<utf_8>()みたいなの欲しい
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-m1UI) [sage] 2018/03/04(日) 08:42:48.43:R9gQD4Ga0
おっと、 u16string のイテレータはサロゲートペアは解決してくれないのか。
まあそれも小さなラッパを作ればどうとでもなる。
デフォルトの名無しさん (ワッチョイ bfe7-s382) [sage] 2018/03/04(日) 09:34:29.91:LharAyAs0
UTF16でサロゲートでガチャガチャやるくらいならUTF8でちゃんとやった方が実り多いし
そんなんやりたくないならUTF32使えばいいし
中途半端だよねUTF16
デフォルトの名無しさん (ワッチョイ df6e-m1UI) [sage] 2018/03/04(日) 09:38:06.05:ZPPAxORI0
ワイドのようで実はマルチ
デフォルトの名無しさん (アウアウカー Sabb-5mf3) [sage] 2018/03/04(日) 10:55:23.96:kJ02m0gha
どこかでみたけど歴史的にはutf32やutf16よりutf8が新しいんだろ?
デフォルトの名無しさん (ワッチョイ 078a-Jyeh) [sage] 2018/03/04(日) 12:59:59.04:hIgSiiXH0
オリジナルのXEROXのコードへの先祖返りではないかな?
デフォルトの名無しさん (マクド FFbb-x7J7) [sage] 2018/03/04(日) 14:09:11.62:GeBypOU0F
visualstudio2017でBoost.Testを試したいのですがうまく行きません。

Nugetでboost-vc141をインストールしてテストプロジェクトをWindowsコンソールアプリケーションとして
追加し、Helloworld的なテストプログラムを書きました。
ビルドは通るのですが、テストエクスプローラーにテストが認識されません。

#include "stdafx.h"
#define BOOST_TEST_MODULE MyTest
#include <boost/test/included/unit_test.hpp>
BOOST_AUTO_TEST_CASE(my_boost_test) {
const int x = 1;
BOOST_CHECK(x == 1);
BOOST_CHECK(x != 1);
}

VisualStudio2017のバージョンは15.5.7で
「Boost.Testのテスト アダプター」はデフォルトでインストールされるようになっていたので
インストールされています。
デフォルトの名無しさん (ワッチョイ a7b3-m1UI) [] 2018/03/06(火) 00:41:37.37:MSLc23us0
標準ライブラリを前方宣言にすることに意味ってありますか?
デフォルトの名無しさん (ワッチョイ 677f-m1UI) [] 2018/03/06(火) 00:45:13.63:jqoml9jL0
メイヤーズは普通にインクルードしろって言ってた
デフォルトの名無しさん (ワッチョイ dfcb-pwu8) [sage] 2018/03/06(火) 01:45:01.96:RorZBCxf0

それどこに書いてあるの?
デフォルトの名無しさん (アウアウオー Sa9f-JHL/) [sage] 2018/03/06(火) 06:16:57.53:HL6NWtm0a
newした配列がいつの間にか解放されてて、
プログラムの最後でdeleteすると必ずアクセスエラーで落ちるんですが、
newは勝手に解放されることあるんですか?
デフォルトの名無しさん (ワッチョイ df33-k3ZN) [sage] 2018/03/06(火) 07:19:59.92:18YefqDd0
どっかで未定義動作に堕ちてるならそんな結果になることもあるだろね。
デフォルトの名無しさん (ワッチョイ bfe7-s382) [sage] 2018/03/06(火) 07:39:27.47:YXZKPZh60
・どっかでメモリの取り扱い間違えてnewの管理情報を踏んづけて壊してる
・unique_ptrやshared_ptr、その他スマートポインタ的なものに理解せずに渡してる
多分このどっちか
デフォルトの名無しさん (ワッチョイ 5f7e-m1UI) [sage] 2018/03/06(火) 07:56:08.66:4Jw7uGdF0
ポインタがnewで帰ってきたアドレスと違う可能性
デフォルトの名無しさん (ワッチョイ e75b-m1UI) [sage] 2018/03/06(火) 11:04:41.26:PuW1uuBL0

「解放されてて」というのは、どうやって確認した?
たとえば要素のデストラクタが実行されているとか、
別件で確保するメモリに再使用されているとか、
そういうことが起きているのか?
デフォルトの名無しさん (ワッチョイ df60-k3ZN) [sage] 2018/03/06(火) 13:48:19.62:xvhpcg6j0

constructor
destructor
copy constructor
operator=()
のいずれかに誤りがあるのでは?
概念コードを書いてみなさい
デフォルトの名無しさん (ワッチョイ df60-k3ZN) [sage] 2018/03/06(火) 13:50:16.42:xvhpcg6j0

operator new()
operator delete()
を捕捉するのもいいかもね、根本的に見直す時期だと思う
デフォルトの名無しさん (ワッチョイ 7fcc-wl/W) [] 2018/03/06(火) 15:12:07.82:p6GeX8860
ファイル分割をしてみたく、プログラムをヘッダファイルとcppファイルに分割しようと挑戦したのですがよくわからないエラーが出まくります・・
プログラム超初心者なので凄い初歩的な部分を間違えているかもしれません・・・

エラーですが、ヘッダファイルの方で
'vector':'std'のメンバーではありません
'vector':定義されていない識別子です
'string':定義されていない識別子です
'cv': 識別子がクラス名でも名前空間名でもありません。
'Mat':定義されていない識別子です
'ofstream':'std'のメンバーではありません
'ofstream':定義されていない識別子です

みたいなエラーが出ます。
ヘッダファイルは、二重インクルードガードと関数のプロトタイプ宣言しかしていないのですが
上のようにそ、のプロトタイプ宣言の型とかに対してのエラーが出まくります


何かヘッダファイルに付けたほうがいいのでしょうか?
分かる方がいたら、教えていただけますでしょうか。

ちなみに、visual studio で作業していて、プロジェクトはコンソールアプリケーションで作っています。
もしかして、自分でmakefileとかを作る必要があるのでしょうか?
片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdff-dixK) [sage] 2018/03/06(火) 15:14:49.26:W0MQjqG0d
ヘッダーの方で
#include <vector>
などが足りないのでは。
ヘッダーは、自己完結にした方がいいらしい。
デフォルトの名無しさん (ワッチョイ 7fcc-1LYG) [sage] 2018/03/06(火) 15:40:05.75:p6GeX8860
よく見たら、自分の参考にしていたページでヘッダファイルのincludeは最小限に抑えると書いていました…
てっきり、ヘッダファイルではincludeはしないものなのかと…

最小限というのは、エラーが回避できるstdio.hとかの最小限のファイルだけヘッダでincludeして、他のmath.hなどはcppファイルでincludeすればいい感じですか?
片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdff-dixK) [sage] 2018/03/06(火) 15:50:38.20:W0MQjqG0d
最小限というのは、コンパイル時間、ビルド時間を短縮するためだから、小さなプログラムでは気にする必要はない。
cppとhppで#includeを分けるというのはよくあることだ。
デフォルトの名無しさん (ワッチョイ 7fcc-1LYG) [sage] 2018/03/06(火) 16:05:55.81:p6GeX8860
ありがとうございます!
デフォルトの名無しさん (ワッチョイ 6793-fJrP) [sage] 2018/03/06(火) 16:16:08.19:r6wtBatS0
の書きぶりからして
自作のヘッダファイルに std::vector を使った関数のプロトタイプがある、
しかしヘッダファイルの先頭では <vector> を#includeしてない、て感じね。
これは と同じ話。

あと で <stdio.h> と書いてるところを見ると
参考にしてるページは少々古い情報かも。
「あえて<cstdio>でなく<stdio.h>をインクルードする」ことについて
何か理由があるのかも知れないけど。
デフォルトの名無しさん [] 2018/03/06(火) 17:54:41.92
Cソースのincludeの位置にヘッダファイルの中身を貼り付けたときにコンパイルできなきゃだめ
たぶんCソースの中で他のincludeよりも前に新しいヘッダファイルのincludeを書いてるんだろう
デフォルトの名無しさん (ワッチョイ 7fcc-1LYG) [sage] 2018/03/06(火) 18:15:37.24:p6GeX8860

なるほど、cstdioの方が良いんですね
なんか二種類あるけど、どっちなんだろーと思ってたので、勉強なります
次からそちらを使います
デフォルトの名無しさん (アウアウオー Sa9f-JHL/) [sage] 2018/03/06(火) 22:17:21.07:i8Fah5dFa

前者っぽいでした
デフォルトの名無しさん (アウアウウー Sa2b-wl/W) [] 2018/03/06(火) 23:34:50.60:pZOZvbRza
C++のリファレンスとかで[first,last)というふうに左右で括弧が違う表記があるんだけど、これはIteratorに関しての表記ですか?
デフォルトの名無しさん (ワッチョイ df60-k3ZN) [sage] 2018/03/06(火) 23:42:46.07:xvhpcg6j0

数学方面の書き方を源流にしていると思います
[x, y) は x は含み、y は含めない半開区間を示しますが、それを類推したものでしょう
デフォルトの名無しさん (ワッチョイ 07eb-n++H) [sage] 2018/03/06(火) 23:43:09.96:ey0B6I8l0

範囲の数学的な書き方、半開区間とかなんとか
それだとfirst以上last未満の範囲、ということ
デフォルトの名無しさん (ワッチョイ a7b3-m1UI) [sage] 2018/03/06(火) 23:47:04.41:MSLc23us0
ttps://ttsuki.github.io/styleguide/cppguide.ja.html#Forward_Declarations
前方宣言ってしたほうがいいのか、しないほうがいいのかどっちなんですかね
デフォルトの名無しさん (アウアウウー Sa2b-wl/W) [] 2018/03/06(火) 23:50:38.84:pZOZvbRza
,454 数学でしたか!勉強になります。
デフォルトの名無しさん (ワッチョイ 2723-SQy9) [sage] 2018/03/07(水) 00:29:35.52:+JS1hm360
mutex g_Mtx;

int g_Val = 0;

int Func( int A, int B )
{
  int Val = A * B;

  lock_guard<mutex> Lock( g_Mtx );

  return g_Val = Val;
}

void ThreadFunc0()
{
  int Val = Func( 2, 3 );

  // Valを参照する処理
}

void ThreadFunc1()
{
  lock_guard<mutex> Lock( g_Mtx );

  // g_Valを参照する処理
}

上記のようなスレッド関数が非同期に実行されるとき、
Func()はスレッドセーフ(g_Val書き換え中に参照されない)でしょうか?

(1)lock_guard<mutex>によるミューテックスロック
(2)g_Valの書き換え
(3)戻り値を呼び出し元スレッドにコピー(あるいはムーブ)
(4)lock_guard<mutex>がスコープから外れアンロック

というシーケンスを期待しています。
デフォルトの名無しさん (ワッチョイ dfbd-lEE9) [sage] 2018/03/07(水) 00:29:47.60:6+ILModc0
endならともかくlastは区間内の最後の要素なんじゃ…
デフォルトの名無しさん (アウアウウー Sa2b-m1UI) [] 2018/03/07(水) 10:09:55.97:ukyKg6LAa
基本的な質問なのですが、以下のプログラムがエラーになるのはなぜでしょうか?


char* pc = "abc";
pc[0] = 'z';
cout << pc << endl;

以下のプログラムでは意図通りに動きます。

char ac[] = { 'a', 'b', 'c', '\0' };
cout << ac << endl;
ac[0] = 'z';
cout << ac << endl;
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-m1UI) [sage] 2018/03/07(水) 10:14:51.80:TWOfgg7C0

上は変数 pc はリテラル文字列の先頭を指すポインタ。
下の変数 ac は配列で、それを文字列 "abc" で初期化するって意味。

リテラルの破壊は未定義。
破壊しないことをあてにして破壊不可能なセクション (メモリ領域) に配置されたりすることもあるので、アクセスエラーが生じる。
あくまで未定義だから出来ちゃうこともあるし、コンパイラオプションで制御できたりもするけど、基本的にはあかんやつ。
デフォルトの名無しさん (ワッチョイ e75b-m1UI) [sage] 2018/03/07(水) 10:30:06.22:ylRgY7un0

仮引数名をendにすると関数名のendと紛らわしいからだよ
説明の文中にendが出てくる度毎にいちいち仮引数か関数か断るハメになる
デフォルトの名無しさん (アウアウウー Sa2b-m1UI) [sage] 2018/03/07(水) 10:35:31.71:ukyKg6LAa


ありがとうございました。

Pythonでimmutableとかいうのがありますが、それでしょうか?
デフォルトの名無しさん (アウアウウー Sa2b-m1UI) [sage] 2018/03/07(水) 11:10:02.03:ukyKg6LAa
すみません、また、ベーシックな質問です。

char* pc1 = 1; → エラー
char* pc2 = NULL; → OK
char* pc3 = 0; → OK

なぜ、2番目と3番目はOKなのでしょうか?

char* pc1 = 1;

がエラーになるのは、 int 型の値で char* 型の変数を初期化できないからだとすれば、

char* pc3 = 0;

もエラーになると考えることもできると思います。
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-m1UI) [sage] 2018/03/07(水) 11:10:26.68:TWOfgg7C0

Python なんか知らんがな。
Python の immutable は Python の immutable であって、それが C++ の何物かであったりはしないよ。
C++ のリテラルを破壊した結果は未定義というのは C++ のリテラルを破壊した結果は未定義という規則であるだけ。
似て感じられたとしても一対一に対応付くような単純なものではないので、
背景にあるメカニズムを理解せずに翻訳して理解しようとするような方法はお勧めできない。
デフォルトの名無しさん (アウアウウー Sa2b-m1UI) [sage] 2018/03/07(水) 11:14:31.86:ukyKg6LAa


なるほど、そういう規則だからリテラルを破壊しようとするとコンパイルエラーにするわけですね。

ありがとうございました。
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-m1UI) [sage] 2018/03/07(水) 11:22:08.82:TWOfgg7C0

書き忘れてたけど、 C++ の文字列リテラルの型は const char[] なので、
const 付きでないポインタに渡すと単純に型が合わなくてエラーになるはず。
C だと型に const が付いてないのに破壊するのは未定義ってことになっててあまりにもクソだったから改められた。
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-m1UI) [sage] 2018/03/07(水) 11:32:07.41:TWOfgg7C0

0 はポインタに型変換可能で、型変換した結果が空ポインタと等しいことが保証されてる特別な存在。
(ビットパターンが等しいとは限らないことには注意が必要。)

互換であることが保証されているので、処理系によっては
#define NULL 0
として定義していることもある。

余談だが、これはオーバーロードされた関数でうっかりしやすいので気を付けた方がいい。
たとえば関数 foo が以下のような型でオーバーロードされている場合、

void foo(int);
void foo(int*);

これを

foo(NULL)

と呼び出すと void foo(int) が呼び出されたりする。
今ではヌルポインタを表すキーワード nullptr が用意されたので、
NULL はあまり使わない方が良い。
デフォルトの名無しさん (アウアウウー Sa2b-m1UI) [sage] 2018/03/07(水) 12:03:25.28:ukyKg6LAa


ありがとうございました。



Visual Stuidoを使っていますが、以下でエラーは発生しませんでした。

char* pc = "abc";
cout << pc << endl;
デフォルトの名無しさん (ワッチョイ e75b-m1UI) [sage] 2018/03/07(水) 12:29:38.25:ylRgY7un0

それはISO/IEC14882:1998の4.2で許されていたことに由来する
その後ISO/IEC14882:2011のC.1.1で廃止されたが
古いソースを通すために故意に違反状態のままにしている
デフォルトの名無しさん (アウアウカー Sabb-5mf3) [sage] 2018/03/07(水) 16:15:14.65:nnB4Kxzea
c++の規約に違反にしないためには一度変数に代入する必要があるという事?
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-m1UI) [sage] 2018/03/07(水) 16:24:01.54:TWOfgg7C0
オプションで指定できるんじゃね?
俺は GCC を使ってるから知らんけど。
デフォルトの名無しさん (ワッチョイ e75b-m1UI) [sage] 2018/03/07(水) 16:29:51.37:ylRgY7un0
違う

char const* cc;
cc = "abc"; //完全に合法

char* pc;
pc = cc; //不適格
pc = "abc"; //CとC++98では非推奨、C++11以後では不適格

pc = &"abc"[0]; //左辺値変形でこう解釈されていて
非constへのポインタに、constへのポインタを代入することになり、
暗黙のconst外しにあたるので、C++11が正論

pc = const_cast<char*>("abc"); //C++11以後ではこう書く
デフォルトの名無しさん [] 2018/03/07(水) 17:54:06.02

それもだめじゃね?
const領域に非constでアクセスするなんて罪深いことなんだから、ちゃんと別領域にコピーしてから扱わないと。
デフォルトの名無しさん (ワッチョイ df80-zeCZ) [sage] 2018/03/07(水) 18:18:25.20:TnxtYBSc0

>char* pc = "abc";
文字列リテラルは不変だから、const を付けないといけない

古いライブラリで、const を付けていないものを動作させるために(互換性)、
例外的に使う場合だけに許される


>char* pc3 = 0; → OK
この0 は、数値型の0じゃない。
予約語を増やすのが嫌だから、= 0 と書いたら、特別な意味に解釈する。
分かりにくい、クソ仕様

virtual func( ) = 0;
これも、そう。
純粋仮想関数という特別な意味を表す
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-m1UI) [sage] 2018/03/07(水) 18:49:53.33:TWOfgg7C0

書き込まなければ問題は無い。
が、 const 外しが必要な状態ってのが良くないことは確か。
デフォルトの名無しさん (ワッチョイ e75b-m1UI) [sage] 2018/03/07(水) 20:52:49.95:ylRgY7un0

いいや数値型の0だ
翻訳時に0と確定できる汎整数型の定数に限り
ポインタに暗黙変換できるという特例になっている
純粋仮想関数と関連付ける条項はない
デフォルトの名無しさん (スップ Sdff-WWZl) [sage] 2018/03/07(水) 22:07:54.67:eXkgxxlqd
純粋仮想関数と関連付けてはいないだろう
それはともかくとして

char * p = 7-7; // no error

class T {
virtual void f() = 7-7; // error
};

となる気がするので言ってることは合ってるか
デフォルトの名無しさん (ワッチョイ 5f7e-m1UI) [sage] 2018/03/07(水) 22:10:57.06:NKcGF/Sn0
C言語でNULLが0をdefineしたものだったというだけだろ
デフォルトの名無しさん (スップ Sdff-WWZl) [sage] 2018/03/07(水) 22:12:59.22:eXkgxxlqd
C言語では ((void*)0) だった気がする
デフォルトの名無しさん (ワッチョイ e75b-m1UI) [sage] 2018/03/07(水) 22:34:03.79:ylRgY7un0

7-7は定数式なので0と完全に等価
純粋仮想関数の = 0 はA.8のpure-specifierで=0という特定のスペルと規定されているので7-7がエラーになるのは当然
デフォルトの名無しさん (スップ Sdff-WWZl) [sage] 2018/03/07(水) 22:41:42.97:eXkgxxlqd
いや疑問も呈していないし否定しているわけでもないのに当然と言われてもな…
デフォルトの名無しさん (ワッチョイ e75b-m1UI) [sage] 2018/03/07(水) 22:52:11.20:ylRgY7un0
じゃあ何のために、7-7とか言い出したんだ?
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-m1UI) [sage] 2018/03/07(水) 23:02:40.75:TWOfgg7C0

それはあかん。
ひょっとしたら古い処理系でやってるのはあるかもしれんが、
規格違反のはず。
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-m1UI) [sage] 2018/03/07(水) 23:12:03.15:TWOfgg7C0

と、思って調べてたんだけど、 C++ だと確実にあかんようだけど C だとアリなのかもしれない。
デフォルトの名無しさん (ワッチョイ 078a-Jyeh) [sage] 2018/03/07(水) 23:58:27.20:/Jrz1mw60
offsetof()がどう実装されているかやね
デフォルトの名無しさん (ワッチョイ 6a33-hn8E) [sage] 2018/03/08(木) 02:18:11.16:BQ11IIJi0

C++14 からリテラルだけに限定されてるよ。
ttp://d.hatena.ne.jp/yohhoy/20140305/p1
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 666f-uQtz) [sage] 2018/03/08(木) 03:31:21.90:+04GXVK30
おっ、こんな基本的なことで変更が入ってたのか。
でも当然といえば当然の処置よな。
デフォルトの名無しさん (ワッチョイ e6e7-frl3) [sage] 2018/03/08(木) 06:41:46.04:DSeYC6Qd0
Cの無意味な汚いゴミが掃除されるのは良いことだ
デフォルトの名無しさん (ワッチョイ 7f23-6rgV) [sage] 2018/03/08(木) 07:33:41.79:dmEui5aT0

しっかりして
流石にこの件では C と C++ 混同されたら対話が成り立たないよ
デフォルトの名無しさん (ワッチョイ 2a8f-HFNi) [sage] 2018/03/08(木) 18:35:02.35:uuOHCrug0
C++の勉強+機械学習も勉強しようとVisual Studio 2017でtiny-dnnを用いたいのですが、tiny-dnn内でコンパイルエラーが発生します。
具体的にはxcontainer.hpp内でC3203というエラーが頻発したり、feedfoward_layer.hppではC2760というエラーが発生したりしています。

環境はWindows 7でVisual Studio 2017 communityです。
プロジェクトはwindowsデスクトップアプリケーションを用いています。
tiny-dnnのインクルードはプロパティのインクルードディレクトリに追加しています。

どなたか心当たりのある方がいらっしゃれば教えていただけると嬉しいです。
デフォルトの名無しさん (スプッッ Sd2a-dsCQ) [sage] 2018/03/08(木) 19:27:19.96:i2S5Knpdd
linux windows両対応のコードを考えている最中の質問です
unsigned int型の変数xの32bitに、char型の配列y[4]の8bit×4を当て込みたいです
y[0]から順にxの先頭ビットに入れたいのだけど
そういう時はどのようなコードになるのでしょうか
符号の問題で単純に24bitシフト+16bitシフト...みたいなことをすると期待の値にならないときが存在してます
デフォルトの名無しさん (アウアウカー Sa7b-ccCq) [sage] 2018/03/08(木) 19:50:56.79:2k5PL6f/a
unionでどう?
デフォルトの名無しさん (スッップ Sd8a-6rgV) [sage] 2018/03/08(木) 20:26:39.82:FhiFltVyd

シフトする前にunsigned charにキャストする
デフォルトの名無しさん (スッップ Sd8a-6rgV) [sage] 2018/03/08(木) 20:29:17.36:FhiFltVyd
参考
ttps://stackoverflow.com/questions/2437283/c-c-packing-signed-char-into-int
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 666f-uQtz) [sage] 2018/03/08(木) 22:47:08.29:+04GXVK30

スマソ
デフォルトの名無しさん (ワッチョイ caaf-+ocK) [sage] 2018/03/09(金) 11:50:12.37:XHk1xHdH0
ヘッダーファイルの関数定義から関数ポインタをtypedefする事は可能ですか?
C++98辺りのコンパイラです。
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 666f-uQtz) [sage] 2018/03/09(金) 12:25:38.00:nl8HCt1x0

昔の C++ には decltype が無いもんな。
出来ないと思うよ。
デフォルトの名無しさん (スップ Sd2a-O8QP) [sage] 2018/03/09(金) 12:57:58.47:zqzgOSq4d
テンプレート使えないかな?
デフォルトの名無しさん (ワッチョイ caaf-J0+d) [sage] 2018/03/09(金) 13:06:17.52:XHk1xHdH0
出来ませんか。ありがとう。
再定義が面倒だったので楽したいだけだったんですけどね。
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 666f-uQtz) [sage] 2018/03/09(金) 13:35:32.12:nl8HCt1x0

その手があったか。
でも C++98 で自動で推論させようとするとヘルパー関数を使う必要があるじゃろ。
意味のないオブジェクト生成 (最適化で消えるかもしれんけど) がださい感じはするよね。
デフォルトの名無しさん (ドコグロ MM8a-3fsH) [sage] 2018/03/09(金) 19:06:34.98:CekgNpjOM

たくさんあるなら

> ヘッダーファイルの関数定義から関数ポインタをtypedefする

コードを生成するツールを作るとか
デフォルトの名無しさん [] 2018/03/09(金) 22:17:46.30

マクロ駆使すれば

TYPEDEF_FUNC_DECL(なんちゃら);
FUNC_DEF(かんちゃら)
{
return;
}

みたいな書き方できないのかな?

なんちゃらは識別名と戻り値と引数
かんちゃらは識別名を指定するイメージ
デフォルトの名無しさん (ワッチョイ 0b9f-uQtz) [] 2018/03/09(金) 23:46:50.00:yn7GHiyb0

unsigned int x;
char y[4];

.
.
.

memcpy(&x, y, 4);
デフォルトの名無しさん (ワッチョイ 4abd-RZSe) [sage] 2018/03/09(金) 23:57:54.33:5+PoAx/E0

xの先頭ビットとはMSBなのかLSBなのか
デフォルトの名無しさん (スップ Sd2a-6rgV) [sage] 2018/03/10(土) 00:45:01.61:8ENKFfsbd
メモリ上でのレイアウトとかもあるのでuint8_t経由でのシフトがいい
クロックが(メモリアクセスが問題にならない程)低くてシフトが遅いマイクロプロセッサは別
デフォルトの名無しさん [] 2018/03/10(土) 04:49:25.72

x = ntohl(x);
も忘れずに
デフォルトの名無しさん (ワッチョイ 6a34-e70/) [sage] 2018/03/10(土) 06:32:30.15:Tg3hDFxK0

先頭ビットって32ビット目のことか?
デフォルトの名無しさん (ワッチョイ 0b9f-RK0z) [] 2018/03/10(土) 17:21:32.19:a2p+alti0

それが必要になるかどうかは場合による。
◆QZaw55cn4c (ワッチョイ 8a60-hn8E) [sage] 2018/03/10(土) 17:42:35.32:+Ww908Qw0
ネットワークバイトオーダーがここで関係あるのだろうか?
デフォルトの名無しさん [] 2018/03/10(土) 19:22:25.29
>unsigned int型の変数xの32bitに、char型の配列y[4]の8bit×4を当て込みたいです
>y[0]から順に

っていう要件だから、ホストバイトオーダーがビッグエンディアンかリトルエンディアンか分からない以上は常にntohlを付けるべき
デフォルトの名無しさん [] 2018/03/10(土) 19:24:15.74
char y[4] = { 0x12, 0x34, 0x56, 0x78 };
unsignd in x = 0x12345678;
これを等価にしたいという意味だろうから。
デフォルトの名無しさん (ワッチョイ fb93-Ni5c) [sage] 2018/03/10(土) 21:52:35.38:My21AM/A0
独習c++終わりそうなんだが次によむべき本とかある?
◆QZaw55cn4c (ワッチョイ 8a60-hn8E) [sage] 2018/03/10(土) 22:03:20.54:+Ww908Qw0

ttps://mevius.5ch.net/test/read.cgi/tech/1493844476/312
あと STL の教科書、これもC++11以前のもの
ttps://www.amazon.co.jp/dp/4881357786/
デフォルトの名無しさん (ワッチョイ 8af9-G5w4) [sage] 2018/03/10(土) 22:09:22.02:Tk41qGXE0
本ばかり読まず実践しよう
デフォルトの名無しさん (ワッチョイ da7e-uQtz) [sage] 2018/03/10(土) 22:09:43.95:lWictyCS0

cpprefjp
デフォルトの名無しさん (ワッチョイ 260e-hn8E) [sage] 2018/03/10(土) 22:28:49.18:tBgkA+tH0
プログラミング言語C++とかどうやろ
デフォルトの名無しさん (ワッチョイ fb93-Ni5c) [sage] 2018/03/10(土) 22:50:35.99:My21AM/A0
ありがとうございます
ひとまずの本にしてみます
デフォルトの名無しさん (ワッチョイ da7e-uQtz) [sage] 2018/03/11(日) 00:41:56.08:6KlfnVLZ0
そういえば最新版のEffective STLみたいな本って無いのか?
デフォルトの名無しさん (ワッチョイ 6a34-e70/) [sage] 2018/03/11(日) 00:53:03.16:Bd/2u4u/0
あると思うが訳者がへたくそで右辺値左辺値あたり意味ワカランかったぞ
デフォルトの名無しさん (ワッチョイ 6a34-e70/) [sage] 2018/03/11(日) 00:57:27.74:Bd/2u4u/0
その辺りの参考にするなら下手な日本語文献探るよりか英文そのまま読んだ方がいい希ガス
なんでもかんでも日本語訳してあるとほんと意味ワカランから
デフォルトの名無しさん (ワッチョイ 7323-Ik1A) [sage] 2018/03/11(日) 01:11:03.65:n48SUKtd0
cpprefjpのstd::min_elementとstd::max_elementの例文が間違ってるので誰か直してください。
自分はGitHubのアカウント持ってないので編集できません。

ttps://cpprefjp.github.io/reference/algorithm/min_element.html
ttps://cpprefjp.github.io/reference/algorithm/max_element.html

誤:return a > b;
正:return a < b;
デフォルトの名無しさん (ワッチョイ 0b9f-uQtz) [] 2018/03/11(日) 01:22:57.30:ry5KQfC80
unsigned int x;
char y[4];

.
.
.

x = ((y[0] & 0xff) << 24) | ((y[1] & 0xff) << 16) | ((y[2] & 0xff) << 8) | (y[3] & 0xff);
デフォルトの名無しさん (ワッチョイ 6a80-csLy) [sage] 2018/03/11(日) 01:34:50.04:P1lOCLpn0
Scott Meyers

Effective C++ 第3版 (ADDISON-WESLEY PROFESSIONAL COMPUTI)、2014
Effective Modern C++ ―C++11/14プログラムを進化させる42項目、2015

Effective C++ は、昔の本のリバイバルかな?
内容が新しいかどうかまでは、分からないけど
デフォルトの名無しさん (スップ Sd2a-A/UC) [sage] 2018/03/11(日) 08:34:37.66:XWEx9Mlwd
テンプレートを使ったメタプログラムの有用性が分からん。コンパイル時処理で定数の階乗を計算してるけど実行時に値を変えれないなら、答えをベタ書きすればいいだけでは?
デフォルトの名無しさん (アウアウカー Sa7b-7AdS) [sage] 2018/03/11(日) 08:43:14.65:zMqNV6vza
その値をベタ書きする手間をコンパイラにまかせることが出来るのが利点だと思うよ。
デフォルトの名無しさん (スップ Sd2a-A/UC) [sage] 2018/03/11(日) 08:48:18.87:XWEx9Mlwd
3の階乗を、tmpするより6とタイプした方が早いだろ
デフォルトの名無しさん (ワッチョイ da7e-uQtz) [sage] 2018/03/11(日) 09:03:15.99:6KlfnVLZ0

3ならいいけど10の階乗は?15の階乗は?21の階乗は?
それは整数型で表現できるか?
それは何桁になるのか?
適切な型をどうやって選ぶのか?
その値を静的な配列のサイズにしたいが数値を変えるたびに電卓で計算はしたくない
ならばfactorial<N>::valueと表現できれば便利ではないか
ということ
デフォルトの名無しさん (ワッチョイ fb7f-uQtz) [] 2018/03/11(日) 09:03:17.33:0BygLdlM0
その3という数値が別のファイルの特定の値に依存してる場合もあるし
デフォルトの名無しさん (ワッチョイ da7e-uQtz) [sage] 2018/03/11(日) 09:08:13.99:6KlfnVLZ0
意地悪するのはこの辺にしておいて
それはメタプログラミングでこいういうこともできるよ程度のものにすぎない
テンプレートメタプログラミングとはテンプレートを使ってソースコードを生成することだ
ソースコードを作るためのプログラミングだと思ってくれてかまわない
一般的な目的としてはジェネリックプログラミングを実現するために使われる
標準ライブラリではvectorからchoronoやtupleまでテンプレートメタプログラミングありきの設計になっている
デフォルトの名無しさん (アウアウカー Sa7b-7AdS) [sage] 2018/03/11(日) 09:08:56.54:zMqNV6vza
値が小さいうちはそうかもしれんが16の階乗とか値が大きくなってもベタ書きが良い?

ちなみにconstexprが使えるc++11以降の話と考えてOK?
デフォルトの名無しさん (ワッチョイ e6e7-frl3) [sage] 2018/03/11(日) 10:19:34.71:i1Cv6XBY0
階乗の例はいい例とは言えんな
TMPで操作したいのはメインは型の方だからな
値も出来るよって例が階乗なだけで
デフォルトの名無しさん (ワッチョイ 6ab3-3fsH) [sage] 2018/03/11(日) 10:40:47.13:z1FVyjSJ0

> ソースコードを作るためのプログラミングだと思ってくれてかまわない
そこまでやるならPL/Iみたいに%FOR %SELECTみたいな普通の制御構文で書ける方がいいわ
デフォルトの名無しさん (アウアウカー Sa7b-7AdS) [sage] 2018/03/11(日) 10:50:57.85:zMqNV6vza
そんな貴方にtemplate+constexpr(c++14以降)
デフォルトの名無しさん (ワッチョイ da7e-uQtz) [sage] 2018/03/11(日) 10:58:38.38:6KlfnVLZ0

頑張って古代人用のコンパイラ作ってくれ
デフォルトの名無しさん (ワッチョイ 6ab3-3fsH) [sage] 2018/03/11(日) 11:03:02.47:z1FVyjSJ0

お前アホだろ w
方向性がおかしいって話だぞ
デフォルトの名無しさん (ワッチョイ da7e-uQtz) [sage] 2018/03/11(日) 11:13:25.26:6KlfnVLZ0

現代の言語でジェネリクスをサポートするのは一般的
テンプレートをこねくり回して整数演算をするのはおかしいという意味なら、普通の構文で書けるconstexprが追加されたからそっちを使うように
デフォルトの名無しさん (ワッチョイ 4abd-RZSe) [sage] 2018/03/11(日) 11:58:27.43:TvwI/h8S0
テンプレートで再帰ができたらナア…('A`)
デフォルトの名無しさん (ワッチョイ 4abd-RZSe) [sage] 2018/03/11(日) 12:00:06.04:TvwI/h8S0
とわいいつつ、実はC++のテンプレートはチューリング完全になってしまっていた(らしい
ttps://cpplover.blogspot.jp/2013/10/blog-post_20.html
デフォルトの名無しさん (ドコグロ MM8a-3fsH) [sage] 2018/03/11(日) 12:05:49.26:93lmuZEGM

costexprで階乗書いてみてから言えよ
デフォルトの名無しさん (ワッチョイ e6e7-frl3) [sage] 2018/03/11(日) 16:36:05.55:i1Cv6XBY0
constexpr unsigned long long factorial(int n){
 unsigned long long r=1;
 for(int i=1;i<=n;++i){r*=i;}
 return r;
}

うん、簡単だね!
デフォルトの名無しさん (ワッチョイ 6a34-e70/) [sage] 2018/03/11(日) 16:41:07.00:Bd/2u4u/0
毎回毎回コンパイラが計算するのか
デフォルトの名無しさん (ワッチョイ 4acb-dpuX) [sage] 2018/03/11(日) 17:05:53.05:6zDmjp+70
たまにソースコードを見て、あ、この数字なんだっけって考えるよりも
10000回コンパイルさせるほうが早いと思うよ
デフォルトの名無しさん (ワッチョイ 7e32-uQtz) [sage] 2018/03/11(日) 17:18:40.81:Dtt3qpb50
マジックナンバーの本質
片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd8a-f9jl) [sage] 2018/03/11(日) 17:51:32.86:4ez4tjCrd

オーバーフローのチェックがないからやり直し。
デフォルトの名無しさん (ワッチョイ e6e7-frl3) [sage] 2018/03/11(日) 18:36:06.03:i1Cv6XBY0
はーい

constexpr unsigned long long unsafe_factorial(int n){
 unsigned long long r=1;
 for(int i=1;i<=n;++i){r*=i;}
 return r;
}

constexpr int min_factorialable(){
 for(int i=1;;++i){
  if(unsafe_factorial(i) > unsafe_factorial(i+1)){ return i; }
 }
}

constexpr unsigned long long factorial(int n){
 if (n < 0 || n > min_factorialable()) { return 0; }
 return unsafe_factorial(n);
}
デフォルトの名無しさん (ワッチョイ 2fe3-uQtz) [sage] 2018/03/11(日) 18:40:21.07:i3q5YI3y0
コンパイルエラーになるほうがいいなぁ
片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd8a-f9jl) [sage] 2018/03/11(日) 19:45:19.23:4ez4tjCrd
static_assert使え。
デフォルトの名無しさん (スップ Sd2a-A/UC) [sage] 2018/03/11(日) 20:16:22.23:XWEx9Mlwd

実行時計算で答え算出してそれを貼った方が楽じゃね?
デフォルトの名無しさん (ワッチョイ 8af9-G5w4) [sage] 2018/03/11(日) 21:15:39.44:ezoYy+fr0

それで事足りるケースならそれでいいよ
デフォルトの名無しさん (ワッチョイ fb7f-uQtz) [] 2018/03/11(日) 21:19:50.46:0BygLdlM0

なんでそんなめんどくさくてミスしそうな方法をチョイスするんだよ
デフォルトの名無しさん [] 2018/03/12(月) 01:21:50.18

計算&書き換え手順をマニュアル化して、何十種類の仕向け別にバージョンアップの度に人海戦術で計算&書き換え&コードレビュー&テストするんですね、わかります
デフォルトの名無しさん (ワッチョイ fb93-ao9L) [sage] 2018/03/12(月) 05:00:24.40:kBVT8YZa0
min_factorialable() は、階乗を正しく計算できる最大の値を返す
constexprな関数(コンパイル時にint定数に置き換えられることを期待)、
と読み取ったんだけど、なぜにmin_なの?
デフォルトの名無しさん [] 2018/03/12(月) 05:41:37.75
上限を求めるときに使うのはminだから、かな

知らんけど
デフォルトの名無しさん (ワッチョイ e6e7-frl3) [sage] 2018/03/12(月) 06:20:08.42:I9Is/5l40
最初min_nonfactorialableでnon取った時に直し忘れました
デフォルトの名無しさん (スッップ Sd8a-ted0) [sage] 2018/03/13(火) 09:59:46.06:CGjn2uNbd
一日の秒数を86400と書いてたらマジックナンバーやめろと言われたんだけど、
プログラムを少しでも書く人間にとってその数字は常識でいいよね?
60*60*24 と書いて「その60とか24は何だ?」と言われないでしょ?
それと同じレベルだと思ってるんだけど。
デフォルトの名無しさん (ワッチョイ ea12-OyD+) [sage] 2018/03/13(火) 10:10:13.70:oQx4WixC0
うるう秒でクラッシュするクソソフトウェアの出来あがり
ニュートン力学と天文学と暦学からやりなおした方がいい
デフォルトの名無しさん (スプッッ Sd2a-ymMl) [] 2018/03/13(火) 10:13:40.69:bAh/W6qqd

言われないとわからない奴は言ってもわからないだろうから
お前は一生マジックナンバー使いまくりでいいぞ
デフォルトの名無しさん (ワッチョイ da7e-uQtz) [sage] 2018/03/13(火) 10:38:37.74:pKedwP800
そろそろ標準に日付計算のライブラリ欲しいわ
デフォルトの名無しさん (ワッチョイ cb38-uQtz) [sage] 2018/03/13(火) 11:02:13.56:92t/zLSk0

欲しいね
chronoが中途半端でイラつく
デフォルトの名無しさん (スッップ Sd8a-ted0) [sage] 2018/03/13(火) 11:32:32.41:CGjn2uNbd

それだと 60*60*24 と書いても同じだよね。
うるう秒とかは関係ない定数管理してる場合の話ですよもちろん。
デフォルトの名無しさん (スッップ Sd8a-ted0) [sage] 2018/03/13(火) 11:37:27.38:CGjn2uNbd

86400がプログラマの常識的にマジックナンバーなのかどうか、って話ですよ
デフォルトの名無しさん (ワッチョイ 6a8a-aWcx) [sage] 2018/03/13(火) 11:45:44.57:cL/fN0Uj0
所で皆さんmakefileはどう編集してます
あまり触れていないようなので気になります
デフォルトの名無しさん (ワッチョイ cb38-rkOG) [] 2018/03/13(火) 11:45:51.13:92t/zLSk0
2147483647なら俺の常識だが
デフォルトの名無しさん (ワッチョイ 2a98-Nvj+) [sage] 2018/03/13(火) 11:47:54.17:Hyr8QuVd0

趣味では汎用のmakefile作ってそれを使い回してる
仕事ではautotools
デフォルトの名無しさん (ワッチョイ 260e-hn8E) [sage] 2018/03/13(火) 12:00:55.79:qHQADaBY0
他人と共有するコードならなるべく要素を分解して分かりやすく書いた方が好ましい
2の倍数も直接記述するのではなくシフト演算使った方が綺麗
デフォルトの名無しさん (ワッチョイ 6a23-6rgV) [sage] 2018/03/13(火) 12:18:10.82:23dHbGxb0
くくるんじゃなくて…

クラス宣言

int main()
{....}

あとは c++ スレで
デフォルトの名無しさん (ワッチョイ 6a23-6rgV) [sage] 2018/03/13(火) 12:18:34.80:23dHbGxb0
誤爆しました
デフォルトの名無しさん (スプッッ Sd43-8RCb) [sage] 2018/03/13(火) 12:51:25.09:YF2y/th/d
常識なんて集団が変われば変わる
そのコードを見せる事を想定した集団の常識かどうかを考えろ
デフォルトの名無しさん (ワッチョイ 6a8a-6CfZ) [sage] 2018/03/13(火) 14:10:31.07:cL/fN0Uj0
2進数8進数10進数16進数のみではないということ
60進数や24進数の話でしょ時計を語るときは必須の常識
デフォルトの名無しさん (ワッチョイ 6a8a-6CfZ) [sage] 2018/03/13(火) 14:26:54.36:cL/fN0Uj0
これをn進数って言うんだよ
デフォルトの名無しさん (スッップ Sd8a-ted0) [sage] 2018/03/13(火) 14:37:04.66:CGjn2uNbd
集団の常識ってことなら、'86400' をマジックナンバーと思ってる人間は少数派っぽいので、
文句はやんわりと無視する方向で行きますわ
デフォルトの名無しさん (ワッチョイ 260e-hn8E) [sage] 2018/03/13(火) 14:53:30.50:qHQADaBY0
というかマジックナンバー言われるのって数字の意味とか集団の常識とかじゃなく書式の問題だよね
計算式の中に定数ポン置きしてる書き方してる奴がチームにいたらそりゃマズいよ、変数とか定数に置き換えろって俺も言う
デフォルトの名無しさん (ワッチョイ 260e-hn8E) [sage] 2018/03/13(火) 14:59:18.81:qHQADaBY0
定数を定数に置き換えるってなんだよ
リテラルは定数なり変数なりにって感じで読み替えといて
デフォルトの名無しさん (スップ Sd8a-6rgV) [sage] 2018/03/13(火) 15:34:48.40:VrugGyEjd

しかしこうはしないだろ?

const int int8_bits = 8;
uint16_t word = (hi << int8_bits) | lo;

こうもしない
const int sec_per_min = 60;
int sec = m * sec_per_min + s;

数値リテラルで書くのが許容される数値というものがある
sec = day * 86400 はどうかというのが
個人的には知らない人でも暗算もせずに初見で合ってるかどうかわかるか、
を基本にすべきだと思う (小さな2の冪乗は除く。2の冪乗知らん奴はシネ)
デフォルトの名無しさん (ワッチョイ cb38-uQtz) [sage] 2018/03/13(火) 15:51:51.20:92t/zLSk0
uint16_t word = (hi << CHAR_BIT) | lo;
これCHAR_BIT != 8な環境を意識するんなら、16って書いてあるのも問題だね

const int micro_per_sec = 1000000;
int us = sec * micro_per_sec;
こう書けって言われたら俺はお断りする
デフォルトの名無しさん (ワンミングク MMda-GEnZ) [sage] 2018/03/13(火) 16:10:54.91:lXm9DcKjM
e = 2.71828;
p = 3.1415;
デフォルトの名無しさん (スップ Sd8a-6rgV) [sage] 2018/03/13(火) 16:11:31.80:VrugGyEjd

bit_per_char や shortでもintでもなく int8、uint16_t と明記したのは所与の仕様のつもり。

最近のapiはよくナノ秒返してくるから1000000000 倍
1000.0*1000*1000と分かち書きしたくなる
デフォルトの名無しさん (ワッチョイ 6a8a-6CfZ) [] 2018/03/13(火) 16:29:39.63:cL/fN0Uj0
時刻を自動的に合わせますというコマンドボタンを作って
押すだけで済むのに
デフォルトの名無しさん (ワッチョイ cb38-uQtz) [sage] 2018/03/13(火) 16:33:12.95:92t/zLSk0

それを言うなら1'000'000'000だろjk
デフォルトの名無しさん (スッップ Sd8a-klMS) [sage] 2018/03/13(火) 18:34:24.26:5mSkIm9zd
86400って書くと、ideで定義の参照も使えんし
86400で検索したときに
1日の秒数なのか、適当に決めたタイムアウトとかの秒数なのか、ただのIDなのか、連番で出てきただけの数値なのかとか、無意味な数列なのかまざってわからんくなるやろ
デフォルトの名無しさん (ワッチョイ be81-uQtz) [sage] 2018/03/13(火) 18:56:33.51:U9FOV+VD0
#define SEC_PER_DAY (60*60*24)

なんてやる人いないのかな
◆QZaw55cn4c (ワッチョイ 8a60-hn8E) [sage] 2018/03/13(火) 19:22:14.64:4gb3BCLn0

#define は基本使わない、int const ABC = 12345; なら時々使う
デフォルトの名無しさん (スップ Sd2a-fjrM) [sage] 2018/03/13(火) 19:52:43.56:0AXLQ0hnd
constexpr……
デフォルトの名無しさん (ワッチョイ e6e7-frl3) [sage] 2018/03/13(火) 20:19:53.55:My0TInc10
さっさとこう書けるようにしてくれ
今の<chrono>クソすぎんよ

int sec_par_day = static_cast<int>(std::chrono::second{std::chrono::day{{1}});
デフォルトの名無しさん (ワッチョイ da7e-uQtz) [sage] 2018/03/13(火) 20:25:30.79:pKedwP800
クソというか機能が圧倒的に足りてない
デフォルトの名無しさん (ドコグロ MM22-3fsH) [sage] 2018/03/13(火) 20:28:38.82:/ChP+Vc3M
86400とか1440でわかるけど
24*60*60とか24*60って書けばいいだけだと思う
デフォルトの名無しさん (ワッチョイ e6e7-frl3) [sage] 2018/03/13(火) 20:30:42.63:My0TInc10
21世紀も5分の1が過ぎようかっていうこの時代に
何が悲しゅうてたかが時刻を扱うだけでtime_pointの他にtmやらtime_tやらをガチャガチャさせられにゃならんのだよまったく
デフォルトの名無しさん (ブーイモ MM97-1XNJ) [sage] 2018/03/13(火) 22:01:42.63:vZM1ymmwM

お前が正解
他はバカ
デフォルトの名無しさん [] 2018/03/13(火) 22:08:40.50
86400って何のために使うんだろう

うるう日とかうるう秒とか考慮しなきゃ気持ち悪くね?
デフォルトの名無しさん (ワッチョイ be81-uQtz) [sage] 2018/03/13(火) 22:17:29.51:U9FOV+VD0
予め考慮しようがない
デフォルトの名無しさん (ワッチョイ da7e-uQtz) [sage] 2018/03/13(火) 22:22:44.39:pKedwP800
考慮する必要性があるものかどうかが分からないからなんとも
例えば時系列データをその時点から1日分の数を使うというものなら閏秒を考える必要がないし
デフォルトの名無しさん [] 2018/03/13(火) 22:28:43.21

1日に1秒満たないかもしれないだろ
デフォルトの名無しさん (ワッチョイ 6a7c-uQtz) [sage] 2018/03/13(火) 22:35:46.84:2iGA+O2n0
int t = 86400; // 24*60*60
これで解決
デフォルトの名無しさん (スップ Sd8a-bl9z) [sage] 2018/03/13(火) 23:06:58.39:+Yto8Znfd
閏秒の有無等で可変のものなら可変のものなりの書き方するでしょ
計算して変数に入れるとか

問題は不変の数値定数をどう正規化して書くか、正規化する必要はあるか。
24*60*60 派の人と 60*60*24 派の人が両方プロジェクト内にいたらなんか嫌だな
デフォルトの名無しさん (ワッチョイ be81-uQtz) [sage] 2018/03/13(火) 23:12:45.19:U9FOV+VD0
プロジェクトで誰かが決めたらそれに従うよ
派閥作るほどの問題じゃないでしょ
デフォルトの名無しさん (スップ Sd8a-bl9z) [sage] 2018/03/13(火) 23:17:41.96:+Yto8Znfd
絡むわけじゃないけど
決めたら従うのは当たり前で、それが「決める」ってことだろ。
派閥の話じゃなく混ざってたら気持ち悪いってことが言いたかったんだよ。
デフォルトの名無しさん (ワッチョイ da7e-uQtz) [sage] 2018/03/13(火) 23:20:55.63:pKedwP800
あっちこっちに書き散らすものじゃないから混ざってるとかあり得ない
1カ所になるまでリファクタリングしろ
デフォルトの名無しさん (ワッチョイ be81-uQtz) [sage] 2018/03/13(火) 23:44:10.62:U9FOV+VD0
気持ち悪いと思うかどうかは感性の問題だからなあ
例えばある日地球の回転速度が変わって1分が61秒になった
プログラムを修正しろと言われて、
場所によって書き方が違っていると大変だね
と言う話なら理解出来るけど
デフォルトの名無しさん (ワッチョイ da7e-uQtz) [sage] 2018/03/13(火) 23:51:40.27:pKedwP800
constexpr int min = 60;
constexpr int hour = min * 60;
constexpr int day = hour * 24;
デフォルトの名無しさん (ワッチョイ ea6e-uQtz) [sage] 2018/03/14(水) 06:39:53.70:4nqAllCK0
hoursは<chrono>にあるだろ
それとoperator""h
デフォルトの名無しさん (ワッチョイ ea6e-uQtz) [sage] 2018/03/14(水) 06:41:16.16:4nqAllCK0
operator""dayがねえんだよな<chrono>って
デフォルトの名無しさん (ワッチョイ da7e-uQtz) [sage] 2018/03/14(水) 07:36:00.34:eC4PF2tM0
chronoのhoursはstd::chrono::duration<int, std::ratio<3600>>のエイリアスなので
daysはこうすればよい
using days = std::chrono::duration<int, std::ratio<86400>>
デフォルトの名無しさん (ドコグロ MM22-3fsH) [sage] 2018/03/14(水) 08:15:03.73:ylQhqnt4M

> daysはこうすればよい
> using days = std::chrono::duration<int, std::ratio<86400>>
へ戻る w
デフォルトの名無しさん (ワッチョイ da7e-uQtz) [sage] 2018/03/14(水) 08:42:21.15:eC4PF2tM0
閏秒を考慮するのと1日を86400秒とするのは全く関係ないのに閏秒がどうとか言い出した奴が悪いのでは
丁寧に書くなら計算の根拠として60*60*24を見えるところに書いておけばいい
デフォルトの名無しさん (スッップ Sd8a-ted0) [sage] 2018/03/14(水) 09:17:22.64:MwJCRjiPd
知ってる知識を披露したかっただけだろうから罪は軽い
デフォルトの名無しさん [] 2018/03/14(水) 10:28:48.31

全く関係ないは言い過ぎ
デフォルトの名無しさん (ワッチョイ 5b8a-4l6a) [sage] 2018/03/14(水) 10:52:42.70:a7dBFlsI0
ほぼ関係ないな、難癖もいいとこ
実用上は全く関係ない
デフォルトの名無しさん (ワッチョイ 260e-hn8E) [sage] 2018/03/14(水) 11:03:01.46:2oR7xNCJ0
うるう秒がどうのこうのと言う、問題じゃなく86400秒をそこでしか使わないって根拠が無いんだよね
後でまたその数値が出てくるとしてその度に86400と書くのか、もしその数値を修正する事になったら全部書き直すのか、2回3回使うようになって始めて変数なり定数なりに入れるのか
それなら最初から式中に出てくる数値は変数に格納してから使えって統一した方が話が早い
デフォルトの名無しさん (スプッッ Sd2a-ymMl) [] 2018/03/14(水) 11:14:21.74:G0IAn/x5d
今時マジックナンバーとか昭和からタイムスリップしてきたのかよ
デフォルトの名無しさん (ワッチョイ 6a34-e70/) [sage] 2018/03/14(水) 11:43:33.36:xovkfTzX0
プログラムにおけるマジックナンバー(英: magic number、魔法の数字)とは、何らかの識別子もしくは定数として用いられる、プログラムのソースコード中に書かれた具体的な数値である。
そのプログラムを書いた時点では製作者は数値の意図を把握しているが、他のプログラマーまたは製作者本人がマジックナンバーの意図を忘れたときに閲覧すると「この数字の意味はわからないが、とにかくプログラムは正しく動く。
まるで魔法の数字だ」という皮肉を含む。
by Wikipedia
デフォルトの名無しさん (アウアウウー Sa1f-RjcS) [sage] 2018/03/14(水) 11:50:45.96:I+60yKfra
「1日の秒数」って定数を86400って書いて怒られたって話じゃないんだ?
デフォルトの名無しさん (ワッチョイ cb74-uQtz) [sage] 2018/03/14(水) 12:06:59.05:L/3+Hz1H0

じゃあオマエ、構造化もしてないのか?
昭和時代ほど耳にしなくなっても廃れたのではない話は結構あるぞ
デフォルトの名無しさん (スッップ Sd8a-ted0) [sage] 2018/03/14(水) 13:01:38.98:MwJCRjiPd

怒られたという程じゃなくて、
 一日の秒数 = 86400;
と書いたら「マジックナンバーやめろ」と言われたってことさ
デフォルトの名無しさん (ワッチョイ da7e-uQtz) [sage] 2018/03/14(水) 13:18:59.19:eC4PF2tM0
わかりきった定数はマジックナンバーではない
デフォルトの名無しさん (スッップ Sd8a-klMS) [sage] 2018/03/14(水) 14:08:58.84:IrrOEbi1d

それをヘッダに移動させるだけやん
デフォルトの名無しさん (スッップ Sd8a-ted0) [sage] 2018/03/14(水) 14:14:27.78:MwJCRjiPd

そうじゃなくて
60*60*24 て書いて欲しいんだってさー
デフォルトの名無しさん (ワッチョイ 260e-hn8E) [sage] 2018/03/14(水) 14:16:09.81:2oR7xNCJ0

まぁ可読性高くて損する事は無いし、なるべく要素は分解して書いた方がいいんじゃないの
何かどうしても86400じゃなきゃ困る理由とかあるなら話は別だろうけど、無いだろ?
デフォルトの名無しさん (スッップ Sd8a-klMS) [sage] 2018/03/14(水) 14:34:38.65:IrrOEbi1d

クソどうでもいいな
デフォルトの名無しさん (ラクッペ MM43-1XNJ) [sage] 2018/03/14(水) 15:05:38.89:hFOwW8jGM
ITのエンジニアって
こういうくだらないことで
給料貰ってるんだろうなあ
デフォルトの名無しさん (ワッチョイ 6a34-e70/) [sage] 2018/03/14(水) 15:18:02.33:xovkfTzX0
こういうクソみたいなことでもウンチク垂れてテコ入れしろと提案することにより仕事してます感かもし出す為だろうな
デフォルトの名無しさん (ワッチョイ cb74-uQtz) [sage] 2018/03/14(水) 15:45:56.81:L/3+Hz1H0

結果のわからない投機的な模索をしているときは
逆にマジックナンバー地獄なコードだよ
他人に渡すコードを清書するときの書き方・考え方とは真逆
デフォルトの名無しさん (ワッチョイ fb7f-uQtz) [] 2018/03/14(水) 16:27:34.05:9D6+Eo6Z0
俺がわかるからみんなわかるだろうというコードはすげー困るな
例えその場の全員がわかったとしても今後わからない奴が出てきた時の事を考えて
できうるかぎりわかりやすいコードを書くべきだな
デフォルトの名無しさん (ワッチョイ cb74-uQtz) [sage] 2018/03/14(水) 17:02:40.84:L/3+Hz1H0
そのためのコストにもよる
空想論じみた「わかりやすさ」にまで付き合ってらんないこともある
特に最低限のプロとしてのスキルを欠く者を想定することはしない

ちょっと飛躍するがプログラム言語だってそうなっている
マシンの性能を使いやすさに振るということを無限にはやらない
どのくらいのアホまで付き合ってやるのか性能とのトレードオフで
色んなバランスで棲み分けになっている
デフォルトの名無しさん (ワッチョイ 260e-hn8E) [sage] 2018/03/14(水) 17:03:50.56:2oR7xNCJ0
まぁ別に自分だけが使う分にはいくら分かりづらく書いてくれても構わんけどな
デフォルトの名無しさん (ワッチョイ fb7f-uQtz) [] 2018/03/14(水) 17:11:14.36:9D6+Eo6Z0
86400を60*60*24と書くことにはなんのコストも支払ってないから書けばいいな
いちいち話を飛躍させる奴はなんなんだ
デフォルトの名無しさん (アウアウウー Sa1f-RjcS) [sage] 2018/03/14(水) 17:20:37.67:I+60yKfra
人によってはみたいにしろって言うだろうし
結局は人それぞれってことじゃないの

16を2*2*2*2っていちいち書く人はいないでしょ
まぁ1<<4って書けと言われるかもしれんが
デフォルトの名無しさん (ワッチョイ fb93-ao9L) [sage] 2018/03/14(水) 17:21:05.80:jowRUKsS0
学校の試験問題で一日の秒数としてソースに86400を書いたら
マジックナンバーだからと減点された、納得いかない。
みたいな発端じゃないのかなぁ。
デフォルトの名無しさん (ワッチョイ cb74-uQtz) [sage] 2018/03/14(水) 17:22:38.07:L/3+Hz1H0
それをfindとsedでやる勇気あるか?

たとえば俺なんかは1箇所ずつよく見て有機的に判断しないと怖いし
それの残業代は貰えるのか心配だ
デフォルトの名無しさん (ワッチョイ fb7f-uQtz) [] 2018/03/14(水) 17:51:03.64:9D6+Eo6Z0
当然その程度のリファクタリングはするべきだしそもそもマジックナンバーをどうにかするべきだし
お前の残業代とかいう飛躍した話はどうでもいい
デフォルトの名無しさん (ワッチョイ cb74-uQtz) [sage] 2018/03/14(水) 18:19:55.18:L/3+Hz1H0
飛躍じゃねえ実話だよ

ずいぶん昔、社内BBSでそれ系のことを言い出したやつが
偉い人から突っ込まれてた
デフォルトの名無しさん (スッップ Sd8a-ted0) [sage] 2018/03/14(水) 18:35:58.25:MwJCRjiPd
プロとか言い出してる人がいるけど、それこそ飛躍では?
デフォルトの名無しさん (ワッチョイ be81-uQtz) [sage] 2018/03/14(水) 18:40:08.58:y6ADsCAy0
プログラムの話題から外れてきていると思いませんか?
デフォルトの名無しさん (ドコグロ MM22-3fsH) [sage] 2018/03/14(水) 18:48:14.13:uMO7yRavM

だからわかりきってるかどうかは人によって違うって話
プログラムの前に日本語の勉強しろよ w
デフォルトの名無しさん (ワッチョイ 260e-hn8E) [sage] 2018/03/14(水) 18:48:33.76:2oR7xNCJ0
まぁコスト次第で可読性を犠牲にするケースもあるだろうけど
この場合はメモリ食う訳でも処理遅くなる訳でもソースの構造が変わる訳でもない
86400でも十分分かりやすいかも知れんが60*60*24なら更に分かりやすくなる

どっちが良いかなんて議論の余地無いよね
デフォルトの名無しさん (ワッチョイ cb74-uQtz) [sage] 2018/03/14(水) 18:50:15.11:L/3+Hz1H0

別にプロでなくてもいいんだけどさ
おまえさんなりに、同じプロジェクトにいて欲しくない足手まといが
どのくらいから下というのはあるだろ
デフォルトの名無しさん (ドコグロ MM22-3fsH) [sage] 2018/03/14(水) 18:54:56.26:uMO7yRavM

> 16を2*2*2*2っていちいち書く人はいないでしょ
> まぁ1<<4って書けと言われるかもしれんが
状況次第だろ
場合分けの条件が4個あって各々2状態をとるとかなら2*2*2*2って書くかもしれない
下から4ビット目のマスクが欲しいなら1<<4って書くこともある
デフォルトの名無しさん (ワッチョイ 260e-hn8E) [sage] 2018/03/14(水) 18:58:33.90:2oR7xNCJ0

ビットフィールド使えば?
デフォルトの名無しさん (ワッチョイ cb74-uQtz) [sage] 2018/03/14(水) 19:09:24.20:L/3+Hz1H0
シフト使うな、ビットフィールドで書け
なんて言われると、俺は相手にもよるが逆らいそう
デフォルトの名無しさん (ドコグロ MM22-3fsH) [sage] 2018/03/14(水) 19:37:46.29:uMO7yRavM

ビットフィールドは割り付け順序が処理系定義だったりしたからあまり使ったことがない
デフォルトの名無しさん (ブーイモ MMd6-dpuX) [sage] 2018/03/14(水) 21:26:40.49:kWAHqA+uM
たまには2進リテラルちゃんのことも思い出してあげてください
デフォルトの名無しさん (ワッチョイ c193-y/L7) [sage] 2018/03/15(木) 06:36:14.64:F+InEeO+0
議論の本筋(1日の秒数として即値で86400と書くことの是非)とはさらに離れるけど、
ビットシフトを使う定数は常にカッコで囲んでくれ。

res = a + 1<<4 + b;
res = a +(1<<4)+ b;
デフォルトの名無しさん [] 2018/03/15(木) 07:15:43.22

3つ以上の項があると静的解析ツールで怒られるから
res = (a +(1<<4))+ b;
と書く
デフォルトの名無しさん (ワッチョイ dfe3-MOYc) [sage] 2018/03/15(木) 08:58:15.76:x1WHRaDf0

下のつもりで上書いたらただのバグじゃん
デフォルトの名無しさん (ワッチョイ a3dd-hKdO) [sage] 2018/03/15(木) 09:19:10.68:3Ym40JOm0
算術と混用するときは結合順位に注意せよ、というだけのことを
いちいち必ずだ!ルールだ!と金切り声で吠えついてくるやつはウザい
デフォルトの名無しさん (ブーイモ MM61-R9c4) [sage] 2018/03/15(木) 09:55:31.41:LkpAylTJM

可読性悪くしてかえって品質低下招きそうな指摘だな
デフォルトの名無しさん (ワッチョイ 87cc-SCBH) [sage] 2018/03/15(木) 13:29:47.33:O2sRH7tT0
vectorをつなげる際、copyが良いとか、insertを使えとか色々書いてあるのですが、どれが良いのでしょうか?
デフォルトの名無しさん (ワッチョイ af7e-hKdO) [sage] 2018/03/15(木) 13:54:37.80:XNo6/02A0
あらかじめ領域を広げておく必要があるけどinsertの方がチェックが入らない分速い
デフォルトの名無しさん (ワッチョイ 7b34-HLM0) [sage] 2018/03/15(木) 15:23:48.90:9f/t5+6G0
reserveしてinsertだな
デフォルトの名無しさん (アウアウウー Sa9d-mp3k) [sage] 2018/03/15(木) 15:36:42.69:q9z+dA6Ga
insertの直前にreserveって意味あるのか?
デフォルトの名無しさん (ワッチョイ af7e-hKdO) [sage] 2018/03/15(木) 16:32:16.09:XNo6/02A0
reserveは終端のポインタが更新されないからresizeじゃないとだめ
デフォルトの名無しさん (ワッチョイ 7b34-HLM0) [sage] 2018/03/15(木) 16:57:46.96:R5/WYUtW0
reserveしてback_inserterでcopy
デフォルトの名無しさん (ワッチョイ 7bcb-R9c4) [sage] 2018/03/15(木) 17:05:27.14:QEAEy0DH0

insertはサイズチェックしてるでしょ。

iteratorを2つ受け取るタイプのinsertなら意味あるんじゃね?

resizeは不味いだろ。
デフォルトの名無しさん (ワッチョイ 7bcb-R9c4) [sage] 2018/03/15(木) 17:09:09.32:QEAEy0DH0

アンカしくった。
サイズチェックの指摘は向け
デフォルトの名無しさん (ワッチョイ af7e-hKdO) [sage] 2018/03/15(木) 17:21:30.23:XNo6/02A0
ごめんinsertとcopy逆だった
デフォルトの名無しさん (アウアウウー Sa9d-mp3k) [sage] 2018/03/15(木) 17:28:15.72:q9z+dA6Ga

insertの中で追加数数えてreserveと同じことしてるでしょ
まさかループで一個ずつ挿入なんて実装はあるまい
デフォルトの名無しさん (ワッチョイ 7bcb-R9c4) [sage] 2018/03/15(木) 19:10:49.64:QEAEy0DH0

失礼。挿入位置のiteratorもあるから、3つ受け取るタイプの誤り。
デフォルトの名無しさん (アウアウウー Saaf-0FUd) [] 2018/03/15(木) 22:07:51.82:dQGk6ayHa
cpprefjpの任意の式によるSFINAEの頁でdecltype(a + b, bool())と記載されているコードがあるんだけれど、
このa+b, bool()はラムダ式?

該当頁
ttps://cpprefjp.github.io/lang/cpp11/range_based_for.html
デフォルトの名無しさん (アウアウウー Saaf-0FUd) [] 2018/03/15(木) 22:09:23.09:dQGk6ayHa
アドレス間違えた
ttps://cpprefjp.github.io/lang/cpp11/sfinae_expressions.html
デフォルトの名無しさん (ワッチョイ a3dd-hKdO) [sage] 2018/03/15(木) 22:15:55.91:3Ym40JOm0
ラムダ式が[で始まらないことってあるのか?
デフォルトの名無しさん (ワッチョイ 9beb-85/6) [sage] 2018/03/15(木) 22:41:44.53:ubsUN4Yb0

カンマ演算子とdecltypeでコンパイル時に評価される
decltypeの中身を左から順に評価し、結果は一番右の型が帰る
この場合はa+bの型が評価出来ればbool、できなければSFINAE
デフォルトの名無しさん (ワッチョイ af7e-hKdO) [sage] 2018/03/15(木) 22:41:47.80:XNo6/02A0

>a + b
a + bが可能かどうか調べる

>,
次の式を評価する

>bool()
bool型の初期値を返す

つまりdecltype(a + b, bool())はa + bでSFINAEをしつつカンマ演算子でdecltypeにbool型の値を与えて返り値の型をbool型にしている
デフォルトの名無しさん (アウアウウー Saaf-0FUd) [] 2018/03/15(木) 22:57:18.20:dQGk6ayHa
decltypeで,も使えたんですね。一番右の型が帰るということはdecltype(a+b,a-b,a*b,a/b,bool())とかしてもよさそう。。。

自分ではその機能を説明してるページを見つけれませんでした。
ありがとうございます。
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 3b6f-hKdO) [sage] 2018/03/15(木) 23:50:51.42:VBbQqJBt0

それで良いのか。 いいこと知った。
いちいち enable_if をしとったわ。
デフォルトの名無しさん (スップ Sddb-dtcO) [sage] 2018/03/16(金) 07:54:12.89:UGENGinrd
decltypeって実行時の型を得れる?
デフォルトの名無しさん (アウアウウー Sa9d-mp3k) [sage] 2018/03/16(金) 09:23:42.20:Qbg0TjKpa

a.reserve(a.size()+b.size());
a.insert(a.end(),b.begin(),b.end());
こんな感じのことをやるのかと思ったんだけど、これ意味ないでしょ?
デフォルトの名無しさん (スッップ Sd2f-JcB1) [sage] 2018/03/16(金) 10:04:08.28:SYp9l/ZId

declとはdeclareの略であることを考えると
デフォルトの名無しさん (ワッチョイ 7b34-HLM0) [sage] 2018/03/16(金) 10:17:31.56:g2YO+i2m0
a.reserve(a.size()+b.size());
copy(b.begin(),b.end(),back_inserter(a));
デフォルトの名無しさん (ブーイモ MM3f-R9c4) [sage] 2018/03/16(金) 15:36:10.69:0r9PteXTM

random iteratorの場合の特殊化実装がありました。ごめんなさい
デフォルトの名無しさん (ササクッテロレ Sp6f-N9vq) [sage] 2018/03/16(金) 18:08:23.55:Al45BtF0p

decltype comma trickでググれ
デフォルトの名無しさん (ワッチョイ f3e7-dVgQ) [sage] 2018/03/16(金) 20:56:30.80:DBylbaSH0
まあoperator,()が定義されてるとまずいんだけどな
デフォルトの名無しさん (アウアウアー Sa83-2N1f) [] 2018/03/19(月) 18:07:03.75:/U1oheuNa
インスタンスにdeleteかけたとき、メンバ変数が破壊されるのとデストラクタが実行されるのはどっちが先?
今書いてるコードがデストラクタでメンバ変数アクセスすると落ちることがあるから、破壊されるのが先なんだろうか?
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 3b6f-hKdO) [sage] 2018/03/19(月) 18:15:15.06:RG1qd9Pc0

原則としては構築の逆順って覚えておくと間違えない。
◆QZaw55cn4c (ワッチョイ 9360-MOYc) [sage] 2018/03/19(月) 18:33:44.24:lFWK67Qs0

delete this; とかしてませんか、これは基本的に避けたほうがいい
片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdd7-5vKF) [sage] 2018/03/19(月) 18:43:06.07:SpFx62hRd
に同意。確保と破棄は生ポインタを触らずに自動化した方がいい。スマートポインタとかコンテナとか。
二回deleteを避けるためにポインタにNULLを代入する技もある。
デフォルトの名無しさん (アウアウウー Saaf-0FUd) [] 2018/03/19(月) 21:03:24.06:kCg91IvDa
そろそろNULLは駆逐してnullptrに移行させたい
デフォルトの名無しさん (ワッチョイ 53bd-mA8b) [sage] 2018/03/19(月) 22:46:40.23:jnDGFLZz0
>今書いてるコードがデストラクタでメンバ変数アクセスすると落ちることがある
へ〜んなの
ていうかメモリを壊しているかすでにdeleteされた死骸を再deleteしてるとしか、

>二回deleteを避けるためにポインタにNULLを代入
OpenCVのC言語インターフェースのやつ、
デフォルトの名無しさん (ワッチョイ c193-7BQk) [sage] 2018/03/19(月) 22:57:33.17:cmSuhSLP0
C++勉強中の者です。
ttp://codepad.org/C8t9k4fD
ソース自体をプログラムに読み込ませると
#includ
で止まってしまいます。
Cのfgets()のようには使えないのでしょうか。
デフォルトの名無しさん [] 2018/03/19(月) 23:06:01.35

According to the C++ reference
ttp://en.cppreference.com/w/cpp/io/basic_istream/getline
getline sets the ios::fail when count-1 characters have been extracted.
You would have to call filein.clear(); in between the getline() calls.
デフォルトの名無しさん (ワッチョイ c193-+EIL) [sage] 2018/03/19(月) 23:26:45.72:cmSuhSLP0

区切り文字を読まないとfail状態になってそれ以降は失敗し続けるので止まってしまうということですかね
デフォルトの名無しさん (ワッチョイ 53bd-mA8b) [sage] 2018/03/19(月) 23:27:24.60:jnDGFLZz0
std::getline()は読み込んだ文字列に改行文字を含めないから
行末まできちんと読んだのか
文字数カウントのせいで読み込みが行の途中でぶちきれたのか
直ちにはわからないといいうアホウな仕様
判別には結局std::basic_istream<T>::unget()の助けが要る

C++標準ライブラリのうちストリーム関連だけは腐っているからC言語のを使いなしゃれ

※ 個人の感想です
デフォルトの名無しさん (ワッチョイ 53bd-mA8b) [sage] 2018/03/19(月) 23:28:25.97:jnDGFLZz0
訂正
△: C++標準ライブラリのうちストリーム関連だけは腐っているからC言語のを使いなしゃれ
◎: C++標準ライブラリのうちストリーム関連だけは本当に腐っているからC言語のを使いなしゃれ
デフォルトの名無しさん (ワッチョイ f3e7-dVgQ) [sage] 2018/03/20(火) 01:02:22.15:mI6/gPTY0
入出力はCもC++もクソまみれだからなぁ
ちょっとコンソール出力を整形しようとして、あの肥溜めのクソくだらない落とし穴地獄にいちいち付き合わされた結果
プログラミングそのものが嫌いになる人達が山のようにいるのが本当に残念だ
デフォルトの名無しさん (ワッチョイ e19f-M10G) [] 2018/03/20(火) 01:12:22.56:PXcTmg8I0
いるか?
デフォルトの名無しさん (ワッチョイ f3e7-dVgQ) [sage] 2018/03/20(火) 01:20:34.94:mI6/gPTY0
自分が知ってる昔はいっぱいいたけど
最近だとスクリプト言語から先に入るから減ってるのかね?
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 3b6f-hKdO) [sage] 2018/03/20(火) 01:21:52.68:N1yoGURK0
オブジェクトの外部表現を型ごとに定義できる iostream は悪くない設計だと思うんだけどなぁ。
デフォルトの名無しさん (ワッチョイ 7bcb-R9c4) [sage] 2018/03/20(火) 01:41:51.26:PjVFN34O0
ローカライズに向いてない。
打鍵数が倍増どころじゃない。

モダン言語はみなprintfライクだしねー
デフォルトの名無しさん (ワッチョイ e19f-hKdO) [sage] 2018/03/20(火) 02:48:01.36:PXcTmg8I0
printf()は便利ではあるが桁を揃えて出す時に面倒になることもある。
特にこの頃は UTF-8 で漢字混ざりだと文字幅とバイト数または文字数が一致しない。
そもそもそんなものの一致をあてにすること自体が間違いかも知れないが、Unicode
には一応 HALF WIDTH, FULL WIDTH 等があるんだから何とかしてこれを生かした
フォーマッタが欲しいところではある。
デフォルトの名無しさん (アウーイモ MMb3-2N1f) [] 2018/03/20(火) 06:49:53.60:eswqOupsM


あるクラスがあって、その中でスレッド立ててるの
それでクラスのデストラクタが呼ばれたら、メンバ変数のスレッドポインタをつかってスレッドcancel->joinってやろうとしてて
それでjoin呼ぶあたりで落ちるんだよね

作られた逆順ってことはデストラクタのほうが先に実行かな?それだとメンバ変数はいきてるよね
デフォルトの名無しさん (ワッチョイ af7e-hKdO) [sage] 2018/03/20(火) 06:55:01.02:83N3dpVy0
streamはコンソールの入出力のためだけにあるわけじゃないから
デフォルトの名無しさん (ワッチョイ 1ff3-hKdO) [sage] 2018/03/20(火) 06:55:05.50:Wsijl5j90
つーてもcoutだってsetw/setfillはあんまり使いやすくないしなあ
operator<<をユーザー定義できるのはありがたいけどね
デフォルトの名無しさん (ワッチョイ a723-tAvx) [sage] 2018/03/20(火) 13:10:27.33:geezFnQ40

デストラクタの実行中はそのクラスとその派生元クラスのメンバ変数はまだ使える
必ず落ちるならデバッガでバックトレース見てみたら?
デフォルトの名無しさん (ワッチョイ f3e7-dVgQ) [sage] 2018/03/20(火) 19:32:56.49:mI6/gPTY0
別の原因に見える
まずデストラクタじゃなくて普通のメンバ関数で明示的に呼んで止めた時に大丈夫か確認してはどうか
デフォルトの名無しさん (スップ Sd03-tAvx) [sage] 2018/03/20(火) 19:45:17.42:KQMGt9+Dd
pthread_cancel はいろんなことがよく分かっている人しか使ってはいけない
デフォルトの名無しさん (ワッチョイ 53bd-mA8b) [sage] 2018/03/20(火) 22:33:41.91:f35CyiEk0

「<<」と「>>」の2種類しか用意できんやんけ
それらを表示と入力に割り当ててしまえば結局シリアライズのための固有なメソッドなりインターフェースなりを別途作らねばならんぬ、
そもそもの構想からして頓挫してゐる、
頓挫してゐるのだ…!
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 3b6f-hKdO) [sage] 2018/03/20(火) 23:55:08.06:N1yoGURK0

表示用とシリアライズ用はストリームの性質で切り替える筋合いのものだろ?
シリアライズ用のストリーム型を用意してオーバーロードすればいいんじゃね。
デフォルトの名無しさん (ワッチョイ 53bd-mA8b) [sage] 2018/03/21(水) 00:33:52.80:7c9Ne47J0
ちょっなんで数億年の生物史史上はじめて
ようやっとSTDINとSTDOUTとSTDERRの3種類に世界が抽象化されたストリームという概念|を
細分化するという元の木阿弥にしますか;;

藻前は
  some_command | tee result.txt > some_file.bin
とかいったパイプやリダイレクトを表示専用とかシリアライズ専用とかに分けたいのかっていうか、
デフォルトの名無しさん (ワッチョイ e17f-hKdO) [] 2018/03/21(水) 00:44:24.33:p0rFESlF0
なに藻前って
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 3b6f-hKdO) [sage] 2018/03/21(水) 01:10:44.31:MouF+uE40

お前は何を言ってるんだ。
ここで言ってるストリームは C++ 用語のストリームだぞ。
「ストリーム『型』」ってわざわざ書いてるんだからわかれよ。
下位レイヤでは好きなところに繋げればいい。
デフォルトの名無しさん (ワッチョイ af7e-hKdO) [sage] 2018/03/21(水) 01:18:27.48:9NBOfW2C0
streamとstreambufの違いを理解しよう
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 3b6f-hKdO) [sage] 2018/03/21(水) 01:24:40.58:MouF+uE40
要するに std::basic_ostream を継承した何かを作ればいいんだ。
デフォルトの名無しさん (ワッチョイ b180-lboF) [] 2018/03/21(水) 06:52:22.30:fTbDiwfs0
ストリームはもう捨てたほうが良いぞ。
おじさんからの警告だ。
デフォルトの名無しさん (ワッチョイ 7b34-HLM0) [sage] 2018/03/21(水) 07:14:12.04:2n7LolrI0
便利そうに見えて便利に使えない
それがstream
デフォルトの名無しさん (ワッチョイ ebb6-CZ08) [] 2018/03/21(水) 07:18:35.01:zecIlzA/0
「29歳既婚、2年前に会社を辞めた。ボードゲーム作りを始めて3700万円を
売り上げたけど何か聞きたいことはある?」回答いろいろ
ttp://labaq.com/archives/51880196.html
日本ボードゲーム界の異端児に聞く!ボードゲームデザイナーとして生きていくには?
ttps://bodoge.hoobby.net/columns/00013
はじめてボードゲームを作ってはじめてゲームマーケットに出店した ので、ひとり反省会をしてみる。
ttp://datecocco.hatenablog.com/entry/2015/11/26/000000
はじめて作ったボードゲームを売った話
ttp://nrmgoraku.hateblo.jp/entry/2017/05/17/210000
ボードゲームイベント「ゲームマーケット」から業界が見えた!
ttps://entertainmentstation.jp/61107
ゲームマーケットに挑む人向けガイド
ttp://spa-game.com/?p=4830
ボードゲームはどう作るのか、自分なりに考えた
ttp://roy.hatenablog.com/entry/2014/07/09/124824
オトナも遊べるボードゲーム!自作するといくらになるのか
ttp://www.d-laboweb.jp/special/sp312/
ボードゲームの展示イベント「ゲームマーケット」の成長記録からこれからの
市場に必要なことを妄想してみた。6年間の来場者数推移(2016年4月時点調べ)
ttps://bodoge.hoobby.net/columns/00001
ボードゲーム市場がクラウドファンディングの出現で急成長を遂げ市場規模を拡大中
ttp://gigazine.net/news/20150820-board-game-crowdfunding/
デフォルトの名無しさん (ワッチョイ 1ff3-hKdO) [sage] 2018/03/21(水) 10:36:30.48:DQv7yGEy0

カンブリア紀からオルドビス紀にかけて行われた抽象化は
今でいうインターフェイスの考え方で、当たり前だが
インターフェイスを継承する実装クラスは無数にあってよい
そういうのは元の木阿弥とは言わないぞ
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 3b6f-hKdO) [sage] 2018/03/21(水) 15:09:48.71:MouF+uE40

さっき で説明した C++ の話題を置くとしても、
(まあ C++ スレで C++ の話題を置いちゃうのはどうかと思うが)
標準入力、標準出力、標準エラー出力のみっつしかないってことはない。

エラー出力をリダイレクトするときに 2> って書くの、どういう意味だと思ってる?
2 はファイルディスクリプタな。
デフォでオープンされてるのが 0, 1, 2 ってだけで、やりたければ 3 でも 4 でも使っていい。
◆QZaw55cn4c (ワッチョイ 9360-MOYc) [sage] 2018/03/21(水) 15:42:02.21:ZGJmhAHm0

空いているディスクリプタが使用されるとしても、自分で特定の数字を指定してディスクリプタにすることはできなかったんじゃなかったかな?
◆QZaw55cn4c (ワッチョイ 9360-MOYc) [sage] 2018/03/21(水) 15:50:19.07:ZGJmhAHm0

失礼、dup2() というのがあったね…
デフォルトの名無しさん (ワッチョイ af7e-hKdO) [sage] 2018/03/21(水) 15:58:29.69:9NBOfW2C0
coutがSTDOUTにつながってるだけでここは何につなげてもいいということ
streambufの中身はただの配列でもいいし、アプリケーションのロガーでもいいし、循環バッファでもいいし、通信のポートでもいい
デフォルトの名無しさん (ワッチョイ a723-tAvx) [sage] 2018/03/21(水) 19:28:41.53:TV3lE0eZ0
シリアライズするときはバイナリ表現にしたいし
ログするときは文字列表記にしたいし
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 3b6f-hKdO) [sage] 2018/03/21(水) 20:00:34.84:MouF+uE40

だからそれはストリームオブジェクトの型で切り替えろって言ってるんだろうが
デフォルトの名無しさん (スプッッ Sd13-tAvx) [sage] 2018/03/21(水) 20:30:34.07:VVSY5O5Ed
それを嫌だって言ってんだよ
バイナリの読み書きは write() だの read() で十分
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 3b6f-hKdO) [sage] 2018/03/21(水) 20:33:11.12:MouF+uE40
read なり write なりを「使う」のは別にいいよ。
それを C++ 上でどのように抽象化すればいいかって話なんだから。
そういうレイヤの違う話を混ぜ込んでくるなよ。
デフォルトの名無しさん (スップ Sd03-tAvx) [sage] 2018/03/21(水) 20:43:51.09:KgSvodNyd
そこで新しい型を設けてまで << を使う意味がない
cout にバイナリでシリアライズするときはどうすんの?
size_t serialize(const T& t, ostream& os)
とかを各型用に書く方がマシ
デフォルトの名無しさん (スップ Sd03-tAvx) [sage] 2018/03/21(水) 20:47:43.15:KgSvodNyd
バイナリでシリアライズするに際して
別の型のストリームオブジェクトを作ってまで
<< だの dec だの endl を使えるようにすることの利点を説明して欲しい
デフォルトの名無しさん (ワッチョイ af7e-hKdO) [sage] 2018/03/21(水) 21:36:05.23:9NBOfW2C0
例外を除いて
operator<<()は書式化出力
write()は非書式化出力
なのでバイナリを出力するときはwrite()を使うべき

>size_t serialize(const T& t, ostream& os)
シリアライズのような複雑な操作をするときはこれは悪い選択じゃない
というかstreamそのものを放り込むのはたまに見かける
デフォルトの名無しさん (ブーイモ MM61-/CVT) [sage] 2018/03/21(水) 22:02:23.07:52xrh1HkM
えっブロックデバイスにもStreamを
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 3b6f-hKdO) [sage] 2018/03/21(水) 22:15:54.63:MouF+uE40

書式化 (formatted) ってのと、結果がバイナリかというのは直行する概念だよ。
シリアライズってのはオブジェクトのバイト列をそのまま出力することじゃなくて、
バイナリ形式の特定のフォーマットにして出力することだろ。
それは書式化って言うんだよ。
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 3b6f-hKdO) [sage] 2018/03/21(水) 22:26:24.75:MouF+uE40

マニピュレータを使える意味はないかもな。
使えないように定義することも出来るし、意味がないなら使えないようにしておくべき。

ここでは抽象化の話をしているんだ。
出力先が人向けのテキスト表現であるか機械向けのシリアライズ表現であるかによって
書き方を変えなきゃならない、相手を意識しなきゃならないというよりは、
相手によって自動で切り替わって欲しいってことなんだよ。

意識しなくていいデザインってのは意識しにくくなるってことと表裏一体だから、
見えなくなるのが気にくわないってのならわかる。
デフォルトの名無しさん (ワッチョイ 23f9-y9O9) [sage] 2018/03/21(水) 22:26:32.59:OwhHF7Zm0
直交
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 3b6f-hKdO) [sage] 2018/03/21(水) 22:29:29.81:MouF+uE40

スマソ。 の直行は直交の書き間違いやね。
デフォルトの名無しさん (ワッチョイ 2b50-bRBW) [sage] 2018/03/21(水) 23:13:33.75:NRxI71LE0
無意味な処理が嫌だとか言っておきながら
ここでは無駄の塊みたいな方法を勧める
アホですね
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 3b6f-hKdO) [sage] 2018/03/21(水) 23:50:04.75:MouF+uE40

俺は一貫して抽象化の話をしてるつもりなんだが。
プログラマの意図を表現できる書き方をすべきって話をしてんの。
無意味な処理をしろと書いてあるのをプログラマの意図として読み取っていいのか?
そうじゃないだろう。

C++ がせっかく用意しているライブラリを活用するのが無駄なのか?
そうじゃないだろう。
デフォルトの名無しさん (ワッチョイ 5b80-AyCB) [] 2018/03/22(木) 07:21:49.59:tiDItZ1f0
ハッキリ言ってストリームは蛇足だったわ。
廃止したほうが良いわ。
デフォルトの名無しさん (ワッチョイ 5b80-AyCB) [] 2018/03/22(木) 07:25:52.15:tiDItZ1f0
Boostもそうだけど、有り余るC++のパワーをカッコよく使いこなそうとしてやっちまったみたいな。
もうちょっと使う側の立場にたつべきだな。
デフォルトの名無しさん (ワッチョイ 8a7e-zkh5) [sage] 2018/03/22(木) 08:38:59.71:0Y4DSJfq0
黒魔術だなんだ言って楽しめないようではC++は向いていない
デフォルトの名無しさん (ワッチョイ 37f3-zkh5) [sage] 2018/03/22(木) 10:14:29.52:Q5Rs9TJ/0
蛇足ねえ。。。
禿本1stでoperator overloadのデモ用に作られたサンプルなんだが
そういうのは後で取って付けた存在といえるのか?
デフォルトの名無しさん (ワッチョイ 1a12-aRf7) [sage] 2018/03/22(木) 17:28:14.63:PBLsyShY0
業界全体としては奥の深さを求める人(求道者)を一か所に集め留めるのには非常に有益な言語
デフォルトの名無しさん (ワッチョイ 8a7e-zkh5) [sage] 2018/03/22(木) 17:34:08.02:0Y4DSJfq0
そのうちAsioやRangeあたりも標準化されるだろうし
もうその方向に突き抜けてほしい
使いやすい言語なんか他にいくらでもある
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ b66f-zkh5) [sage] 2018/03/22(木) 17:41:04.44:HExEyyqO0
具体的にどういうときに不便なのか語れよ。
使いにくいってだけじゃ何にもわからん。
デフォルトの名無しさん (ワッチョイ 8a7e-zkh5) [sage] 2018/03/22(木) 17:43:00.10:0Y4DSJfq0
C++に関しては慣れてない人がそう言ってるだけだから
デフォルトの名無しさん (ワッチョイ a393-4ZrE) [sage] 2018/03/22(木) 19:57:57.53:sR+euIcT0

どの資料だったか覚えてないけど、演算子オーバーロードに関して
先生は「元の演算子の意味とかけ離れた挙動をさせるのは避けるべきだ」
みたいなことも書いてるよな。

まぁ、原則は指針であって絶対の規則じゃないわけだけど、
<< >> をビットシフトからストリーム入出力に振り替えておいて
どの口で言うか、このハゲッー! とか思ったり。
デフォルトの名無しさん (ワッチョイ 8a7e-zkh5) [sage] 2018/03/22(木) 20:06:11.34:0Y4DSJfq0

ストリームのような周知の事実になっているものはそれには当てはまらないでしょ
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ b66f-zkh5) [sage] 2018/03/22(木) 20:22:42.90:HExEyyqO0

まああれくらいのものになると、オブジェクトに追加で突っ込んでいくような動作が「元の演算子の意味」になっちゃってるよな。

そんなことより C++20 に入る予定のカレンダーでは日付を 2018y/mar/22 とか書けるらしくて、
これはさすがにクソやろ……。
これもいずれ普通に受け入れる気持ちになるだろうか。
デフォルトの名無しさん (ワッチョイ 8a7e-zkh5) [sage] 2018/03/22(木) 20:47:25.31:0Y4DSJfq0

既にfilesystemのpathが/で階層作れるから
current_path / "aho" / "baka"みたいに
C++の演算子は連想ゲームだ
デフォルトの名無しさん (ワッチョイ 37f3-zkh5) [sage] 2018/03/22(木) 22:18:28.94:Q5Rs9TJ/0

あの頃の禿はreverse_iteratorなんて思いもよらず
operator+が減算の動作をすることを否定してたね
デフォルトの名無しさん (アウアウカー Sac3-2dLA) [sage] 2018/03/23(金) 00:38:32.35:2SqL+aT8a

日付の表記は何種類かあるし年/月/日でも日/年/月でも表せるなら結構便利だと思う。
デフォルトの名無しさん (ワッチョイ a393-4ZrE) [sage] 2018/03/23(金) 08:21:50.21:VCdaFb7Y0

標準に「日付を表す型」みたいのが追加され、
それ用リテラルの接尾語(のひとつ)が ""y で 2018y は2018年を表す、
さらにこの型では / は日付要素を区切る演算子としてオーバーロードされてる。
…といった感じか?

確かに虚心坦懐に / を見れば、割り算のコンピュータ向け代用記号だけでなく
日付の区切りや、ファイルシステムの階層区切りでもあるけど。
デフォルトの名無しさん (ワッチョイ 1a12-aRf7) [sage] 2018/03/23(金) 09:13:18.25:xSYf1jdZ0
aのb乗
a^b
a**b
デフォルトの名無しさん (スフッ Sdba-5bpY) [sage] 2018/03/23(金) 10:31:52.82:fMiQp2pkd
こんだけ演算子は深いのになぜか未だに[]は引数を一つしか取れない
デフォルトの名無しさん (アウアウウー Sac7-zkh5) [] 2018/03/23(金) 10:45:38.60:COiOJTLla
「静的」、「動的」というのがよく分からないのですが、詳しく書いてある本はありますか?

ヒープ領域がどうたらとかいうのもよく分かりません。
スタックとかいうのもよく分かりません。

詳しく解説している本を教えてください。
デフォルトの名無しさん (アウアウウー Sac7-zkh5) [] 2018/03/23(金) 10:48:57.55:COiOJTLla
ロベールのC++の本を読んでいて疑問に思いました。
デフォルトの名無しさん (ドコグロ MM92-a4pf) [sage] 2018/03/23(金) 19:28:55.75:FQA7q+b8M

> …といった感じか?
そんな感じらしい
ttp://d.hatena.ne.jp/yohhoy/touch/20180322/p1

日本だと基本 年/月/日 しかないしソースコードに 睦月、如月、弥生 なんて書く奴はいないからいまいち便利さがわからんけどあちらの人にとっては便利なんだろうか
デフォルトの名無しさん (ワッチョイ 0e8a-MDAi) [sage] 2018/03/23(金) 19:30:12.07:5ELqDBlL0
ポップとプッシュの概念もよく分かってないのでは
ttp://www.cc.kyoto-su.ac.jp/~yamada/ap/stack.html
これが分かって来るとC++に於けるバッファオーバーフローBOF攻撃の仕組みが分かって来る
デフォルトの名無しさん (ワッチョイ 0e8a-MDAi) [sage] 2018/03/23(金) 19:42:22.13:5ELqDBlL0
バッファオーバーフロー: #1 概要
ttps://www.ipa.go.jp/security/awareness/vendor/programmingv2/contents/c901.html
デフォルトの名無しさん (ブーイモ MMe7-Gtgj) [sage] 2018/03/23(金) 19:52:45.96:e6tCc9HsM
五曜は対応してくれると有り難いかも知れないけど
他はいらんな
◆QZaw55cn4c (ワッチョイ ba60-fzSc) [sage] 2018/03/23(金) 19:55:59.42:J4dYcx4H0

C/C++ のメモリ構造について、になります。
これは基本的な事項で、初級を脱するためにはぜひとも必要な知識なんですが、
そのわりにあまりに解説されることがないような気がします
適切な説明がないものか…
◆QZaw55cn4c (ワッチョイ ba60-fzSc) [sage] 2018/03/23(金) 19:59:40.83:J4dYcx4H0

まず、メモリの管理方法として

1. スタックエリア、に格納するやり方
2. ヒープエリア、に格納するやり方

の大きく分けて二通りがあり、

2. ヒープエリア、二格納するやり方について

2-1. 「静的」:static キーワードを使うやり方
2-1. 「動的」:malloc()/free() または new/delete を使うやり方

が分類されます。
デフォルトの名無しさん (ブーイモ MMe7-Gtgj) [sage] 2018/03/23(金) 20:10:28.07:e6tCc9HsM
データセグメントって無くなったの?
デフォルトの名無しさん (アウアウウー Sac7-zkh5) [] 2018/03/23(金) 20:39:25.53:COiOJTLla


ありがとうございました。

あまりそういう本はないんですか。

もしかしたら、ヘネシーらのコンピュータのハードの本とか読まないといけないんですかね?

あるいはコンパイラの本ですかね?
デフォルトの名無しさん (ブーイモ MM7f-Dh3i) [sage] 2018/03/23(金) 20:40:47.42:l1/KZZgNM

一般的に、静的領域をヒープとは呼ばんだろ
デフォルトの名無しさん (ワッチョイ 8a7e-zkh5) [sage] 2018/03/23(金) 20:41:24.55:qmCr5Czp0
こういうのはネットで覚えたからどういう本に書いてあるかはわからん
◆QZaw55cn4c (ワッチョイ ba60-fzSc) [sage] 2018/03/23(金) 20:45:34.35:J4dYcx4H0

手っ取り早いのは「マシン語」を書いてみる、マシン語(アセンブリ言語)のルーチンを C にリンクさせる、ていうのが王道ですが、
昨今はマシン語のいい教科書がない、という気がします

gcc のインラインアセンブラとかが有望だとは思いますが、まあ簡単にマシン語を記述している教材なんていうものが思いつかない、マシン語の需要というか動機がないのかもしれませんが
◆QZaw55cn4c (ワッチョイ ba60-fzSc) [sage] 2018/03/23(金) 20:46:44.14:J4dYcx4H0

うーむ、たしかに static を「ヒープ」とは言わないかもしれませんね…
デフォルトの名無しさん (アウアウウー Sac7-zkh5) [sage] 2018/03/23(金) 20:47:37.33:COiOJTLla


ありがとうございました。
マシン語の本を探してみます。



ありがとうございました。
本に書いていない場合には仕方がないのでネットで調べてみることにします。
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ b66f-zkh5) [sage] 2018/03/23(金) 22:32:48.28:ehYNLgPn0
どうだろ?
C++ の言語仕様的にはオブジェクトの寿命に違いがあるだけで、
それを実現するメカニズムについては詳細な規定があるわけではない。

まずは C++ のパラダイムの中で理解を深めれば自然に理解できるんじゃないの?
手を広げすぎても収集が付かなくなる気もするんだけどなぁ。
デフォルトの名無しさん (アウアウカー Sac3-E6if) [sage] 2018/03/23(金) 22:56:58.27:io4DvPx8a
マシン語に手を出すのは飛躍しすぎだしやめといた方がいい。ある程度C++になれてより深く理解したいと思うようになってからがいいよ。

動的、静的は大雑把に言えば、コンパイル時つまりソースを書いた時点で決まるものを静的、実行時に変化するものを静的と呼ぶ。
変数の型とかメモリ領域の確保の仕方とか、いろんな文脈で使われる。
デフォルトの名無しさん (アウアウカー Sac3-E6if) [sage] 2018/03/23(金) 22:57:57.59:io4DvPx8a

実行時に変化するのは動的でした
デフォルトの名無しさん (ブーイモ MM26-Z/eb) [sage] 2018/03/23(金) 23:15:38.28:g9Gf634nM

決まる、決まらないの主語は何でしょうか?
デフォルトの名無しさん (ワッチョイ 7abd-aumg) [sage] 2018/03/24(土) 00:54:38.69:LvcaB4Q+0
メモリについて知りたいんならC言語から始めたら良い
Unixの移植目的で設計されたC言語は、実行効率のためほとんど必然的にメモリが透けて見える言語になったんである
『プログラミング言語C』という名著もある
これの後ろの方のmalloc()の実装サンプルまで通読したら
シングルCPUの範疇ならメモリについて嫌でもワカル

『プログラミング言語C++』と違って三日もあれば読めれる手頃な分量やしな!
デフォルトの名無しさん (ワッチョイ a39f-aRf7) [sage] 2018/03/24(土) 01:27:57.09:eFb1d56B0

横だが。

何でも、だよ。
型なら静的型、動的型というし、メモリ確保なら静的確保、動的確保という。

マシン語は飛躍しすぎ。
CのエンハンスとしてC++を使うのならマシン語(インラインアセンブラ)もありだが、
C++をJava/C#/C++の並びで使うつもりならインラインアセンブラとか禁止でしょ。

というかそもそもその辺が分からない=全くの初心者がC++からやろうというのが間違い。
PythonかRubyあたりから始めとけ。(どっちも俺は知らんけど)
デフォルトの名無しさん (ワッチョイ 36e7-0D9k) [sage] 2018/03/24(土) 01:40:25.62:nPxx/G4d0
コンパイラがコンパイル時に決めるものが静的、出来上がったプログラムを実行した時に決まるのが動的
C++だとそういう理解の方がわかりやすいと思う

マクロ、テンプレート、constexpr、リテラル、式や変数や関数やクラスの宣言型なんかは静的
静的なものは全部コンパイラが決めるからプログラムの実行時にはいちいち計算しないし、バグで決められなかったらコンパイラが怒る

変数やインスタンスの中身、関数呼び出し、仮想クラスのオブジェクト型なんかは動的
実行環境や食わせた入力・ファイルなんかに依存するからプログラムを実行してみないと決まらない
動的なバグはコンパイラは感知できないから客先でプログラムを実行するとクラッシュする

適当だけどだいたいこんな感じ
デフォルトの名無しさん (ワッチョイ a39f-aRf7) [sage] 2018/03/24(土) 02:04:25.06:eFb1d56B0
細かいようだが、

コンパイル時に確定=静的
実行時に確定=動的(=コンパイル時に確定できない)

で若干の例外(staticとか)があるが大体あってる。

「プログラミング言語C」はやめとけ。名著だが、あれは
「既にプログラミングを出来る人が、C言語を学ぶ」用であって、全くの初心者じゃ読めない。
「プログラミング言語C++」も止めとけ。あれも「既にCを使える人が…」で以下同文。
他本は総じてゴミなのも事実だが。
デフォルトの名無しさん (ワッチョイ 5b80-AyCB) [] 2018/03/24(土) 02:06:26.05:Z79Bg+7E0
特定のアドレスにデータを配置して割り込みかける必要があるからじゃないだろか。
デフォルトの名無しさん (ワッチョイ 36e7-0D9k) [sage] 2018/03/24(土) 02:09:36.82:nPxx/G4d0
予約語のstaticは転用されまくってわけわからなくなってるので
「静的」とソースコード上のstaticは全く別物だと思った方がいい
デフォルトの名無しさん (ワッチョイ 4e81-zkh5) [sage] 2018/03/24(土) 02:15:26.90:qYWJwKPe0
その辺整理されないんだろうかね
そう言うものだという説明で
不本意ながら納得する事何十年
デフォルトの名無しさん (ワッチョイ a39f-aRf7) [sage] 2018/03/24(土) 02:29:56.73:eFb1d56B0
そんなに混乱するか?例外としてしまって問題ないと思うが。
俺は規格には詳しくないが、(というより色々混ざってしまっているが)

・Cのstatic関数=ファイルスコープに限定、externの反対 --- (A)
 はC++ではなんとかされたのではなかったっけ?(どうせ使わないからどうでもいいが)
・staticクラス、あるいはクラスのstaticメソッド --- (B)
 は「静的」で矛盾しないから、そもそも問題ない。
・関数内static変数でプチグローバル(みたいなやつ) --- (C)
 も普通にクラスにしろ、って話でしかないし、使わないだろ。

結果、普通に使う分には特に混乱しないと思うが。
文法オタクは気にするのかもしれんが。

(C)は「動的関数にしよう」という意図があったのかもしれんが、
結局C/C++の世界は静的関数しかないから、意味無かったし。
というかそもそも俺は動的関数のメリットがよく分からん。
C#は動的関数だが、結局ロード/アンロードはアセンブリ単位=ほぼ起動時に纏めて、
であって、活用してない。
Javaは動的関数でメリットを享受してるんだっけ?(知らんから教えて)
デフォルトの名無しさん (ワッチョイ a304-h0dl) [sage] 2018/03/24(土) 02:33:41.17:y/z0A0hW0
ttps://ideone.com/Epp30z
お兄ちゃん助けて、コンパイルが通らないの。

VCで開発してます。
jsonのメモリーモデル研究にとりあえずシェアードPTRの組んでそれからやっぱユニークPTRの変更しました。
色々いじってるのですが、意味不明なエラーが出てさっぱりわかりません。
自前のコードなら自分でどうにかするのですが、コードステップするとライブラリの中でえらーおこしててさっぱりです。
どなたかご教示ください。お願いします。
デフォルトの名無しさん (ワッチョイ 36e7-0D9k) [sage] 2018/03/24(土) 02:46:21.51:nPxx/G4d0
std::vector<UniqueObject>にstd::pair<UniqueObject,UniqueObject>突っ込もうとしてんじゃん
ちゃんとエラーメッセージ読めよ
デフォルトの名無しさん (ワッチョイ a304-h0dl) [sage] 2018/03/24(土) 02:51:39.38:y/z0A0hW0
え?何行目ですか?そんなバカな・・・。え?
デフォルトの名無しさん (ワッチョイ 4e81-1N/V) [sage] 2018/03/24(土) 03:47:44.28:jOWDr2Es0
static関数は恐らくリンク工程がdynamicの場合があるため
それに対してのstaticなんだろな
デフォルトの名無しさん (ワッチョイ 5b80-AyCB) [] 2018/03/24(土) 03:55:06.40:Z79Bg+7E0
毎回思うんだけど、なんでgccで勉強しようとするんだろうな。
エラーメッセージ読めと言われても読めるわけがない。
一番わかりにくいメッセージを出すコンパイラで勉強する子が不憫でならない。
デフォルトの名無しさん [] 2018/03/24(土) 04:28:06.63

VCで開発って書いてんだろーが
デフォルトの名無しさん (ワッチョイ 5b80-AyCB) [] 2018/03/24(土) 04:30:46.18:Z79Bg+7E0
確かに書いてあるな。
じゃあエラーメッセージ読めよ。
デフォルトの名無しさん (ワッチョイ 4ee8-W72l) [sage] 2018/03/24(土) 05:34:00.15:GrrVfR010
読む気のない奴は何使ってもダメだという良い例
デフォルトの名無しさん [] 2018/03/24(土) 06:12:32.26
いつも大量のWarningが出るのを真面目に対処せず放置してるからErrorが出ても理解できない罠
デフォルトの名無しさん (ワッチョイ a304-h0dl) [sage] 2018/03/24(土) 06:12:34.93:y/z0A0hW0
ttps://ideone.com/FN5IrI

理屈の一つは多分。
イニシャライザーリストが要素をconstで構築するからmoveできない?
内部でconst_castするわけないしこれ詰んでない?

あるぅぇ〜。なんでじゃー。
デフォルトの名無しさん (ワッチョイ f397-zkh5) [sage] 2018/03/24(土) 06:25:04.10:0qB0BmlJ0
static_castの動作内容は翻訳時に全て確定する
dynamic_castの動作内容は実行時のvtableにより変化する

static_assertは翻訳時に検査を行う
assertは実行時に検査を行う

static link libraryは翻訳時に結合する
dynamic link libraryは実行時に読み込む
デフォルトの名無しさん (ワッチョイ a393-4ZrE) [sage] 2018/03/24(土) 06:57:20.04:XPzSeRia0
どうやら の質問は C++ に限定した話ではないみたいだから、
C と C++ の両方を扱うスレッドに移動するのが良いんじゃないかな。

「Cの場合は…」「ここC++のスレッドだし」レベルの齟齬が避けられるし、
このスレッドを見てないC専門の人が有用な情報を持ってるかも知れん。


【初心者歓迎】C/C++室 Ver.102【環境依存OK】
ttp://mevius.5ch.net/test/read.cgi/tech/1509780815/

スレを勃てるまでもないC/C++の質問はここで 25
ttp://mevius.5ch.net/test/read.cgi/tech/1471100645/
デフォルトの名無しさん (ワッチョイ a39f-aRf7) [sage] 2018/03/24(土) 09:00:52.23:eFb1d56B0

質問者はそれ以前の、プログラミング一般の「静的」「動的」の区別が付いてない。
スレ移動しても意味無い。というかどこのスレでも同じ。

C++のstaticは、Cのグダグダな仕様を引きずっているからおかしくなっているだけで、
C++で新たに設定されたstaticは他言語とも整合取れてる。
これに関しては「Cが悪い」でいいと思うよ。

説明している本が無いのは、そもそもそんなところで引っかからないだろう。
教習所でハイオクの話をしても意味無い。
一通り動く物を組めるようになるまではそれにフォーカスしろ、でいい。
デフォルトの名無しさん (ワッチョイ 36e7-0D9k) [sage] 2018/03/24(土) 09:28:18.28:nPxx/G4d0
静的動的の区別は大事だし引っかかりやすい所でもあるでしょ
テンプレート引数に変数突っ込んでなんで動かないのぉぉとか初心者はよくあるよ

説明してる本がないって本当か?本当なら世の本がクソすぎる
デフォルトの名無しさん (ワッチョイ 5b80-AyCB) [] 2018/03/24(土) 10:20:48.01:Z79Bg+7E0
で、静的と動的の違いは何なんだよ。
ガンダムで説明してくれ。
デフォルトの名無しさん (ワッチョイ 9a34-jZqL) [sage] 2018/03/24(土) 10:26:44.70:UtKAK1R90
staticとauto
デフォルトの名無しさん (ワッチョイ 5b80-AyCB) [] 2018/03/24(土) 10:38:33.14:Z79Bg+7E0
ガンダムで説明できないうちは理解できてることにならないぞ。
デフォルトの名無しさん (ワッチョイ 4e81-1N/V) [sage] 2018/03/24(土) 10:49:46.91:jOWDr2Es0
アインシュタインみたいなこと言ってんじゃねえよ
デフォルトの名無しさん (ワッチョイ 8a7e-zkh5) [sage] 2018/03/24(土) 11:08:12.95:aqtEECgt0
ガンダム言語の表現力を信じろ
デフォルトの名無しさん (ワッチョイ a39f-aRf7) [sage] 2018/03/24(土) 11:10:56.81:eFb1d56B0

じゃあお前が説明しろよ。
お前は馬鹿だから出来ないと思うがな。

そもそもは誰向けのレスだよ?
デフォルトの名無しさん (ワッチョイ 8a7e-zkh5) [sage] 2018/03/24(土) 11:18:43.16:aqtEECgt0
コーディング規約にchar aznable禁止っていうのを見たことあるから
C++にガンダム要素を入れるのはタブー
デフォルトの名無しさん (ワッチョイ a39f-aRf7) [sage] 2018/03/24(土) 11:28:25.89:eFb1d56B0

> テンプレート引数に変数突っ込んでなんで動かないのぉぉとか初心者はよくあるよ
ねえよ

> 説明してる本がないって本当か?本当なら世の本がクソすぎる
世の本は概して糞だ。これは事実だ。

というかここら辺の認識がずれるのは世代ギャップだ。
現状の本を書いてきている世代は全員CをやってからC++をやっている。
だから「静的」「動的」の区別が付かない状態でテンプレートを触ることがなかった。
当然そこを解説した本もそんなにあるはずがない。

お前らの世代がCをやらずにいきなりC++を始め、それで色々苦労した経験があるのなら、
お前らの世代の連中が本を書かなければならない。ただそれ以前に、
俺はその必要(全くの初心者がCをやらずにC++を始める)があるとは思えないが。

入門書を書いている連中はプログラマでも宣教師でもなく、ただのテクニカルライタだ。
だから需要(売れる)があれば書くだけ。今無いのは需要がないと見られているから。
俺もこの見方については同意する。
最初のプログラミング言語がC++ってのは単純に選択を間違えてる。
デフォルトの名無しさん (ワッチョイ 5b80-AyCB) [] 2018/03/24(土) 11:30:12.41:Z79Bg+7E0
C++とJavascript以外学ぶ必要があるとは思えない。
デフォルトの名無しさん (ドコグロ MM92-a4pf) [sage] 2018/03/24(土) 12:01:13.85:3GLZsUhUM

それはさすがに世間が狭すぎる
土方志望としてもJava程度は触っとけ
デフォルトの名無しさん (ワッチョイ 5b80-AyCB) [] 2018/03/24(土) 12:18:09.21:Z79Bg+7E0
Javaは当初の理念を失ってしまったように感じる。
デフォルトの名無しさん (ワッチョイ 8a7e-zkh5) [sage] 2018/03/24(土) 12:21:12.10:aqtEECgt0
JavaはJVM上で動く一言語に成り下がったからな
デフォルトの名無しさん (ワッチョイ 36e7-0D9k) [sage] 2018/03/24(土) 17:03:55.62:nPxx/G4d0
今からJavaやるくらいならC#にしとけ
デフォルトの名無しさん (アウアウウー Sac7-zkh5) [] 2018/03/24(土) 18:05:30.46:upExxHyGa
みなさん、ありがとうございました。

カーニハン他の本をまず読んでみようと思います。



そうなんですか?

Robert SedgewickらのAlgorithmsという教科書がJavaで書かれているため、
Javaの本も買って読んでいます。

ところで、学術的?な本では、オブジェクト指向言語としてC++かJavaが
大抵使われていますが、C#は使われていません。これはマイクロソフト
という一企業が設計した言語だからでしょうか?
デフォルトの名無しさん (アウアウウー Sac7-zkh5) [sage] 2018/03/24(土) 18:06:22.88:upExxHyGa
たとえば、プログラミングコンテスト関係の本では大抵C++が使われています。
デフォルトの名無しさん (アウアウウー Sac7-zkh5) [sage] 2018/03/24(土) 18:07:40.93:upExxHyGa
そういう理由から、本当はC++ではなくC# + Visual Studioを勉強したいのですが、
C++の本(ロベール)を買って読んでいます。
デフォルトの名無しさん (ワッチョイ 8a7e-Igml) [sage] 2018/03/24(土) 18:12:06.94:aqtEECgt0
そのうち大抵の言語は経験なくてもリファレンス片手に使えるようになるから好きなもん使え
デフォルトの名無しさん (ワッチョイ f397-zkh5) [sage] 2018/03/24(土) 18:12:52.16:0qB0BmlJ0
C++だって元々はAT&T製なんだが
デフォルトの名無しさん (ブーイモ MM26-Dh3i) [sage] 2018/03/24(土) 18:20:10.81:LkK69e8iM
javaも神託に従わないと訴えられるという…
デフォルトの名無しさん (ワッチョイ a39f-aRf7) [sage] 2018/03/24(土) 18:50:18.42:eFb1d56B0

なら素直にC#やっとけ。
その後に必要ならC++で何も問題ない。

C#は商業的につまずいたのでJavaほどの知名度はないが、
言語自体はJavaよりは断然いい。(後発だから当然だが)
デフォルトの名無しさん (スププ Sdba-kSjP) [sage] 2018/03/24(土) 19:07:41.38:weQnYJFBd
ねーねー。
STL作った人は、共産主義国で食中毒にあって、ベッドの上で朦朧とした頭で閃いたって話だった気がしたけど、どっかにその話のソースある?
ググっても見つからないよー
デフォルトの名無しさん (ワッチョイ 9a34-jZqL) [sage] 2018/03/24(土) 19:12:27.84:UtKAK1R90
神託は絶望の淵やタヒぬ直前に見えたりするもんやで
デフォルトの名無しさん (ブーイモ MM26-Dh3i) [sage] 2018/03/24(土) 19:18:50.87:LkK69e8iM

見つけてきたぞ。何処かで発表か何かするの?
ttp://www.stlport.org/resources/StepanovUSA.html

ところでこのインタビューにあるtamagawa numberってなんだろう
デフォルトの名無しさん (アウアウウー Sac7-zkh5) [sage] 2018/03/24(土) 19:25:16.65:upExxHyGa
玉河数

ttps://ja.wikipedia.org/wiki/%E7%8E%89%E6%B2%B3%E6%81%92%E5%A4%AB

に書いてありました。
デフォルトの名無しさん (ブーイモ MM26-Dh3i) [sage] 2018/03/24(土) 19:30:46.97:LkK69e8iM
玉川数じゃ出てこないわけだ
801 (スププ Sdba-kSjP) [sage] 2018/03/25(日) 06:55:48.47:FlrNzX5dd
皆様ありがとーございます。
論文の枕で書こうかと思いまして
デフォルトの名無しさん (アウアウウー Sac7-zkh5) [sage] 2018/03/25(日) 11:36:01.08:Lywxeunja
char* str = "abc";

とは書かずに、

const char* str = "abc";

と常に書くようにと本に書いてあります。

理由は文字列リテラルは直接書き換えてはいけないからであると書かれています。

●コンパイルは通っても、実行するとエラーになることもある。
●同じ内容の他の文字列リテラルまで書き換えられてしまうことがある。

とも書かれています。

禁止されているにもかかわらず、コンパイルが通る可能性があるというのはどういう
ことなのでしょうか?

(1)コンパイルエラーが発生
(2)コンパイルは通るが実行するとエラーが発生
(3)コンパイルは通り、実行してもエラーが発生しないが、同じ内容の他の文字列
リテラルまで書き換えられてしまうという不具合が起こることがある。

コンパイラーの設計者には、(1)、(2)、(3)の選択肢があるのはなぜでしょうか?

禁止されているのだから、一律にコンパイルエラーにするのが自然に思われます。 👀
Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)
デフォルトの名無しさん (アウアウウー Sac7-zkh5) [sage] 2018/03/25(日) 11:39:58.12:Lywxeunja
const char* str = "abc";
const char ca[] = {'a', 'b', 'c', '\0'};

の二つは同じことだと思っていましたが、これは違うということでしょうか?

const char* str = "abc";

では、"abc"をある場所に格納しておき、それを使いまわしたりすることがある
ということでしょうか?

例えば、

const char* str1 = "abc";

const char* str2 = "abc";

と書いたときに、 str1 == str2 になることがあるということでしょうか?

一方、

const char ca1[] = {'a', 'b', 'c', '\0'};
const char ca2[] = {'a', 'b', 'c', '\0'};

と書いた場合には、それぞれ、別に格納場所が確保されるということでしょうか? 👀
Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)
デフォルトの名無しさん (ブーイモ MM26-Dh3i) [sage] 2018/03/25(日) 11:41:04.91:tMBl9Z88M

デフォルトの名無しさん (アウアウウー Sac7-zkh5) [sage] 2018/03/25(日) 11:44:30.72:Lywxeunja
すみません。
カーニハンらの本の日本語版のp.127に書いてありました。

char amessage[] = "now is the time";
char *pmessage = "now is the time";

の違いについてです。

そして、文字列の内容を変えようとすると、その結果は不定となる

と書かれいます。なぜ不定としているのかについては理由は書いてありません。
デフォルトの名無しさん (アウアウウー Sac7-zkh5) [sage] 2018/03/25(日) 11:46:43.36:Lywxeunja


ありがとうございました。
故意に違反状態にするということもあるんですね。
正直言って無駄に分かりにくいところがあるんですね。
デフォルトの名無しさん (ワッチョイ 0e8a-VY+1) [sage] 2018/03/25(日) 12:26:26.43:NNknxHvv0
うん過去のもうメンテナンス不能なコードは膨大なんでそうするしか仕方ないんだよ
デフォルトの名無しさん (ワッチョイ 9a34-jZqL) [sage] 2018/03/25(日) 12:40:02.16:L+/M5ACh0
以前にも同じ質問出たし荒しかとおもた
デフォルトの名無しさん [] 2018/03/25(日) 13:01:03.23
C++相談室で出す話題でもなかろに
デフォルトの名無しさん (ワッチョイ 8a7e-Igml) [sage] 2018/03/25(日) 13:06:46.65:zn3nsIh00
一応初心者向けのスレっていう体じゃなかったのか?
デフォルトの名無しさん [] 2018/03/25(日) 13:52:43.26
ここか、

C言語なら俺に聞け 145
ttp://mevius.2ch.net/test/read.cgi/tech/1519046038/

せめてここ向きの質問だろう

【初心者歓迎】C/C++室 Ver.102【環境依存OK】
ttp://mevius.2ch.net/test/read.cgi/tech/1509780815/
デフォルトの名無しさん (ブーイモ MMba-Gtgj) [sage] 2018/03/25(日) 15:10:26.39:9t80sXyiM

旧K&Rつまり第一版は書換可能だったの
デフォルトの名無しさん [] 2018/03/25(日) 15:22:53.51
C++スレでK&Rの話すんなや
デフォルトの名無しさん (ワッチョイ f397-zkh5) [sage] 2018/03/25(日) 17:38:21.10:S7OmeNGW0

ISO/IEC14882:2017 C.1.1の段落3で
char* p = "abc"; // valid in C, invalid in C++
となっているので、C++ではコンパイルが通ってはいけない

なぜ通ることがあるのかというと、
JIS X3014:2003 D.4で
定値文字列からの暗黙変換 文字列リテラルに対し,定値から非定値へ暗黙変換することは,推奨しない(4.2参照)。
となっており、C++03に従う限りコンパイルは通ることになっていた名残だ
デフォルトの名無しさん (ワッチョイ 1a12-aRf7) [sage] 2018/03/25(日) 17:59:44.09:oI54xnZZ0
するなと言われてもスーパーセットなんだからC言語の記法がどこまで通じるかは重大な問題だと思う
デフォルトの名無しさん (ワッチョイ f397-zkh5) [sage] 2018/03/25(日) 18:24:54.69:S7OmeNGW0
建前「それは間違い」なんだが
本音ではそのとおり
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ b66f-zkh5) [sage] 2018/03/25(日) 18:36:39.65:vqcfoPV60

スーパーセットにするというよりは、
つかず離れずというポジションかなぁ。
C++ が先にやったのを C で取り入れたことも有るし。
デフォルトの名無しさん (ブーイモ MMe7-Dh3i) [sage] 2018/03/25(日) 18:55:57.82:HW+VfLnzM
可変長配列とか名前付きの構造体初期化とかc++に取り込まれたんだっけ?
スーパーセットは20年前にとっくに終わったんじゃないかと。

すでに導入されてたらスマソ
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ b66f-zkh5) [sage] 2018/03/26(月) 05:22:15.91:S9VCdiyC0

たぶん入ってないな。

可変長配列 (VLA) って確か C でもオプショナルに格下げされてただろ。 (C11 から)
C++ のイニシャライザはだいぶん複雑になっちゃったから辻褄の合うようにするの大変だろうし、
もうやらないんじゃないかな。
デフォルトの名無しさん (ワッチョイ 8a7e-Igml) [sage] 2018/03/26(月) 11:36:03.37:pTR+m2Zc0
実用レベルではほぼスーパーセットといっても差し支えない
デフォルトの名無しさん [] 2018/03/26(月) 11:51:36.03
実用レベルではCがC++のサブセットだし🙄
デフォルトの名無しさん (スフッ Sdba-5bpY) [sage] 2018/03/26(月) 12:28:17.38:tDSLT7/Xd
実用レベル:=C++にも存在する機能に制限されたC
デフォルトの名無しさん (ワッチョイ 36e7-0D9k) [sage] 2018/03/26(月) 22:04:18.63:cCKTbT1E0
C11の_GenericとかそれCで敢えてやる必要あるの?って思う
デフォルトの名無しさん (ワッチョイ b6e9-5bpY) [sage] 2018/03/26(月) 23:52:36.66:TogAHTIh0
微妙に使い辛い機能だし分からんでもないけど、本当の名前がちゃんと見えてるのはちょっと安心感
デフォルトの名無しさん (ワッチョイ a304-h0dl) [sage] 2018/03/26(月) 23:58:29.09:bouVP8Z10

スイッチで選択するのをスマートにした感じやな。
イマイチ〜〜。
テンプレート一個書いて複数にジェネレートさせる方が好み。
デフォルトの名無しさん (ワッチョイ b69b-g2oz) [sage] 2018/03/27(火) 01:36:13.83:tW2Kdf3t0
あるクラスAのラッパークラスWで
A&を受け取る場合はWの全てのメソッドが使えて
const A&を受け取る場合はWのconstメソッドだけが使えるように制限する設計って
ありましたっけ?
デフォルトの名無しさん (ワッチョイ a304-h0dl) [sage] 2018/03/27(火) 01:42:41.92:6oSpwfuc0
おーばーらいど。
デフォルトの名無しさん (ワッチョイ 9a34-jZqL) [sage] 2018/03/27(火) 06:31:21.75:m3riabwu0
あとは operator -> でポインタ返すやり方とかだな
デフォルトの名無しさん [] 2018/03/27(火) 06:53:48.55

制限っていうのは、コンパイルエラーにしたいの?
デフォルトの名無しさん (ワッチョイ b69b-g2oz) [sage] 2018/03/27(火) 07:01:18.53:tW2Kdf3t0
A a0;
const A a1;
W w0(a0);//OK
W w1(a1);//NG
const W w2(a1);//OK
const W w3(a0);//OK
で、Wの非constメソッドには必ずconstメソッドが対応して存在している
みたいな
デフォルトの名無しさん (ワッチョイ a304-h0dl) [sage] 2018/03/27(火) 07:12:14.69:6oSpwfuc0
設計がダサい気がするけど、何に使うんだろう。
デフォルトの名無しさん [] 2018/03/27(火) 07:35:02.82

NGっていうのは、コンパイルエラーにしたいの?
デフォルトの名無しさん (ワッチョイ b69b-g2oz) [sage] 2018/03/27(火) 07:36:16.27:tW2Kdf3t0

そうですね
デフォルトの名無しさん (ワッチョイ a350-XniR) [sage] 2018/03/27(火) 07:40:26.10:ofLFYE4b0

明確な欠点を指摘出来ない時に使う言葉だな
「ダサい」
デフォルトの名無しさん (ワッチョイ 0723-14g7) [sage] 2018/03/27(火) 11:34:17.37:bA2HN2rY0
クラスを
W
MutableW (変更可能なW)

と分けるのがよく使われる現実的な解だと思う
MutableW は W の派生型として実装すると楽


>で、Wの非constメソッドには必ずconstメソッドが対応して存在している

この部分は意味不明なので聞かなかったことにしておく
デフォルトの名無しさん (ワッチョイ b69b-g2oz) [sage] 2018/03/27(火) 12:08:25.74:tW2Kdf3t0
なるほど、ありがとうございます
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ b66f-zkh5) [sage] 2018/03/28(水) 16:37:44.82:jJD3k2j80

テンプレートにしておいて SFINAE で分岐するという方法はとれるが……。
デフォルトの名無しさん (アウアウウー Sac7-fzSc) [sage] 2018/03/28(水) 18:32:49.43:rzqMRle+a
C言語ってこんなので就職できるらしい…

【企業】「”C言語…?どこかで見た”程度でOK」 名古屋のアテック、求人広告が話題に エンジニアの人材不足、面白求人でカバーできる?
ttps://asahi.5ch.net/test/read.cgi/newsplus/1522229305/

本物のC++プログラマーを募集してる某社とはえらい違いだな
デフォルトの名無しさん (ワッチョイ 8a7e-Igml) [sage] 2018/03/28(水) 20:11:10.89:nsQQ2hCk0
永久にPHP弄らせる要員としては十分
デフォルトの名無しさん [] 2018/03/28(水) 20:50:12.70

言語ヲタなんてプロジェクトに一人いれば十分だし

兵隊は言語の知識よりコミュニケーション能力、報連相、Excel方眼紙スキルが大事よ
デフォルトの名無しさん (ワッチョイ 3708-zkh5) [sage] 2018/03/28(水) 20:55:08.40:NO5LUaew0
上司を黙らせるスキルでしょ
盛らないでね
デフォルトの名無しさん (ワッチョイ 8a7e-Igml) [sage] 2018/03/28(水) 22:09:32.87:nsQQ2hCk0
会社員なのだから上司が納得することだけが重要
デフォルトの名無しさん [] 2018/03/28(水) 22:29:42.33
上司なんか関係ないやろ

お客さんを味方に付けることや
デフォルトの名無しさん (ワッチョイ a350-XniR) [sage] 2018/03/28(水) 22:33:35.60:fYzIlbdt0
関係あるだろ
デフォルトの名無しさん (ワッチョイ a37f-zkh5) [] 2018/03/28(水) 22:46:49.55:2H+8IznE0
上司も客も関係無いよバカども
プログラミングの話だバカども
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ b66f-zkh5) [sage] 2018/03/28(水) 23:56:58.42:jJD3k2j80
マ板でやれ
デフォルトの名無しさん (ワイモマー MMb3-TX0Y) [sage] 2018/03/29(木) 00:40:46.75:zCjdEvGWM
visualstudio2017 Win32アプリケーションでSQLiteを使いたいのですが
Nugetにそれらしきものが合ったのでインストールしようとしたのですが以下のエラーでインストールできません。
ttps://www.nuget.org/packages/SQLite/

パッケージ 'SQLite 3.13.0' をインストールできませんでした。このパッケージを 'native,Version=v0.0' を対象とするプロジェクトにインストールしようとしていますが、
そのフレームワークと互換性があるアセンブリ参照またはコンテンツ ファイルがパッケージに含まれていません。

どうすればよいのでしょうか。
デフォルトの名無しさん (ワッチョイ d180-3UCh) [] 2018/03/29(木) 00:42:57.97:+dX3Weor0
CoAppのタイムスタンプ調べてみて。
NuGetは捨てろ。
デフォルトの名無しさん (ワッチョイ d180-3UCh) [] 2018/03/29(木) 00:48:50.94:+dX3Weor0
代わりに何を使うか。
VCPKG。
ただし、MSは三年後にVCPKGも捨てているだろう。
逆に我々がVSを捨てる時期に来ている。
デフォルトの名無しさん (ワッチョイ d180-3UCh) [] 2018/03/29(木) 00:53:15.59:+dX3Weor0
MSの方針としてC++を捨ててC#に移行させるというのがあって、C++ユーザーはあの手この手で改宗を迫られる。
もはやVSでC++は苦行。
というか、WindowsでC++が苦行。
デフォルトの名無しさん (ワッチョイ d180-3UCh) [] 2018/03/29(木) 00:55:08.86:+dX3Weor0
C++を捨ててC#に移行するか、Windowsを捨ててOSXかLinuxに移行するか。
二択。
WindowsではC#が正解。
なぜならMSがそれを望んでいるから。
デフォルトの名無しさん (ワッチョイ b37e-YG9/) [sage] 2018/03/29(木) 01:05:50.70:xx4XvERn0
C++のチームも頑張って更新してるけどな
IDEとコンパイラは十分なのに
・パッケージマネージャーがクソ
・再起動しないとPATHが更新されない
・VSのプロジェクトが用意されていないとビルドが面倒
と環境が整備されてなさすぎる
デフォルトの名無しさん (ワッチョイ 93eb-Mlde) [sage] 2018/03/29(木) 01:09:04.86:y/yCqDtn0
C# + C++/CLI + C++
という選択肢
デフォルトの名無しさん (ワッチョイ d180-3UCh) [] 2018/03/29(木) 01:14:03.03:+dX3Weor0
我々が間違っている公算も高い。
我々はC++を使いこなせる。
だから、C++なら簡単にできるのになぜそうしない?と思ってしまうが、これから学ぶならC#のほうが簡単だろう。
MSがC#を推すのは正しいのかもしれない。
デフォルトの名無しさん (ワッチョイ b37e-YG9/) [sage] 2018/03/29(木) 01:20:39.82:xx4XvERn0
C#はビジネス用だから
より早く大量にコードを生産することを目的としているからC++とは用途が違う
デフォルトの名無しさん (ワッチョイ 7923-KOzE) [sage] 2018/03/29(木) 02:12:12.07:Hc4kPWXM0
Android でも iPhone でも Windows でも使える共通部分のコードは c++ で、
ってのを C# に変えたいのかもしれんが
別段 c++ で不自由ないしなあ…

てか c# って .Net のイメージ強すぎて単体で使える気がまるでしない
デフォルトの名無しさん (ワッチョイ 9334-3URi) [sage] 2018/03/29(木) 03:27:22.16:T1PPEJjr0
未だにproperty実装出来ていないC++標準仕様が異常なんだぜ
そりゃMSも堪忍の尾が切れるってもんだぜ
デフォルトの名無しさん (ワッチョイ 4104-2GNe) [sage] 2018/03/29(木) 04:16:13.07:Ng8O1HeK0
ら、ライブラリで実装できるから・・・。
ちなみに、プロパティっぽい提案は過去出てるが、全くテーブルに乗らない。
デフォルトの名無しさん (ワッチョイ b37e-YG9/) [sage] 2018/03/29(木) 04:45:16.84:xx4XvERn0
誰もプロパティを欲していないのである
デフォルトの名無しさん (ワッチョイ 3181-vyEq) [sage] 2018/03/29(木) 06:44:05.72:izMMXIg60
俺も欲しくない
コスト予測し辛杉デフ
デフォルトの名無しさん (ワッチョイ 5be7-Cooj) [sage] 2018/03/29(木) 07:38:47.09:LRHKAKcy0
C#はいい言語だよ
Linq便利だし

ただC++とは用途が違うってだけ
デフォルトの名無しさん (ワッチョイ 93e7-qGf7) [sage] 2018/03/29(木) 08:06:33.99:qluMmKIH0
何度聞いてもプロパティが欲しいという思いが沸かないんだが
デフォルトの名無しさん (ワッチョイ d3bd-qsUw) [sage] 2018/03/29(木) 08:10:21.70:FDAIDKLE0
ウィンドーズホンでネイティブC++とC++/CXの間を取り持つwrapperを書くのに使う
Wrapperを書くのに便利
デフォルトの名無しさん (アウアウウー Sa45-kUw7) [sage] 2018/03/29(木) 10:37:15.71:+tUOh99Na
プロパティが使えたらMFCのような糞環境でUpdateDataを使わなくてよくなる

プロパティに代入で表示が変わり
プロパティからそのまま値が取り出せる
デフォルトの名無しさん (ワッチョイ d180-3UCh) [] 2018/03/29(木) 10:39:27.42:+dX3Weor0
しかしVisual Studioは何だってUTF-8で保存されるのをそんなに嫌うんだろうか。
あの手この手でUTF-8で保存するのを妨害してくるけど。
デフォルトの名無しさん (ワッチョイ d180-3UCh) [] 2018/03/29(木) 10:40:42.80:+dX3Weor0
VSで開発してLinuxに移植されるのを嫌がってるんだろうかね。
その割にはgdbと接続できるようにしてるし。
デフォルトの名無しさん (ワッチョイ 7923-KOzE) [sage] 2018/03/29(木) 10:47:23.77:Hc4kPWXM0

ナイナイ
今だって setFoo() だの getFoo() だの実装すりゃできるけど初学者以外はやらないだろ?
実装するにも使うにも効率が悪いからね。
デフォルトの名無しさん (ワッチョイ d3cb-436e) [sage] 2018/03/29(木) 10:47:32.92:+dsdqxPO0

それはsetter/getterではできないことなんだな?
デフォルトの名無しさん (スップ Sdf3-Myl/) [] 2018/03/29(木) 10:57:10.36:HNpF58Nud
a.Hoge+=100;
みたいな事をできて便利だなと思うことはあるけど無けりゃないでいいわレベル
デフォルトの名無しさん (ワッチョイ 59d3-kUw7) [sage] 2018/03/29(木) 11:06:30.37:q+sj+Afe0
プロパティはメソッドともフィールドとも区別できるメタデータとしての活用が唯一の動機なんだが
結局のところ実行時の型システムまで整備しないととただの構文糖だしなあ
デフォルトの名無しさん (アウアウウー Sa45-kUw7) [sage] 2018/03/29(木) 11:06:41.49:+tUOh99Na

A.Width+=20;

A.setWidth(A.getWidth()+20);

どっちがいい?;
デフォルトの名無しさん (アウアウウー Sa45-wAfm) [sage] 2018/03/29(木) 11:10:04.25:jtsbgEO5a

後者の方が好きだな
デフォルトの名無しさん (アウアウウー Sa45-kUw7) [sage] 2018/03/29(木) 11:14:39.59:+tUOh99Na
a.value++とかif(a.Width==100)とか
普通に書けるものをわざわざgetter setter書きたいんだな
変ってる
デフォルトの名無しさん (ワッチョイ 7923-KOzE) [sage] 2018/03/29(木) 11:32:58.49:Hc4kPWXM0
UI とのバインディングを失笑されたら
シンタックスシュガーでこんなに楽にかける!と主張し始めたよw
そりゃ楽にかけて便利だよな。
そのためのものだもの。そこは同意する
デフォルトの名無しさん (アウアウウー Sa45-kUw7) [sage] 2018/03/29(木) 11:35:30.24:+tUOh99Na
GUIだけじゃなくて他にも使えるというか
他がメイン
デフォルトの名無しさん (ワッチョイ b37e-YG9/) [sage] 2018/03/29(木) 12:12:32.14:xx4XvERn0

そういう風にお手軽にメンバを書き換えるのは事故のもとなのでやめましょうってことでめんどくさくしたのに
戦争を知らない世代みたいな
現状でもa.value()++とかif(a.Width()==100)でできるしな
これまでのコードとの一貫性を破壊してなおかつ年代物のコンパイラに更に複雑なパースをさせて得られるものがちょっと括弧を省略するだけとは
デフォルトの名無しさん (スッップ Sdb3-VlFK) [sage] 2018/03/29(木) 12:14:06.74:mREgEFijd
プロパティのメリットは最初publicで適当に実装しといても後からgetter/setter付きのprivateに変えれる所じゃない?
デフォルトの名無しさん (ワッチョイ b37e-YG9/) [sage] 2018/03/29(木) 12:18:25.09:xx4XvERn0
変数がない状態でもテストに通るように作るべきだからpublicで変数を持たせる機会が一瞬もない
デフォルトの名無しさん (ワッチョイ d180-3UCh) [] 2018/03/29(木) 12:18:48.50:+dX3Weor0
C++builderってプロパティなかったっけ。
たいそう便利だったような気がするのだが、思い違いだろか。
デフォルトの名無しさん (ワッチョイ d180-3UCh) [] 2018/03/29(木) 12:19:57.65:+dX3Weor0
そもそも最近のGUIビルダってC++ビルダーの影響受けまくってるような感じがする。
デフォルトの名無しさん (ワッチョイ 9312-3n/u) [sage] 2018/03/29(木) 12:20:28.54:ONnwnPbh0
トップダウンで理想から考えるのが早い
どういう風に書ければ満足するんだ
デフォルトの名無しさん (アウアウウー Sa45-kUw7) [sage] 2018/03/29(木) 12:26:29.79:f5JOZCzba

パースが面倒になるとは思えない
変数と同じ使い方なんだから変数のようにパースするだけだと思うが…

それにお前はコンパイラつくらないじゃん
デフォルトの名無しさん (アウアウウー Sa45-kUw7) [sage] 2018/03/29(木) 12:28:52.39:f5JOZCzba
c++0x()以降の理念で仕様策定だけしたらいいじゃん
基本機能を妨げないように仕様追加

使うかどうかは本人次第
誰も強制しない
デフォルトの名無しさん (アウアウウー Sa45-kUw7) [sage] 2018/03/29(木) 12:30:14.95:f5JOZCzba
拡張forもautoも馬鹿みたいに文句言ってたけど今でも使うなって言う人はいるのかな
デフォルトの名無しさん (ワッチョイ d180-3UCh) [] 2018/03/29(木) 12:31:30.92:+dX3Weor0
使うな!
デフォルトの名無しさん (アウアウウー Sa45-kUw7) [sage] 2018/03/29(木) 12:31:44.70:f5JOZCzba
わかりました使いません…
デフォルトの名無しさん (スッップ Sdb3-VlFK) [sage] 2018/03/29(木) 12:59:19.47:mREgEFijd
頭かったwwww
デフォルトの名無しさん (ワッチョイ b37e-YG9/) [sage] 2018/03/29(木) 13:03:56.15:xx4XvERn0

これらを採択する人の中にGCCやMSVCの人がいないわけないじゃん
関数として扱うのか、変数として扱うのか決めなきゃいけない
そしてどうやってポインタをとるのかなど色々な問題がある
そしてさっきも言ったけど括弧を少し減らせるだけでできることが増えるわけじゃないというのが最大の問題
デフォルトの名無しさん (アウアウウー Sa45-kUw7) [sage] 2018/03/29(木) 13:16:13.95:f5JOZCzba
得意げにご高説を垂れ流してる最中に申し訳ありませんが

a.value++;

a.value()++;
は別物
あえてみんなスルーしてくれてるのに
デフォルトの名無しさん (ワッチョイ 1323-RCub) [sage] 2018/03/29(木) 13:20:41.15:ng76gyv10

参照返しなら同じでは?
デフォルトの名無しさん (アウアウウー Sa45-kUw7) [sage] 2018/03/29(木) 13:33:25.09:f5JOZCzba
ん?
参照した値を変えるとGUIの表示とか更新してくれんの?
getterとsetterあったとして実行してくれんの?

a.width()とa.widthが同じgetter的な動作してくれるのはわかるけど
デフォルトの名無しさん (スッップ Sdb3-VlFK) [sage] 2018/03/29(木) 13:38:37.15:mREgEFijd
アンチプロパティの人なんでそんなに必死なん?
デフォルトの名無しさん (ワッチョイ b37e-YG9/) [sage] 2018/03/29(木) 13:47:08.78:xx4XvERn0

プロキシクラス
デフォルトの名無しさん (スップ Sdb3-W7mk) [sage] 2018/03/29(木) 14:39:11.63:BTFPAIj5d
GUIの表示を更新するように作れば更新される
デフォルトの名無しさん (ワッチョイ 1908-kUw7) [sage] 2018/03/29(木) 14:39:13.31:DoW8QBEn0
a.value()++; が参照返しとかどんだけヘボいんだよw
リファレンサのprvalueだろjk
デフォルトの名無しさん (アウアウウー Sa45-kUw7) [sage] 2018/03/29(木) 15:02:55.47:f5JOZCzba
プロパティ不要とは言うけどそもそものプロパティの仕組みと効果はわかってないんだね
こんな人ばかり
デフォルトの名無しさん (ワッチョイ c1b3-tte4) [sage] 2018/03/29(木) 15:57:57.60:or4Xspy50
何スレか前にもプロパティの議論あったんだけどね・・
少なくともgetter/setterを自動生成する、みたいなクソな機能ではないぞ
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5b6f-kUw7) [sage] 2018/03/29(木) 16:02:08.91:frx7qa9h0
俺もそのとき発言してた
ttps://mevius.5ch.net/test/read.cgi/tech/1490917669/683
デフォルトの名無しさん (ワッチョイ 9334-3URi) [sage] 2018/03/29(木) 17:26:54.17:T1PPEJjr0

Builderだけtry-finallyセクション使えたり次元が違う希ガス
デフォルトの名無しさん (ワッチョイ 5be7-Cooj) [sage] 2018/03/29(木) 20:10:56.09:LRHKAKcy0

A.extendWidth(20);

それを書くことが便利で必要なクラスだったらそういう操作を作るべきだな
デフォルトの名無しさん (ドコグロ MMa3-PArs) [sage] 2018/03/29(木) 21:38:46.24:1OB4BLGUM

あったよ
も含めて当時はネイティブコードを吐くC#みたいな感じだった
もう少し頑張れるかと思ったけど、Visual Studioの便利さに負けたと思ってる
デフォルトの名無しさん (ブーイモ MMb3-vInS) [sage] 2018/03/29(木) 21:46:54.75:6IJhuxisM
カーンを首にしてアプリ側に振ったのが敗因だったな
膨大なdbaseの資産も全く使えなかったのはNetaWareと
同じだった
デフォルトの名無しさん (ワッチョイ d3cb-436e) [sage] 2018/03/30(金) 01:25:11.99:6elBmHqP0

え、違うの?
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5b6f-kUw7) [sage] 2018/03/30(金) 04:42:18.00:AQ2aJRgB0

違うよ。
デフォルトでのゲッタ/セッタを提供したりすることはあるけども、 で言及している通り「変数に見せかける」機能。
デフォルトの名無しさん (ドコグロ MMa3-PArs) [sage] 2018/03/30(金) 06:43:57.86:MnRWcQoLM
そもそも変数に見せかけると言うプロパティ自体の話とgetter/setterの自動生成の話は全く別物でで比較してる意味がわからん
たぶん本人もちゃんと理解できてないんだろうな...
デフォルトの名無しさん (オイコラミネオ MM6b-ePcA) [sage] 2018/03/30(金) 07:46:44.11:QwXbOxz8M

例えば座標なら+=使えた方が楽じゃね
デフォルトの名無しさん (ブーイモ MMab-q1Nq) [sage] 2018/03/30(金) 08:33:24.78:x9Ml4xAFM

なんだそういうことか。それも含めて単なる自動生成だと認識してたよ。
デフォルトの名無しさん (ワッチョイ 4150-W7mk) [sage] 2018/03/30(金) 08:34:01.73:trt/A0j+0
そうやってソフトが重くなって行くわけだな

数値の += なんて軽いと思って何度も呼んだら
実は描画や保存も何度も呼ばれてしまうとか
デフォルトの名無しさん (ワッチョイ 417f-kUw7) [] 2018/03/30(金) 08:42:16.05:u8hlmR9G0
それはプロパティに限った問題ではないな
デフォルトの名無しさん (スップ Sdf3-qGf7) [sage] 2018/03/30(金) 08:45:16.06:+sennHugd
プロパティってそれ単体で取り出せるの?
それなら使えるな
デフォルトの名無しさん (スップ Sdb3-W7mk) [sage] 2018/03/30(金) 08:52:02.87:HVaF4kSpd
呼ばれる側 : そんな何度も呼ばれるとは思わなかった
呼ぶ側 : 重いとは思わなかった
デフォルトの名無しさん (ワッチョイ b37e-YG9/) [sage] 2018/03/30(金) 09:52:35.47:mPLnga/50
少なくともAdd()なら何かしらの関数を呼んでいることはわかる
デフォルトの名無しさん (ワッチョイ 5be9-VlFK) [sage] 2018/03/30(金) 11:31:23.82:3ziE5qsO0
プロパティでもなんらかの関数が含んでいることはわかるが
デフォルトの名無しさん (ワッチョイ b37e-YG9/) [sage] 2018/03/30(金) 11:45:01.30:mPLnga/50
それがただの変数なのかプロパティなのかは調べるまでわからない
デフォルトの名無しさん (スッップ Sdb3-VlFK) [sage] 2018/03/30(金) 11:57:28.30:27QTfa4qd
調べろよ
デフォルトの名無しさん (ワッチョイ 417f-kUw7) [] 2018/03/30(金) 11:58:36.02:u8hlmR9G0
変数でも演算子がオーバーロードされてる場合もあるからな
結局調べないとダメ
デフォルトの名無しさん (スッップ Sdb3-VlFK) [sage] 2018/03/30(金) 12:01:32.59:27QTfa4qd
っていうかいわく、publicな変数は有り得ないらしいし、そういう運用してるなら考えるまでもなくプロパティじゃん
デフォルトの名無しさん (ワッチョイ c1b3-kUw7) [sage] 2018/03/30(金) 15:53:31.37:l98ixrSj0

お前のレスの意味がわからん
実際C#もソースコード公開されてるソフトの改造程度にしか触ったことないんでちゃんと理解してないが
getter/setterの自動生成するだけのクソ機能と誤解してる人がこのスレでも前スレでも見られたから
を書いただけなんだが

というか書き込む前の1〜2レスすら読めんのかお前は
デフォルトの名無しさん (ワッチョイ 1908-kUw7) [sage] 2018/03/30(金) 17:21:54.28:6y8tfNRe0
C++erが通常prvalueで返しているリファレンサを、データメンバにするってことなら
テンポラリを作らなくなる分、速度的なメリットはありそうだな

# でも、俺はイヤだな
# データメンバがドカドカ増えるのがなんか気持ち悪い
# 慣れの問題っちゃそうかも知れんが
デフォルトの名無しさん (スップ Sdf3-qGf7) [sage] 2018/03/30(金) 17:39:33.77:+sennHugd

言いたいことがわかった気がする
デフォルトの名無しさん (スップ Sdb3-W7mk) [sage] 2018/03/30(金) 17:42:52.50:HVaF4kSpd
やっとかよ
デフォルトの名無しさん (ドコグロ MMa3-PArs) [sage] 2018/03/30(金) 20:19:26.33:MnRWcQoLM

だからそんな誤解してるのはお前と同レベルのバカだけだろ w
言語仕様の話とIDEの機能の区別もつかないアホなんて放置でいい
デフォルトの名無しさん (ワッチョイ 5be9-VlFK) [sage] 2018/03/30(金) 20:30:23.19:3ziE5qsO0
自分から絡んで行ってバカ呼ばわりとはこれいかに
デフォルトの名無しさん (ドコグロ MMa3-PArs) [sage] 2018/03/30(金) 20:51:58.09:MnRWcQoLM
またバカが絡んできたよ w
デフォルトの名無しさん (ワッチョイ c1b3-kUw7) [sage] 2018/03/30(金) 20:59:28.09:l98ixrSj0

いや、なんか根本的に誤解されてる気がするが
C#とかだと、多分プロパティ作ると自動である程度書いてくれるんだろうけど
その話じゃなくて「C++におけるpublicなGetXX(), SetXX()が暗黙的に作られる(だけ)」、みたいな誤解
(C#やBuilder知らずに議論をぱっと見するとそういう誤解しがち、俺も以前はしてたが)
があるんだよな
説明不足だったかもしれんけどIDEの支援機能の話ではない

というか前スレのリンクにあったブログの
ttp://ufcpp.net/study/csharp/oo_property.html?key=property#property
これが個人的にはわかりやすかった
デフォルトの名無しさん (ワッチョイ 5be7-Cooj) [sage] 2018/03/30(金) 21:21:54.96:FlBD8vqz0
Javaのイメージなのかな?
あれはJavaBeansとかいうゴミ規約のせいで本当にGetXX()とSetXX()を作るだけのゴミ機能がIDEに標準装備だったりする
デフォルトの名無しさん (ワッチョイ 5be9-VlFK) [sage] 2018/03/30(金) 21:27:33.97:3ziE5qsO0
まあプロパティある言語触ったことないやつは勉強不足だから無視していいって言うのは一理ある
デフォルトの名無しさん (ワッチョイ 4150-W7mk) [sage] 2018/03/30(金) 21:59:35.93:trt/A0j+0

現状のメンバへの代入や値取得が
暗黙的に作られるgetter/setter

プロパティが採用されてもこの辺はなんら変わらないかと
デフォルトの名無しさん (ブーイモ MMab-q1Nq) [sage] 2018/03/30(金) 22:16:15.58:8D6duvwPM
お前らの書き込み見ると、プロパティがものすごい大発明なんじゃないかと錯覚するけど
変数のようにかける件を含めても糖衣構文以上のものじゃないだろ。
+=したけりゃそういうプロキシ書けばいい。
デフォルトの名無しさん (ワッチョイ 4150-W7mk) [sage] 2018/03/30(金) 22:21:10.98:trt/A0j+0
お前らってだれだよ
一人だけだろプロパティ信者
デフォルトの名無しさん (ワッチョイ 4150-W7mk) [sage] 2018/03/30(金) 22:25:41.11:trt/A0j+0
これ以上言語機能を増やさなくて良い
コンパイラが規格に追い付いてなくて互換性が崩れる
デフォルトの名無しさん (ワッチョイ 5be7-Cooj) [sage] 2018/03/30(金) 22:28:08.90:FlBD8vqz0
クソ機能というわけではないが、ものすごく便利というわけでもない
あればあったで使うけど、ないならないで困らないし、言語設計として採用するしないの判断はどっちもあり
C++は採用しない判断をした

その程度の話
デフォルトの名無しさん [] 2018/03/30(金) 23:12:27.73
実体が関数なら漢らしく見た目も関数にしろよwww

見た目が変数なのに処理が走るとか、見た目が割り算なのに文字列連結するとか変態野郎は死にくされやwwwww
デフォルトの名無しさん (ワッチョイ c1b3-kUw7) [sage] 2018/03/30(金) 23:32:31.76:l98ixrSj0
その辺はC++のコンストラクタ・デストラクタに嫌悪感を示すCユーザーが昔よく言ってた台詞と似てるw
「裏で何が起きてるかわかりづらいから嫌だ」、とかね
別に本気でプロパティ推してるわけじゃないが、いざプロキシクラスで代用しようとするとめんどい
ETなんかを仲介するとテンプレートの実体化の数でコンパイラへの負担がデカいし、
メンバ関数の呼び出しをサポートしようとすると継承が必要になるし・・・それなりに問題点はある
デフォルトの名無しさん (スフッ Sdb3-VlFK) [sage] 2018/03/30(金) 23:40:02.53:vpP76l93d

大発明じゃなくて、もはや常識。C++にはないって聞いて最初驚いたもん
いやまあたしかになくてもいいんだけど、演算子オーバロードはあるのにプロパティはないって変な言語だわ
デフォルトの名無しさん (スフッ Sdb3-VlFK) [sage] 2018/03/30(金) 23:41:38.85:vpP76l93d

それiostremディスってんの?
デフォルトの名無しさん (ワッチョイ d3cb-q1Nq) [sage] 2018/03/31(土) 00:11:17.76:o3PNwIlC0

お前が驚くと凄いことなん?
デフォルトの名無しさん (ワッチョイ d3bd-qsUw) [sage] 2018/03/31(土) 00:12:18.16:aFk+9CH40

はiostreamを擁護する気か
デフォルトの名無しさん (ワッチョイ 2b9a-ePcA) [sage] 2018/03/31(土) 00:19:06.77:iyPH7JTK0
ダイヤモンド継承使われてるんだっけ
あれ使ったことないな
いらない機能だと思うなら使わないってだけだしプロパティはあった方がらくだと思うけどね
独自拡張でつけてるのもあるし
デフォルトの名無しさん (スフッ Sdb3-VlFK) [sage] 2018/03/31(土) 00:25:31.98:NJ7AGlMvd

凄くないよ

すまん。適当書いたけどiostremは擁護出来ねえわ
デフォルトの名無しさん (ワッチョイ 5be7-Cooj) [sage] 2018/03/31(土) 00:47:52.27:C63IJ9vb0
iostreamの<<チェーンが実は最近まで規格上未定義動作だった話は正直呆れた
デフォルトの名無しさん (ワッチョイ b37e-YG9/) [sage] 2018/03/31(土) 01:02:47.99:19OTzhSN0
採択されてもプロパティのアドレスをどうやって取るのかっていうことで標準化委員会で揉めて10年は停滞する
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5b6f-kUw7) [sage] 2018/03/31(土) 01:48:24.57:nFIfPX7B0

サブオブジェクトがユニークアドレスを取れなくてもいいことを示す [[no_unique_address]] 属性が C++20 のドラフトに入った。
ttp://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0840r1.html
オブジェクトがユニークなアドレスを持つ原則を捨てたわけ。

これを踏襲するなら、プロパティのアドレスは取れないってことにして解決するのが自然で、揉める余地はそんなにないと思う。
実際にアドレスは存在しないわけだし、存在しないものを返しようがないじゃん。
デフォルトの名無しさん (ワッチョイ b37e-YG9/) [sage] 2018/03/31(土) 02:09:16.31:19OTzhSN0

最初のプロパティの提案がいつかはしらないけど
実際にこれが決まったとして最短で2020年
そこから更に何年かかるのか
デフォルトの名無しさん (ワッチョイ 9368-uaFS) [sage] 2018/03/31(土) 04:29:43.55:O6Ruc86y0
抽象クラス"Super"から派生した子クラス、"A", "B", "C"があったとします。

Super* obj1 = new A();
Super* obj2 = new B();
Super* obj3 = new C();

訳あって動的に作成したインスタンスobj1〜3を一度deleteしたのち
再び同じ子クラスでインスタンスを作成しようと思います。

obj2がクラスBのインスタンスであることが一目で分からない場合に
obj2がクラスBのインスタンスであることを突き止め、一度deleteし、
再度クラスBでインスタンスを作成する方法はあるでしょうか?

ちなみに必死に考えて考えついた方法ですが
クラスA, B, Cにそれぞれ「私はAクラスです」「私はBクラスです」みたいな
文字列を出力する共通メソッドをpublicで作成し、そのメソッドを実行して
帰ってきた文字列からそれがどのクラスのインスタンスか判別が付くのではないかなと思いました。
決してスマートな方法とは言えませんが・・・

もっとスマートな方法はありますか?
デフォルトの名無しさん (ワッチョイ db0e-uaFS) [sage] 2018/03/31(土) 04:37:13.22:350O8bDz0
・・・?
typeidじゃアカンの?
デフォルトの名無しさん (ワッチョイ 1908-kUw7) [sage] 2018/03/31(土) 05:55:27.21:15qJIIAA0
class B : public Super
{
public:
Super* re_new() override
{
delete this;
return new B{};
}
};
デフォルトの名無しさん (ワッチョイ 5be7-Cooj) [sage] 2018/03/31(土) 06:37:47.25:C63IJ9vb0

単純に &obj.int_prop と書いた時に、この式の型と値をどうするかは難しい問題じゃない?
intの一時オブジェクトへのポインタ、intのぬるぽ、int_propのgetterへの関数メンバポインタ、ill-formed
どれも問題あると思う
デフォルトの名無しさん (ワッチョイ 4104-2GNe) [sage] 2018/03/31(土) 06:47:39.87:8va89mAu0
プロパティを関数として実装したら関数のアドレスは取れるんじゃないかなぁ。はぁ、実装依存ですか。
デフォルトの名無しさん (アウアウカー Sadd-LLtt) [sage] 2018/03/31(土) 08:02:21.38:5h07DQhTa

全然スマートじゃないがvisitorパターン使えば?
デフォルトの名無しさん (ワッチョイ 93b3-PArs) [sage] 2018/03/31(土) 09:03:59.00:OaeapR1O0

> 単純に &obj.int_prop と書いた時に、この式の型と値をどうするかは難しい問題じゃない?
エラーにしちゃえばいいだろ
デフォルトの名無しさん (ワッチョイ 4150-W7mk) [sage] 2018/03/31(土) 09:14:46.66:HGehdmya0
つまり意識しなきゃならんてことか
じゃあ素直に関数にしろよ
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5b6f-kUw7) [sage] 2018/03/31(土) 09:16:04.32:nFIfPX7B0

一時オブジェクトへのポインタってことにする一択だと思うけどなぁ。

あくまでも「変数に見せかける」、
つまりは、ゲッタの呼出しに構文糖を付けて見かけ上だけ変数 (データメンバ) っぽいって立場を貫かないと、
余計な気を回してもわかり難さが増すだけだよ。
rvalue なのは仕方がない。
デフォルトの名無しさん (ワッチョイ 9334-3URi) [sage] 2018/03/31(土) 09:16:21.25:Nj0xu+770
どうしてアドレスを取りたがるのかよくわからない
クラスのメンバ関数だってアドレス取れないだろ
デフォルトの名無しさん (ワッチョイ 9334-3URi) [sage] 2018/03/31(土) 09:18:00.18:Nj0xu+770
ああメンバ仮想関数な
デフォルトの名無しさん (ワッチョイ 4104-2GNe) [sage] 2018/03/31(土) 09:18:37.44:8va89mAu0

メンバ関数のポインタ構文が何故あるのですか?
デフォルトの名無しさん (ワッチョイ 4104-2GNe) [sage] 2018/03/31(土) 09:18:44.11:8va89mAu0
あー。
デフォルトの名無しさん (ワッチョイ 9334-3URi) [sage] 2018/03/31(土) 09:22:26.84:Nj0xu+770
訂正しただろ
仮想関数はアドレスが取れないだろ
デフォルトの名無しさん (ワッチョイ 1908-kUw7) [sage] 2018/03/31(土) 09:23:29.95:15qJIIAA0
取れるよ、何言ってんの
そのポインタは動的結合までできる優れもの
デフォルトの名無しさん (ワッチョイ 9334-3URi) [sage] 2018/03/31(土) 09:25:45.36:Nj0xu+770
出来ないよ
何いってんの
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5b6f-kUw7) [sage] 2018/03/31(土) 09:26:00.49:nFIfPX7B0

変数に見せかける以上は変数と同じようにふるまうことを期待するってのは普通の要求じゃないか?
データメンバに対して操作するテンプレートはプロパティを操作するテンプレートとしても使えて欲しい。
でもまあ充分に「見せかける」ことが出来ないのなら問答無用でエラーになった方がマシではあるかもしれん。
デフォルトの名無しさん (ワッチョイ 5be7-Cooj) [sage] 2018/03/31(土) 09:41:17.12:C63IJ9vb0
objがlvalueなのにobj.int_propがrvalueになるのはまずいと思うんだよなあ
うっかり関数の戻り値でその参照なんか返そうものなら相当わかりにくいバグになる
C#とかはその辺の問題どう解決してるのかしらね
デフォルトの名無しさん (ワッチョイ 9334-3URi) [sage] 2018/03/31(土) 09:48:31.98:Nj0xu+770
property int count {
>>() {return count_ ; } // getter
<<(int cnt) {SetCount(cnt):} // setter
&() {return &count_;} // address getter
};
みたいにアドレス抽出用のメソッドを追加すりゃ良いだけのような気がする
デフォルトの名無しさん (ワッチョイ 4150-W7mk) [sage] 2018/03/31(土) 10:00:37.36:HGehdmya0
コードを減らす為の規格追加でコードを増やす解決法

う〜ん
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5b6f-kUw7) [sage] 2018/03/31(土) 10:21:02.77:nFIfPX7B0

これは抽象化の話なんだよ。
変数のように見せかけるためには何が必要かって話なの。
デフォルトの名無しさん (ワッチョイ 1908-kUw7) [sage] 2018/03/31(土) 10:29:50.12:15qJIIAA0

ttps://ideone.com/1J8uwf
デフォルトの名無しさん (ワッチョイ 9334-3URi) [sage] 2018/03/31(土) 10:35:19.80:Nj0xu+770
property int count {
() {return count_ ; } // getter
=(int cnt) {SetCount(cnt):} // setter
&() {return &count_;} // address getter
++() {return ++count; } // incrementer
}
この方がしっくり来るな
デフォルトの名無しさん (スップ Sdb3-W7mk) [sage] 2018/03/31(土) 10:56:40.26:aygih7Tkd
予約語を増やすとどれだけの影響があるか
なんて考えたことはないのかな?
デフォルトの名無しさん (スップ Sdb3-W7mk) [sage] 2018/03/31(土) 10:57:47.19:aygih7Tkd
まあここはC++相談室
おれが考えた最強言語を語るところじゃない
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5b6f-kUw7) [sage] 2018/03/31(土) 11:05:17.81:nFIfPX7B0
opaque definition でゲッタを定義できるように拡張すればプロパティ専用の構文を導入する必要なく
プロパティを実現できるのではないかと妄想していた。
デフォルトの名無しさん (ワッチョイ 9334-3URi) [sage] 2018/03/31(土) 11:10:24.41:Nj0xu+770
using count = int {
() {return count_ ; } // getter
=(int cnt) {SetCount(cnt):} // setter
&() {return &count_;} // address getter
++() {return ++count; } // incrementer
};
予約語増やさないならこんな感じに書けなくもない
デフォルトの名無しさん (ワッチョイ 5be9-VlFK) [sage] 2018/03/31(土) 11:21:25.52:Pb+ZodvD0
プロパティの実装の議論までここでするか?
Dと同じでいいじゃん
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5b6f-kUw7) [sage] 2018/03/31(土) 11:23:19.53:nFIfPX7B0
前提が違うものを同じには出来ないよ。
参考にすることはあると思うけど。
デフォルトの名無しさん (スップ Sdf3-qGf7) [sage] 2018/03/31(土) 12:19:04.21:+mjd8c8id
仮想関数のアドレスが取れないという発言は何だったんだろう
デフォルトの名無しさん (ワッチョイ b37e-YG9/) [sage] 2018/03/31(土) 13:29:05.67:19OTzhSN0

std::pair<Super*,std::string> obj2 = std::make_pair(new B(), "ClassB");
デフォルトの名無しさん (スップ Sdb3-W7mk) [sage] 2018/03/31(土) 13:32:44.21:aygih7Tkd
スレチ
次スレまで引きずるなよ
デフォルトの名無しさん [] 2018/03/31(土) 13:50:16.75

クラスA, B, Cにそれぞれ自分自身のインスタンスを生成するstaticメソッドを用意し、
そのstaticメソッドへのポインタを返す共通メソッドを用意する。
デフォルトの名無しさん (ワッチョイ d3bd-qsUw) [sage] 2018/03/31(土) 14:23:30.31:aFk+9CH40
リフレクションがある言語でGUIの画面またはユーザーコントロールを作成する際に
YSIWYGで作ることをやれるIDEを作りたい、というときに、メンバー関数とプロパティーの2種類あったら便利なのや

C++にプロパティー入れたらリフレクションも来るでこれは…

もっとも上記課題解決のための技術は10年も前にWPFの登場で丸ごと過去の技術やがな…
デフォルトの名無しさん (ワッチョイ d3bd-qsUw) [sage] 2018/03/31(土) 14:30:32.65:aFk+9CH40
ていうかWPFのコンバーターの書き方とか、メンバ関数に逆戻りやぞ…
(IValueConverter.Convert(), IValueConverter.ConvertBack(),
 IMultiValueConverter.Conver(), IMultiValueConverter.ConvertBack(), ...
デフォルトの名無しさん (アウアウウー Sa45-uaFS) [sage] 2018/03/31(土) 15:43:53.79:UG1yVXDXa
リフレクションはゴミとまで言わないけどc++にはいらない機能
デフォルトの名無しさん (ワッチョイ d180-3UCh) [] 2018/03/31(土) 16:09:17.20:D1vbg0pQ0
リフレクションがあれば死なずに済んだ人もいるだろうに。
デフォルトの名無しさん (アウアウウー Sa45-uaFS) [sage] 2018/03/31(土) 16:37:26.06:UG1yVXDXa
デバッグでリフレクション使うのか?
デフォルトの名無しさん (ワッチョイ d3cb-q1Nq) [sage] 2018/03/31(土) 20:24:42.16:o3PNwIlC0
C++相談室 part135
ttp://mevius.5ch.net/test/read.cgi/tech/1522495206/

もう糞テンプレいらないよね?
あと死ね
デフォルトの名無しさん (ワッチョイ 9380-V9Xo) [sage] 2018/03/31(土) 22:27:57.63:u+oLKOIo0
うむごくろう。
デフォルトの名無しさん (アウアウカー Sadd-LLtt) [sage] 2018/04/01(日) 18:13:20.31:JVL2cf0wa
c++のfriendはprivateメンバーすべてにアクセスできてしまうけど特定の変数だけ、もしくは特定の関数だけfriendにする事は可能でしょうか?
デフォルトの名無しさん (ブーイモ MMab-q1Nq) [sage] 2018/04/01(日) 18:43:04.30:nEv6CmIlM

ピンプるか、○○って俺の友達の友達なんだぜーにしてしまうか、かなー
デフォルトの名無しさん (アウアウウー Sa45-HAdz) [] 2018/04/01(日) 19:11:40.34:BG5JJopwa
pimplイデオムはなんとなくわかるけど、俺の友達の友達は編集したい対象を別のクラスに分けてしまうこと?
デフォルトの名無しさん (ワッチョイ c1f2-kUw7) [sage] 2018/04/01(日) 20:21:44.04:WPbk7cUz0
そういえばシステムハンガリアンはしばしば批判されるのに、pimplのpは批判されているのを見たことがないな。
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5b6f-kUw7) [sage] 2018/04/01(日) 21:12:28.11:47FEpc5z0
ttps://www.google.com/search?q=%E5%8D%8A%E5%88%88%E3%82%8A&tbm=isch
デフォルトの名無しさん (ワッチョイ d3cb-q1Nq) [sage] 2018/04/01(日) 22:32:25.37:EwuQ9U5u0
(餃子が (御乱心 (されたぞー)))
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5b6f-kUw7) [sage] 2018/04/01(日) 23:03:08.00:47FEpc5z0

そこは「ハンガリアンじゃなくて半刈りやん」って言って欲しかった。
デフォルトの名無しさん (アウアウカー Sadd-LLtt) [sage] 2018/04/02(月) 07:54:09.78:t04teqlda
いやいやこんなの丸刈りやん
デフォルトの名無しさん (ワッチョイ 19bd-kUw7) [sage] 2018/04/02(月) 09:36:33.18:E1iWIfmB0

YSIWYGってなに?
デフォルトの名無しさん [] 2018/04/02(月) 11:52:25.29

WYSIWYGのtypoなだけやん
アスペか
デフォルトの名無しさん (ワッチョイ 19bd-kUw7) [sage] 2018/04/02(月) 12:50:23.03:E1iWIfmB0
訂正だろ? 態度悪いなおまえ
1001 [] Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 72日 3時間 44分 41秒
1002 [] Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
ttps://premium.5ch.net/

▼ 浪人ログインはこちら ▼
ttps://login.5ch.net/login.php

勢い5万以上のスレをメールでお知らせするサービス、実施中!!
憧れボディをGETしたい!その夢、ボニックで!

2ch勢いランキング アーカイブ プログラム板ランキング

凡例:

レス番

100 (赤) → 2つ以上レスが付いている
100 (紫) → 1つ以上レスが付いている

名前

名無しさん (青) → sage のレス
名無しさん (緑) → age のレス

ID

ID:xxxxxxx (赤) → 発言が3つ以上のID
ID:xxxxxxx (青) → 発言が2つ以上のID

このページは2ch勢いランキングが作成したアーカイブです。削除についてはこちら