トップページ⇒tech
1001コメント281KB

C++相談室 part113

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん2014/06/08(日) 01:11:44.20ID:Yu9dzYLs
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。

前スレ
C++相談室 part112
http://peace.2ch.net/test/read.cgi/tech/1396656048/

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

次期規格C++1yはこちら
C++14/C++1y
http://peace.2ch.net/test/read.cgi/tech/1382889622/
0002デフォルトの名無しさん2014/06/08(日) 01:14:50.47ID:Yu9dzYLs
ごめん。>>1に貼り忘れた。

■長いソースを貼るときはここへ。■
 http://codepad.org/
 http://ideone.com/
0003デフォルトの名無しさん2014/06/08(日) 07:14:24.99ID:deHViVaY
おっと貼り忘れ

【重要】
hogeは禁止です。使用しないでください。
万が一hogeが書き込まれても、スルーしてください。
相手にするとあなたも荒らしと同じ扱いになります。
0004デフォルトの名無しさん2014/06/08(日) 07:15:16.85ID:deHViVaY
STLつかうと一気に実行ファイルサイズが10倍に?!

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

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

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

#include <stdafx.h>
後死ね。

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

----テンプレここまで-----
0005デフォルトの名無しさん2014/06/08(日) 08:20:43.30ID:b9obj5lE
本日のチョーセン人 ID:deHViVaY
0006デフォルトの名無しさん2014/06/08(日) 10:12:24.46ID:0Lw+a8V2
↑ いつものボット 無視してね
0007デフォルトの名無しさん2014/06/08(日) 10:37:31.15ID:b9obj5lE
↑IDを変えたチョーセン人
0008デフォルトの名無しさん2014/06/08(日) 22:40:16.22ID:x9SW8Oio
以下、質問禁止。
自分で調べろ。
0009デフォルトの名無しさん2014/06/08(日) 23:04:55.85ID:b9obj5lE
相談ならおけ
0010デフォルトの名無しさん2014/06/09(月) 09:29:57.76ID:yWzNLpto
class a{
static a *b;
~a(){a=nulptr;}
a * getInstance(){略}
};
a *a::b=nulptr;

この場合getInstanceの戻り値をdeleteするとき
aを書き換えてるんですけどメモリーは解放されるんですか?
0011デフォルトの名無しさん2014/06/09(月) 09:44:59.62ID:CV1N0NlN
class a{
static a *b;
~a(){b=nulptr;}
a * getInstance(){
if(b!=nulptr)return b;
b=new a;
return b;
}
};
a *a::b=nulptr;

この場合getInstanceの戻り値をdeleteするとき
bを書き換えてるんですけどメモリーは解放されるんですか?
0012デフォルトの名無しさん2014/06/09(月) 09:48:44.15ID:n5kzZRjz
>>11
どういう理屈でメモリーが解放されないかもしれないと思うの?
0013デフォルトの名無しさん2014/06/09(月) 09:52:02.42ID:CV1N0NlN
delete a::getInstance();
のやっていることの想像です。
a::getInstance()=nulptr
a::getInstance()のメモリーを解放
0014デフォルトの名無しさん2014/06/09(月) 09:53:38.89ID:CV1N0NlN
delete a::getInstance();
のやっていることの想像です。
a* b=a::getInstance()
b=nulptr
bのメモリーを解放
0015デフォルトの名無しさん2014/06/09(月) 10:44:55.53ID:j0LvVAAE
ヌルポインタへのdeleteは何もしないのでメモリも解放されない
別の所をポイントしてたら動作は未定義
少なくとも期待する結果にはならない
0016デフォルトの名無しさん2014/06/09(月) 11:00:14.29ID:CV1N0NlN
getInstanceの戻り値はクラス変数bのコピーじゃないですか?
bにnulptrを入れたとしてもgetInstanceの戻り値とは関係ないんじゃないですか?
0017デフォルトの名無しさん2014/06/09(月) 11:06:31.17ID:CV1N0NlN
class a{
static a *b;
~a(){b=nulptr;}
a ** getInstance(){
if(b!=nulptr)return &b;
b=new a;
return &b;
}
};
a *a::b=nulptr;
この方法だとメモリー解放されないけれど、>>11の方法だと
解放されるということですか?
0018デフォルトの名無しさん2014/06/09(月) 11:09:11.05ID:n5kzZRjz
>>16
それらが関係ないとわかっていれば、そもそも>>11のような疑問は出てこないと思うんだけど・・・
0019デフォルトの名無しさん2014/06/09(月) 11:12:23.52ID:CV1N0NlN
すみません、間違えました17で解放されるか教えてください。
0020デフォルトの名無しさん2014/06/09(月) 11:18:36.06ID:CV1N0NlN
使い方
a ** b =getInstance();
delete *b;
0021デフォルトの名無しさん2014/06/09(月) 11:19:38.00ID:n5kzZRjz
>>19
(>>17にdelete無いんだけど・・・)
delete getInstance() の場合 new で得られたポインタじゃないものを delete しているので、未定義動作になる。
delete *getInstance() だとすれば>>11と同じ。
0022デフォルトの名無しさん2014/06/09(月) 11:22:00.23ID:n5kzZRjz
ごめん。リロードしてなかった。

>>20
それなら>>11と同じ。
0023デフォルトの名無しさん2014/06/09(月) 11:24:01.09ID:CV1N0NlN
初めて知ったんですけど
a *b=new a;
a* c=b;
delete c;
は動作未定義なんですか?
0024デフォルトの名無しさん2014/06/09(月) 11:29:30.63ID:n5kzZRjz
>>23
んなこたーない。
それ、どこ情報よ?
0025デフォルトの名無しさん2014/06/09(月) 11:33:02.59ID:CV1N0NlN
>>21情報です。
>>23を>>21に当てはめるとgetInstance()がcでbがbになります。
0026デフォルトの名無しさん2014/06/09(月) 11:38:30.23ID:CV1N0NlN
>>20のdeleteが何をしているのか2パターン考えられるじゃないですか?
1は
a* c=*b;
*b=nullptr;
*cのメモリーを解放する
2は
*b=nulptr;
*bのメモリーを解放する
0027デフォルトの名無しさん2014/06/09(月) 11:39:19.91ID:n5kzZRjz
>>25
ちがう。

>>17のコードで delete getInstance() すると、↓と同じことになる。

a* b=new a;
a** c=&b;
delete c;

delete b も delete *c も有効だが、 delete c は未定義。
0028デフォルトの名無しさん2014/06/09(月) 11:42:10.02ID:CV1N0NlN
>>27
17ではdelete getInstance() しません。
0029デフォルトの名無しさん2014/06/09(月) 11:44:41.57ID:n5kzZRjz
>>26
2 は無い。(っていうか "a::b" と "b" の区別を含めていろいろ曖昧すぎる・・・)

>>28
delete *getInstance() なら>>11と同じ。(って>>21に書いてるだろ・・・)

しばらくレスできなくなるけど、あとはおちついてよく考えるんだ。
0030デフォルトの名無しさん2014/06/09(月) 11:47:08.19ID:CV1N0NlN
いや、同じじゃないです。
*bはa::bと同じポインターだけど
>>11のbはa::bのコピーなので
b=nulptrするのがdeleteするポインターと同じになります。
0031デフォルトの名無しさん2014/06/09(月) 12:43:28.42ID:CV1N0NlN
class a{
public:
static a *b;
~a(){
b=nulptr;
}
};
a *b a::b=nulptr;

void main(){
a *b=new a;
a::b=b;
delete a::b;
}
問題を簡略化してみました。
これでbのメモリーは解放されますか?
0032デフォルトの名無しさん2014/06/09(月) 12:52:55.20ID:CV1N0NlN
class a{
public:
static a *b;
~a(){
b=nulptr;
}
};
a *a::b=nulptr;

void main(){
a *b=new a;
a::b=b;
delete a::b;
}
問題を簡略化してみました。
これでbのメモリーは解放されますか?
0033デフォルトの名無しさん2014/06/09(月) 13:20:07.08ID:THWp8jxa
解放されるよ
あとnullptrな
0034デフォルトの名無しさん2014/06/09(月) 13:31:26.15ID:CV1N0NlN
ありがとうございます。
0035デフォルトの名無しさん2014/06/09(月) 22:00:04.75ID:ZwnzJPC1
あとint main…
0036デフォルトの名無しさん2014/06/09(月) 22:19:57.10ID:v7FrFn6X
子ダイアログから親ダイアログにメッセージを送りたいのですが
GetParent()->SendMessage(WM_APP_SENDDATA, 0, 0);
を実行すると
Debug Assertion Failed!
というエラーになります。
これはどういう意味でしょうか

ただエラーになるのですがメッセージは送れているようです。
0037デフォルトの名無しさん2014/06/09(月) 22:28:31.34ID:zxrBBvMT
それはC++の問題なの?
0038デフォルトの名無しさん2014/06/09(月) 22:32:02.53ID:nm0lB/Yq
>>1に書かれた「C++に関する質問」であることに間違いはないな
0039362014/06/10(火) 08:31:29.84ID:XG42HBgQ
失礼、コンパイルする環境を変えると直りました。
何か別の原因だったようです。すいません
0040デフォルトの名無しさん2014/06/10(火) 12:24:24.38ID:IvxqNLPW
std::functionのようなものでrandom access iteratorならなんでもいれらるものありませんか?
0041デフォルトの名無しさん2014/06/10(火) 12:44:27.63ID:RmP35YOF
>>40
boost.typeerasureでも使えば?
0042デフォルトの名無しさん2014/06/10(火) 15:08:17.71ID:BDmNxZdl
>>1奴隷として同じ日本人を扱う安倍首相は天才。まさしく奴隷商人の感性を持った逸材。


安倍政権「非正規の「働きぶり」で上級、中級、初級の3段階の資格を与える【ブラック歓喜】
http://hayabusa3.2ch.net/test/read.cgi/news/1402374657/


12 名前: フランケンシュタイナー(庭)@転載は禁止[sage] 投稿日:2014/06/10(火) 13:37:11.07 ID:J/FVvDD00
カースト制度そのまんまやん。
昔で言うひにんとか作ってブラック正社員にあの人達よりマシって思わせて飼い慣らす目的だろ。

34 名前: エメラルドフロウジョン(愛知県)@転載は禁止[] 投稿日:2014/06/10(火) 13:47:17.30 ID:OTpT9+Mk0
奴隷の階級化
ただのカースト制じゃねえか
安倍ちょんマジでキチガイだわ

60 名前: 急所攻撃(関西・北陸)@転載は禁止[sage] 投稿日:2014/06/10(火) 14:07:45.70 ID:JuMWg9xNO
奴隷にさらなるカースト制度を設けるとか鬼だな
0043デフォルトの名無しさん2014/06/10(火) 19:37:44.07ID:x3SXJIDA
>>42
じゃまず政治家にこれを適用しましょう。
国民投票で当選1年後の現役の国会議員を評価します。
0044デフォルトの名無しさん2014/06/11(水) 16:40:58.43ID:L9Q5vk2d
vector<string> vect;
を
vector<wstring> vectw;
に一行で変換するにはどう書けばよいでしょうか?
0045デフォルトの名無しさん2014/06/11(水) 18:51:02.00ID:hjMUIW59
>>44
関数を作る
0046デフォルトの名無しさん2014/06/12(木) 12:42:35.50ID:hsqrOepF
文字コードに何を使っているのか知らないけど、stringstreamとlocaleあたりを使えば出来た気がする
0047デフォルトの名無しさん2014/06/12(木) 19:35:27.54ID:0ja758uB
実行するとexeのフルパスが取得されます。これを実行しているDLLのフルパスを取得するようにしたいです。
どうすればいいですか?

char Path[MAX_PATH];
char Drive[_MAX_DRIVE];
char Dir[_MAX_DIR];

//実行中のプロセスのフルパス名を取得する
GetModuleFileName(NULL, Path, sizeof(Path));

//フルパス名を分割する
_splitpath(Path, Drive, Dir, NULL, NULL);

// フルパスに拡張子logを統合
_makepath(File, Drive, Dir, FileName, logd);
0048デフォルトの名無しさん2014/06/12(木) 20:06:57.42ID:5X44WIMg
DllMainのhinstDLLをGetModuleFileNameの第一引数に入れる
0049デフォルトの名無しさん2014/06/12(木) 21:54:27.53ID:0ja758uB
>>48
できました。ありがとうございました。
0050デフォルトの名無しさん2014/06/13(金) 12:22:06.85ID:9gHonLie
ストラテジパターンでストラテジーをコンストラクターで渡すとき
ポインターで渡したいんですけど、ストラテジーを使うクラスでデリートするのか
外でするのかわかりません。
中間をとってシェアードポインターを使えばA(new B)のような初期化もできて便利だとおもいませんか?
それ以外の方法はありますか?
0051デフォルトの名無しさん2014/06/13(金) 12:51:17.79ID:5OXa4R5Q
>>50
受け取るストラテジーをテンプレートメンバにして関数オブジェクトをうけとるようにする

てかみんななんでポインタ操作をしたがるんだろう
0052デフォルトの名無しさん2014/06/13(金) 12:58:20.31ID:9gHonLie
class strategy{

}
0053デフォルトの名無しさん2014/06/13(金) 13:01:22.45ID:9gHonLie
>>51
意味がわからないので
>>52にテンプレートを用意したので補完をよろしくお願いいたします。
0054デフォルトの名無しさん2014/06/13(金) 13:36:47.50ID:5OXa4R5Q
>>53
何この偉そうなクズ

template <typename T>
class do_strategy {
public:
  do_strategy(const T& func)
  : func_(func)
  {}

private:
  T func_;
};

こうだよすっとこどっこい
0055デフォルトの名無しさん2014/06/13(金) 13:48:19.22ID:9gHonLie
>>54
それはストラテジーを使うクラスですよね。
関数オブジェクトというのは演算子は()しかつかえない決まりなのは知ってますか?
それはただ単にテンプレートと参照をつかったstrategyパターンではないでしょうか?
0056デフォルトの名無しさん2014/06/13(金) 18:56:03.14ID:XyH8W1rs
>>51
>なんでポインタ操作をしたがるんだろう
ストラテジーにリソース含めたい場合があるからだろ
0057デフォルトの名無しさん2014/06/13(金) 21:46:42.48ID:ByfwEf7i
>>54
そのオブジェクトじゃその場限りの使い方しかできないよ。
0058デフォルトの名無しさん2014/06/13(金) 22:13:41.55ID:iMkTcJIB
秘技、その馬鹿切り!!
0059デフォルトの名無しさん2014/06/14(土) 04:33:09.33ID:Nz0M0H+R
ストラテジーをテンプレートにするとか、頭悪そう
0060デフォルトの名無しさん2014/06/14(土) 07:59:07.27ID:b0qVjXg+
ポインタ渡ししたいなら共有ポインタで渡せばいいじゃん
リソース関係は基本的にラッピングして手動で解放しちゃ駄目だよ
0061デフォルトの名無しさん2014/06/14(土) 08:11:54.04ID:9xESFZ5n
ダメなこたないだろ
そんなにマルチパラダイムがお嫌いならC++なんて使わないのが健全
0062デフォルトの名無しさん2014/06/14(土) 10:03:44.38ID:CqxJJ7nu
>>54
その do_strategy オブジェクトはなんの意味もないじゃないか。

T1 func1;
T2 func2;
・・・
Tn func_n;
といろいろあって、

clientClass clientObject(func_x);
とどれでも渡せるようにしたいんだろ。
0063デフォルトの名無しさん2014/06/14(土) 11:28:52.71ID:DZD17xWm
>>62
template<typename STO>
clientClass<T> makeUnko(STO fun) {
 return clientClass<T>{fun};
}
auto do=makeUnko([]{});

clientClassのロジックだけ使えて静的に差し替えられます
というのが>>54の発想では
0064デフォルトの名無しさん2014/06/14(土) 12:45:33.09ID:1EnkX8hr
文盲が多いな。
struct strategy {
 int ある処理1();
 double ある処理2();
 メンバー変数;
}
このように複数の関数(メンバー変数に依存の可能性有り)を持つクラスを
動的に差し替えられるようにするのがストラテジー
というのが>>55の主張なんだろ?
>>54じゃただのテンプレートメソッドパターン。

これはstd::functionでも解決できないから
ポリモーフィック型をunique_ptrで渡すのが自然。
0065デフォルトの名無しさん2014/06/14(土) 15:03:37.05ID:CqxJJ7nu
>>63
clientClass という名前でそういう役割を与えるのはおかしい。

clientClass は「do」を所有して、適宜呼び出したいんだよ。
実行時に差し替えるのもありだ。

その「do」じゃ受け取ってその場で使うことしかできない。
0066デフォルトの名無しさん2014/06/14(土) 16:01:59.36ID:bJFZK+Xv
>>65
単発のファンクタで済む教科書ストラテジーならfunctionにしとけ
差し替え放題だ
class ClientClass {
public:
  template<typename T>
  do_strategy(T fun) : fun(fun)
  {}

  std::function<void()> fun;
};
0067デフォルトの名無しさん2014/06/14(土) 16:15:33.47ID:ketvmJGu
ClientClass baka([]{});
baka.fun = []{}; //便利なパブリック(^^)
0068デフォルトの名無しさん2014/06/14(土) 16:49:21.92ID:H83ZJyuG
#define private public //おまじない
0069デフォルトの名無しさん2014/06/14(土) 22:18:07.41ID:jTZq6qcP
#define class struct // おなじない
0070デフォルトの名無しさん2014/06/14(土) 23:18:14.02ID:YZZBo9nx
#define const // おまじない
0071デフォルトの名無しさん2014/06/15(日) 06:51:34.73ID:0zd0fjQY
手持ちのプログラムを Variadic Template ベースに書き換えてるんだけど困ってます。
SFINAE がうまくできない。

template <typename T1, typename T2, typename T3>
auto test(T1&& t1, T2&& t2, T3&& t3, typename enable_ifなんちゃら〜 = 0 );

とか、最後の引数にデフォルト引数をつけてたやつが、Variadic にすると可変引数の後に置くことができなくなってしまう。

漠然として悪いんだけど、Variadic Template でSFI姉の使い方でなにかコツのようなものが
あったら教えて!
0072デフォルトの名無しさん2014/06/15(日) 07:34:17.93ID:Hwp3JKw1
>>71
「可変個テンプレ引数とデフォルト引数を組み合わせるな」
SFINAEの問題じゃない
0073デフォルトの名無しさん2014/06/15(日) 08:00:52.53ID:0zd0fjQY
>>72
そうです。だからデフォルト引数にせず、かつ可変引数より前に持っていくしかない、って結論になりました。
でもそうすると、前方にあった引数の情報を使ったSFINAEができなくなってしまう。

template <typename T1, typename T2, typename T3>
auto test(T1&& t1, T2&& t2, T3&& t3, 〜t1とt2とt3の情報を使ったSFINAE〜 );
から、
template <typename... T>
auto test(〜t1とt2とt3の情報を使ったSFINAE〜, T&&... t, );
にもっていくことができない。
0074デフォルトの名無しさん2014/06/15(日) 08:09:43.79ID:LQB6ven9
>>73
じゃあ最後に持ってけば?

auto f(T1,T2,T3)
 ->
  typename conditional
  <
   false,
   ちょっとSFINAEテスト,
   戻り値の型
  >::type;
0075デフォルトの名無しさん2014/06/15(日) 08:30:00.67ID:LQB6ven9
ああ、デフォルト引数の型がT1〜T3に依存してるのか、失礼。
0076デフォルトの名無しさん2014/06/15(日) 10:05:29.03ID:OugYcWsI
戻り値にenable_ifをもってくるかテンプレート引数に持ってくるか
http://melpon.org/wandbox/permlink/NIkWSPfkHwNJrA5x
0077デフォルトの名無しさん2014/06/15(日) 13:42:52.61ID:QfOVY7Ae
>>76
そのサイトなかなかイイね
0078デフォルトの名無しさん2014/06/15(日) 14:56:13.96ID:N8eARu+T
VS2013のC++でヘッダーファイルがもう分け分らない状態で困っています。
一つのソリューションにプロジェクトが8個あり、
各プロジェクトでヘッダーファイルが約10個くらいあり、
それらが分け分らない状態になってしまったのですが、
ヘッダーをうまく整理するコツはありますか?
現状、各クラスに対して
class1.cpp
class1.h
みたいに、1クラス1ヘッダーファイルにしています。
できれば経験豊富な上級者の方からの実践的なコメント期待しています。
0079デフォルトの名無しさん2014/06/15(日) 16:25:45.26ID:6cazI3wF
10個くらい気にしない
30個以上ならおおよその分類でディレクトリを切る
0080デフォルトの名無しさん2014/06/15(日) 18:57:27.47ID:8HdCeBtl
>>78
libやdllなどで機能単位を分割して追い出してみては?
0081デフォルトの名無しさん2014/06/15(日) 21:03:15.25ID:gt68Xbbw
大方a.hをコンパイルするにはb.hが必要で、b.hをコンパイルするにはc.hが必要で、
c.hをコンパイルするにはa.hが必要みたいなことになってるんじゃない?
0082デフォルトの名無しさん2014/06/16(月) 07:59:02.53ID:9KjdQk06
#include <functional>

#include <iostream>

class A{

public:

int * t;

int operator()(int x){
return x+*t;
}};

int main(){
A b;

b.t=new int;

*(b.t)=1;

std::function<int(int)> f{b};

std::cout<<f(1);

*(b.t)=2;

std::cout<<f(1);

delete b.t;return 0;}

std::functionで俗に言う環境変数というのを変更したい場合こうする以外に軽い方法ありますか?
0083デフォルトの名無しさん2014/06/16(月) 08:23:20.74ID:9KjdQk06
#include <functional>
#include <iostream>
class A{
public:
 int * t;
 int operator()(int x){
  return x+*t;
 }
};
int main(){
 A b;
 b.t=new int;
 *(b.t)=1;
 std::function<int(int)> f{b};
 std::cout<<f(1);
 *(b.t)=2;
 std::cout<<f(1);
 delete b.t;return 0;
}
std::functionで俗に言う環境変数というのを変更したい場合こうする以外に軽い方法ありますか?
0084デフォルトの名無しさん2014/06/16(月) 08:29:17.19ID:N3nbvNj7
また例の連投嵐か
0085デフォルトの名無しさん2014/06/16(月) 08:39:31.30ID:9KjdQk06
>>84
別の人です!(^^)!
0086デフォルトの名無しさん2014/06/16(月) 08:56:21.69ID:3pyBJ4C4
俗に言う環境変数ってなんだ
0087デフォルトの名無しさん2014/06/16(月) 09:01:00.61ID:9KjdQk06
ラムダ式でいうと[]の中の変数です。
>>83でいうと*tのことです。
0088デフォルトの名無しさん2014/06/16(月) 09:28:02.67ID:3pyBJ4C4
どうせfunctionつかうなら
mainでint t相当を定義してラムダ式に参照キャプチャさせるのはだめなの?
0089デフォルトの名無しさん2014/06/16(月) 10:11:51.55ID:9KjdQk06
#include <functional>
#include <iostream>
class A{
public:
int a;
std::function<int(int)> f;
A():a{1},f{[this](int x){return this->a+x;}} {
}
std::function<int(int)> c(int i){
a=i;
return f;
}
};
int main(){
A a;
std::cout<<a.c(1)(2);
std::cout<<a.c(2)(2);
return 0;
}
こうゆうことですか?
0090デフォルトの名無しさん2014/06/16(月) 10:14:55.62ID:bQ4eUTzt
>>86
共有される変数のこと。
「環境変数」と呼ばれる変数は
通常、頻繁には変更されないで
且つ、頻繁に参照される
0091デフォルトの名無しさん2014/06/16(月) 10:31:09.76ID:ZcVy/Bvs
俗に言うというより、俺様用語じゃ?
0092デフォルトの名無しさん2014/06/16(月) 10:51:43.84ID:3pyBJ4C4
クラスを使った関数オブジェクトの代わりにラムダ式をつかう

そういう意図のクラスじゃないの?
0093デフォルトの名無しさん2014/06/16(月) 10:59:34.96ID:9KjdQk06
俗に言うint(int)型の関数列をオブジェクトの生成コストを小さく実装する意図です。
0094デフォルトの名無しさん2014/06/16(月) 11:09:52.25ID:3pyBJ4C4
これじゃダメなの

#include <functional>
#include <iostream>

int main() {
int t;

std::function<int(int)> f([&t](int x){return x + t;});

t = 1;
std::cout << f(1);
t = 2;
std::cout << f(1);

return 0;
}
0095デフォルトの名無しさん2014/06/16(月) 11:24:13.03ID:9KjdQk06
スコープがmainから離れるとfが使えなるので駄目です。
0096デフォルトの名無しさん2014/06/16(月) 11:34:22.58ID:3pyBJ4C4
じゃあ最初の方法でいいかもね
Aのメンバtをぽいんたにしたのはなぜ?
0097デフォルトの名無しさん2014/06/16(月) 11:36:45.63ID:9KjdQk06
よくわからないのでまた来ます。
ありがとうございました。
0098デフォルトの名無しさん2014/06/16(月) 13:05:41.59ID:WjthfDAE
>>91
環境変数はさすがに俺様用語じゃないだろ
とりあえず Wikipedia の説明ぐらい見ときゃいいんじゃね?
0099デフォルトの名無しさん2014/06/16(月) 13:08:39.10ID:pazJM61y
「仕様はWiki」
0100デフォルトの名無しさん2014/06/16(月) 13:10:47.45ID:7V/VMXWY
「恋人はサンタクロース」
0101デフォルトの名無しさん2014/06/16(月) 13:11:19.56ID:uuq6AZNq
クロージャーがレキシカルな文脈の環境を取り込むものだから
環境変数と言っちゃたんだよね?
0102デフォルトの名無しさん2014/06/16(月) 14:52:10.71ID:Q+b6M39D
>>101
これは一般的じゃないと考えていていいよね?
0103デフォルトの名無しさん2014/06/16(月) 15:04:19.68ID:yqxEt7qw
>>78
参考になるかどうか分からないが、ファイル分けについて俺ルールでも

テンプレートはcppファイルに書けないと思われるので、コードが全部hファイルに含まれてしまうというなら、
インターフェースと実装を別のhファイルに分ける
インクルードする時は
#include "class1.h"
#include "class2.h"
#include "class3.h"
#include "class1_impl.h"
#include "class2_impl.h"
#include "class3_impl.h"
のようにすれば見栄えは悪いが楽

あちこちから利用される汎用クラスと各機能毎の専用クラスに分ける
汎用クラスは汎用クラスのみでコンパイル出来るようにする

もし1ファイルにクラスを沢山書いていてファイル間で相互参照が起こるようなら、
手抜きプレイだが互いをポインタか共有ポインタで参照するようにする

cppファイルは実行ファイル毎に1つずつでも多分問題ない
インターフェース用hファイルやcppファイルから実装用hファイルにコードを移動する時はinlineを忘れずに
0104デフォルトの名無しさん2014/06/16(月) 15:04:44.38ID:T2hTP++z
>>98
脊髄反射する前にスレの流れを追えばいいんじゃね?
0105デフォルトの名無しさん2014/06/16(月) 23:20:29.96ID:PRy1C0Tg
>>99
Wiki* がおかしいと言うならお前さんが説明してくれてもいいんだよ
0106デフォルトの名無しさん2014/06/16(月) 23:22:17.91ID:PRy1C0Tg
>>104
kwsk
0107デフォルトの名無しさん2014/06/16(月) 23:29:00.23ID:NNKZ4x9B
「仕様はWiki」
「Wiki* がおかしいと言うなら」
どうしてこう会話のキャッチボールのできないアスぺが多いんだろう
0108デフォルトの名無しさん2014/06/17(火) 00:10:02.03ID:x7Tm4gn4
発話者と受け取り側で、お互い異なる主語と目的語を付けているのに、それを記述しないから。
日本語は省略可能だけど、省略することで意味が変えられる言語であることは周知の通り。

うん、そういう疑問じゃないね。
0109デフォルトの名無しさん2014/06/17(火) 00:45:14.06ID:gFrAAxZ6
>>107
アスペ言いたいだけやろ w
0110デフォルトの名無しさん2014/06/17(火) 00:50:23.91ID:3ZEaXT71
馬鹿が文章書いてる
http://revilog.com/2014/06/11585.html
0111デフォルトの名無しさん2014/06/17(火) 00:51:31.06ID:Du/ZqHF3
C#からVC++にDictionaryを渡すってできる?
マーシャリングでポインタ渡そうにもVC++に対応した型がないんだよな
C++/CLIならmapかsetで受けられるのかな
でもC++/CLI触ってないから面倒そうなんだよね
0112デフォルトの名無しさん2014/06/17(火) 00:59:43.16ID:UREG7bnw
無理だな
そこらへんはC++/CLIで何とかするしかない
0113デフォルトの名無しさん2014/06/17(火) 01:16:11.85ID:UkDCFvir
チラ裏だが久しぶりに何時間もはまった。
cv 属性を除去しなきゃ std::is_same でヒットしない問題でかつて苦しんだのに、もう忘れるとは・・・
0114782014/06/17(火) 11:19:44.81ID:cBCEPfSt
>>103
>#include "class3_impl.h"
ヘッダーを .h と impl.h に分ける案、大変参考になりました。

>もし1ファイルにクラスを沢山書いていてファイル間で相互参照が起こるようなら、
>手抜きプレイだが互いをポインタか共有ポインタで参照するようにする

共有ポインタというのは、unique_ptrとかshared_ptr というやつでしょうか?
難しそうなので使ったことがありません。意味もよく分っていません。便利なんでしょうか?
0115デフォルトの名無しさん2014/06/17(火) 11:34:30.33ID:UREG7bnw
ナマポで管理してるのかよ
そっちのほうがありえないわ
0116デフォルトの名無しさん2014/06/17(火) 12:45:21.22ID:BVmlgK0q
shared_ptrに慣れれば多少の速度と引き換えに、確保したメモリの扱いに悩まされることが無くなる
unique_ptrは最新のコンパイラにしか実装されてないかも
0117デフォルトの名無しさん2014/06/17(火) 15:23:28.55ID:sWdqUU0b
threadを勉強中なんですが、メンバにstd::mutexを持つクラスは、コピーコンストラクタなどを禁止するべきでしょうか
01181172014/06/17(火) 15:57:44.53ID:sWdqUU0b
std::mutexはコピーもムーブ禁止だったのか…
失礼しました
0119デフォルトの名無しさん2014/06/17(火) 17:11:07.68ID:k/4pQzj9
>>116
速度というのはどういう意味でどの程度?
0120デフォルトの名無しさん2014/06/17(火) 19:37:43.04ID:HK3mR454
>>118
mutexがコピー禁止なこととメンバーにmutexを持つクラスを
コピー禁止にするかどうかは関係ないだろ
禁止にする道理はない
0121デフォルトの名無しさん2014/06/17(火) 19:38:15.36ID:lNo5ASbm
std::shared_ptrはマルチスレッド環境での使用のために参照カウントにアトミックな操作を要求するのでアトミック操作を行うためのコストがかかる
ただ、ほとんどの場合ではボトルネックとなる部分ではないだろう
0122デフォルトの名無しさん2014/06/17(火) 19:55:19.67ID:HK3mR454
まさかそれが>>119への回答ではあるまいな
だとしたら相当のアスペ
0123デフォルトの名無しさん2014/06/17(火) 22:30:38.51ID:sWdqUU0b
>>120
クラスをコピーしたいときはmutexを除いたメンバーをコピーするということでしょうか…
https://ideone.com/sz6QnI
こういうのってマズイですか?
0124デフォルトの名無しさん2014/06/17(火) 22:36:07.98ID:kAq4ypGz
>>123
そんなのは そのクラスが何の目的でmutexを持つのかに依存するだろう
クラスの変更操作を排他する目的なら
コピー先で新たにもう一つmutex作成すればいいだけ
0125デフォルトの名無しさん2014/06/17(火) 22:50:18.81ID:sWdqUU0b
>>124
こうですか?
void foo(Test test) {
Test::lock_t lk = test.getLock();// コピーをロック
for (int i=0; i<100; ++i)
test.increment();
test.disp();
}
worker内のコピー前のロックはfooが完了するまでのロックで
foo内のロックはコピー後の変更操作のロック
排他したいなら両方のロックが必要ってことですよね?
0126デフォルトの名無しさん2014/06/17(火) 23:27:57.52ID:kAq4ypGz
>>125
何がしたいのかイミフな糞コード見せられて
こうですかときかれてもな

とりあえずコピー元と先の両方のロックは必要
http://ideone.com/Lbnn11
0127デフォルトの名無しさん2014/06/17(火) 23:43:11.98ID:sWdqUU0b
>>126
ありがとうございます コード見てやっと理解できました
mutexの使い方をわかっていませんでした
kusoでごめん
0128デフォルトの名無しさん2014/06/17(火) 23:51:21.62ID:kAq4ypGz
>>127
本当にわかってるのかねえ。
スレッド1と2がそれぞれworker内で別のTestを持って
foo呼び出しの際にさらにそれぞれコピーされてるぞ?

本当は一つのTestを二つのスレッドから更新したいんだろ? (そうだと言ってくれ)
0129デフォルトの名無しさん2014/06/18(水) 00:23:56.04ID:BGa2r1td
>>128
そうではないんです…
kusoを書く寸前までmutexがコピー禁止だと知らなくて コピーコンストラクタをどう書けばいいのかと
それからmutexの使い方もわかっていないことに気がついて
スレッドを2つも作ったのはマルチスレッドってこうだろ?的な…orz
0130デフォルトの名無しさん2014/06/18(水) 10:41:59.11ID:UmljPqIX
このスレよりもマルチスレッドのスレ向けの案件かと思ったら初心者スレ向けの案件だったでござる。
0131デフォルトの名無しさん2014/06/18(水) 21:40:14.83ID:iOs2jF6K
GCC 4.4.7

#include <boost/archive/iterators/base64_from_binary.hpp>
#include <boost/archive/iterators/transform_width.hpp>

この宣言たけで「virtual memory exhausted: メモリを確保できません」ってでるんだけどなんで?
0132デフォルトの名無しさん2014/06/18(水) 21:45:06.66ID:wzw+OY0o
そら、そのインクルードしてる糞なライブラリに不具合があるからだろ
0133デフォルトの名無しさん2014/06/18(水) 21:47:25.47ID:s+RQ8hIL
コンパイル時か実行時か
本当にこの宣言たけなのか
0134デフォルトの名無しさん2014/06/18(水) 21:51:45.46ID:iOs2jF6K
本当に宣言たけなんです
0135デフォルトの名無しさん2014/06/18(水) 21:52:52.19ID:iOs2jF6K
コンパイル時てす
0136デフォルトの名無しさん2014/06/18(水) 21:57:00.91ID:s+RQ8hIL
他のアプリケーションは動いてないのか
再起動してからやってみる
それでもダメならそのクソライブラリが壊れてるのかもね
0137デフォルトの名無しさん2014/06/18(水) 21:58:05.20ID:rhua+twG
なんかものすごいメタプログラミング走ってるとかか?
0138デフォルトの名無しさん2014/06/18(水) 22:24:17.62ID:pJdwjV3r
骨董品みたいなマシンなのかな
0139デフォルトの名無しさん2014/06/18(水) 22:32:36.16ID:b95ka0Af
C++やる前に普通のCってやった方がいいの?
0140デフォルトの名無しさん2014/06/18(水) 22:33:33.87ID:bNqsT2AO
ていうかC知らないでC++書けないから
0141デフォルトの名無しさん2014/06/18(水) 22:35:09.32ID:7tSp0AS9
gccはメモリのHWテストになる。
腐ったメモリ使ってるとそのエラーがでる事がある。
0142デフォルトの名無しさん2014/06/18(水) 22:38:37.66ID:b95ka0Af
>>140
最初からC++勉強じゃダメなの?
0143デフォルトの名無しさん2014/06/18(水) 22:40:39.94ID:cO7v6OhK
できる奴は、どんなやり方だってできるんだ。
できない奴は、きちんと手順をふんだやり方でさえあやしいできになるんだ。
0144デフォルトの名無しさん2014/06/18(水) 22:44:12.85ID:rhua+twG
>>142
C++はCを含むので、C++から勉強する=Cから勉強する、になる
たまにC++解説サイトなどで、Cの知識を前提にしてC++の部分だけ解説してたりする
つまりC++とCの差分の勉強を、Cの知識なしに勉強しようとしてる、のでなければ大丈夫
0145デフォルトの名無しさん2014/06/18(水) 22:46:50.07ID:8AGe2LGW
Cなめんなよ
トーシロー
0146デフォルトの名無しさん2014/06/18(水) 22:50:57.90ID:v/GeEEns
C++をやる上で知ってなければならないCの要素ってポインタだけじゃね?
構造体や共用体はC++ではクラスだから別の要素になるし、mallocに至っては使ってはならないし
0147デフォルトの名無しさん2014/06/18(水) 22:52:52.05ID:rhua+twG
>>146
すべてのC++解説がそう思ってると思うなよ?
0148デフォルトの名無しさん2014/06/18(水) 22:54:31.01ID:cO7v6OhK
mallocを使ってはならない?面白いローカルルールで仕事してるんだね。
0149デフォルトの名無しさん2014/06/18(水) 22:55:53.75ID:pJdwjV3r
まぁ主張を見ればお察し
0150デフォルトの名無しさん2014/06/18(水) 23:01:18.26ID:v/GeEEns
型安全性が破壊されるキャストが必須のmallocをC++で使うメリットを具体的に書かない時点でお察しだね
0151デフォルトの名無しさん2014/06/18(水) 23:07:03.04ID:ODn2O333
俺もmallocはもうしばらく書いたことがないな
0152デフォルトの名無しさん2014/06/18(水) 23:13:42.72ID:yhccPwpP
mallocって何に使うの
0153デフォルトの名無しさん2014/06/18(水) 23:15:34.18ID:ODn2O333
ほら、素材の味をひきたてるときとか
0154デフォルトの名無しさん2014/06/18(水) 23:19:27.15ID:IyKzbwBV
配列初期化子は?
確保済みメモリからクラスオブジェクトを作ってはいけないのか?
0155デフォルトの名無しさん2014/06/18(水) 23:44:25.04ID:iOs2jF6K
131てす。
-gオプションをつけるとエラーがでて、はずすと出ませんでした。
boost使う場合-gオプションは使えないのでしょうか?
0156デフォルトの名無しさん2014/06/18(水) 23:45:32.95ID:BNixjWct
boostなにそれうまいの?
0157デフォルトの名無しさん2014/06/18(水) 23:52:07.26ID:dsJIYlcb
http://koushin.so/krsw/
0158デフォルトの名無しさん2014/06/19(木) 00:20:31.05ID:dQ+3afkK
131です。
やっぱ-gオプション消してもエラーでました。
おながいしときます。
0159デフォルトの名無しさん2014/06/19(木) 01:04:51.54ID:RkSAdfAs
>>150
C++ を学ぶ前には C のポインタやっとけばよし
構造体や共用体は C++ では他のやり方があるし
malloc は非推奨だからやる必要なし new 使え
要はこういうことが言いたいんじゃないの?

自分一人でやるならこの主張は実に正しいと思うが

cstdlib で std::malloc も標準で用意されているし
struct だって残っている
union に至っては C++11 で制限が緩められた

つまり他人が使う可能性があるし目にする機会がないとは言えない
malloc を知るのに malloc のメリットなんか必要ない
0160デフォルトの名無しさん2014/06/19(木) 01:21:49.41ID:15sSJ9ky
共用体ってC++で他のやり方あるっけ?reinterpret_cast使えってこと?
0161デフォルトの名無しさん2014/06/19(木) 04:05:06.78ID:8uUzCcl6
>構造体 (略)  C++ では他のやり方があるし
ちょっと名前と定義が変わっただけだろ
別のやり方というのは変だ
0162デフォルトの名無しさん2014/06/19(木) 04:34:40.87ID:RkSAdfAs
>>161
>>146>構造体や共用体は(ry)クラス
とあるのでCからみた別のやり方=クラスとして言い換えてみたんだが
たしかにC++の構造体や共用体はCのとは違うね
そこは完全におかしい撤回させて
(共用体のようなことをreinterpret_castでやることもあるけどここでの意図じゃない…と思う)

つまりc++では構造体はクラスだからcの構造体はやらなくて良いってことであってるかな
0163デフォルトの名無しさん2014/06/19(木) 06:57:25.36ID:STwpbLFG
ん?
struct ounko {}; // Cではounkoは「構造体」
struct ounko {}; // C++ではounkoはPODな「クラス」
確かに今のC++に構造体は無いけれど、やらなくて良いってなんだ?
0164デフォルトの名無しさん2014/06/19(木) 08:12:00.24ID:Q7lGPJPf
>>159
> 構造体や共用体は C++ では他のやり方があるし

構造体はいいとして、共用体の他のやり方ってなんだ?

> つまり他人が使う可能性があるし目にする機会がないとは言えない

そりゃ可能性を言えばおっさんバンドがバカウケする可能性も 0 じゃないわな (w
0165デフォルトの名無しさん2014/06/19(木) 18:36:29.59ID:PfbLA5bf
C++では構造体も共用体もクラスの一種だから、仮にCの構造体や共用体を知っていてもC++のクラスとして再び学び直す必要がある
よってC++を勉強する際に構造体と共用体を知っておく必要はない
0166デフォルトの名無しさん2014/06/19(木) 18:45:25.50ID:15sSJ9ky
C共用体の、C++クラス的に拡張された仕様を使ってるコードを俺は今まで見たことがない
0167デフォルトの名無しさん2014/06/19(木) 19:17:20.13ID:CckUyVYD
>>159
malloc系よりもnewの方がいいの?
クラスとかコンストラクタを生成しないものはmalloc使うものだと思てったよ。

バッファ確保位しかない俺は、むしろ、ほとんどnewしない。
ってか、ストラテジとかでもしない限りnewいらないよね?
組み込みは系必要かもだけど
0168デフォルトの名無しさん2014/06/19(木) 19:27:53.42ID:sTol+4AP
カスタムデリーター無しでスマポに突っ込めるという点では
メリット絶大だな
0169デフォルトの名無しさん2014/06/19(木) 19:29:23.05ID:SJ+Smgsh
スマポだとdelete呼ばれてダメなんじゃ…
0170デフォルトの名無しさん2014/06/19(木) 20:19:09.21ID:++46j1ZH
mallocなんかよりvector使っとけ
配列スマポ?なんか意味あんの?
0171デフォルトの名無しさん2014/06/19(木) 20:21:33.81ID:lQ+uiTbF
>>167
new はhandler で一括エラー処理出来るのと
operater をclass 毎に登録出来るでな
0172デフォルトの名無しさん2014/06/19(木) 20:23:00.99ID:g+ccdVdg
>>171は会話のできないアスぺ
0173デフォルトの名無しさん2014/06/19(木) 20:25:21.06ID:SvAFKBOX
いあいあ >>172 程では無いな
0174デフォルトの名無しさん2014/06/19(木) 20:46:03.17ID:Uy9Uwuqj
最近はmake_uniqueとmake_sharedばかりだな
0175デフォルトの名無しさん2014/06/19(木) 20:47:45.70ID:KWxyNiDl
>>174は会話のできないアスぺ
0176デフォルトの名無しさん2014/06/19(木) 21:21:30.73ID:15sSJ9ky
会話のできるアスペもいるの?(アスペ)
0177デフォルトの名無しさん2014/06/19(木) 21:27:02.42ID:4D3iLFDJ
>>174
スレ違いだ去れ
0178デフォルトの名無しさん2014/06/19(木) 21:35:36.89ID:57jeo68t
質問です

new int[100]()
この「()」ってデフォルト初期化の意味ですよね
(1)とかして全部1にしたりできないんでしょうか
0179デフォルトの名無しさん2014/06/19(木) 21:42:18.00ID:SJ+Smgsh
できません
0180デフォルトの名無しさん2014/06/19(木) 23:24:18.10ID:WI+s6xrX
std::vector<int> v(100, 1);
って書いちゃうなあ
0181デフォルトの名無しさん2014/06/20(金) 01:54:49.97ID:OMtUgYKc
配列自体をvalue-initializeしてるのか?
キモい文法だな
○ int* a=new int[10]{};
○ int a[10]={};
○ int* a=new int[10]();
× int a[10]=();
× typedef int t[10]; t a();
○ typedef int t[10]; int *a=new t();
0182デフォルトの名無しさん2014/06/20(金) 03:26:19.11ID:AbNpeq7d
std::array<int, 100> a;
a.fill(1);
0183デフォルトの名無しさん2014/06/20(金) 12:47:17.91ID:Blz91ssm
標準ライブラリーにゼロってありますか?
zero<int>()=0
のようなやつでintをほかの型に変えるようなものです。
0184デフォルトの名無しさん2014/06/20(金) 12:52:50.98ID:qzzefv2C
イミフ
0185デフォルトの名無しさん2014/06/20(金) 12:52:59.86ID:5wrhj8BS
標準かどうか知らないがlexical_castとか?
0186デフォルトの名無しさん2014/06/20(金) 12:56:41.82ID:Blz91ssm
template<typename T>
T zero<T>(){
return 0;
}
Tがintやdoubleの時の定義ね。
0187デフォルトの名無しさん2014/06/20(金) 13:26:38.44ID:0wOdLd+3
ああ型ごとにその型での0を返すものか
>>183
標準ライブラリにはない

必要なら>>186みたいに関数として自分で作る
C++14なら変数テンプレートを使って変数(定数)として書けるようになったりもする
0188デフォルトの名無しさん2014/06/20(金) 13:42:06.91ID:Blz91ssm
zero<ああ>()=ああ型の0
こういうことですね。
ありがとうございます。
ところで型名に日本語使えるんですね。
0189デフォルトの名無しさん2014/06/20(金) 18:50:27.24ID:9Pzol8rA
そんなもの何に使うんだ
static_cast<type>(0)
以上に簡潔な書き方はないだろ

>型名に日本語使えるんですね
むしろどうしてできないと思ったのか疑問
0190デフォルトの名無しさん2014/06/20(金) 22:31:01.17ID:rRUWYjXo
C++難しいな。
やっと variadic template のコツがわかってきて、次は constexpr かと思ったんだが
コンパイラがあれで使うことができない。
これって使いこなさなきゃダメ?
0191デフォルトの名無しさん2014/06/20(金) 22:49:42.19ID:11by02lI
>>189
numeric_limitsみたいに使うんでないの。
0からは変換できない(intとかからの変換が出来るべきでない)けどゼロと呼びたい値のある型はあり得るんじゃないか。
行列くらいしか思い付かなかったけど。
0192デフォルトの名無しさん2014/06/21(土) 01:48:56.80ID:vCQFwARQ
もはやテンプレートである必要性が感じられない
int{}
bool{}
type{}
これでいいだろ
0193デフォルトの名無しさん2014/06/21(土) 03:23:46.35ID:nqKv2O4E
ポインター型はtypedefしないと書けない糞文法
template<typename T> struct ウンコ {
 typedef T type;
};

auto z = ウンコ<void*>::type{};
0194デフォルトの名無しさん2014/06/21(土) 03:43:29.77ID:vv0HvEwz
>>189
元々変数名とかに使える文字列は[_a-zA-Z][_1-zA-Z0-9]*に縛られてなかったか?
0195デフォルトの名無しさん2014/06/21(土) 03:55:16.81ID:oR09juu7
まともなプロジェクトでその範囲外の名前を使うことなんて今後10年はないだろうから、しょせん無駄知識
0196デフォルトの名無しさん2014/06/21(土) 07:50:56.94ID:NUGHWTxV
おまえが10年後なのを
さも普遍的であるかのように語られてもな
0197デフォルトの名無しさん2014/06/21(土) 07:57:44.82ID:oR09juu7
普遍的な無駄知識などあるものか。あくまで主観
0198デフォルトの名無しさん2014/06/21(土) 08:08:39.48ID:jGMnyNE3
C++じゃないけどこれ結構可読性高いよな
http://qiita.com/oinariman/items/ef3395608fbcfb85eb99
こないだUnicodeに絵文字増えたからどの言語でもいけるようになるか
0199デフォルトの名無しさん2014/06/21(土) 08:08:43.24ID:C0EyYr7H
ほんとうに、会話のキャッチボールのできないアスペというのは困りものですね
0200デフォルトの名無しさん2014/06/21(土) 10:35:46.06ID:UQCfn4i5
適当に書いて、後から、本職のc++プログラマに修正してもらうぐらいの方が良い
0201デフォルトの名無しさん2014/06/21(土) 10:59:48.87ID:YoLZmmVI
てき‐とう〔‐タウ〕【適当】

1 ある条件・目的・要求などに、うまくあてはまること。かなっていること。ふさわしいこと。また、そのさま。
2 程度などが、ほどよいこと。また、そのさま。
3 やり方などが、いいかげんであること。また、そのさま。悪い意味で用いられる。
0202デフォルトの名無しさん2014/06/21(土) 15:48:26.27ID:aysEppzb
#include "stdafx.h"
#include <iostream>
class MyClass{
public:
int num;
};
void func1(const MyClass &mc){
   std::cout << mc.num << std::endl;
}
void func2(const MyClass *p){
   std::cout << p->num << std::endl;
}
void call_test(void(*func)(void*), void* parm){
   MyClass *p = (MyClass*)parm;
   (func)(p); // (1)
}
int _tmain(int argc, _TCHAR* argv[]){
   MyClass mc;
   mc.num = 7;
   call_test((void(*)(void *))func1, (void*)&mc);
   call_test((void(*)(void *))func2, (void*)&mc);
   return 0;
}
VS2013のC++で関数ポインタで質問なのですが、
質問1
(1)のところでfuncの引数pはMyClassのポインタ
ですからfunc2の呼び出し&実行がうまく行くのは分るのですが、func1でも
同じ結果が得られる理由が分りません。ポインタpをfunc1に渡すと、
そえれが指しているMyClassの中身が、なぜ引数mcの中に正しく値として入るのでしょうか?
mcにポインタを代入しようとしてエラーすると思ったのですが。
質問2
そもそもこのプログラムに何か問題点はありますか?
0203デフォルトの名無しさん2014/06/21(土) 16:01:40.22ID:M2Zerffc
参照の実装なんて所詮ポインタと同じってことと、関数ポインタの先の本当の型なんかお前がキャストした時点で見えないってこと
0204デフォルトの名無しさん2014/06/21(土) 16:15:21.59ID:SXA9b6rC
問題があるかどうかで言えば無いよ
一番外側の*ポインタをただ単にアンバサンド参照子に
置き換えとぃるだけだから
0205デフォルトの名無しさん2014/06/21(土) 16:28:56.84ID:SXA9b6rC
ここら辺は、C++の標準仕様だから処理系依存ということはまず考えられない。
0206デフォルトの名無しさん2014/06/21(土) 18:02:09.85ID:jH3cfydw
>>202
ディスアセンブラでコードを確認すれば解決よ。
c++は暗黙の引数がthisだから。
0207デフォルトの名無しさん2014/06/21(土) 19:09:32.92ID:k3qwYJlT
string文字列中から、特定の文字列(例えば"ABC")が含まれる個数を返す標準の関数ってありますか?
whileループ使って自分で組むこともできるんですけど、関数コールで一発でできるならそのほうがスマートだと思いまして。
0208片山博文MZ悪魔崇拝 ◆T6xkBnTXz7B0 2014/06/21(土) 19:18:44.93ID:mJwMwh/H
str.find("ABC") != std::string::npos
0209デフォルトの名無しさん2014/06/21(土) 19:47:22.28ID:YoLZmmVI
個数か。
重なりがあった場合は?
02102072014/06/21(土) 20:01:44.83ID:k3qwYJlT
>>209
あ、そこまで考えていませんでした・・・。
重なりがあったときの挙動を問わなければ、個数を出してくれる関数はあるのでしょうか?
0211片山博文MZ悪魔崇拝 ◆T6xkBnTXz7B0 2014/06/21(土) 20:33:45.80ID:mJwMwh/H
std::size_t count_substrs(
const std::string& str,
const std::string& substr)
{
std::size_t i = 0, count = 0;
for (;;) {
i = str.find(substr,i);
if (i == std::string::npos) break;
i += substr.size();
count++;
}
return count;
}
0212デフォルトの名無しさん2014/06/21(土) 21:26:28.96ID:YoLZmmVI
>>210
挙動を問わないって・・・

どっちにしろ標準にはないんじゃない?
02132072014/06/21(土) 22:04:52.43ID:k3qwYJlT
>>211-212
了解です!
ありがとうございました!
0214デフォルトの名無しさん2014/06/21(土) 22:14:00.85ID:X/Kis1xK
>>205
どの仕様に基づくものなのかkwsk
0215片山博文MZ悪魔崇拝 ◆T6xkBnTXz7B0 2014/06/21(土) 22:25:20.81ID:mJwMwh/H
assert(!substr.empty());
0216デフォルトの名無しさん2014/06/22(日) 00:35:48.02ID:Qh+5Hc1y
>>202-206
定義と型の違うポインタ経由での関数呼び出しとなるので、未定義動作。
5.2.10 [expr.reinterpret.cast] p6 (N3936)
> The effect of calling a function through a pointer to a function type
> that is not the same as the type used in the definition of the function
> is undefined.
0217デフォルトの名無しさん2014/06/22(日) 00:43:13.63ID:ixMBLAg5
>>216
スレ違いは去れ低脳
0218デフォルトの名無しさん2014/06/22(日) 06:46:13.01ID:CIPeXuNy
◎2chスレッド勢いランキングサイトリスト◎

★+ニュース板
・ 2NN (推奨サイト)
・ 2chTimes
★+ニュース板新着
・ 2NN新着
・ Headline BBY
・ unker Headline
★+ニュース板その他
・ Desktop2ch
・ 記者別一覧
★全板
・ 全板縦断勢いランキング (推奨サイト)
・ スレッドランキング総合ランキング
・ ログ速
★全板実況込み
・ 2勢 (推奨サイト)
・ READ2CH
・ i-ikioi

※ 要タイトル検索
※ 2chブラウザ併用推奨
0219デフォルトの名無しさん2014/06/23(月) 19:47:59.25ID:sxu8zlyf
ある本に「vectorが末尾への要素追加しかできなかったのに対し、
listは任意の位置で挿入/削除ができるという違いがあります。」
って書いてあんだけどinsartでできるよね?その本のvectorの説にも
insartのことは書いてあるのに何のこと言ってんのこれ
0220デフォルトの名無しさん2014/06/23(月) 19:52:20.27ID:dH9hXQor
vectorは(定数時間では)末尾への要素追加しかできない。
0221デフォルトの名無しさん2014/06/23(月) 19:54:48.82ID:QeZRRlBU
そんな本は捨ててしまってもいいかもなあ

vectorのinsertは要素数に比例して時間がかかるかもよ?って意味かと
(listは要素数関係なく追加できる)
0222デフォルトの名無しさん2014/06/23(月) 19:56:46.12ID:sxu8zlyf
なるほどありがとうございます
0223デフォルトの名無しさん2014/06/23(月) 20:07:47.81ID:MbOfhFbf
とはいえ頻繁に末尾以外へinsertするような用途に使ってるならなんか間違えてるけどな
0224デフォルトの名無しさん2014/06/23(月) 21:53:12.82ID:wGPPhWXZ
>>220
要素数が増えるんだから
末尾だろうと定時間じゃないだろ
0225デフォルトの名無しさん2014/06/23(月) 22:09:17.40ID:374DSXlS
要素数少ないと実用上vectorの方が早かったりすることも多いけどな。
0226デフォルトの名無しさん2014/06/23(月) 22:40:02.21ID:qfhs6UjJ
500行くらいあるヘッダファイルの typedef を 片っ端から using =  に変えてみた。
かえって見にくくなったように感じた。

using type = XXX;
とすると、肝心の「type」 が埋もれてしまう。
typedef XXX type;
だと、type を離して書くなどして目立たせることもできたのに。
0227デフォルトの名無しさん2014/06/23(月) 22:57:57.66ID:3XVlhbwS
>>224
末尾の場合は、「ならし」定数時間というオーダーの表現であるからして
0228デフォルトの名無しさん2014/06/24(火) 00:14:24.26ID:QmiLHcQy
>>227
いや、領域溢れて領域取り直した後のコピーのことを言ってるんじゃね?
0229デフォルトの名無しさん2014/06/24(火) 00:19:39.03ID:3j6G3n+9
>>228
N回挿入するとき、O(N)の時間かかるコピーがo(N)回しか発生しなければ、
N回の操作全体に対して平均するとO(1)なわけです。
0230デフォルトの名無しさん2014/06/24(火) 00:22:58.32ID:3j6G3n+9
o(N)回じゃだめかな。
要するに足し算してO(N)ならば、Nで割ればO(1)ということです。
0231デフォルトの名無しさん2014/06/24(火) 02:12:19.73ID:yC/6A8m1
>>229
それってO(n^2)じゃないのか…
0232デフォルトの名無しさん2014/06/24(火) 02:55:05.36ID:Nm6Yq0TG
時間のかかるコピーほど発生頻度が低くなるから、
平均したら一定だよね的な話だったかと
0233デフォルトの名無しさん2014/06/24(火) 03:00:03.39ID:gG5TsqEt
リアロケーションした時の一回のコピーのコストはO(N)だろう
一回の挿入でリアロケーションする確率が
O(1/Log (N))ではなくO(1/N)になるように作れってことかな
0234デフォルトの名無しさん2014/06/24(火) 03:15:01.13ID:JmI9XJwO
ポインタ配列を20増やせば、コピーする回数は20回に一回じゃね?
0235デフォルトの名無しさん2014/06/24(火) 03:24:17.21ID:Nm6Yq0TG
>>234
20ずつ増やすのだと、コピー頻度は20回に1回なのに
コピーする要素数は20,40,60と増えていくから一定にならない
0236デフォルトの名無しさん2014/06/24(火) 03:26:10.01ID:agNpfg/I
何を言っているんだ
容量を1→10→100→1000と増やせってことだろ
0237デフォルトの名無しさん2014/06/24(火) 11:25:33.32ID:tbm7Cpkd
リアロケーションが全く発生しない無限の大きさの配列の挿入でもコストはO(n)な訳で、
実際はリアロケーションは発生して、そのコストは挿入する要素数と同じなんだから、
結局トータルでO(n^2)じゃないのか?

最後に大きくリアロケーションすればコピーが無くなるというのは、O記法の考え方とは反してる
0238デフォルトの名無しさん2014/06/24(火) 11:30:26.47ID:tbm7Cpkd
>>237
いや間違えた、忘れてくれ…
0239デフォルトの名無しさん2014/06/24(火) 11:33:07.43ID:EGSIKm2X
例えばこのページにもあるが、通常O(1)と考えて問題ないのでは?
ttp://vivi.dyndns.org/tech/cpp/vector.html
0240デフォルトの名無しさん2014/06/24(火) 11:37:49.61ID:F58M7otD
リアロケーションは"たまに"しか発生しないように作れよ、程度であって
オーダー記法にそこまで厳密に仕様を縛るような取り決めも精度もないよ
0241デフォルトの名無しさん2014/06/24(火) 11:41:51.33ID:Nm6Yq0TG
実質o(1)とかならし定数時間とか償却定数時間とか、
頭になんかつけて定数時間(o(1))と区別してあるんだから汲み取ってあげようよ
0242デフォルトの名無しさん2014/06/24(火) 19:39:15.33ID:p5Rma9E1
規格では末尾以外の挿入まで定数とは言ってない
0243デフォルトの名無しさん2014/06/24(火) 20:05:08.14ID:F58M7otD
>>242
誰一人としてそんな主張はしていない
0244デフォルトの名無しさん2014/06/24(火) 23:12:40.64ID:NpZeP/YT
enum EN1
{
  item1 = 1,
  item2 = 2,
};

enum EN2
{
  item1 = 10,
  item2 = 20,
};

int _tmain(int argc, _TCHAR* argv[])
{
  return 0;
}
をビルドすると
エラー 2 error C2365: 'item2' : 再定義; 以前の定義は '列挙子' でした。
エラー 1 error C2365: 'item1' : 再定義; 以前の定義は '列挙子' でした。
と出るんですが、CあるいはC++ってそういうもんでしたっけ?
今まで知らなかったです。
エラーを出さないようにするには、名前を変えるしか方法はないですか?
0245デフォルトの名無しさん2014/06/24(火) 23:14:07.18ID:F58M7otD
だってお前enumは名前空間をもたんもん
0246デフォルトの名無しさん2014/06/24(火) 23:16:05.72ID:Elac9g2U
うむ、俺もそういう場合はnamespace使うなあ
0247デフォルトの名無しさん2014/06/24(火) 23:16:32.56ID:6s1BpAfu
なんと・・・ うかつであった
0248デフォルトの名無しさん2014/06/24(火) 23:19:51.09ID:pccT+3hH
enum class …
0249デフォルトの名無しさん2014/06/24(火) 23:50:56.02ID:NpZeP/YT
ありがとうございました。enum class で行けました。
0250デフォルトの名無しさん2014/06/25(水) 00:33:16.47ID:Z656B0nG
そんなのあったんだ・・・知らなかったぜ。
0251デフォルトの名無しさん2014/06/25(水) 00:38:26.06ID:AAkwOzRQ
enum class でうまく行ったと思っていたら、

コンパイラ エラー C2838
'member' : メンバー宣言内の限定名が間違っています。

というエラーに悩まされています。Visual Studioは駄目だ。
どうしたら良いでしょうか?
0252デフォルトの名無しさん2014/06/25(水) 00:55:38.19ID:mTODXQDL
確実にコンパイルできるスジならこれとか
namespace EN1 {
 enum {
  item1 = 1,
  item2 = 2,
 };
}
まあそこまでしてenumに名前空間を求めぬともよいとおじさんは思うよ
0253デフォルトの名無しさん2014/06/25(水) 01:08:18.23ID:Hb40NIKL
c++/cliとぶつかるなenum class
0254デフォルトの名無しさん2014/06/25(水) 01:09:24.45ID:ECvr+CyG
>>251
どんなコードで駄目なのか、詳しく。
VS Express 2013 for DeskTop なら次で問題ない。

enum class EN1
{
item1 = 1,
item2 = 2,
};
enum class EN2
{
item1 = 10,
item2 = 20,
};
0255デフォルトの名無しさん2014/06/25(水) 01:09:42.08ID:7cMvyUPv
じゃあなんの問題もないな
0256デフォルトの名無しさん2014/06/25(水) 01:29:05.19ID:AAkwOzRQ
enum class EN1
{
  item1 = 1,   //コメント
  item2 = 2,   //コメント
};
のようにコメントを書くと
コンパイラ エラー C2838
が出るようです(VS2013)が、こういうコメントは反則でしたか??
もうわけが分らないです。
0257デフォルトの名無しさん2014/06/25(水) 03:39:28.53ID:JKpGVqOW
エラーを再現させる最小限のコードも貼らずに
エラーとのたまうバカには付ける薬がない
0258デフォルトの名無しさん2014/06/25(水) 07:34:45.51ID:2HNZeTf6
エスパーしてみよう
・enumタグがマクロで定義されている
・コメントの文字コードがSJIS/Unicode
で無い
0259デフォルトの名無しさん2014/06/25(水) 08:06:57.54ID:uB2qpMj7
いや使うところのコードがまちがってんだろ
0260デフォルトの名無しさん2014/06/25(水) 08:24:05.70ID:3nm1g6Ub
>>256
最後の要素のカンマじゃね?
0261デフォルトの名無しさん2014/06/25(水) 08:43:18.82ID:uB2qpMj7
糞文法のC++が最後のカンマぐらいで
エラーになるとは思えんのだが
0262デフォルトの名無しさん2014/06/25(水) 08:45:18.37ID:zdDoEXg+
最後のカンマは合法になっただろ?
0263デフォルトの名無しさん2014/06/25(水) 08:46:02.02ID:uB2qpMj7
規格は法律とは関係ないが
7.2で最後の無駄なカンマは許されてるな
0264デフォルトの名無しさん2014/06/25(水) 09:56:45.03ID:mTODXQDL
末尾カンマを許さない糞言語がけっこうあるらしい
0265デフォルトの名無しさん2014/06/25(水) 10:20:02.40ID:AAkwOzRQ
>>258
ありがとうございました。
SJISをUTF8に変更して保存したら治りました。カンマは関係なかったです。
0266デフォルトの名無しさん2014/06/25(水) 10:37:43.73ID:Lmukt8Rv
「コメント」を「コメント.」にすれば済む話だったか。
0267デフォルトの名無しさん2014/06/25(水) 12:52:26.18ID:YLjaljGa
>>262
>>263
知らなかったorz
C++11から?
0268デフォルトの名無しさん2014/06/25(水) 13:08:54.62ID:hDvlW11L
もっとまえ
0269デフォルトの名無しさん2014/06/25(水) 19:24:00.34ID:Z656B0nG
VHDLでは許されんから、癖で最後のカンマは必ず消してる。
0270デフォルトの名無しさん2014/06/25(水) 19:28:09.04ID:3nm1g6Ub
配列や構造体の初期化子は末尾カンマOKなのは知ってたけど、enumの末尾がOKになったのは知らなかったな。
0271デフォルトの名無しさん2014/06/25(水) 19:35:32.28ID:GI9gCNNz
むしろダメだったのはどの規格だ?
0272デフォルトの名無しさん2014/06/25(水) 19:36:16.29ID:S1Iayfvn
JSON・・・
0273デフォルトの名無しさん2014/06/25(水) 19:49:06.99ID:nQofGeEb
Java
0274デフォルトの名無しさん2014/06/25(水) 23:15:22.16ID:3Kde8RGP
class Data {}
class IntData: public Data {}
class FloatData: public Data {}
class StringData: public Data {}
...
みたいになっているクラスと、
Data * items[N];
って配列がある時に、指定した型のデータを型チェック付きで取得するって関数が欲しいんだけど
Data * FindDataByType(typeid t) {
 for (int i=0; i<N; i++) {
  if (typeid(items[i]) == t) return items[i];
 }
 return NULL;
}
とかやって、
IntData i = dynamic_cast<IntData *>(FindDataByType(typeid(IntData)));
こうやって使いたいけどうまくいかないんだけど、どうすればいいの?
できれば、型を二回書かなきゃいけないのだアレだからテンプレートとか使って
IntData i = FindDataByType<IntData *>()
とかできたらいいnだけど、どうやって作れば良い?
0275デフォルトの名無しさん2014/06/25(水) 23:21:49.63ID:wd/TKtIC
IntData* i =
じゃね
0276デフォルトの名無しさん2014/06/25(水) 23:24:31.67ID:oH3tOWT5
>>274
boost::anyなら型情報も持ち越せる
0277デフォルトの名無しさん2014/06/25(水) 23:24:57.35ID:w/lJRHUi
boost::anyとか使ったほうがいいんじゃない
0278デフォルトの名無しさん2014/06/25(水) 23:30:56.91ID:w/lJRHUi
こんな感じかな

template <typename T>
T *FindDataByType()
{
for (int i=0; i<N; i++) {
if (items[i] && typeid(*items[i]) == typeid(T)) {
return dynamic_cast<T *>(items[i]);
}
}
return NULL;
}

IntData *i = FindDataByType<IntData>();
0279デフォルトの名無しさん2014/06/26(木) 00:36:09.96ID:fhISWJCk
>>271
c++03以前は何故かenumだけは末尾カンマが認められてなかった。
0280デフォルトの名無しさん2014/06/26(木) 00:38:52.76ID:4Ejug6Se
boost よりも手軽そうなので >>278 でやってみたら、うまく行きました。ありがとうございます!!
0281デフォルトの名無しさん2014/06/26(木) 00:43:46.19ID:4Ejug6Se
>>270
ついでに enum 末尾のカンマの話しですが、ちょうどさっき眺めていたページに書いてあったので
張っておきます

プログラミング言語 C の新機能
ttp://seclan.dll.jp/c99d/c99d07.htm
0282デフォルトの名無しさん2014/06/26(木) 00:48:50.17ID:4Ejug6Se
と思ったらC++の話題でしたね。スレ汚しすみません
0283デフォルトの名無しさん2014/06/27(金) 02:34:30.61ID:tG/H6ykx
#include "stdafx.h"
#include <string>
#include <iostream>
using namespace std;
class MyClass{
public:
  int num;
  wstring to_wstr() {
    return std::to_wstring(this->num);
  };
};

wstring func_wstr(const MyClass &mc){ // constがあると
  return mc.to_wstr(); //ここでエラー
}

int _tmain(){
  MyClass mc;
  mc.num = 10;
  wcout << func_wstr(mc) << endl;
  return 0;
}

VS2013で、const を付けると
「オブジェクトにメンバー関数と互換性のない型修飾子があります」

と出るのですが、理由が良く分りません。constを取ればエラーしない
のですが、constを取らずに解決する方法はありますか?
0284デフォルトの名無しさん2014/06/27(金) 02:42:54.09ID:KsaQjwqy
  wstring to_wstr() const {
かのう
0285デフォルトの名無しさん2014/06/27(金) 02:51:51.06ID:tG/H6ykx
>>284
有難うございました。解決しました。
後学の為に教えてほしいのですが、この位置にconstを付ける記述方法は
初めて知ったのですが、詳しく調べるには、
どういうキーワードでググれば良いでしょうか?
0286デフォルトの名無しさん2014/06/27(金) 02:52:57.25ID:W4E2+BuV
スーパークラスではprotectedでサブクラスでは選択的にpublicにしたい
(アクセスレベルを変えるだけで実装はそのまま)メンバ関数があるときってどうするん?
0287デフォルトの名無しさん2014/06/27(金) 02:57:35.40ID:8WqwLSyf
>>286
サブクラスで必要やつだけラッパを作る
0288デフォルトの名無しさん2014/06/27(金) 03:09:37.07ID:W4E2+BuV
>>287
トン。やぱこういう形になるのか…
//Derived ..
public:
 bool SaveToFile() const { return SaveToFileImpl(); }

//Base ..
protected:
 bool SaveToFileImpl() const;
0289デフォルトの名無しさん2014/06/27(金) 05:28:48.52ID:3AYvTqjQ
>>285
そのまんま。constメンバ関数
0290デフォルトの名無しさん2014/06/27(金) 06:17:27.34ID:/tBLbKnn
オブジェクト指向は愚かな考え。
http://peace.2ch.net/test/read.cgi/tech/1393660194/
0291デフォルトの名無しさん2014/06/27(金) 08:33:27.63ID:owjTVSP6
>>288
ただアクセス権のみを変えたいだけならusingでイケると思う。
未確認だけど。
0292デフォルトの名無しさん2014/06/27(金) 15:30:34.87ID:d+h8Rz9e
const から非 const へのキャストって出来ないようになってませんでしたっけ?
下記のコードがコンパイル通ったのですが、なぜなんでしょうか。。。

float val=10.0;
const float * p=&amp;val;
float * q=(float *)p; <<< THIS
(*q)=20.0;
0293デフォルトの名無しさん2014/06/27(金) 15:48:50.86ID:SKslXSwB
Cスタイルのキャストだから。reinterpret_castではできない。
const_castではできる。
0294デフォルトの名無しさん2014/06/27(金) 15:49:00.63ID:bW1g8X86
>>292
お前はconstを勘違いしてる
0295デフォルトの名無しさん2014/06/27(金) 16:00:58.59ID:d+h8Rz9e
>>293
ありがとうございます。
つまり、Cスタイルのキャストは使うなと言う事ですね?
0296デフォルトの名無しさん2014/06/27(金) 16:14:46.16ID:fQovSiOU
基底クラスでイコール演算子をダイナミックキャストなしで
ヴィジターパターンを使って実装する方法見つけたんだけど
教えてほしい?
0297デフォルトの名無しさん2014/06/27(金) 16:47:40.46ID:SKslXSwB
教えて
0298デフォルトの名無しさん2014/06/27(金) 16:56:13.37ID:fQovSiOU
では教えよう。
class B{
public:
virtual bool equal(B * b);
virtual bool f(D * d);
};
class D:public B{
public:
bool equal(B * b){
b->f(this);
}
bool f(D * d){
//ここでdとthisを比べる。
}
};
基底クラスでfを定義するのが汚いけどdynamic_castするよりは早いと思う。
ちなみに基底クラスで派生クラスのコピーを作るときはcloneメソッドを実装するといい。
0299デフォルトの名無しさん2014/06/27(金) 16:58:06.34ID:fQovSiOU
では教えよう。
class B{
public:
virtual bool equal(B * b);
virtual bool f(D * d);
};
class D:public B{
public:
bool equal(B * b){
return b->f(this);
}
bool f(D * d){
//ここでdとthisを比べる。
return a;
}
};
基底クラスでfを定義するのが汚いけどdynamic_castするよりは早いと思う。
ちなみに基底クラスで派生クラスのコピーを作るときはcloneメソッドを実装するといい。
0300デフォルトの名無しさん2014/06/27(金) 17:01:47.48ID:78das2/q
大事なことなので二回・・・
0301デフォルトの名無しさん2014/06/27(金) 20:30:14.87ID:aC5lLxyA
その方法スケールしないんじゃ
0302デフォルトの名無しさん2014/06/28(土) 08:29:17.82ID:Z5Hu91SB
スケールってなに?
0303デフォルトの名無しさん2014/06/28(土) 11:36:29.86ID:zyFd2JCz
Visual Studio2013の場合デフォルトがUnicode設定になっていますが、
その状態でプログラム作成する場合、
プログラム中の文字列は
すべて
 wchar_t
 wstring
 L"先頭にL付けておく"
のようにすべきでしょうか?それとも
 char
 string
 "先頭にL無し"
が混在しても問題ないでしょうか?
もちろんビルドはできますが、実際のところどうなんでしょうか?
0304デフォルトの名無しさん2014/06/28(土) 11:38:19.81ID:APdgRJww
前者で
0305デフォルトの名無しさん2014/06/28(土) 11:44:25.52ID:x+v3wTK9
Win32APIガッツリ使い込むタイプのプログラムなら
basic_string<TCHAR>
TEXT("てきすと")
で
0306デフォルトの名無しさん2014/06/28(土) 12:17:34.09ID:zyFd2JCz
>>304, 305
ありがとうございました。前者で行きます。でも
__FUNCTION__
などを使う場合、関数名が日本語だとそのまま使うと文字化けしたのですが、
どうやってUnicode化すれば良いでしょうか?
0307デフォルトの名無しさん2014/06/28(土) 12:22:13.70ID:PjMB043i
>>299
ん。素でわかんない。
なんでf()が必要なの?
なんで、equalsにvirtualつけないの?
そもそも、比較にdynamic_cast必要になる時点でおかしくね?

あと、設計的にもそういう特殊な比較は別クラスにした方がいいと思う。
0308デフォルトの名無しさん2014/06/28(土) 12:28:13.45ID:Z5Hu91SB
こんな簡単なことがなんでわからないの?
0309デフォルトの名無しさん2014/06/28(土) 16:05:56.88ID:Wnh+uZwR
>>306
シンボルを日本語化するなんて上級者向けやで
0310デフォルトの名無しさん2014/06/28(土) 19:07:46.30ID:KBy1xB6J
>>299
よくわかんないけど、派生クラスがD以外に増えたとき親クラスであるBを改修
しなきゃいけないなんて話じゃないだろうな?
0311デフォルトの名無しさん2014/06/28(土) 21:00:04.05ID:XYgmWbOx
参照はすべてポインタで代用できますか?
参照がどうしても分からないので使わないようにしたいのですが。
0312デフォルトの名無しさん2014/06/28(土) 21:02:02.67ID:geTrLIQK
無理
参照を使わない設計自体は可能
(すでに参照を使った設計をポインタのみの設計に変更は不可能)
0313デフォルトの名無しさん2014/06/28(土) 21:04:01.68ID:XYgmWbOx
ありがとうございます。
0314デフォルトの名無しさん2014/06/28(土) 21:05:36.35ID:9+P5UZB2
ポインタ変数の左に*を付けたものだと考えればいい
0315デフォルトの名無しさん2014/06/28(土) 21:15:00.60ID:APdgRJww
参照がわからないってどんだけだよ
0316デフォルトの名無しさん2014/06/28(土) 21:40:29.65ID:oeWdp7Lh
>>312
> (すでに参照を使った設計をポインタのみの設計に変更は不可能)

なんかできないことってあったっけ?
0317デフォルトの名無しさん2014/06/28(土) 21:54:12.33ID:d97dzfvu
ポインタを全て参照にするのは不可能だけど参照をすべてポインタにするのは可能だね
0318デフォルトの名無しさん2014/06/28(土) 22:00:32.54ID:mUtxvZ8u
ど素人が断定してんじゃねーよ
0319デフォルトの名無しさん2014/06/28(土) 22:03:57.59ID:d97dzfvu
>>318
ど素人だろうがど玄人だろうが、反論するなら具体例を出せ、命令だ。
0320デフォルトの名無しさん2014/06/28(土) 22:36:39.57ID:mzWdk+zj
参照って、実際のところ、関数の引数でしか使わない。
同じ記憶場所に関数側と呼び出し側で別名(別の変数名)を使うのが参照。

ちなみに、ポインタより参照の方が歴史が古い。FORTRANではこれが
サブルーチン(戻り値がvoidの関数に相当)の引数で普通に使われていた。
ポインタはプログラマには開放しない方が良いという思想があったのだろう。

そのパンドラの箱を開けてしまったのがC言語。もっとも、PASCALでもポインタはあった。
でも、C言語みたいに露骨ではなかった。
0321デフォルトの名無しさん2014/06/28(土) 22:44:33.82ID:8g/ok33H
>>308
どんな状況になればこんなトリッキーな方法採る必要があるのか、書いてあることと使うときにやらなきゃならないことはわかるんだけど、
そもそもどうしてこうなった?がまるでわからん。

とりあえず、オーバーロードさせず、無理やりオーバーライドさせてる理由を知りたいな。

>>314
参照型は多態もできるから、どっちかていうと、実体が保証されたポインタだと思う。
0322デフォルトの名無しさん2014/06/28(土) 22:48:10.08ID:QnAT7eoy
int& a = *(int*)rand();
a = 100;
0323デフォルトの名無しさん2014/06/28(土) 23:23:26.68ID:9+P5UZB2
「保証された」は語弊がある。
0324デフォルトの名無しさん2014/06/28(土) 23:23:36.58ID:8fzSy6NM
>>302
派生クラスを増やしたら基底クラスの改修が必要になってしまうから、
拡張していく際に基底クラスの改修量が酷いことになってしまうんだろ。
派生クラス間で特定の組み合わせに対するequalを実装する場合もメソッド増えるし…

vtblサイズ+メソッド数+f呼び出しコストを、RTTI情報+dynamic_castコストと交換するメリットがどのくらい有るか。
vtblあたりを参照するのは変わらないし、例外投げたりしなけりゃ速度も大差ない気がするけど、実測はどうなん?
0325デフォルトの名無しさん2014/06/29(日) 01:05:18.10ID:hgflSjsR
>>322
>>323
失礼。普段関数の引数にしか使ってないので意識してなかったです。
保証は言い過ぎでした。
0326デフォルトの名無しさん2014/06/29(日) 03:18:32.81ID:Mlp78ySA
参照のどこらへんに理解できないポイントがあるのか興味あるな
0327デフォルトの名無しさん2014/06/29(日) 08:22:03.51ID:bIa+Nxww
ポインタがあるのに参照などと益体もないものを導入して混乱させた理由。
全く理解できない。
0328デフォルトの名無しさん2014/06/29(日) 08:29:14.56ID:x5/3slyt
コピーコンストラクタと代入演算子が作れない。
0329デフォルトの名無しさん2014/06/29(日) 08:54:16.11ID:Hir1ALDw
右辺値の束縛はconst&か&&でしているけど、
それはポインタに置き換えるとどんな形がいいのかなあ
0330デフォルトの名無しさん2014/06/29(日) 09:04:16.40ID:x5/3slyt
話し切るけど質問
ODBCのインタフェースって引数文字列がconst宣言されてない。
(const SQLCHAR* じゃなくてSQLCHAR*)

これは「このインタフェースがクソでconstつけ忘れてるだけだから、const stringをconst_castして渡してOK」
と解釈していいの?
それともマジメにコピー作って渡さなきゃダメ?
0331デフォルトの名無しさん2014/06/29(日) 09:10:01.22ID:x5/3slyt
↑
もちろん「入力」扱いになってる引数で
0332デフォルトの名無しさん2014/06/29(日) 09:22:31.63ID:sCOJExE0
>>330
俺はまじめにコピーして渡してるな
他の人は誰もやってないようだけど
とりあえずやっときゃ文句言われる筋合い無くなるから

execvとかもそうだっけ
0333デフォルトの名無しさん2014/06/29(日) 10:19:40.06ID:d4tnsDO5
>>322
数値をポインタに変換したら未定義動作じゃなかったっけ?
0334デフォルトの名無しさん2014/06/29(日) 10:23:04.49ID:9A1BEMzj
メモリの確保について質問があります
HogeクラスのメンバにTestクラス二つ(testA, testB)を持たせて、Hogeコンストラクタ時に一方のTest(testB)だけをnewするとします
そのHogeクラスをmain関数内でnewしたとき、testAとtestBはスタック領域とヒープ領域のどちらに確保されるのでしょうか?
Hogeをnewしているので両方ともヒープ領域でしょうか?
ソース:http://codepad.org/SSJ69uQH
0335デフォルトの名無しさん2014/06/29(日) 10:26:10.13ID:Yrdi7SVP
全部ヒープ
0336デフォルトの名無しさん2014/06/29(日) 10:26:33.62ID:XJmNHg1k
どっちもヒープ(の別の場所)
0337デフォルトの名無しさん2014/06/29(日) 10:32:53.21ID:9A1BEMzj
ありがとうございました
0338デフォルトの名無しさん2014/06/29(日) 10:33:04.46ID:KFRMJvcV
なぜnewしているのにスタックに確保されると思うんだろう?
0339デフォルトの名無しさん2014/06/29(日) 10:49:28.86ID:x5/3slyt
>>332
じゃオレもまじめにコピーしようかな。

>>334
もし testA がクラスオブジェクトじゃなくて int だとしたらそんな疑問わかないだろ?
0340デフォルトの名無しさん2014/06/29(日) 11:15:57.90ID:9A1BEMzj
>>338
HogeをnewしなければHogeとtestAはスタックに置かれて、testBはヒープに置かれますよね?
それとごっちゃになってしまって
>>334
ああ、わかりやすいです
確かにそうですね
0341デフォルトの名無しさん2014/06/29(日) 12:27:28.62ID:XFCViuqu
オブザーバーパターンでよく
サブジェクトのthisをオブザーバーに登録するじゃないですか?
thisの値はオブジェクトが作られて破棄されるまで不変である保証はない
ってきいたんですけど。
その理由でthisをオブザーバーに登録するのは間違ってますか?
0342デフォルトの名無しさん2014/06/29(日) 12:35:23.61ID:zG1862oy
はい。
0343デフォルトの名無しさん2014/06/29(日) 12:40:26.99ID:XFCViuqu
じゃあJavaみたいに自動で登録するみたいなことは出来ないんですね。
0344デフォルトの名無しさん2014/06/29(日) 12:43:09.60ID:XFCViuqu
class B{
public:
virtual bool equal(B * b);
virtual bool equal(D * b);
};
class D:public B{
public:
bool equal(B * b){
return b->equal(this);
}
bool equal(D * d){
//ここでdとthisを比べる。
return a;
}
};
オーバーロードってこういうこと?
0345デフォルトの名無しさん2014/06/29(日) 14:16:20.95ID:Ie+pgniP
>>309
日本語関数名がどうやっても化けるんですけれど、
化けないようにできますか?上級者のテクニックを教えてください。
0346デフォルトの名無しさん2014/06/29(日) 15:31:19.26ID:hgflSjsR
>>344
class Dのほうで、B*の再定義はいらない。
usingで宣言するだけでいい。
けど、専用の比較関数が必要でD*のequalを作るのだから、本来は隠蔽されちゃったままでも、不都合はないはずなんだけどねぇ。
0347デフォルトの名無しさん2014/06/29(日) 15:38:26.71ID:XFCViuqu
class B{
public:
virtual bool equal(B * b){
return b->equal(this);
}
virtual bool equal(D * b)=0;
};
class D:public B{
public:
bool equal(D * d){
//ここでdとthisを比べる。
return a;
}
};
こうか。
0348デフォルトの名無しさん2014/06/29(日) 17:06:25.73ID:gs1K0ves
>>345
2008の環境しかないのでそれで確認したけど
__FUNCTION__がUTF8になっているね
iconvやicuを使って変換してやるか
#pragma execution_character_set("utf-8") やら u8""で
マルチバイトをUTF8に統一するかかな

一番のオススメは日本語名は使わないこと。
0349デフォルトの名無しさん2014/06/29(日) 21:04:30.39ID:Ie+pgniP
>>348
>2008の環境しかないのでそれで確認したけど
わざわざ確認ありがとうごいざました。

> __FUNCTION__がUTF8になっているね
この事と、

> iconvやicuを使って変換してやるか
> #pragma execution_character_set("utf-8") やら u8""で
> マルチバイトをUTF8に統一するかかな
これらの関係が良く分らないのですが、
VS2008(または2013)で、Unicode設定にしておいて、
日本語関数名を使った場合、__FUNCTION__ が文字化けするのは現状では避けられないという事でしょうか?
上で教えていただいた #pragmaの行を入れてみましたが、やはり化けました。
0350デフォルトの名無しさん2014/06/29(日) 21:44:02.77ID:sAbB6qLf
>>349
>__FUNCTION__ が文字化けするのは現状では避けられないという事でしょうか?

いいえ。
文字化けする。というのはアナタの勝手な都合によるものなので
アナタが正しく扱えば文字化けしません。
0351デフォルトの名無しさん2014/06/29(日) 22:30:40.17ID:Ie+pgniP
>>350
化けない方法教えてくれよ。
0352デフォルトの名無しさん2014/06/29(日) 22:37:15.61ID:kNEEabcv
auto baka = __FUNCTION__;
この時点では化けていないはずだ
どうやって文字化けさせたんだよ
0353デフォルトの名無しさん2014/06/29(日) 22:45:28.68ID:bdhveqt4
>>349
手元に環境がないから再現出来なくて適当だけど
void 関数1() {
__FUNCTION__
}
が
void 関数1() {
"\xe9\x96\xa2\xe6\x95\xb0\xef\xbc\x\x91"
}
と __FUNCTION__ が そのまま UTF8な"関数名" に置き換えられるなら単純な話で
u8"" __FUNCTION__
という表現でいける単純な話。
でもVC2008の/Eやg++の-Eで出力や挙動を確認すると
void 関数1() {
const char* __FUNCTION__ = "\xe9\x96\xa2\xe6\x95\xb0\xef\xbc\x\x91";
__FUNCTION__
}
という形で展開されると思うんだな。

なのでそそれならそれでの様に扱えばいいだけだと思う。
icuを使った方法として一例を出すと
std::wcout.imbue(std::locale("Japanese", std::locale::ctype));
しといて
UnicodeString s(__FUNCTION__,"utf-8");
wcout << s.getTerminatedBuffer() << endl;
0354デフォルトの名無しさん2014/06/30(月) 12:32:33.92ID:9qEE8Hk5
class C{
C(C&amp;&amp;c) { ... }
X* begin(void){ ... }
X* end(void){ ... }
};

C c;
for(auto &amp;x: c){ ... }

とすると、C::C(const C&amp;) が無い、って怒られるんですが、
これで生成されるコードの何処でクラスCのコピーコンストラクタが使われるんですか?
0355デフォルトの名無しさん2014/06/30(月) 12:41:56.72ID:PCT+Ouxm
多重継承つかうとき
A→B,Cのとき
void f(A * a){
f(a,a);
}
void f(B * b,C * c){
//略
};
的なコードは普通に使いますか?
0356KUSO KOTE ◆unko./w.Osri 2014/06/30(月) 17:01:13.38ID:vI/lcwnp
>>354
>for(auto &amp;x: c){

Cがクラス型なのでbeginの呼び出しを試みて、
beginが無いので「begin(c)」が評価されるはず(たぶん)。
ISO/IEC 14882:2011 6.5.4p1山椒。
0357デフォルトの名無しさん2014/06/30(月) 17:13:39.91ID:0nWL9M6a
begin()が有るのでんなこたーない
0358デフォルトの名無しさん2014/06/30(月) 18:55:05.18ID:S8arh0g0
単にデフォルトコンストラクタが無いだけじゃねえの?
0359デフォルトの名無しさん2014/06/30(月) 19:10:33.50ID:9qEE8Hk5
>>356
回答ありがとうございます、でも
>>357
ですよねー
>>358
すまん例示に簡略化ソース書く時 C(void) を書き忘れただけ。

C(const C&); と宣言だけ書くと、名前解決できんぞエラーでるし、
C(const C&){ abort(); } とすると、しっかりforでabortするんすよ。
今から慣れない逆アセンブルでエラー箇所を辿ってみます。
ちなみにgcc-4.9.0 x64 linuxな環境です。
0360デフォルトの名無しさん2014/06/30(月) 19:27:29.19ID:eRZVxkgm
再現する最小限のコード貼れ低能
http://ideone.com/dsnaUc
0361デフォルトの名無しさん2014/06/30(月) 20:15:16.72ID:S8arh0g0
>>360
細かい事だけどbeginの返りはXじゃね?
0362デフォルトの名無しさん2014/06/30(月) 20:20:10.46ID:Itmm/N0R
ttp://ideone.com/VG8UMg
X*でも問題ないやんけ
0363デフォルトの名無しさん2014/06/30(月) 20:20:53.74ID:S8arh0g0
いや問題の解ってるから細かい事って言ったんだけど
Xさんが不憫でな
0364デフォルトの名無しさん2014/06/30(月) 20:26:31.98ID:+2zmbam4
>>344
話題ぶった切りごめん、イメージはこんな感じ
ポインタ使わないのはnullチェックがメンドイからというだけなので、 気にしないでください。

class B
{
public:
virtual bool equal(const B& ) const { return true; }
};

class D : public B
{
public:
using B::equal;
virutal bool equal(const D& ) const { return true; }
};

ただ、 普通ならこういうオーバーロードなら基底クラスの関数は必要ないはずなので、
using しないでも不都合はないはず。
1. a.equal(b1)
2. b1.equal(a)
3. b2.equal(b1)
using外すと 2.が隠蔽されて文法エラーになるはず。(C++11で挙動変わっていたかもしれない)
でも、 2.は1.の記述と同じなので 1.でいいよね。という話。
0365デフォルトの名無しさん2014/06/30(月) 21:06:47.19ID:1cNt7cFr
template <size_t N>
struct foo {
static const size_t value = (1<N)? 1 + foo<N/2>::value : 0;
};

エラー 3 error C2057: 定数式が必要です。
エラー 1 error C2065: 'value' 定義されていない識別子です。


死ねよ
0366デフォルトの名無しさん2014/06/30(月) 21:50:06.10ID:7Z3qDws2
オマエが死ねよ
0367デフォルトの名無しさん2014/06/30(月) 21:52:58.62ID:Itmm/N0R
関数じゃダメなのか
0368デフォルトの名無しさん2014/06/30(月) 22:05:10.42ID:1cNt7cFr
>>366
なんで不自由コンパイラをかばうんだよ
0369デフォルトの名無しさん2014/06/30(月) 22:05:53.62ID:m6NPXDeS
clangで通ってVisual C++で通らないコードを見つけては
クソスレでコンパイラの悪口をたれ流さないと落ち着かないなんて
アスペはどうしようもないな

Visual C++ CTPならこうするしかない
http://ideone.com/FQthte
0370デフォルトの名無しさん2014/06/30(月) 22:06:51.32ID:ns3RfNke
自由のコンパイラとやらでもエラーですが…
0371デフォルトの名無しさん2014/06/30(月) 22:18:07.28ID:SDV3n3ce
>なんで不自由コンパイラをかばうんだよ
その発言は
「不自由」な製品が気に入らないけど批判する正当な理由が思いつかなかったので
コンパイルエラーになるサンプルを利用してネガキャンしてるということだよね?
基地外信者はどうしようもないなあ
0372デフォルトの名無しさん2014/06/30(月) 22:22:39.51ID:1cNt7cFr
>>369
あなたのコードは素晴らしい。
constexpre も素晴らしい。

ついさっき template alias がらみでも不具合を見つけてついかっとなってしまった。
0373デフォルトの名無しさん2014/06/30(月) 22:26:45.39ID:1cNt7cFr
>>371
上に書いたとおり、ついカッとなってしまったんだよ。

とりあえずコードは明示的に特殊化したら動いた。
template <size_t N> struct foo { static const size_t value = 1 + foo<N/2>::value; };
template <> struct foo<0> { static const size_t value = 0; };
template <> struct foo<1> { static const size_t value = 0; };
0374デフォルトの名無しさん2014/07/01(火) 03:21:35.77ID:o23NPp0W
前から気になってた標準ログ出力(std::clog)はどこに出力するのか試してみた。
そしたら、ファイルではなく、画面に出力した。
だから、標準出力と標準エラー出力と標準ログ出力をするプログラムを作って、
標準出力、標準エラー出力をファイルにリダイレクトしてみた。
そしたら、標準エラー出力と標準ログ出力は同じファイルに出力されてた。

標準エラー出力(std::cerr)と標準ログ出力(std::clog)の違いって何?
0375デフォルトの名無しさん2014/07/01(火) 04:12:16.93ID:5yo5VYqW
ggr
0376デフォルトの名無しさん2014/07/01(火) 04:44:58.61ID:0cFK+5zF
その手の情報をググるとたいてい嘘しか出てこない
0377デフォルトの名無しさん2014/07/01(火) 09:55:33.57ID:fybX+FyU
>>364
それでも
B * b1 =new D;
B * b2=b1->clone();
//b1に何かする
if(b1.equal(b2))
//略
みないなコード書けるの?
0378デフォルトの名無しさん2014/07/01(火) 13:09:15.00ID:iUnw5KU9
みたいな
が
みないな
になってる方言あるのか?
0379デフォルトの名無しさん2014/07/01(火) 20:33:19.37ID:qfwt9Mu7
>>377
呼び出すのはB::equalになって、問題なさそうだけど。。。
あーダウンキャストするしない言ってたのは、そういことか。

派生クラスの比較(機能)を基底クラスにさせるのは、バグじゃね?
B*として、宣言してるのが間違いか、Bの情報だけで、完結できない事がまずい予感する。
たぶん、後者


例えば、Bの派生で、もう一つclass Eとか必要になったとき、うまく行く気がしない。
0380デフォルトの名無しさん2014/07/01(火) 20:38:20.27ID:JwWACs0f
すみません、質問させてください。
日本語の文字列を
string型に格納すると、例えば
a[0]="あ",a[1]="い"みたいにならず、
変になってしまいます。
これを解決し、配列に格納するしたいのですが、できないでしょうか。
0381デフォルトの名無しさん2014/07/01(火) 20:44:22.66ID:nNBs5Ge4
>>380
半角カナとかどうかな
0382デフォルトの名無しさん2014/07/01(火) 20:47:18.21ID:iEcuxoAk
wstring使え
0383デフォルトの名無しさん2014/07/01(火) 20:56:44.48ID:hwdR0PcE
int 配列[] = {'あ', 'い', 0};
ほら入った!
0384デフォルトの名無しさん2014/07/02(水) 00:15:36.57ID:35cf/DNE
質問です。
streamでdouble値を出力する際、小数点以下を4桁以下にしたい。
でも不要な0は出したくない。
double d1=1234.56789;
double d2=1234567.89;
を
1234.5678
1234567.89
と出したいのですが、どうしたら良いか判りません。

cout
<< fixed << setprecision(4) //小数点以下4桁
<< noshowpoint //0を出さない
<< d1 << endl << d2 << endl;
こんな感じでいけそうで・・・いけない。
1234.5679
1234567.8900

前者が丸めで.567「9」なのは別に構わないのですが、
後者の.8900を.89にしたいのです。
どうすればうまくいくでしょうか?
0385デフォルトの名無しさん2014/07/02(水) 02:04:21.26ID:YEsAQcrk
>>384
double round4(double v)
{
return std::round(v * 10000) / 10000;
}

double round4s(double v)
{
std::stringstream someStream;
someStream << std::fixed << std::setprecision(4) << v;
double tmpValue;
someStream >> tmpValue;
return tmpValue;
}

std::cout << std::setprecision(10) << round4(1234.56789) << ' ' << round4(1234567.89) << '\n';
std::cout << std::setprecision(10) << round4s(1234.56789) << ' ' << round4s(1234567.89) << '\n';
0386デフォルトの名無しさん2014/07/02(水) 02:27:23.01ID:x0ee2S2E
>>384
文字列化して末尾の0削れ

string remove_trail0(string const & s)
{
string::size_type p = s.find_last_of("123456789.");
return p == string::npos ? s : s.substr(0, p + 1);
}

int main() {
double d1=1234.56789;
double d2=1234567.89;

ostringstream st1, st2;
st1 << fixed << setprecision(4) << d1;
st2 << fixed << setprecision(4) << d2;
cout << remove_trail0(st1.str()) << endl << remove_trail0(st2.str()) << endl;

return 0;
}
03873842014/07/02(水) 03:03:09.11ID:35cf/DNE
ありがとうございます!
でもやっぱりというか、stream周辺の機能群だけでは微妙に
やりたい事にとどかないんですね。

>>385
まったく思いつかなかった手です。
すごい!てかround4sは判るけどround4は原理がわからない!
>>386
昨日、この問題に悩んで私もstringにつっこんで加工、で一旦手を打ちました。
でも私のダサいコードとは全然違う・・・たった2行でできるとは!
0388デフォルトの名無しさん2014/07/02(水) 20:30:22.40ID:fHMYDL9O
すみませんアドバイスをください
c++をやり始めてなんとか色々調べながら組んでいます。
c++に限ったことではないとは思いますが、
クラス設計についていつもどう設計したら良いか悩んでいます
クラス設計やオブジェクト指向について皆さんが思う良書等あれば教えていただけませんか?
書籍だけでなく、ホームページ等でも構いません。
よろしくお願いします。
0389デフォルトの名無しさん2014/07/02(水) 22:14:03.52ID:DWqCR9Fz
>>388
ゴッドオブフォー
0390デフォルトの名無しさん2014/07/02(水) 22:15:12.66ID:DWqCR9Fz
>>389
ギャングオブフォーの間違いです
0391デフォルトの名無しさん2014/07/03(木) 01:07:04.70ID:UAa1+2kC
GoD
0392デフォルトの名無しさん2014/07/03(木) 03:03:52.84ID:xh6lB5a5
>>374-376
std::cerrはフラッシュされるとあったが違うんか?
0393デフォルトの名無しさん2014/07/03(木) 07:40:00.89ID:hoM7mJ8v
正しい定義を知りたければ規格文書を参照
実際の挙動を知りたければ使用する実装を参照

VC9.0だとcerrはsetf(ios_base::unitbuf);されるがclogはそれがない。
unitbufは出力後に自動でフラッシュを行うフラグ。
0394デフォルトの名無しさん2014/07/03(木) 08:38:27.96ID:HrBrWTcy
といって規格の記述の半分だけ示す393でした
0395デフォルトの名無しさん2014/07/03(木) 08:56:05.79ID:hoM7mJ8v
規格に基づく正しい定義については偉い人に任せた

>>394
実際の挙動の一例を出しただけで、規格の記述は一行たりとも示してねぇぞ俺
0396デフォルトの名無しさん2014/07/04(金) 00:01:13.26ID:tUyP8R55
cout系はライブラリによって挙動が違うのが困りもの
それどころかSTLportはcoutとwcoutで挙動が違ったりするし
0397デフォルトの名無しさん2014/07/04(金) 00:51:47.54ID:YuOgmg9u
>>388
リファクタリング関連もその用途に合うと思うけど
0398デフォルトの名無しさん2014/07/04(金) 07:34:27.55ID:KS+8mYqF
クラスから他のクラスのプライベートメンバーに
アクセスするほうほう見つけたんだけど知りたい人いる?
0399デフォルトの名無しさん2014/07/04(金) 07:49:44.04ID:S99N8+c8
#define private public
0400デフォルトの名無しさん2014/07/04(金) 07:53:31.27ID:Mhkj+G22
静的リフレクション
0401デフォルトの名無しさん2014/07/04(金) 07:54:52.46ID:KS+8mYqF
特殊な方法なしでアクセスする方法なんだけど?
しりたくないの?
0402デフォルトの名無しさん2014/07/04(金) 07:55:31.91ID:58A2H7P1
同じクラスをコピペしてメモリ構造を調べて
ポインターで操作
0403デフォルトの名無しさん2014/07/04(金) 08:20:23.35ID:rIOXbDfy
別に知りたくないな。必要ないし。
0404デフォルトの名無しさん2014/07/04(金) 08:20:43.67ID:Wao0vGzp
friendでしょ?
0405デフォルトの名無しさん2014/07/04(金) 08:22:32.14ID:KS+8mYqF
9:00になったらコード貼るよ。
それまで考えておいて。
0406デフォルトの名無しさん2014/07/04(金) 08:25:21.51ID:5wf+gQT/
>>405
当然アクセス対象のクラスには一切手を加えず、規格にも矛盾しない方法なんだよな?
0407デフォルトの名無しさん2014/07/04(金) 08:30:19.61ID:KS+8mYqF
>>606
モチのロンよ
0408デフォルトの名無しさん2014/07/04(金) 08:42:37.94ID:s0a5Ff4P
同一のアクセス出来るクラスを作ってreinterpret_castする
0409デフォルトの名無しさん2014/07/04(金) 09:00:21.93ID:KS+8mYqF
class B{
void f(){}
protected:
void g(B * b){b->f();}
};
class E:public B{
}
class D:public B{
void h(E * e){g(e);}
};
int main(){
E * e=new E;
D * d=new D;
d->h(e);
delete e;
delete d;
return 0;
}
DがEのプライベートメンバーfにアクセス。
0410デフォルトの名無しさん2014/07/04(金) 09:25:01.79ID:rIOXbDfy
良かったなお前ら。スゴイテクニック教えてもらえて。
0411デフォルトの名無しさん2014/07/04(金) 09:29:43.24ID:rIOXbDfy
俺には何言ってるのか理解出来なかったけどな。
0412デフォルトの名無しさん2014/07/04(金) 09:29:59.18ID:5wf+gQT/
そうだな。コンパイルすらできないけどな
0413デフォルトの名無しさん2014/07/04(金) 09:30:55.80ID:46TleO5M
>>409
感動した
そのコードを貼った勇気に
0414デフォルトの名無しさん2014/07/04(金) 09:38:59.51ID:KS+8mYqF
class B{
void f(){}
protected:
void g(B * b){b->f();}
};
class E:public B{
};
class D:public B{
public:
void h(E * e){g(e);}
};
int main(){
E * e=new E;
D * d=new D;
d->h(e);
delete e;
delete d;
return 0;
}
DがEのプライベートメンバーfにアクセス。
0415デフォルトの名無しさん2014/07/04(金) 09:57:08.67ID:2VxeYaKx
お兄さま、さすがです
0416デフォルトの名無しさん2014/07/04(金) 10:15:13.70ID:RtHApYE2
あんまりからかうとWin32APIスレの粘着荒らしみたいになるぞ。
0417デフォルトの名無しさん2014/07/04(金) 11:29:29.91ID:z2bT5wpS
>>414
クソワロタw
それがプライベートメンバーにアクセスする事になるんだったら、
これからはGetHoge()系のインターフェースは怖くて追加出来んなw
0418デフォルトの名無しさん2014/07/04(金) 12:18:02.82ID:bq/wfsm7
エンターテイナーはこうでなくては
0419デフォルトの名無しさん2014/07/04(金) 12:56:06.86ID:PK/owwHZ
>>415
さり気なく別のものdisんな
0420デフォルトの名無しさん2014/07/04(金) 22:24:23.78ID:UzbhYlbZ
>>414
こういう事がしたいんだろ?
class Example
{
 virtual int Value(void) const
 {
  return 0;
 }
protected:
 static int Value(Example const &source)
 {
  return source.Value();
 }
};
class Source: public Example
{
 int Value(void) const
 {
  return 1;
 }
};
struct Sink:public Example
{
 Sink( Example const &source )
 {
  std::cerr << Value( source ) << std::endl;
 }
};
Sink object( Source() );
0421デフォルトの名無しさん2014/07/04(金) 22:32:17.69ID:rOm/D3cO
ちょっと何言ってるかわからない
0422デフォルトの名無しさん2014/07/04(金) 22:39:38.42ID:2VxeYaKx
2chでは評価されませんからね
0423デフォルトの名無しさん2014/07/04(金) 22:41:41.95ID:UzbhYlbZ
>>421
Exampleの派生型以外はSource().Value();や
Value( Source() );するとCompilerに怒られるけど、
Exampleの派生型の中ならValue( Source() )しても怒られないよーってコト。
int Value()をExampleの派生型だけで共有出来るよう制限出来るんだ。
大した使い道は無いけどね。
0424デフォルトの名無しさん2014/07/04(金) 23:05:56.80ID:rOm/D3cO
>>423
>int Value()をExampleの派生型だけで共有出来るよう制限出来るんだ

いやそんなことは自明。
どうして>>398,>>407と関係ない糞コードを貼り続け
ゴミレスを投下しているのかと訊いているのです
0425デフォルトの名無しさん2014/07/04(金) 23:12:39.18ID:JrI8d6/R
>>424
>>398, 407の意訳のつもりだったんだが
0426デフォルトの名無しさん2014/07/04(金) 23:40:36.28ID:z0g05U2s
なんか本気な人がいるっぽいからマジレスするけど

> DがEのプライベートメンバーfにアクセス。

とかいいつつBのプライベートメンバに間接的にしかアクセス出来てないっていう笑いどころだからな。
さらに言えば >>406 も満たしてない
0427デフォルトの名無しさん2014/07/04(金) 23:49:17.00ID:JrI8d6/R
要点は操作権限を特定のclass間だけに限定できるって
ことだろうから間接かどうかは別に良いんじゃない?
Handleとか無関係な型に操作させづらくするって
用途にはそれなりに使えるんじゃない?
0428デフォルトの名無しさん2014/07/05(土) 00:12:14.92ID:9YOT8bNa
もう、これでよくね?
http://ideone.com/hmJex8
0429デフォルトの名無しさん2014/07/05(土) 00:23:21.90ID:3XcLVhBt
>>427
> 要点は操作権限を特定のclass間だけに限定できるって
それが目的ならfriend使えよ

Bをpublicで派生したDはBでもあるわけよ。同時に同じくBをpublicで派生したCもB。DがBにアクセス出来るのは自明
他のクラスのプライベートメンバにアクセスするって事自体出来てない
0430デフォルトの名無しさん2014/07/05(土) 00:42:31.12ID:ZyyP8X5e
>>429
privateはどうでもいいとして、操作権を限定させるってだけの目的なら
friendは無制限過ぎて微妙だな。

class Provider: public Example
{
 Example *delegate;

 virtual int Value(void) const
 {
  return Value( *delegate );
 }
public:
 Provider( Example *delegate ):
  delegate( delegate )
 {
 }
};

Source source;
Sink object( Provider( &source ) );

例えばこんな感じでMember変数を委譲で供給するとか、
柔軟な実装がし辛くなるじゃん。
0431デフォルトの名無しさん2014/07/05(土) 00:45:34.29ID:9YOT8bNa
いや目的は
>クラスから他のクラスのプライベートメンバーに
>アクセスするほうほう見つけた
なんだから↓こういうのが正解だろう
http://ideone.com/PpDcFZ
0432デフォルトの名無しさん2014/07/05(土) 00:55:19.20ID:/YwrlwMg
日付変わっちゃったけどそろそろ釣り宣言してくれて良いんだよ
0433デフォルトの名無しさん2014/07/05(土) 00:56:22.71ID:3XcLVhBt
>>430
それ何がしたいのかわかんないんだけど、そうやって実装された、もしくはそういう風に使うことを想定して作られたライブラリあったりする?
それ見た方が多分解りやすいから頼む。
0434デフォルトの名無しさん2014/07/05(土) 07:08:53.32ID:Z67jRbaB
>>431
そそ、こういうの期待してた
しかし同じ翻訳単位でメンバ変数がすべて同型同順で仮想関数ももたないとき
reinterpret_castが安全であることって保障されてんのかな
0435デフォルトの名無しさん2014/07/05(土) 07:12:14.75ID:Z67jRbaB
いや、>>431は仮想関数もってるな…さらにややこしそう
0436デフォルトの名無しさん2014/07/05(土) 18:42:02.37ID:vcFDTX3C
C++とPNGでググったらlibpngが出たので四苦八苦してたら、
WindowsならCImage使って読み書きできるやん……
0437デフォルトの名無しさん2014/07/05(土) 18:45:45.87ID:xvor2Eqf
そっかー(´・ω・`)
0438デフォルトの名無しさん2014/07/07(月) 17:17:34.74ID:6Eg2BT83
さっかー(★)
0439デフォルトの名無しさん2014/07/07(月) 20:15:31.28ID:6Eg2BT83
sucker(★)(★)
0440デフォルトの名無しさん2014/07/07(月) 20:56:55.01ID:GUbIZrhH
(★)(★)(★)(★)(★)(★)(★)
知的な質問をおくれ
0441デフォルトの名無しさん2014/07/07(月) 21:04:57.64ID:7uAzUVIh
ほれ
)*(
0442デフォルトの名無しさん2014/07/07(月) 22:17:36.19ID:ybxb16rQ
ここ掘るわんわん!
0443デフォルトの名無しさん2014/07/08(火) 11:28:54.54ID:VtPt2aKV
shared_ptr使って親と子を結びつける時にどうしたらいいかわからないです。
#include <stdio.h>
#include <memory>
#include <set>
class IParent;
class IChild
{
std::shared_ptr< IParent > m_parent;
protected:
public:
IChild() { puts( "IChild" ); }
public:
virtual void draw() { puts( "child" ); }
virtual ~IChild() { puts( "~IChild" ); }
friend class IParent;
};
class IParent
{
std::set< std::weak_ptr< IChild > > m_childs;
public:
void add( std::shared_ptr< IChild > child )
{
// child.m_parent = shared_ptr<IParent>(this)? // ←これダメな気がする
m_childs.insert( child );
}
};
int main(int argc, _TCHAR* argv[])
{
std::shared_ptr< IParent > parent = std::shared_ptr< IParent >( new IParent );
parent->add( std::shared_ptr< IChild >( new IChild() ) );
return 0;
} 親子関連のお手本とかありますか?
0444デフォルトの名無しさん2014/07/08(火) 12:36:56.23ID:tY/cy+xt
プライベートメンバーにアクセスしたいのなら
このスレの上の方にテクニックが紹介されてるよ。
0445デフォルトの名無しさん2014/07/08(火) 12:41:37.07ID:yUaVsh4d
親は基本、子が無くなるまでは存続する設計なら、
むりにshared_ptr使う必要ないんじゃないんかね?
0446デフォルトの名無しさん2014/07/08(火) 12:45:07.70ID:yUaVsh4d
そもそも子が親の破棄権限持ってる設計が逝かれてんだよ
0447デフォルトの名無しさん2014/07/08(火) 12:54:32.09ID:bUrh7jjG
>>444
>>398ですよね?
0448デフォルトの名無しさん2014/07/08(火) 12:57:05.76ID:ViOHbnyc
とりあえずshared_from_thisを調べときな
しかし基礎設計からずれてるのには同意だ
0449デフォルトの名無しさん2014/07/08(火) 13:47:07.47ID:VtPt2aKV
大切なお昼休みなのに返答ありがとうございます
friend含めて設計見直してみます
ありがとう
0450デフォルトの名無しさん2014/07/11(金) 10:57:38.23ID:ifGpSMFq
アップキャストは基底の型と派生の型が同じなら、ある派生クラスに対してアドレスは一意に定まるのでしょうか?
0451デフォルトの名無しさん2014/07/11(金) 13:17:10.52ID:GkReUTvU
一意が何を指してんのか意味がわからんが、
仮想継承してるとstatic_castできなくなるぐらいAddressが変わる。
0452デフォルトの名無しさん2014/07/11(金) 13:45:34.05ID:ifGpSMFq
dが派生クラスのインスタンスとするでしょ
これを基底クラスのb,cに代入する
このときbとcのアドレスがつねに同じなら一意に定まると定義する。
0453デフォルトの名無しさん2014/07/11(金) 13:50:41.40ID:ABqR5u2N
多重継承しない限りではね
0454デフォルトの名無しさん2014/07/11(金) 14:07:57.66ID:ifGpSMFq
えっ?
0455デフォルトの名無しさん2014/07/11(金) 14:21:12.78ID:ifGpSMFq
bとcが同じクラスの時なんですけど,
0456デフォルトの名無しさん2014/07/11(金) 14:49:25.78ID:VMi9Tq+6
元の質問がよくわからん
クラスBとそれを派生したDがあって、
Dのインスタンスa,b があったとき、それらのインスタンスをBにアップキャストするとaもbも元のアドレスから相対的に同じ位置になるかって話?
0457デフォルトの名無しさん2014/07/11(金) 14:56:54.83ID:ifGpSMFq
クラブBとクラブCがあってクラブDがBとCの多重継承であるということ。
DのインスタンスをBのインスタンスにアップキャストする。
ここではインスタンスとポインターを同一視している。
この時、あるDのインスタンスdに対し、任意のBのインスタンスb,cにdを代入したとき
bとcのアドレスは等しいかという話。
0458デフォルトの名無しさん2014/07/11(金) 16:07:25.86ID:NeYou1Q/
offsetof で確認すればいいのに
0459デフォルトの名無しさん2014/07/11(金) 16:14:01.23ID:SVYnyb9J
>>457
等しいわけがないじゃないか何いってんの
0460デフォルトの名無しさん2014/07/11(金) 16:14:10.97ID:ABqR5u2N
シングルインハーリタンスの間柄では一意なんじゃないの?
0461デフォルトの名無しさん2014/07/11(金) 16:16:22.84ID:JFUpWJNR
クラブってそもそもなんだ?
0462デフォルトの名無しさん2014/07/11(金) 16:17:12.06ID:SVYnyb9J
蟹になりたいね
0463デフォルトの名無しさん2014/07/11(金) 16:19:06.71ID:ABqR5u2N
マルチインハーリタンス使うとアドレスずれるよ
0464デフォルトの名無しさん2014/07/11(金) 19:23:55.48ID:/TmjhPOX
class a{};
class b{};
class c:public a,public b{
};
int main(){
c * i=new c;
b * j=c;
b * k=c;
}
でjとkのアドレスがずれるなんてことがあるかということをきいているのですけど。
0465デフォルトの名無しさん2014/07/11(金) 19:25:41.43ID:/TmjhPOX
class a{};
class b{};
class c:public a,public b{
};
int main(){
c * i=new c;
b * j=i;
b * k=i;
}
でjとkのアドレスがずれるなんてことがあるかということをきいているのですけど。
0466デフォルトの名無しさん2014/07/11(金) 20:13:02.79ID:BS+Iw1Z2
>>465
それを、
>Bのインスタンスb,cにdを「代入」したとき
と表現するのが悪い。

ちなみにアドレスがずれることはありえない。
0467デフォルトの名無しさん2014/07/11(金) 20:46:30.84ID:Mxpl8CKX
>>465
> b * j=i;
> b * k=i;
> }
> でjとkのアドレスがずれるなんてことがあるかということをきいているのですけど。
ないだろw
0468デフォルトの名無しさん2014/07/11(金) 20:59:52.19ID:tQTtH4ZK
jとkのアドレスだから&j==&kでfalseだろ
0469デフォルトの名無しさん2014/07/11(金) 21:21:01.30ID:FjcVBQS/
b * j=i;
b * k=i;

これでjとkがずれたらオカルトだな
0470デフォルトの名無しさん2014/07/11(金) 22:16:39.72ID:RRV/Pxnb
>>465
printfでobjectのAddress出力してみりゃいいじゃねえか。
0471デフォルトの名無しさん2014/07/11(金) 22:24:04.34ID:RRV/Pxnb
>>467
こういう場合はズレるけどな。

struct A{int value;};
struct B:A{int value;};
struct C:A{int value;};
struct D:B,C{int value;};

D d;
A *b = static_cast<B*>(&d);
A *c = static_cast<C*>(&d);
0472デフォルトの名無しさん2014/07/11(金) 22:26:20.94ID:Mxpl8CKX
>>471
だからなんだよ
0473デフォルトの名無しさん2014/07/11(金) 22:29:02.57ID:SVYnyb9J
前スレの糞コード連投嵐だろ
あいまいな質問してレス稼ぐのが趣味
0474デフォルトの名無しさん2014/07/11(金) 22:48:07.39ID:JFUpWJNR
>>471
仮想継承というものがあってだな
0475デフォルトの名無しさん2014/07/11(金) 23:15:41.19ID:NMLQCvys
>>474
だからどうした? コミュ障アスペ
0476デフォルトの名無しさん2014/07/19(土) 22:41:39.95ID:NKYXwcyK
std::chronoと上手く付き合っていける気がしない
auto now = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch());
nowを求めるのに119字も書かないといけないなんて
0477デフォルトの名無しさん2014/07/20(日) 01:36:02.17ID:Amtuw1LK
とりあえずusing使えよ
0478デフォルトの名無しさん2014/07/20(日) 02:07:01.01ID:lezaTh2o
>>477
あれ?なぜか書くのが楽しくなってきた俺がいる
0479デフォルトの名無しさん2014/07/20(日) 09:06:48.40ID:hM9L/JtN
>>476
「数学に秀でた俺様の考えた最強の時間ライブラリ」だからな
正しすぎて工学的に使えないゴミの一つ
0480デフォルトの名無しさん2014/07/20(日) 11:24:37.09ID:Tv/4FkJB
chronoじゃなかったら短く書けるとでも言うのかよ

取り敢えずちょっとだけ短くした。
auto now = (long long)[]{ using c = std::chrono::system_clock; return c::to_time_t(c::now()); }();
0481デフォルトの名無しさん2014/07/20(日) 12:22:54.28ID:2r3fv2fg
>>480
ナノ秒でOS依存だが、clock_gettime(CLOCK_REALTIME,&now)、とか?
0482デフォルトの名無しさん2014/07/20(日) 13:26:24.48ID:fTjSZCCc
usingは似たような文法おおすぎ
・using Class::Member;//using宣言
・using namespace std;//usingディレクティブ
・using s = std::string;//エイリアス宣言
・template<typename e> using v = std::vector<e>;//テンプレートエイリアス
・namespace s = std;//namespaceエイリアス
0483デフォルトの名無しさん2014/07/20(日) 13:27:36.34ID:Veyq7Blc
C++は保守用言語だから仕方ない
新規案件で選ぶことはないし
0484デフォルトの名無しさん2014/07/20(日) 14:16:58.78ID:PPEA+Go7
ラッパー書けばいいだけなんじゃ
0485デフォルトの名無しさん2014/07/20(日) 15:11:02.46ID:m10CYKSi
>>484
今レス追ってきて、
まさに俺もそう書こうと思ったw
0486デフォルトの名無しさん2014/07/20(日) 15:43:28.60ID:tFBgtQ3m
class Item {
public:
  int id;
  ... // 他にもいろいろ
};
というクラス Item があります。
id でソートされた Item のランダムアクセスイテレータ [first, last) と、id が与えられたとき、
[first, last) 内で指定されたidを持つ Item の範囲を表すイテレータを得るには、
どのように書けばスマートでしょうか。

template<typename Iterator>
std::pair<Iterator, Iterator> search(Iterator first, Iterator last, int id) {
  // ここを実装してください。
}

引数 [first, last) は id でソートされていますが、id の重複があり得るとします。(そのため、イテレータのペアを返す)
また、関数 search 内では、Item のインスタンスを新たに生成できないこととします。(コンストラクタが非public)
0487デフォルトの名無しさん2014/07/20(日) 16:19:42.54ID:+BhQVbw6
std::lower_bound,std::upper_bound
0488片山博文MZ悪魔崇拝 ◆T6xkBnTXz7B0 2014/07/20(日) 17:41:22.96ID:5tCNN5Wf
関数から構造体を返すのって何でいけないの?

MY_STRUCT func(void);
0489デフォルトの名無しさん2014/07/20(日) 18:23:56.73ID:ruQhLZVk
>>488
戻す値が大きい場合に
プログラムが本来達成しようとしていた要求性能を無視して
反射的に怒り狂う人がいるので
そう言った無駄な衝突を避けるためには必要。
あとライブラリ境界を跨いだときの動作が保証されないことが多いので
0490デフォルトの名無しさん2014/07/20(日) 18:34:45.46ID:9/WoeesR
オーバーヘッド
0491デフォルトの名無しさん2014/07/20(日) 18:36:00.78ID:9/WoeesR
インラインではよく使うけどな
0492デフォルトの名無しさん2014/07/20(日) 18:45:18.69ID:m10CYKSi
>>489
ライブラリ境界の件、参考資料もしくは実例ある?
興味ある。
0493デフォルトの名無しさん2014/07/20(日) 18:46:50.18ID:E11bcMma
>>490
http://ideone.com/VAkXEO
どんなオーバーヘッドがあんのよ?
0494デフォルトの名無しさん2014/07/21(月) 01:11:09.06ID:T3d982rP
>>486-487
equal_range() の出番でしょ。
0495デフォルトの名無しさん2014/07/21(月) 01:46:28.69ID:SMACJZR0
要求を体現した関数名でインターフェイス設計の方向性も一緒だしなあ
ていうか釣りを疑うレベルでの一致度
0496デフォルトの名無しさん2014/07/21(月) 02:38:33.97ID:f2PpmiaZ
>>492
VC++のMFCでDLLと静的リンクの間で互換性がないとかいう話では
0497デフォルトの名無しさん2014/07/21(月) 04:35:18.90ID:69P9NygG
>>496
どういう話?
0498デフォルトの名無しさん2014/07/21(月) 06:09:46.83ID:GOXiha5f
>>496
VCはユーザークラス(struct含む)をexportで公開するのはOK
だめなのは、2005頃までのmapやらの_Treeを含むコンテナだけっぽい
0499デフォルトの名無しさん2014/07/21(月) 07:10:44.60ID:ms/hzSJo
>>493
102KBをスタックに置くのは今でもちょっとためらうわ
0500デフォルトの名無しさん2014/07/21(月) 10:30:40.24ID:Ou1/YP+s
しかし構造体返しがいけないんなら equal_range() もダメになるな。
0501デフォルトの名無しさん2014/07/21(月) 10:49:31.26ID:nI+eBqTg
equal_range は、たかだか 8 バイトくらいだろ
しかもインラインだし
0502デフォルトの名無しさん2014/07/21(月) 10:53:56.29ID:nI+eBqTg
スタックが絡むとポインタの位置に書き込む処理よりも出し入れに倍の時間がかかることぐらい予想がつくだろ。
インラインだとこの辺うまいことやってくれたりするけどな。
0503デフォルトの名無しさん2014/07/21(月) 10:55:53.00ID:15AfdAD4
釣りだろ?
まともに相手にして得られるものは何一つはないぞ
0504デフォルトの名無しさん2014/07/21(月) 11:00:28.49ID:nI+eBqTg
ああ、そうだな
馬鹿に説明するのは疲れる
ミンスの質疑応答並に
05055032014/07/21(月) 11:12:52.06ID:15AfdAD4
誤爆しました
0506デフォルトの名無しさん2014/07/21(月) 11:16:10.20ID:KbnPxVbB
>>503-505
0507デフォルトの名無しさん2014/07/21(月) 11:41:38.67ID:fnbms7IN
なんだこの流れ
0508デフォルトの名無しさん2014/07/21(月) 13:06:30.28ID:gMHozyeg
>>502
>出し入れに倍の時間
出し入れに時間のかかる糞コンパイラ使ってるオマエがおかしい
0509デフォルトの名無しさん2014/07/21(月) 13:07:57.72ID:G0n+63cp
コンパイラ選べる事の方が少ないわ
0510デフォルトの名無しさん2014/07/21(月) 13:28:58.62ID:W2ckSfZN
古いコンパイラを見れば、利用者もろともクソとと叩き
枯れてないコンパイラでバグを出せば、オレのせいじゃねぇと躱す
そういうものに わたしはなりたい
0511デフォルトの名無しさん2014/07/21(月) 13:34:50.68ID:bGjJz3Zi
RVOすら働かない特殊な環境の不幸を自慢するスレはここですか
0512デフォルトの名無しさん2014/07/21(月) 14:28:07.29ID:ws/gqp8G
>>510
『枯れてないコンパイラでバグを出せば、オレのせいじゃねぇと躱す』

他人の選定したコンパイラーのバグが 自分のせいじゃないのは当たり前だろう。
ブラックな組織環境の愚痴は マ板でどうぞ。
0513デフォルトの名無しさん2014/07/21(月) 15:10:23.27ID:TNUgL4WL
"unko"s がstd::string型になるってマジ?
VC++でコンパイルエラーになったんだけど
0514デフォルトの名無しさん2014/07/21(月) 15:14:33.93ID:o5z7JOEW
そこソースよそれ
0515KUSO KOTE ◆unko./w.Osri 2014/07/21(月) 15:33:20.19ID:SvZi82X8
次期改訂でそうなる予定。なので今は使えませぬ。
 "UNKO"s→std::string
 100ms→std::chrono::millisecondsの型
ソースはN3936
0516デフォルトの名無しさん2014/07/21(月) 15:49:51.11ID:W2ckSfZN
字句解析をヘタにいじると対応できない特殊なエディタの不幸自慢も始まりますよ
0517デフォルトの名無しさん2014/07/21(月) 17:47:35.85ID:Suo93ku0
LR"(unko)"s
正規表現が使えれば何とかなるか
0518デフォルトの名無しさん2014/07/21(月) 19:00:40.08ID:gGPawcCK
>>488
別に問題ない
std::basic_stringのメソッドなんかそんなんばっか
0519デフォルトの名無しさん2014/07/22(火) 13:26:22.04ID:vUveiRlX
const int a = 100; と
constexpr int a = 100; ってどっちの書き方がいいんでしょうか?
前者はintがconstで 後者はaがconstっていみですよね
0520デフォルトの名無しさん2014/07/22(火) 15:22:31.17ID:ZvgLpdy8
>>519
constexpr は、コンパイル時(と実行時)に使えるという意味で、
a は書き換え可能だよ
0521デフォルトの名無しさん2014/07/22(火) 15:40:15.81ID:HlinJBQB
>>520
>a は書き換え可能だよ

なあ、いったいどこからそんな妄想が出てくるんだ?
0522デフォルトの名無しさん2014/07/22(火) 17:20:58.55ID:qC8GKtmW
int が const も大概だけど、constexpr が書き換え可能には負けるかも
0523デフォルトの名無しさん2014/07/22(火) 17:58:15.37ID:jjqTnXmq
ローカル関数で定数を定義したいとき
static const int か const int
どっちがいいん?
0524デフォルトの名無しさん2014/07/22(火) 18:45:02.03ID:zQFni11Q
意味をしっかり理解しておけよ
11からは理念的に
const: 実行時の不変性
constexpr: コンパイル時定数
とはっきりしてる
コンパイル時定数として使いたいならconstexpr、そうでないならconst
0525デフォルトの名無しさん2014/07/22(火) 20:31:01.91ID:PsuY3+Ak
書き込みtest
0526デフォルトの名無しさん2014/07/22(火) 21:14:32.99ID:OSoTfUlm
constexpr static const int N = 10;
N = 20;//書き込みエラー
0527デフォルトの名無しさん2014/07/22(火) 21:45:14.57ID:zcY8KUV/
>>520
せっかくいろいろconstexprに書き換えてる途中なのにギョッとしただろ!
0528デフォルトの名無しさん2014/07/22(火) 22:01:22.05ID:XmTqIxPz
constexprは、バイナリ変換時にすべて定数におきかえられるから a が const というわけじゃなくて 計算結果が const なんだぞ
0529デフォルトの名無しさん2014/07/22(火) 22:06:36.21ID:XmTqIxPz
const は、定義の仕方によっては、展開されずにデータ領域に格納されることがあるのが大きな違い。
0530デフォルトの名無しさん2014/07/22(火) 22:14:57.37ID:WzwzWG6G
そもそもMMUが無い環境では読み取り専用領域すら無かったりするし、
どんな機械語やメモリレイアウトになるかを制御する話じゃなくね?それ。
0531デフォルトの名無しさん2014/07/22(火) 22:29:01.40ID:XmTqIxPz
読み取り専用とか全く関係ない。
やろうとおもえば、const も const_cast で普通の変数に無理矢理置き換えることができるので。
0532デフォルトの名無しさん2014/07/22(火) 22:41:09.72ID:WzwzWG6G
constexprどころか式中に置いた定数だってデータ領域に置かれる場合はあるでしょって意味で書いたんだが
0533デフォルトの名無しさん2014/07/23(水) 02:46:24.37ID:CuckceJS
>>520の言いたかったのはこれか?
http://www.ideone.com/PKKk9t
なんでコンパイル通るのかわからないけど
確かに書き換え出来るみたいだな
0534デフォルトの名無しさん2014/07/23(水) 09:40:09.71ID:jPu51HvI
>>531 未定義動作
0535デフォルトの名無しさん2014/07/23(水) 11:50:25.80ID:B2cerPYc
==========
OS :Windows 7
言語:MFC C++
ライブラリ:Boost1.45.0
==========

BoostのXMLは絶対に並びを気にしないと使えないんでしょうか?

アプリA
〜〜〜
ar &amp; BOOST_SERIALIZATION_NVP(A);
ar &amp; BOOST_SERIALIZATION_NVP(B);
〜〜〜

アプリB
〜〜〜
ar &amp; BOOST_SERIALIZATION_NVP(B);
ar &amp; BOOST_SERIALIZATION_NVP(A);
〜〜〜

上記、アプリA側で作ったXMLファイルをアプリBで読み込むと毎回例外が発生します。
並びを一緒にするとかでは無く、これの対処法があれば教えてください。
0536デフォルトの名無しさん2014/07/23(水) 12:02:59.05ID:vi4v+9br
はい
0537デフォルトの名無しさん2014/07/23(水) 13:26:26.99ID:B2cerPYc
>>536
Iniファイルよりも使い勝手の悪いシステムなんですね。。。
0538デフォルトの名無しさん2014/07/23(水) 13:51:34.07ID:lKKys31t
名前を付けずにただ並べてるのなら当然
xmlとかboostとか全く関係ない
0539デフォルトの名無しさん2014/07/23(水) 13:52:09.69ID:2doBvlm+
そういうことやりたければ最初からboost.property_tree使えや
0540デフォルトの名無しさん2014/07/23(水) 23:07:00.96ID:eDMuIl4M
>>486
これ、equal_range使うとして、どう使えばいいのか分からん
Itemを生成できない縛りがあるから、equal_rangeの第3引数に入れられないし
0541デフォルトの名無しさん2014/07/23(水) 23:13:01.97ID:nVuMegPJ
第三引数はidを渡して、比較用のファンクタの第一引数がint、第二引数がItem const&になるようにすればいい
0542デフォルトの名無しさん2014/07/24(木) 00:06:45.39ID:adlHuW5s
std::make_pair(std::lower_bound , std::upper_bound );
0543デフォルトの名無しさん2014/07/24(木) 02:42:08.97ID:xTQLZeLW
>>540
俺も分らん
>>541
サンプルおねがい
0544デフォルトの名無しさん2014/07/24(木) 05:09:25.40ID:7XXpo5Ov
昔作ったことあるけど、クイックソートみたいに 1/2 ずつやっていって
候補絞っていくみたいな感じのやつ。
で、発見したら、その位置から upper と lower にバイナリサーチかな。
あとはアタマ使って自分で作れって感じだけど。
0545デフォルトの名無しさん2014/07/24(木) 06:46:19.82ID:xTQLZeLW
何を言うとるんだ君は
0546デフォルトの名無しさん2014/07/24(木) 08:46:28.52ID:4t+fFG8a
>>543
>541 じゃないけど書いてみた。
equal_range だと lower_bound と upper_bound 両方使うから引数の組み合わせとして
(item, id) と (id, item) の両方受ける比較関数を作らないといけない。

struct IdLess {
&nbsp;&nbsp;static int make_id(int id) { return id; }
&nbsp;&nbsp;static int make_id(Item const& item) { return item.id; }

&nbsp;&nbsp;template<typename L, typename R>
&nbsp;&nbsp;bool operator() (L const& lhs, R const& rhs) const {
&nbsp;&nbsp;&nbsp;&nbsp;return make_id(lhs) < make_id(rhs);
&nbsp;&nbsp;}
};

template<typename Iterator>
std::pair<Iterator, Iterator> search(Iterator first, Iterator last, int id) {
&nbsp;&nbsp;return std::equal_range(first, last, id, IdLess());
}
05475462014/07/24(木) 08:48:43.26ID:4t+fFG8a
あれ?インデントが。。。
そのまま貼ってみよう。

struct IdLess {
static int make_id(int id) { return id; }
static int make_id(Item const& item) { return item.id; }

template<typename L, typename R>
bool operator() (L const& lhs, R const& rhs) const {
return make_id(lhs) < make_id(rhs);
}
};

template<typename Iterator>
std::pair<Iterator, Iterator> search(Iterator first, Iterator last, int id) {
return std::equal_range(first, last, id, IdLess());
}
0548デフォルトの名無しさん2014/07/24(木) 09:45:49.57ID:xTQLZeLW
うーんわからん
動くものをideoneなどに貼ってほしい
0549デフォルトの名無しさん2014/07/24(木) 10:04:17.31ID:aZcVUgnS
>>543
ttp://ideone.com/YVBnCB
0550デフォルトの名無しさん2014/07/24(木) 10:16:22.10ID:xTQLZeLW
>>549
わざわざありがとう
でも
> 引数 [first, last) は id でソートされていますが、id の重複があり得るとします。(そのため、イテレータのペアを返す)
> また、関数 search 内では、Item のインスタンスを新たに生成できないこととします。(コンストラクタが非public)
要件満たしてないよね
0551デフォルトの名無しさん2014/07/24(木) 10:19:47.99ID:4t+fFG8a
>>550
重複も正しく処理できるし、検索処理で Item の生成もしてないだろ。
0552デフォルトの名無しさん2014/07/24(木) 10:52:35.78ID:xTQLZeLW
>>551
あー理解できた、ありがとう
0553デフォルトの名無しさん2014/07/24(木) 20:53:06.80ID:adlHuW5s
>>549
そのコードはまったくもって正しいが、VCだとC2664とかいうエラーが出て、>>542のように書かなければならないのだ。
0554デフォルトの名無しさん2014/07/24(木) 21:02:25.72ID:7XXpo5Ov
ショボいコンパイラだこと
0555デフォルトの名無しさん2014/07/25(金) 01:23:41.37ID:hx87X1h1
TCHAR t[20]
CHAR c[20]


WideCharToMultiByte 関数を使用して、TCAHR の値を CHAR に変換しようと
しています。

TCHAR の値が _T("ああああああ") だとすると、 CHAR には T("ああああああ")
の値の途中までしか代入されません。どうすれば TCHAR の値が正しく CHAR
に代入されるでしょうか?
0556デフォルトの名無しさん2014/07/25(金) 01:30:02.91ID:ihbhY/6e
コピー方法が間違ってるんじゃ?
WideCharToMultiByteは2回呼び出しして、
1回目で必要バイト数が算出できるから、
その分を2回目で指定してみるとどうなる
05575552014/07/25(金) 01:43:40.52ID:hx87X1h1
>>556
それはやってみたんですが、正しく代入されません。
CHAR c[20] ではなく、CHAR* c でmalloc で領域確保すべきでしょうか??
0558デフォルトの名無しさん2014/07/25(金) 01:55:20.13ID:Hacg6KtM
>>555
ざっくり言えばchar[40]じゃないとダメだお。
0559デフォルトの名無しさん2014/07/25(金) 01:56:52.08ID:bxIPj0Xu
>>558
んなこたーない
0560デフォルトの名無しさん2014/07/25(金) 02:16:46.46ID:ihbhY/6e
>>555
まずは書いたコードをどこかに晒すんだ
0561デフォルトの名無しさん2014/07/25(金) 07:06:25.07ID:6nK3Yu7i
>>558
間違いかたとしてはそれだろうな
t[20]に_T("ああああああ")を入れたとは書いてないし
0562デフォルトの名無しさん2014/07/25(金) 08:14:16.91ID:NHOn39Bo
snprintfとsprintf_sって何が違うんですか?
バッファを超え(そうになっ)た時に、バッファ末尾にヌル文字を入れてくれる/くれないとか、そんな感じ?
0563デフォルトの名無しさん2014/07/25(金) 08:47:25.91ID:S9lQwMDU
バッファ超えたら強制終了してくれます
0564デフォルトの名無しさん2014/07/25(金) 08:48:42.38ID:wOZWwIBc
戻り値と溢れた時の挙動

snprintfは必要なサイズを返す
sprintf_sは変換した文字数を返す、溢れた時ハンドラーが呼び出される
0565デフォルトの名無しさん2014/07/25(金) 11:38:13.38ID:mmV7Js8i
snprintfはバッファを超えないように切り捨て
 切り捨ててそのまま使えるのはマレなので必要なサイズの方が重要
sprintf_sは溢れた時ハンドラーが呼び出される
 ほとんどの場合エラー中断を意味する
 予定外のことが起きたらとりあえずクラッシュさせとけという世界
0566デフォルトの名無しさん2014/07/25(金) 13:34:56.42ID:yNZN6zYv
sprintf_sがエラー中断するのはMS拡張の配列オーバーロードだけじゃないの?
C標準版の方はそんなことなかったような
0567デフォルトの名無しさん2014/07/25(金) 14:01:40.12ID:6nK3Yu7i
printf一族は紛らわしい親戚が多すぎる
0568デフォルトの名無しさん2014/07/25(金) 14:41:23.25ID:gQtKGg8f
C標準版のsprintf_sってどこのなんという文書で定義されているんだ?
0569デフォルトの名無しさん2014/07/25(金) 14:51:53.54ID:3J2VCvvZ
>>568
Cの言語仕様はISOのISO/IEC 9899:2011
という文書で規格化されてるんだよ
B.20あたりに書いてある
0570デフォルトの名無しさん2014/07/25(金) 16:27:07.90ID:gQtKGg8f
そっか、C99でここまで引っ張って来たが、C11の規格書買わんとダメか
0571デフォルトの名無しさん2014/07/25(金) 16:57:44.65ID:bxIPj0Xu
C++の2011は買った甲斐があった。
Cの2011は内容が残念すぎて価格に対する不満足感がハンパない
0572デフォルトの名無しさん2014/07/25(金) 17:03:09.00ID:ZnHnhDvk
おまいら偉いなー
俺なんかドラフトしか手元にないわ
0573デフォルトの名無しさん2014/07/25(金) 23:58:07.04ID:bxIPj0Xu
>>570
参考までにCの2011改訂のすべて↓
・Unicodeサポート強化したお
・pthreadそのまま焼き直して追加したお
・sprintf_sみたいなのいっぱい追加した
・あとnoreturnとか細かい機能追加
・そうそう、gets無くしたぜ!
0574デフォルトの名無しさん2014/07/26(土) 00:26:58.11ID:vX+zD2iO
ダンディー坂野もこれまでか
0575デフォルトの名無しさん2014/07/26(土) 00:44:38.44ID:nwV9SC8G
CUI終わり?
0576デフォルトの名無しさん2014/07/26(土) 00:51:47.71ID:pETcPds6
>>574
調べちまったじゃねーか、わかんねーよ
0577デフォルトの名無しさん2014/07/26(土) 01:13:13.57ID:mdOIZXZW
turnとかgets
0578デフォルトの名無しさん2014/07/26(土) 21:40:13.03ID:0bHWIeVD
http://msdn.microsoft.com/ja-jp/library/ms350228(v=vs.71).aspx

> _snprintf は buffer に格納されたバイト数を返します。終端の NULL 文字は含まれません。
> 格納するデータのバイト数が count を超えると、buffer には count バイト数のデータだけが
> 格納され、負の値が返されます。


> _snprintf は buffer に格納されたバイト数を返します
> _snprintf は buffer に格納されたバイト数を返します
> _snprintf は buffer に格納されたバイト数を返します
0579デフォルトの名無しさん2014/07/26(土) 22:13:32.70ID:6BQvzT2e
>>578
C言語では、snprintfと_snprintfは別の関数なんだよ。
知らなかった?
0580デフォルトの名無しさん2014/07/26(土) 22:20:53.07ID:tOJWKscK
>>578
Visual Studio 14でsnprintf実装されるぞ。
http://blogs.msdn.com/b/vcblog/archive/2014/06/18/crt-features-fixes-and-breaking-changes-in-visual-studio-14-ctp1.aspx
『snprintf�and�vsnprintf�Are Now Implemented: The C99snprintf�and�vsnprintf�functions have been implemented.』
0581デフォルトの名無しさん2014/07/26(土) 22:25:38.00ID:rsQTo023
>>578
で?
0582デフォルトの名無しさん2014/07/27(日) 05:40:50.15ID:O4CiEtpg
整形出力はboost::format、std::format使うからもうprintf系いらない
0583デフォルトの名無しさん2014/07/27(日) 10:00:17.94ID:Cq+UeEpN
へぇ std::format か
0584デフォルトの名無しさん2014/07/27(日) 15:34:21.95ID:QrirEI3v
582のコンパイラーにはそういうのがあるんだろう
0585デフォルトの名無しさん2014/07/27(日) 16:04:14.43ID:9T/dTxM/
コンパイラー
0586デフォルトの名無しさん2014/07/27(日) 16:26:56.65ID:LpZbZM4L
>>585
今は伸ばすようになったんだよ
0587デフォルトの名無しさん2014/07/27(日) 22:01:28.68ID:9T/dTxM/
マジかー知らなかったー
0588デフォルトの名無しさん2014/07/27(日) 22:06:17.60ID:1J+gcL+3
サーバー、ユーザーなど -er で終わる単語を伸ばすようになったのか
インタネットをインターネットと伸ばすのは違和感あるな
0589デフォルトの名無しさん2014/07/27(日) 22:12:31.31ID:3vRrzHkV
どちらかというと「インタネット」の方が変人
0590デフォルトの名無しさん2014/07/27(日) 22:12:51.84ID:ZGijvZ29
インてるネットでいいやん
0591デフォルトの名無しさん2014/07/27(日) 22:24:42.28ID:1J+gcL+3
>>589
えー、マジかよ
inter- は伸ばさないから、
たとえば社名とかだと「株式会社○○インタナショナル」だったりするぜよ
0592デフォルトの名無しさん2014/07/27(日) 22:31:49.82ID:Kl8iR9NR
自分がのばさないのを
さも普遍的であるかのように語られても
0593デフォルトの名無しさん2014/07/27(日) 22:36:59.31ID:LrSy+Wbc
>>591
どっちが多く使われてるか、くぐれば一目瞭然だぞ…
"インタナショナル" 329000件
"インターナショナル" 49400000件
0594デフォルトの名無しさん2014/07/27(日) 22:37:34.79ID:LrSy+Wbc
>>593
くぐってしまった…
0595デフォルトの名無しさん2014/07/27(日) 22:46:32.92ID:ZGijvZ29
kgrks
0596デフォルトの名無しさん2014/07/27(日) 23:08:45.48ID:1J+gcL+3
くぐってくるわ

しかし少数派だったとは…調べてみると、
インタプリターとかインタフェースとかも違うんだな…
もう俺の常識だめかもわからんね
0597デフォルトの名無しさん2014/07/27(日) 23:21:29.89ID:A4exl8IK
またくぐり?
0598デフォルトの名無しさん2014/07/27(日) 23:22:44.56ID:R5puHN7b
interface インターフェース
Facebook フェイスブック
mail メール
メイルボックス Mailbox

この辺、どうしたら良い?
0599デフォルトの名無しさん2014/07/27(日) 23:26:48.84ID:LrSy+Wbc
長いモノに巻かれればいいんじゃね?
言葉なんて結構簡単に変わるんだから、気にしないのが吉だと思う。
もし指摘されたら適当に流したって誰も気にしないよ。
0600デフォルトの名無しさん2014/07/27(日) 23:30:11.13ID:nSQ9+QNz
マイクロソフトも「プリンター」とか「コンストラクター」とか伸ばすようになったから、
省略派は廃れると思う
0601デフォルトの名無しさん2014/07/28(月) 00:18:00.66ID:2d08bcys
元々省略するのは最後ののばし棒だったような
0602デフォルトの名無しさん2014/07/28(月) 00:23:38.81ID:OaaY/8+5
それも、かなり昔の話だよな

ttp://www.atmarkit.co.jp/news/200807/25/microsoft.html
0603デフォルトの名無しさん2014/07/28(月) 00:32:04.33ID:M8IXFBrZ
http://d.hatena.ne.jp/innx_hidenori/20081216/1229417662
http://internet.watch.impress.co.jp/cda/news/2008/07/25/20381.html

技術文書とかだと長音ばっかりになるから省略するとインク代節約になったんだけっけ
トリンプとか昔はインタナショナルだったような

それよか邦訳した公式技術文書は発音も決めてほしいなあ
constexprとかなんて読むの。会話でどうするの
0604デフォルトの名無しさん2014/07/28(月) 00:36:35.89ID:6ruFqSep
コンストセックスペロペロ
0605デフォルトの名無しさん2014/07/28(月) 00:38:12.80ID:eEdZ6jiO
インターフェイス
昔高橋雄一だっけかがえすてぃーでぃーあいおーゆーてるの見たからそのままも結構あるな
0606デフォルトの名無しさん2014/07/28(月) 01:20:35.23ID:qOYyYy1a
interfaceの日本語訳は界面だったな。昔読んだ翻訳書では
0607デフォルトの名無しさん2014/07/28(月) 01:25:38.80ID:mRUmVifk
>>605
俺の知り合いにはスタジオって言ってた奴いたわ
0608デフォルトの名無しさん2014/07/28(月) 01:50:46.64ID:XWnfsthF
なんか妙な話題で盛り上がってるなw
確か、ある時から最後の長音はなくす方向で統一が図られているはず。
なんかの規格だったか、日本語の決まりだったか忘れたけど
0609デフォルトの名無しさん2014/07/28(月) 02:07:29.57ID:8jrV0efS
エラーになるんですけど、どうやったら良くなりますか

#include <iostream>
using namespace std;
struct Dog {
virtual string name() const = 0;
virtual void talk() const { cout << "i am " << name() << endl; }
};
struct NameIsJohn {
virtual string name() const { return "john"; }
};
struct DogJohn : public Dog, public NameIsJohn {
};
int main()
{
DogJohn x;
x.talk();
return 0;
}
0610デフォルトの名無しさん2014/07/28(月) 02:14:40.76ID:dfMBLDBO
>>609
ttp://ideone.com/CYfrGr
0611デフォルトの名無しさん2014/07/28(月) 02:19:21.18ID:8jrV0efS
>>610
それは明らかに違う仕様です
0612デフォルトの名無しさん2014/07/28(月) 02:21:06.60ID:7au0FPD+
>>609
そういうことはできません
>>610のように書きなさい
0613デフォルトの名無しさん2014/07/28(月) 02:32:06.03ID:8jrV0efS
>>612
610は依存関係に変化があるのでまったくの別物です
0614デフォルトの名無しさん2014/07/28(月) 02:59:13.29ID:8jrV0efS
http://ideone.com/9ReFXe
この例だとどうでしょうか。
依存関係を変えることなくコンパイルを通したいのです。
依存関係が変わらなければ「既にある」の部分に対してラッパークラスを書くことはできます。
テンプレートで解決できそうな気もするのですが、答えが見つかりません。
0615デフォルトの名無しさん2014/07/28(月) 03:46:07.04ID:cHYgyeR6
http://ideone.com/Wqtsa8
0616デフォルトの名無しさん2014/07/28(月) 04:21:24.22ID:cHYgyeR6
http://ideone.com/uUfhdk
0617デフォルトの名無しさん2014/07/28(月) 08:17:43.68ID:BiUrCPw0
>>609
ためしてないけど
template<typenamw to_t>
struct delegatable_dog :Dog {
 string name() override {
  return this->to_t::name();
 }
};

struct DogJohnson : delegatable_dog<NameIsJohn>, NameIsJohn {
 …
};
0618デフォルトの名無しさん2014/07/28(月) 08:18:46.30ID:BiUrCPw0
ごめんウソを書いた。忘れて
0619デフォルトの名無しさん2014/07/28(月) 09:56:46.65ID:bKC0U5+C
VC++もはやくconstexprフル実装してほしいな
特にコンストラクタ
0620デフォルトの名無しさん2014/07/28(月) 10:04:54.86ID:8jrV0efS
>>616
ありがとうございます。
そうなりますか。
使っているモジュールが、例えばCompressBaseからの派生であることを明確にしたいのですが、
それは無理なのでしょうか。
0621デフォルトの名無しさん2014/07/28(月) 14:04:22.70ID:cHYgyeR6
>>620
では、実際に派生したら良いと思います。
無駄に派生しても、特に損失は無いと思います。
ただし、元にあったように、Baseからすべてを派生するのはやめたほうが良いです。
ダウンキャストにstatic_castが使えなくなるため、あとあと困ると思います。
0622デフォルトの名無しさん2014/07/28(月) 14:07:29.80ID:cHYgyeR6
ちょっと理解しにくいですね。
派生を継承と読み替えてもらえばわかりやすいと思います。
主語が反転しますが、主語を書いてないので、わかると思います。
0623デフォルトの名無しさん2014/07/28(月) 17:23:23.23ID:eEdZ6jiO
長音省くのは昭和時代の古いJISだぞ
http://www.mext.go.jp/b_menu/hakusho/nc/k19910628002/k19910628002.html
注3 英語の語末の‐er, ‐or, ‐arなどに当たるものは,原則としてア列の長音とし長音符号「ー」を用いて書き表す。
ただし,慣用に応じて「ー」を省くことができる。
0624デフォルトの名無しさん2014/07/28(月) 19:10:14.00ID:BiUrCPw0
今でもJIS Z 8301では「JISの規格票ではのばさない」としている。
これをJIS信者が話をすり替えて「のばさないようJISで決まっているからお前ものばすな」
と言い続けて混乱させているだけ。
0625デフォルトの名無しさん2014/07/28(月) 19:25:02.78ID:wdszZXw3
昔のインクリボンの時は、長音記号やハイフンの所為で真中が薄くなりがちだったんだよ。
それが省略する原因かどうかは知らんがな。
0626デフォルトの名無しさん2014/07/28(月) 20:14:06.64ID:j+cwkWYG
サーバーは伸ばしたいけどサイリスタは伸ばしたくないな、なんとなく
0627デフォルトの名無しさん2014/07/28(月) 20:31:55.02ID:0vWwd7dF
イテレイタ
オペレイタ
0628デフォルトの名無しさん2014/07/28(月) 20:33:47.60ID:cHYgyeR6
伸ばすのは良いんですけど、発音悪すぎないですか?
0629デフォルトの名無しさん2014/07/28(月) 21:55:45.01ID:f74ffpr/
タイマーは省略したくない
0630デフォルトの名無しさん2014/07/28(月) 22:04:32.94ID:eEdZ6jiO
readerはリーダでもいいけどleaderはリーダーでないと生理的に無理だな
0631デフォルトの名無しさん2014/07/28(月) 22:47:19.41ID:s+UVaKBB
オパーイ
0632デフォルトの名無しさん2014/07/28(月) 22:49:17.74ID:WsdF3l6f
>>628
「伸ばさないのは実際の発音と異なるのでおかしい」
という1991年の内閣府告示二号が
伸ばす発端なのだけれど
0633デフォルトの名無しさん2014/07/28(月) 23:08:59.96ID:e7leb7fS
反変の引数を簡単に取る方法無いの?
こんなん毎度毎度作るのめんどいわぁ。
template<class interface, class delegate> class Adapter:
 public virtual interface
{
 delegate
  *target;
public:
 Adapter( delegate *target ):
  target( target ){}
 virtual Widget *CreateBy( typename interface::Factory &factory )
 {
  return delegate->CreateBy( factory );
 }
};
template<class factory> struct Model
{
 typedef factory Factory;
 virtual Widget *CreateBy( Factory &) = 0;
};
struct FactoryA{ 処理 };
struct FactoryB{ 処理 };
struct FactoryC:
 FactoryA,
 FactoryB
{ 省略 };
Model<FactoryA>
 *model;
std::vector< Model< FactoryC > >
 collection;
collection.push_back( new Adapter< Model< FactoryC >, Model<FactoryA> >( model ) )
0634デフォルトの名無しさん2014/07/28(月) 23:12:37.54ID:e7leb7fS
>>633
?処理
○省略
0635デフォルトの名無しさん2014/07/28(月) 23:32:54.40ID:RYP0Yf3H
>>633
糞コードでスレを汚すな
0636デフォルトの名無しさん2014/07/28(月) 23:47:25.61ID:e7leb7fS
>>635
ならマトモなコードを晒せ
0637デフォルトの名無しさん2014/07/28(月) 23:59:09.99ID:cHYgyeR6
>>633
よくわからないのですが、ラムダ式とかではダメなのですか?
処理を委譲したいだけですよね?
0638デフォルトの名無しさん2014/07/29(火) 00:00:58.22ID:UsqKG/9K
>>632
そういった経緯があったのですか。
勉強になります。
0639デフォルトの名無しさん2014/07/29(火) 00:29:20.53ID:amKy8C2I
>>637
目的は委譲というより反変引数を取ることです。

例えば極端な例ですがこんな感じです。
int Function( Base& );
int (*pointer)( Derived& ) = Function;

DerivedはBaseの派生型です。
pointerとFunctionは引数は異なりますが、
pointerとFunctionの引数は親子関係がある為
安全にFunctionをpointerに代入できる(反変性)筈です。
(C++の場合は引数のOffsetを計算するため単純にはできません。)

方法は選びませんので、
もし無名高階関数で簡単に対応出来るのでしたら、
方法をご教示ください。
0640デフォルトの名無しさん2014/07/29(火) 00:45:59.10ID:KOjsMvRr
>>639
Baseを受け取る関数のポインタじゃダメなん?
0641デフォルトの名無しさん2014/07/29(火) 00:56:27.70ID:UsqKG/9K
>>639
反変引数というのを知らないのですが、それはstd::functionでは
ダメなんですか?
0642デフォルトの名無しさん2014/07/29(火) 00:58:51.78ID:amKy8C2I
>>640
int FunctionA( BaseA& );
int FunctionB( BaseB& );

int ( *pointer[2] )( Derived& ) =
{
 FunctionA,
 FunctionB
};

こんな感じでBaseが複数有るのでそれは無理ですね。
0643デフォルトの名無しさん2014/07/29(火) 01:01:16.40ID:UsqKG/9K
>>640
そういえばそうですよね。

>>639
どういうときに使うのか知りたいです。
0644デフォルトの名無しさん2014/07/29(火) 01:07:28.69ID:KOjsMvRr
>>643
そうだねー。

>>642
使いどころと言うか目的をもうちょっと教えてほしいなー。
反変引数を受け取りたいと言うのは手段であって、目的ではないんじゃない?
それとも、c#のdelegateライクな事をやりたいという純粋な技術試行なのかな?
0645デフォルトの名無しさん2014/07/29(火) 01:12:36.74ID:UsqKG/9K
>>642
なるほど。
そういう場合、BaseAとBaseBが共通に継承するBaseへの参照を引数に取る形に変えて、
Functionを使うときにダウンキャストするのが一番目。
これは、たしかstatic_cast出来なかったと思うので、コストが有ります。
二番目は、仮想関数を使うように設計を変えることじゃないかと思います。

やろうとしていることから察するに、>>614の続きを書こうとしているのでは
ないですか?
そうであれば、ごく一般的な方法があるはずです。
0646デフォルトの名無しさん2014/07/29(火) 01:27:11.06ID:amKy8C2I
>>643
struct FactoryForButton
{
 virtual Button *CreateButtonFor( LabelModel* ) = 0;
};
struct FactoryForTextBox
{
 virtual TextBox *CreateTextBoxFor( TextModel* ) = 0;
};
class ConcreateTextModel:public virtual TextModel
{
 /* 省略 */
public:
 Component *CreateBy( FactoryForText& );
 /* 他省略 */
};
class ConcreateFactory:
 public virtual FactoryForText,
 public virtual FactoryForButton
{
 /* Create系の実装 */
};
struct ExampleModel
{
 virtual Component *CreateBy( ConcreateFactory& ) = 0;
};

std::vector<ExampleModel> array;
array.push_back( new ConcreateTextModel() );
0647デフォルトの名無しさん2014/07/29(火) 01:37:39.52ID:OFcrOYXJ
>>643
>>646(Compileはできません)の様に、
Componentを生成するFactoryとModelを分離するために使います。
0648デフォルトの名無しさん2014/07/29(火) 01:41:27.20ID:UsqKG/9K
>>646
ConcreateTextModelとExampleModelは無関係のクラスなので、設計を
変えないと無理に思えます。
両方に共通する基本クラスを設定すると、とりあえずできるのですが、
おそらく>>644なんじゃないですかね。
0649デフォルトの名無しさん2014/07/29(火) 03:22:46.41ID:X8SaI4IC
>collection.push_back( new Adapter< Model< FactoryC >, Model<FactoryA> >( model ) )

これって安全なのか?
0650デフォルトの名無しさん2014/07/29(火) 08:03:15.55ID:zIXl3ORs
>>648
Factoryに共通の基底型を作るのは避けたいんですよね。
共通のFactoryに関数が1個増えると共通のFactoryを継承した
ConcreateFactory全部に影響が出るので。

// 実際はスマポを使ってますが割愛
std::vector<ExampleModel*> collection;
collection.push_back( new Adapter<ExampleModel, ConcreateTextModel>( new ConcreateTextModel() );
collection.push_back( new Adapter<ExampleModel, ConcreateLabelModel>( new ConcreateLabelModel() );

現状は上記の方法で回避できているので、
共通のFactoryを取る方法だけは避けたいと思っています。
0651デフォルトの名無しさん2014/07/29(火) 08:03:45.94ID:zIXl3ORs
>>648
Factoryに共通の基底型を作るのは避けたいんですよね。
共通のFactoryに関数が1個増えると共通のFactoryを継承した
ConcreateFactory全部に影響が出るので。

// 実際はスマポを使ってますが割愛
std::vector<ExampleModel*> collection;
collection.push_back( new Adapter<ExampleModel, ConcreateTextModel>( new ConcreateTextModel() );
collection.push_back( new Adapter<ExampleModel, ConcreateLabelModel>( new ConcreateLabelModel() );

現状は上記の方法で回避できているので、
共通のFactoryを取る方法だけは避けたいと思っています。
0652デフォルトの名無しさん2014/07/29(火) 08:07:35.46ID:UcByrqXJ
>>646
うーん…
何を実現したいのかが良くわからないのも確かなのでこちらも安直に言い切れない
JavaとかC#で良く使われる手順をC++でも無理やり実現しようとして失敗している匂いがする
何人かが指摘しているようにC++として相応しいもう少しシンプルな解があると思う
0653デフォルトの名無しさん2014/07/30(水) 21:34:44.25ID:SVHB2yEX
仮想関数の配列(?)を取得してどうこうするのは
やっぱり処理系依存ですよね…?
0654デフォルトの名無しさん2014/07/30(水) 21:53:01.77ID:KdnVZtIz
「配列(?)」も「どうこう」もさっぱりわからん
0655デフォルトの名無しさん2014/07/30(水) 21:54:22.21ID:Cxe4c+lh
>>653
んなこたーない
0656デフォルトの名無しさん2014/07/30(水) 22:10:27.87ID:YaF3atah
vtblを直接操作ってことなら依存じゃね?
0657デフォルトの名無しさん2014/07/31(木) 21:45:30.17ID:ju2qgePQ
すいませn事故解決しました
0658デフォルトの名無しさん2014/08/04(月) 16:08:58.77ID:dm9tqWpJ
英語で英語を勉強するように
C++でC++を勉強できますか?
0659デフォルトの名無しさん2014/08/04(月) 16:19:28.62ID:CeLNaZOO
C++でC++書いたのでは駄目なのか?
0660デフォルトの名無しさん2014/08/04(月) 22:44:21.43ID:RWktXGOp
自然言語の学習と同じく、C++で書かれたコードを読んでC++を学ぶことは可能
しかしそのやり方に拘る意味は…
0661デフォルトの名無しさん2014/08/04(月) 22:59:51.22ID:dCswsgDe
英英辞書厨か
0662デフォルトの名無しさん2014/08/04(月) 23:25:07.40ID:COQ3HJTn
違うだろ
英語で英語を学ぶってのは
テンプレートでテンプレートから生成されたコードを想像しながら
理解を深めると言うこと
0663デフォルトの名無しさん2014/08/05(火) 21:19:35.24ID:tErWK4k/
あるクラス内で、まだ定義されていないテンプレートクラス内のテンプレートクラスをfriendに
指定したいんですが、VCでは通るもののgccやllvmで通りません
以下のようなコードなんですが、こういうことを実現する方法はありますでしょうか?
http://ideone.com/pS9N1z
0664デフォルトの名無しさん2014/08/05(火) 21:25:59.96ID:Q2aY+TxZ
ifndefかなんかそゆのにつかうんジャネーノ
0665デフォルトの名無しさん2014/08/05(火) 22:45:17.36ID:WUjrhSWy
nested class (template)のクラス外での前方宣言は不可能
素直にBをAより前で定義するかBBを独立したテンプレートにしとけ
0666デフォルトの名無しさん2014/08/06(水) 00:33:36.31ID:Kr+SizYi
あー無理だったのかぁ・・・・VCだと警告もなく通ってしまうから使っちゃってました
ありがとうございます
0667デフォルトの名無しさん2014/08/06(水) 11:18:33.35ID:Itxj2/ye
それだからマクロソフト製品は使わないほうがいい
すなおにGCCかCLANG++をつかうべき
0668デフォルトの名無しさん2014/08/06(水) 11:20:33.60ID:VbjyYzZt
そのりくつだと一番避けるべきはG++ということになるな
0669KUSO KOTE ◆unko./w.Osri 2014/08/06(水) 12:14:03.29ID:B/o+YfUv
おや、前方宣言はできると思っていたけれど。
http://ideone.com/IyAiQU
こんなことではない?
0670デフォルトの名無しさん2014/08/06(水) 12:31:49.17ID:k622RFNL
>>667
いやJavaScriptがいいんじゃないか
0671デフォルトの名無しさん2014/08/06(水) 13:21:59.92ID:4VV1Prur
typename使う奴は滅びればよいです
0672デフォルトの名無しさん2014/08/06(水) 13:54:00.87ID:MoP9MFdT
最後の砦のテンプレートテンプレート引数ですら
classの制約を無くすことが提案されているというのに
>>671はvector<int>の使用禁止な
intはクラスじゃないから
0673デフォルトの名無しさん2014/08/06(水) 16:36:41.51ID:FZDkv36t
http://www.buzzword.jp/img/face10.png
0674デフォルトの名無しさん2014/08/06(水) 17:50:04.97ID:CudcjiyP
guro
0675デフォルトの名無しさん2014/08/06(水) 22:50:46.56ID:31XjB5lE
>>669
本題からずれていていくがfriend宣言は前方宣言ではないとは言っておく
ttp://ideone.com/1i3chM
0676デフォルトの名無しさん2014/08/06(水) 23:49:11.05ID:d2G7oWho
ここで「前方宣言」の定義に関するアスペな議論が始まります
0677デフォルトの名無しさん2014/08/07(木) 00:01:30.51ID:FZIFMJqg
ワンパスじゃ解析できない文法のくせに前方宣言が必要なんて
糞もいいところ
0678デフォルトの名無しさん2014/08/07(木) 00:09:35.82ID:FtKDQC7T
文章に新しいワードを導入するならまずひと言断れってことだバカヤロウ
0679デフォルトの名無しさん2014/08/07(木) 09:11:58.78ID:wqDTIQ/e
>>678
friend class X; // このあとXが現れたらそいつフレンドな

新しいワード(X)めっちゃ導入しとるやん
実装上はこの時点で詳細が不要なだけで
0680デフォルトの名無しさん2014/08/07(木) 12:51:11.75ID:FIDAVWXd
導入してない
0681デフォルトの名無しさん2014/08/07(木) 18:51:50.97ID:QNfoWtjQ
不毛だな
「文章に新しいワードを導入」の「導入」の定義の
すりあわせ無しに互いに主張しても無意味
0682デフォルトの名無しさん2014/08/07(木) 22:08:13.86ID:NF8nADf4
673は誰?
0683デフォルトの名無しさん2014/08/07(木) 22:53:06.16ID:bVFrg8KA
知らんけどそこら中に湧いてるから黙ってNGしとけ
0684デフォルトの名無しさん2014/08/07(木) 22:58:53.07ID:oMpKWy4J
>>673
グロ リアス
0685デフォルトの名無しさん2014/08/08(金) 00:17:36.28ID:/BzRxodz
>>682
JavaDriveの人
0686デフォルトの名無しさん2014/08/08(金) 14:00:24.96ID:2QakJfDp
C++にはnextステートメントがないから
gotoを使えばいいと思うのですがどうでしょうか?
0687デフォルトの名無しさん2014/08/08(金) 15:04:37.04ID:aPdADbjs
nextの代わりならcontinueじゃね
0688デフォルトの名無しさん2014/08/08(金) 15:05:59.89ID:1LDmGQ0b
C++なら例外でいいよ
0689デフォルトの名無しさん2014/08/08(金) 15:12:38.50ID:Z2L69690
continueだ
アッタリー
0690デフォルトの名無しさん2014/08/10(日) 08:35:58.17ID:HB937KZ2
template関数を多用するとソースコードが読みづらい
のですが、使わない方が良いでしょうか?
覚えた当初は便利な機能だと思ったのですが
使わなくても問題無くプログラム書けますよね?
皆さんどうですか?
0691デフォルトの名無しさん2014/08/10(日) 08:36:40.54ID:MYgAStyQ
使わなくて済むなら使わんな
0692デフォルトの名無しさん2014/08/10(日) 08:49:48.39ID:rtLFVZFf
使ったほうが書きやすい・読みやすい・使いやすいなら使う。
そうじゃないなら使わない。
0693デフォルトの名無しさん2014/08/10(日) 10:24:03.50ID:PVWd11gL
>>690
C++テンプレートテクニック第二版 ISBN978-4-7973-7668-5 でも読んでみ
そりゃ意味が分からない奴に無理に使えとは言わないが、なぜC++に
templateなんて物があるのか書いてある
0694デフォルトの名無しさん2014/08/10(日) 13:52:01.27ID:LyDLIZ5z
>>690
無理に使う必要はないな
ライブラリを作ってるとかなら別だけど
0695デフォルトの名無しさん2014/08/10(日) 14:38:43.92ID:rtLFVZFf
ライブラリを作ってる場合であっても「無理に使う」必要はないと思うけど
0696デフォルトの名無しさん2014/08/10(日) 14:40:31.77ID:4h35HRUa
かなりベースの部分にしか使わないな
0697デフォルトの名無しさん2014/08/10(日) 14:57:48.24ID:abxqdZuD
自分にとっては必要なくても汎用的なコンテナ記述するのに必須だからやっぱり重要な機能
縁の下の力持ち
0698デフォルトの名無しさん2014/08/10(日) 17:37:59.56ID:2ZseX05a
ポリフォーニズムが静的か動的かの違い棚
静的で十分ならテンプレートを使う
0699デフォルトの名無しさん2014/08/11(月) 00:51:17.47ID:hYYI8VMN
その時その時で、テンプレートだらけになったり皆無になったり。
0700デフォルトの名無しさん2014/08/11(月) 03:28:42.03ID:7PxlFrje
必要な物を必要なだけ、いくら必要な物でも、例えば水は不可欠だが水害が起こるほどあっては困る。
C++の技術者は他の言語の人よりそれが分かっているような気がする。
0701デフォルトの名無しさん2014/08/11(月) 08:20:05.01ID:+s+YvzlW
perlとか水害レベルだからなあ…
捨てコードとしては特級品の使い易さだけど。
0702デフォルトの名無しさん2014/08/11(月) 09:36:41.23ID:ucFvkf6p
C++はoperatorとtemplateで簡単にセルフ水責めになるから、
水害起こすような奴は速攻で水没するから嫌でも学ぶとか?

水捌け良くてセルフ水責めにならない場合学習が少し遅れる。
0703デフォルトの名無しさん2014/08/11(月) 11:31:09.42ID:KNWhQNOK
テンプレートはやり出すと楽しくてテンプレ地獄になったりするけど
operatorはあんまり使ったことないな
0704デフォルトの名無しさん2014/08/11(月) 11:53:46.60ID:hYYI8VMN
自分でつくる実用的なoperatorなんて operator () 以外にはめったにないだろ。
operator = は微妙。
0705iostream2014/08/11(月) 11:58:30.82ID:IpMoPrzW
operator >>(), operator <<() も宜しく。
0706デフォルトの名無しさん2014/08/11(月) 12:51:29.01ID:qzQd4dBy
operator %は使う
format的な
0707デフォルトの名無しさん2014/08/11(月) 13:03:24.02ID:swJyv4kp
operator<は結構使うな
0708デフォルトの名無しさん2014/08/11(月) 18:06:15.16ID:ZMS8Ato8
比較もよく使う
ソートするとき、set、map使うとき
0709デフォルトの名無しさん2014/08/11(月) 22:09:08.31ID:TP2ds61a
operater, って使えたっけ?
0710デフォルトの名無しさん2014/08/11(月) 22:59:12.15ID:4BUjNRYW
>>709
using boost::assign::orerator +=;
0711デフォルトの名無しさん2014/08/12(火) 00:56:01.35ID:FJHkQfgs
>>709
それ確かBlitz++で初期化に使ってたぞ
初めて見た時にめんくらった
0712デフォルトの名無しさん2014/08/12(火) 03:53:46.67ID:vBchMl0G
try{
throw exception("error!\n")
}
catch (exception &e){
  e.what()
}

// 何らかの処理

cout << "終了" << endl;


出力:
error!
終了

これで、catchに移動した後終了せず処理まで進んでしまうんですけど、何が原因と思われますでしょうか?
0713デフォルトの名無しさん2014/08/12(火) 03:59:45.49ID:sRKn/vO1
catchの中でさらに例外飛ばしたら終了するかもしれないが
そうでないなら普通に処理が進むわな
0714デフォルトの名無しさん2014/08/12(火) 04:48:03.23ID:jmjnqeVb
>>712を見ていてふと思い出したけど
コンストラクター中の例外に限って勝手に再スローされる
とかいうKUSOな言語仕様があったな
誰も使ったこと無いと思うけど
0715デフォルトの名無しさん2014/08/12(火) 07:00:00.41ID:KW8A3HpW
>>714
なんそれ。例を書いて教えて下さい。
07167122014/08/12(火) 07:44:58.90ID:vBchMl0G
>>713
catch 毎に return しないと終了させられない仕様ということでしょうか?
それともなにか変な処理をしているから進んでしまうということでしょうか?
例えばexception()ではなくint型の数値などを投げても挙動が変わらず困っています・・・
07177122014/08/12(火) 08:01:54.91ID:vBchMl0G
すみません勘違いしてました・・・orz
try~catchでは例外に移行はするけど、終了する場合は return しないとダメみたいですね・・・

お騒がせしました
0718デフォルトの名無しさん2014/08/12(火) 08:09:34.96ID:sSgdt4Yu
>>716
発生した例外(エラー)をcatchして対処したのに勝手に終了されたら堪らんわ。
例外に対する対処としてプログラムを終了させたいならその処理を書けばいい。

何か誤解をしているようだが、例外ハンドラはクラッシュ前のダイイングメッセージ置き場ではないよ。
例外ハンドラで例外を処理することで、クラッシュせずに処理を継続させたりすることが出来る仕組み。
try{〜}catch(〜){}とか何もしない例外ハンドラを書いてエラーを無視するとか(行儀は悪いが)定番だぞ?
0719デフォルトの名無しさん2014/08/12(火) 08:11:30.85ID:VxUIvb17
そもそもどういう例外なのかと
0720デフォルトの名無しさん2014/08/12(火) 09:55:27.62ID:TroGrD7N
>>715
class unko {
unko()
try {
 throw exception();
}
catch(...) {
}
};
0721デフォルトの名無しさん2014/08/12(火) 15:44:38.36ID:Rl3FA9vZ
?
0722デフォルトの名無しさん2014/08/12(火) 16:36:40.87ID:3RltmfP6
例外は致命的エラーが発生したときのデバッグ用に利用してて、処理の成功失敗の判断は戻り値でやってるな
勿論、メモリ確保に失敗したら強制終了だ
0723デフォルトの名無しさん2014/08/12(火) 16:39:23.70ID:+IPEXl0L
え、例外は処理の成功失敗の判断するためのもんじゃないの?
0724デフォルトの名無しさん2014/08/12(火) 16:45:11.66ID:deyBDByi
例外はそうだけど
try catchステートメントは例外に使えるというだけで
何に使ってもいい
0725デフォルトの名無しさん2014/08/12(火) 17:10:03.58ID:YrV3Gb1k
>>723
いいえ違います。
すべての処理が成否を返すスタイルを止め
「目的が達成できなかった」時の第三の分岐を提供するものです。
「目的が達成できなかった」というのは
その定義上 要約する事ができます。
例えばaとbの二つを行う処理Tは、aとbのどちらが失敗しても
Tの目的が達成できなかったことになります
0726デフォルトの名無しさん2014/08/12(火) 17:14:51.00ID:mJG7dww+
通常起こり得る失敗もみんな例外を返すと遅くてしょうがない。
07277122014/08/12(火) 18:06:14.61ID:vBchMl0G
>>718
そのとおりですね
完全に勘違いしてました
何らかの処理の部分の前にエラーを発見して処理を終わらせたかったのですが勘違いで詰まってました
tryをその処理ごと囲むことでも回避できそうですね
0728デフォルトの名無しさん2014/08/12(火) 18:38:32.75ID:XiqCRjFI
そもそもtryが必要なんかね
ばかほどtry catchで囲みたがる
07297122014/08/12(火) 18:57:35.19ID:vBchMl0G
>>728
それを言われたら元も子もないですね・・・^^;
C++のtry~catchはjavaやC#より好かれてはいないようですね
元々Cのようにreturnでintを返してその値を元に処理を分けていたのですが
深くなってくるとそれぞれの関数がintを返し合ってごちゃごちゃしてきたこと
やはり存在しているからには使ってみたくなるのが心情ということ、後わかりやすいということでしょうか
0730デフォルトの名無しさん2014/08/12(火) 19:56:12.48ID:Naz5AbMR
>>729は何か勘違いをしている
throwがだめなんじゃない
Java初心者がコンパイルエラーを回避するためにするような
try-catchしまくりは避けるべき

ここは
catch (exception &e){
  cout <<e.what();
  throw; または throw exception(わかりやすいメッセージ);
}
でいいと思う
0731デフォルトの名無しさん2014/08/12(火) 20:08:57.24ID:wAscSHe2
>>726
>通常起こり得る失敗もみんな例外
普通にそうしてcatchしている奴多いんじゃないのか
07327122014/08/12(火) 20:49:04.34ID:vBchMl0G
>>730
なるほど、あまりthrowについて詳しく触れられているところがなかったのでよくわからないのですが
catchのなかでthrowを投げるとどうなるのでしょうか?
0733デフォルトの名無しさん2014/08/12(火) 21:06:32.33ID:3FnySrmj
ハゲはなぜfinally句を設けなかったか?
ハゲだからか?
0734デフォルトの名無しさん2014/08/12(火) 21:24:51.89ID:zX1YfWsN
>>726
まともな戻り値を返せなきゃ全部例外で良いと思うが。
それで遅くなることってあんの?
まさか当たり判定の結果とかを例外で返すとか考えてんの?
0735デフォルトの名無しさん2014/08/12(火) 21:35:19.62ID:zX1YfWsN
関数を超越する再throwって規格的に有りなんだろうか。
void Handler(void)
{
 try
 {
  throw;
 }
 catch( const std::exception &exception )
 {
  std::cerr << exception.what() << std::endl;
 }
}
signed main(void)
{
 try
 {
  throw std::exception( "error" );
 }
 catch(...)
 {
  Handler();
 }
 return 0;
}
0736デフォルトの名無しさん2014/08/12(火) 21:43:34.81ID:X8VDPIJ6
>>735
あり
0737デフォルトの名無しさん2014/08/12(火) 21:47:42.35ID:LkoIocay
finallyって存在自体が微妙じゃね。
リソースの解放みたいな処理なら
後に書かせずRAIIでやらないと
結局書き忘れが怖いし。
0738デフォルトの名無しさん2014/08/12(火) 21:53:10.94ID:zX1YfWsN
>>736
まじか
0739デフォルトの名無しさん2014/08/12(火) 22:04:17.48ID:QFuySfxC
>>736
なしじゃねーの
Handler() が、catch 外から呼ばれたらどうするのさ
0740デフォルトの名無しさん2014/08/12(火) 22:24:08.38ID:x9ZUxVMu
>>739
なんの話してるんだよ
0741デフォルトの名無しさん2014/08/12(火) 22:25:22.11ID:x9ZUxVMu
C++使っててfinallyが欲しいと思ったことがないんだけど。
0742デフォルトの名無しさん2014/08/12(火) 22:36:07.56ID:X8VDPIJ6
>>739
terminate()が呼び出されます
0743デフォルトの名無しさん2014/08/12(火) 22:51:22.32ID:KiTYa75P
デストラクタ便利だしなー
0744デフォルトの名無しさん2014/08/12(火) 23:13:01.86ID:WUrGCqmI
>>741
Destructorが例外放つ時は欲しくなった。
0745デフォルトの名無しさん2014/08/12(火) 23:25:12.20ID:+lGUMFyS
デストラクタ内の例外はデストラクタ内で処理するしかないだろう
外には投げるなよ
0746デフォルトの名無しさん2014/08/12(火) 23:28:01.93ID:x9ZUxVMu
>>744
デストラクタで例外放つ事がないんだけど。
0747デフォルトの名無しさん2014/08/12(火) 23:34:47.16ID:lQ8v3e0D
デストラクタでは例外放っちゃダメ、絶対。
0748デフォルトの名無しさん2014/08/12(火) 23:38:35.69ID:x9ZUxVMu
解ってるかもしれないけど一応言っておくとデストラクタで例外はリソースリークだけじゃなくて、

例外発生中、catchする前に更に別の例外発生すると問答無用でterminateする
例外発生するとスタック巻き戻されてスタックに構築したオブジェクトのデストラクタが呼ばれてからcatchされるので例外発生中の例外が発生しうる。
0749デフォルトの名無しさん2014/08/12(火) 23:44:05.31ID:tFS1O9N8
そんなときはもうリカバリ考えずプログラム終了でいいやん
0750デフォルトの名無しさん2014/08/12(火) 23:47:47.78ID:lQ8v3e0D
>>749
そういう状況をワザワザ呼び込む必要は無いでしょって話でしょ
0751デフォルトの名無しさん2014/08/12(火) 23:51:39.95ID:OZpiGBjt
>>748
constメソッドからはconstメソッドしか呼べないように、デストラクタからはnoexceptしか呼べないようにしてほしい。
0752デフォルトの名無しさん2014/08/13(水) 00:04:25.86ID:I2kL8FiE
constexprの最大のメリットってなんですか?
コンパイル時定数ってことは、呼び出しのオーバーヘッドが無くなったりconst外しができないってことですよね
他にどんなメリットがあるんでしょうか
0753デフォルトの名無しさん2014/08/13(水) 00:18:43.93ID:hSyL6KDi
>>751
それはあるな。noexcept書いてその中でthrow書いても何事も無くコンパイル通っちゃうし。警告ぐらい出して欲しい(既にある?)

>>752
定数書くときに一行で済まないようなそこそこ複雑な計算があったら計算済みの値を書いちゃうよね?
そういうのでもどうしてその値になったのかという計算方法を併せて書けるというメリットがある。あんまり使わないけど。
0754デフォルトの名無しさん2014/08/13(水) 00:24:12.99ID:BorG/OEI
>>752
計算式でコンパイル時定数を表現できる事だと思ってる。
0755デフォルトの名無しさん2014/08/13(水) 00:29:35.07ID:I2kL8FiE
>>753, 752
なるほど
0756デフォルトの名無しさん2014/08/13(水) 00:36:28.59ID:I2kL8FiE
なるほど
今日からconstexpr教に入信します
0757デフォルトの名無しさん2014/08/13(水) 01:38:36.42ID:hIOKAPMO
配列のサイズとかを式で書ける、ってのが大きいよね。
0758デフォルトの名無しさん2014/08/13(水) 02:08:08.26ID:0ozxm8iV
配列のほうを可変にする方向にはいかんのかC++は
0759デフォルトの名無しさん2014/08/13(水) 02:09:07.95ID:BorG/OEI
>>758
vector …
0760デフォルトの名無しさん2014/08/13(水) 02:26:12.08ID:aVYEOgLy
>>758
可変長配列はC99で既にあるじゃないの
0761デフォルトの名無しさん2014/08/13(水) 04:32:58.01ID:lr+rlGxM
> 可変長配列はC99で既にあるじゃないの
翻訳考えたほうがいい
0762デフォルトの名無しさん2014/08/13(水) 04:51:25.91ID:R+B95mq6
コンパイル時に処理済みにできるってとこが重要
constexprは関数、コンストラクタ含むメソッドにも指定できるしその影響は計り知れない
対応したらSTLにも有効になるからコードに手を入れずコンパイルしなおすだけで速くなりそうな予感
0763デフォルトの名無しさん2014/08/13(水) 05:01:51.48ID:C9aHZ23v
>>761
何か問題が?
0764デフォルトの名無しさん2014/08/13(水) 05:25:27.01ID:lr+rlGxM
>>763
760氏曰く可変長配列とするならそうではないよねって話。
実行時固定長配列じゃん。
0765デフォルトの名無しさん2014/08/13(水) 06:46:09.50ID:DJCgQYDb
>>740
理解できないなら、割り込んでくるなよ...

>>742
規格のどっかに書いてある?
見た記憶が無いんだが。
0766デフォルトの名無しさん2014/08/13(水) 07:58:19.99ID:vowM3sUt
>>758
C++14で可変長配列入るやん
0767デフォルトの名無しさん2014/08/13(水) 08:01:12.77ID:vowM3sUt
>>765
Handlerが投げた例外を誰もcatch(...)で受け取らなきゃstd::terminateが
呼ばれるって話では?
0768デフォルトの名無しさん2014/08/13(水) 08:43:00.84ID:J7DYBb4D
constexprはコンパイル時に文字列リテラルのハッシュ値を計算できるか?
0769デフォルトの名無しさん2014/08/13(水) 08:46:24.37ID:DJCgQYDb
>>767
>>735 の話と言うことは理解してる?
try 〜 catch してるよね。
0770デフォルトの名無しさん2014/08/13(水) 10:24:25.73ID:i76H2wj3
>>765
> >>742
> 規格のどっかに書いてある?
> 見た記憶が無いんだが。
15.1
...
If no exception is presently being handled, executing a throw-expression with no operand
calls std::terminate()
0771デフォルトの名無しさん2014/08/13(水) 11:34:49.44ID:+Il1Qeqk
>>769
お前こそ
>>739 からの流れ理解してないだろ。
catch内から呼ばれた関数内から再throwするのは規格的にありかって質問に >>739 はcatch外から呼ばれたらどうすんだって答え何の話してるんだってなるわ
0772デフォルトの名無しさん2014/08/13(水) 11:40:00.71ID:+Il1Qeqk
すまんアンカー間違えた
>>765 宛だ
0773デフォルトの名無しさん2014/08/13(水) 12:08:06.07ID:DJCgQYDb
>>770
おお、確かにあるわ、さんくす。
catch 外ではオペランドなしの throw 書けないと思ってたわ。

>>771
ひょっとして応用力ないのか?
Handler は単なる関数なんだから、どこからでも呼ばれるだろ。
0774デフォルトの名無しさん2014/08/13(水) 12:14:56.11ID:+Il1Qeqk
>>773
ひょっとして理解力ないのか?
0775デフォルトの名無しさん2014/08/13(水) 12:50:46.73ID:YdrUmIgN
在日チョンだもん
0776デフォルトの名無しさん2014/08/13(水) 12:51:01.40ID:DJCgQYDb
>>774
反論できないけど、レスしたかったんだよね (w
0777デフォルトの名無しさん2014/08/13(水) 12:51:50.54ID:YdrUmIgN
ああ、在チョンか納得
0778デフォルトの名無しさん2014/08/13(水) 13:07:06.61ID:+Il1Qeqk
>>773
誰でもわかるようなコードに例えると

int A(std::vector<int> v){return v.at(0);}

これ規格的にあり?って質問に
なしsizeが0のvector渡されたらどうすんだって言ってるようなもん。
これで理解出来ないならこれ以上話すこと無い
0779デフォルトの名無しさん2014/08/13(水) 13:10:50.59ID:FZpQXQuk
>>771
規格の15.3段落7,8では「The exception with the most recently activated handler that is still active is called the currently handled exception」
「catchを抜けたらハンドラーがactiveでなくなる」
とあって関数跨ぎについては言及してない。
つまり関数を呼び出そうとmost recently activated handlerは存在すると考えられるんだろう
知らんかった
0780デフォルトの名無しさん2014/08/13(水) 13:21:23.96ID:DJCgQYDb
>>778
とんちんかんな例乙 (w

> これ以上話すこと無い

うざいから、是非そうしてくれ

>>779
なるほどなぁ
勉強になったわ
0781デフォルトの名無しさん2014/08/13(水) 13:24:32.13ID:YdrUmIgN
つまんね
0782デフォルトの名無しさん2014/08/13(水) 13:41:42.38ID:6uOIoPa+
"being handled"の定義がcatch外にも適用されるのかと訊いている人に対する答えとして>>778は不適切だな
どうしてこうもコミュ障が多いのか
0783デフォルトの名無しさん2014/08/13(水) 15:19:03.75ID:PkKUCanC
低脳だからコミュ障、理解力なし。残念だがドカタは低脳が主流の職業だからな
0784デフォルトの名無しさん2014/08/13(水) 15:42:26.58ID:j2oEGWXf
以前
class A{
public: static const double=1.328939280371028321098372103;
}
のようなことをやったらconstexprをつけてください的な
エラーが出たのですけどなぜですか?
0785デフォルトの名無しさん2014/08/13(水) 15:48:19.64ID:gpa9mtUz
実数だから
0786デフォルトの名無しさん2014/08/13(水) 15:48:47.89ID:gAzc5rgf
intじゃないから
0787デフォルトの名無しさん2014/08/13(水) 15:51:03.76ID:Brk2YC8E
変数名が無いし変数名が無いということは実体も記述できない
0788デフォルトの名無しさん2014/08/13(水) 15:51:35.07ID:gpa9mtUz
↑ これがアスペの反応
0789デフォルトの名無しさん2014/08/13(水) 15:55:51.33ID:j2oEGWXf
以前
class A{
public: static const double Pi=1.328939280371028321098372103;
}
のようなことをやったらconstexprをつけてください的な
エラーが出たのですけどなぜですか?
0790デフォルトの名無しさん2014/08/13(水) 15:57:17.00ID:j2oEGWXf
>>787
訂正しました
>>756-757
Effective C++ではエラーになってませんでした
最新のコンパイラーです
0791デフォルトの名無しさん2014/08/13(水) 16:01:06.38ID:gAzc5rgf
静的変数は定義が必要です
0792デフォルトの名無しさん2014/08/13(水) 16:03:38.52ID:j2oEGWXf
static const double Pi=1.328939280371028321098372103;
は宣言ではなく定義です
とeffective C++には記されてます
0793デフォルトの名無しさん2014/08/13(水) 16:08:44.75ID:xpXGMlRG
>宣言ではなく定義です

そんな嘘つき本は はよ捨てろ
0794デフォルトの名無しさん2014/08/13(水) 16:10:33.94ID:j2oEGWXf
effective C++を読んでない人のほうが少ないと思いますが
0795デフォルトの名無しさん2014/08/13(水) 16:10:37.48ID:xpXGMlRG
>static const double Pi=1.3289

それ、クラスの外に書いてあったんじゃないの?
0796デフォルトの名無しさん2014/08/13(水) 16:22:37.49ID:j2oEGWXf
中ですよ
もしかしたらlong doubleにしたらできなくなるとかですか?
0797デフォルトの名無しさん2014/08/13(水) 16:25:20.35ID:/WZQ4/ET
int以外はそういう書き方はできません
0798デフォルトの名無しさん2014/08/13(水) 16:31:07.54ID:j2oEGWXf
intしかできないとは知りませんでした
さようなら
0799デフォルトの名無しさん2014/08/13(水) 19:00:35.97ID:BorG/OEI
>>768
ハッシュ関数がconstexprの制限内で書けるくらいの代物ならできるんじゃね。
0800デフォルトの名無しさん2014/08/13(水) 22:09:28.47ID:XHuntWzv
C++相談室改め、C++自慢大会会場
0801デフォルトの名無しさん2014/08/14(木) 00:59:26.62ID:DQxKDkxi
>>799
TMPでやろうと思ったけど出来なかったんだよね
要するに文字列の全部の文字を足したり掛けたりする事だけど出来るかな
0802デフォルトの名無しさん2014/08/14(木) 01:29:52.41ID:bdtpbysq
>>797
ソースは?
0803デフォルトの名無しさん2014/08/14(木) 02:17:21.27ID:inXgLCev
>>801
14のconstexprなら普通に書けばいい
ttp://melpon.org/wandbox/permlink/M8fHpBm29DxtPciX
0804デフォルトの名無しさん2014/08/14(木) 02:19:01.75ID:tOjwJfNE
規格策定されてないものの話を持ってくんじゃねーよカス
0805デフォルトの名無しさん2014/08/14(木) 09:02:44.07ID:xlLN/xxE
>>801
出来るはずだけどルールがかなり厳しい。
今出先なので記憶で適当に書くけど、確かforループとかは禁止なので、再帰処理で書かざろうえない。
0806デフォルトの名無しさん2014/08/14(木) 09:36:55.78ID:ipuLkcxv
MIGWのg++のlong doubleについてお尋ねします。

#include <iostream>
#include <iomanip>

using namespace std;

int main ()
{
const long double pi = 3.1415926535897932384626433832795628L;

cout<<" size of long double = "<<sizeof(long double)<<" byte"<<endl;
cout<<setprecision(30);
cout<<"(int)pi = "<<(int)pi<<endl;
cout<<"(double)pi = "<<(double)pi<<endl;
cout<<"(long double)pi = "<<(long double)pi<<endl;
cout <<" size of pi = "<< sizeof(pi)<<" byte"<< endl;
return 0;
}
というプログラムをg++でコンパイルして実行すると、

size of long double = 16 byte
(int)pi = 3
(double)pi = 3.1415926535897931
(long double)pi = 1.132603991576807e-317
size of pi = 16 byte

という結果に成ります。
定数piはlong doubleとして認識されているようですが、
long doubleとして出力すると、0になってしまいます。
このpiの値を例えば正しく30桁出力するにはどうしたら
よいでしょうか。
0807デフォルトの名無しさん2014/08/14(木) 09:44:49.34ID:DmYGBbIz
C++14ではconstexprの制限が緩和されるっしょ
0808デフォルトの名無しさん2014/08/14(木) 09:46:39.33ID:MSKf8kfB
>>801
C++11で書かれたconstexpr_hash_map有るぞ
0809デフォルトの名無しさん2014/08/14(木) 10:13:25.46ID:cyDZsEbT
>>801
11のconstexprでもかなり単純に書ける
ttp://ideone.com/rmt4ib
0810デフォルトの名無しさん2014/08/14(木) 10:13:55.77ID:ctUUlrss
>>806
MinGWのバージョンはいくつかな?

MinGW-w64 4.9.1での実行結果

size of long double = 16 byte
(int)pi = 3
(double)pi = 3.14159265358979311599796346854
(long double)pi = 3.14159265358979323851280895941
size of pi = 16 byte
0811デフォルトの名無しさん2014/08/14(木) 10:51:14.80ID:IV+oBdte
>>764
実行時固定長じゃない世界だよ。 これが許される世界だ。
int hoge( int a ){
int unko[a];
08128012014/08/14(木) 12:31:31.41ID:N74+g2GN
>>809
キタコレ!!
手元のコンパイラ(g++4.8.1)で確認出来た
最適化後のアセンブラに定数が書き込まれてるのも確認した

ま、実行時にハッシュ値を計算すれば済む話しだし、clangだと多分コンパイラが
最適化で定数にしていたはず
コンパイラによらずにg++でも定数になったってのはかなりいい
0813デフォルトの名無しさん2014/08/14(木) 12:31:46.88ID:cyDZsEbT
>>806
mingwのprintfに関してはこんな ttp://www.kijineko.co.jp/node/918 話がある
c++のストリームでも内部でprintfを使っていれば無関係ではないだろ
0814デフォルトの名無しさん2014/08/14(木) 14:18:26.55ID:Wg1tI0aE
>>811
それは分かるってるんだけど
固定ビットレートのレート指定を動的に出来ても
それは固定ビットレートだよねって話と同じで
実行時(動的)に長さを決めてるだけの固定長配列じゃね?と。
そもそも配列は長さを
か‐へん【可変】変えることができること。また、変わることができること。
が出来ないので可変という言葉がしっくりこない
可変長というとリスト構造のように
あとで長さを変えられるものをイメージしちゃうんだよね
動的配列とかのがしっくりくる
0815デフォルトの名無しさん2014/08/14(木) 14:39:21.20ID:ipuLkcxv
>810
検証ありがとうございます。
使用していたのは4.7.3でした。
最新バージョンをインストールしてテストしてみます。
0816デフォルトの名無しさん2014/08/14(木) 19:37:34.09ID:ZVDr7q49
>>814
コンパイル時に決定する配列と比較したら十分可変だべ。

一応、構造体の最後に指定するサイズ未指定の配列も可変長配列といってた気がする。

どうせなら、C99と互換にしてくれた方が嬉しかった。
位置指定とか、メンバ指定とか
0817デフォルトの名無しさん2014/08/14(木) 21:51:38.66ID:1YD1Mn32
>>816
> コンパイル時に決定する配列と比較したら十分可変だべ。
静的|動的
コンパイル時|実行時
ならいいけど
固定長|可変長
ってのはどうもねって話
時系列的に致し方ない部分もあるけど
実行時(動的)固定長配列ですとした方が
整合性とれるんじゃないの?と思ったんだよね
単に動的配列でもいいよ
「配列の長さは固定である。その長さはコンパイル時又は実行時に決められる。」
でよくない?

> 一応、構造体の最後に指定するサイズ未指定の配列も可変長配列といってた気がする。
struct sub_foo {};
struct foo {
size_t size;
struct sub_foo sf[1];
};
こんなやつかな?
名前なんてあるのか
読み込み専用のキャストと言ってたよ。
昔はsf[0]でも行けたんだよね
0818デフォルトの名無しさん2014/08/14(木) 23:11:58.30ID:lUHroMK7
>>817
キミの主張は、C99のvariable length arraysの名前をruntime-sized arraysに変更すべきだということ?
まあ一つのオブジェクトが生成後に変更できないのに可変と称するのは
constデータメンバーを変更可能メンバーと呼ぶようなものだな
0819デフォルトの名無しさん2014/08/15(金) 00:27:19.85ID:cLr8J/Qn
>>818
> >>817
> キミの主張は、C99のvariable length arraysの名前をruntime-sized arraysに変更すべきだということ?
いや、ただ違和感有るよねって話
個人的には
static/dynamicで
配列/動的配列
で事足りるなと思うけど
今更変更は無理だし、変更されても自分も迷惑だから求めてないよ
0820デフォルトの名無しさん2014/08/15(金) 00:33:56.46ID:dwqImqPv
>>819
安心しろ。C99は名前が可変長配列(VLA)だけど
C++に入る予定のそれは「runtime bound arrays」だ
0821デフォルトの名無しさん2014/08/15(金) 01:12:33.06ID:cLr8J/Qn
>>820
それなら納得できる
自分と同じ違和感を感じてた人がいたからこそ
こうなったと考えると感慨深いよ
知らせてくれてありがとう
0822デフォルトの名無しさん2014/08/15(金) 02:33:57.84ID:P5GA1tgd
機関車みたいな名前
0823デフォルトの名無しさん2014/08/15(金) 04:07:58.14ID:1yOnOTpl
>>820
std::vector より融通のきくものなのか?
いきなり v[1000] = 999; とかやってもいいとか?
0824デフォルトの名無しさん2014/08/15(金) 04:25:53.26ID:Dgl6Nxyn
そんな配列いやだぞ俺は…
0825デフォルトの名無しさん2014/08/15(金) 08:12:30.57ID:rBk8U20E
つ[std::map]
0826デフォルトの名無しさん2014/08/15(金) 08:38:04.05ID:06IqYKhN
>>821
> 違和感を感じてた
とても違和感を覚える
0827デフォルトの名無しさん2014/08/15(金) 10:02:34.54ID:2v3vuyJU
↑ この揚げ足取りがアスペの反応です
0828デフォルトの名無しさん2014/08/15(金) 10:23:41.17ID:06IqYKhN
教育的指導と言ってくれ
0829デフォルトの名無しさん2014/08/15(金) 12:32:41.32ID:Evb4CBKF
「違和感を感じる」は重言(二重表現)ではありません
0830デフォルトの名無しさん2014/08/15(金) 14:30:59.14ID:UOqJaIfS
>>827
俺同様にそんなこと(揚げ足取りとか)でしかスレに参加できない人に
そんなレスしてはいけない。荒らしネタをいつもwktkだよ
0831デフォルトの名無しさん2014/08/16(土) 11:37:59.72ID:9UZ4+ndE
C++での関数オブジェクトで高階関数とかやろうとすると
関数型プログラムより遅いのですかね
0832デフォルトの名無しさん2014/08/16(土) 11:45:34.33ID:datmhcQU
ローカル関数オブジェクト、ラムダ式のほうが最適化しやすいとか言われてるけど
実際バイナリ比べてみんと断言できん
0833デフォルトの名無しさん2014/08/16(土) 11:46:47.64ID:xGOV3cHH
>>831
何が遅いの?
0834デフォルトの名無しさん2014/08/16(土) 12:22:05.28ID:QIE8uZ/l
関数呼び出しがボトルネックになるほど内側の作業は
大抵ループに直接書いちゃうからな
0835デフォルトの名無しさん2014/08/16(土) 12:35:43.08ID:9UZ4+ndE
何言ってるのか分からない
0836デフォルトの名無しさん2014/08/16(土) 12:37:16.94ID:v0/HV5o0
>>834
C++標準ライブラリのalgorithm使いたいときどうするのよ?
0837デフォルトの名無しさん2014/08/16(土) 13:56:27.66ID:Tzb9+P64
>>836
algorithm使ってる時点で細かい高速化は環境頼みってことだろうし、インライン展開に期待する。
08383132014/08/16(土) 15:13:52.72ID:1uL+ke75
わ・・、わしゃ・・、C++が二番目に好きや・・!
0839デフォルトの名無しさん2014/08/16(土) 16:52:25.89ID:9UZ4+ndE
for_eachを使うと並列計算になるような時代になったら
みんな使うようになるだろうな
0840デフォルトの名無しさん2014/08/16(土) 20:26:38.33ID:wVptFPzI
>>839
ほれ
http://msdn.microsoft.com/ja-jp/library/dd728080.aspx
http://d.hatena.ne.jp/fjnl/20100615/1276611443

個人的にはOpenMPが簡単だから好き
0841デフォルトの名無しさん2014/08/16(土) 23:30:50.80ID:Om93bQqq
C++のfutureって使い物にならないUNKOだよね?
0842デフォルトの名無しさん2014/08/16(土) 23:36:29.19ID:ntoK5Iju
オライリーのC++クイックリファレンスのstd::remove_if()に、述語がfalseを返す
要素の削除と書かれています。
これは本当にtrueではなくfalseなんですかね?
0843デフォルトの名無しさん2014/08/16(土) 23:46:06.00ID:ntoK5Iju
http://ideone.com/abJH6d

どうしてもそうならないけど、読み方を間違ってるのかな。
0844デフォルトの名無しさん2014/08/17(日) 00:04:48.37ID:CyxZvI8N
cppreference.com見てきたけど、trueを返すとあるね。
オライリーの誤訳じゃない?

>残りの要素の順序を自由におよび指定した値の新しい範囲の末尾を返さないで特定の範囲の述語を満たす要素を削除します。
なんだこのMSDNの糞訳w
0845デフォルトの名無しさん2014/08/17(日) 00:08:54.43ID:YbL+7IWD
これだけ売れてる本でも知られていない誤植って残るんですね。
falseを返す要素を先頭に移動すると書きたかったのかな。
0846デフォルトの名無しさん2014/08/17(日) 00:47:03.29ID:JhA4dCqi
そもそも本屋で手に入るプログラミング書物の9割は嘘だらけ
0847デフォルトの名無しさん2014/08/17(日) 00:47:25.80ID:LPdSw/V0
現物見つけた。
ttp://books.google.co.jp/books?id=Q4iP1mkfdtsC&pg=PT369&lpg=PT369&dq=o%27reilly+remove_if+C%2B%2B+quick+reference&
source=bl&ots=w_gb6wQZ7t&sig=aJBM956V9YopwwYT7BK4QSjpBCE&hl=ja&sa=X&ei=kHvvU9m2OtG78gWTgoGwCQ&ved=0CDEQ6AEwAg#v=onepage&q=o'reilly%20remove_if%20C%2B%2B%20quick%20reference&f=false
>845の推測で正解のようだね。
0848デフォルトの名無しさん2014/08/17(日) 01:42:54.91ID:hPsIAoGd
remove_ifって別に削除されるわけじゃないのに
どうして名前がうそつきなの?
0849デフォルトの名無しさん2014/08/17(日) 01:49:02.75ID:968GdPmd
売れてるって言っても同種の本の中では相対的にってだけだし
オライリーは頑張っていて総合的に有用なのは認めるけど日本語版は所詮利用者の少ない三次資料にすぎないからな
0850デフォルトの名無しさん2014/08/17(日) 02:24:41.94ID:YbL+7IWD
移動する意味のremove(動詞)を翻訳するときに削除って間違えたのかも
しれないですね。
0851デフォルトの名無しさん2014/08/17(日) 10:31:37.39ID:tXdGkyB9
>>848
コンテナの要素数は変わらなくても
対象の要素はコンテナから実際に除去(remove)されうるというのが本質的な動作だからだろ
ttp://ideone.com/p35SQP
0852デフォルトの名無しさん2014/08/17(日) 11:09:16.48ID:QTjhUrwU
外人の書いたごく一部以外のシステム開発本は、プログラムというもの自体の体をなしていない。
0853デフォルトの名無しさん2014/08/17(日) 11:38:50.67ID:PHQzH28y
なぜdeleteにしなかった
0854デフォルトの名無しさん2014/08/17(日) 13:07:56.95ID:xHaXtxCE
>>851
そんな一見信じてしまうような天才的な嘘をよくも思いついたな
たまたま2がremove後のvに無かっただけだろ
全部push_back(2)でやれ
0855デフォルトの名無しさん2014/08/17(日) 16:24:25.75ID:X10LwGzT
>>850
俺もそう思う。
削除ならeraseとかにするだろうが、削除しないで移動してのけ者にする
って感じの動作だからremoveにしたってキガス
0856デフォルトの名無しさん2014/08/17(日) 16:46:00.78ID:h2zs3D24
削除で erase はないわ
0857デフォルトの名無しさん2014/08/17(日) 17:12:19.84ID:ByxoqvFy
>>856
あるよ
0858デフォルトの名無しさん2014/08/17(日) 17:14:40.29ID:hMiNzxMC
>>856
remove - eraseイディオム知らんのか?
てか、普通に削除て言ったらeraseでしょうに。
0859デフォルトの名無しさん2014/08/17(日) 17:22:16.47ID:yd614Lrj
Deleteじゃ?
0860デフォルトの名無しさん2014/08/17(日) 17:25:59.14ID:+u4XNYk6
他の言語でadd - removeの対は当たり前のように使用されているのだが
 消去=erase
 取り除く=remove
だろ
0861デフォルトの名無しさん2014/08/17(日) 18:08:26.18ID:aU8paNEp
http://ascii.jp/elem/000/000/061/61346/
0862デフォルトの名無しさん2014/08/17(日) 18:46:10.01ID:Myh2aLxY
→ http://peace.2ch.net/test/read.cgi/tech/1390230345/
0863デフォルトの名無しさん2014/08/17(日) 18:53:44.43ID:vacMJles
removeって言ったらコンテナからコンテナの外に移動する処理に付けるべき名前だろう。
コンテナの中だけで移動して寄せ集めるのことにremoveなんて使った奴はアホ確定。
0864デフォルトの名無しさん2014/08/17(日) 18:57:00.75ID:fXG/tfAe
いやあ、一々日本語に訳さないと分からない奴等が何言っても無意味?つか無駄?
0865デフォルトの名無しさん2014/08/17(日) 19:12:11.26ID:hMiNzxMC
>>859
意味的にはdeleteでもいいのかもしれないけど、流石に紛らわしいでしょ。
0866デフォルトの名無しさん2014/08/17(日) 19:32:21.55ID:3OAkF9Uq
removeは何を引数に取るか考えようよ。コンテナじゃなくてイテレーターだぞ。
取り除いて新しい終端をかえすんだから何もおかしいところはない
0867デフォルトの名無しさん2014/08/17(日) 19:37:13.79ID:hMiNzxMC
>>866
それはここまでの議論の本質ではないよ。
実際listはメンバにremove持ってるし。
0868デフォルトの名無しさん2014/08/17(日) 19:38:23.50ID:3OAkF9Uq
>>867
0869デフォルトの名無しさん2014/08/17(日) 19:39:56.07ID:3OAkF9Uq
>>867
listのremoveはそのlistから削除するだろ。
何に対してか考えたらあんたらの議論がおかしいのは明白
0870デフォルトの名無しさん2014/08/17(日) 20:27:17.07ID:hMiNzxMC
>>869
議論がおかしいって、お前すごいな、、、
0871デフォルトの名無しさん2014/08/17(日) 20:34:20.44ID:hf5Ym+I1
>>870
おい
荒れる前に行っとくぞ
そいついつも行間が読めないくせに自分以外は間違ってる的な事しか言わないから、相手にしない方がいいぞ
はっきり言ってオレスゲーしたい人、もしくは本気で勘違いしてる人
だから無視無視な
0872デフォルトの名無しさん2014/08/17(日) 20:46:42.22ID:3OAkF9Uq
それは済まんかったな。どうぞ議論をお続けください。
0873デフォルトの名無しさん2014/08/17(日) 21:04:35.14ID:L6M4P95p
俺が見たシステムで一つのメニューに
deleteとremoveの両方があった
どちらも削除するんだが
完全削除か関連削除かの違い

分かるわけないだろ!
0874デフォルトの名無しさん2014/08/17(日) 22:19:39.92ID:ByxoqvFy
>>873
なるほど、それは分かりやすい例だね
0875デフォルトの名無しさん2014/08/17(日) 23:09:11.36ID:vHABMcsO
〜erを付けて考えてみれば分かるっポイ例だね
0876デフォルトの名無しさん2014/08/18(月) 01:12:52.38ID:KXo4EPQU
871
お
荒れ
そいつ
はっきり
だから無視
0877デフォルトの名無しさん2014/08/18(月) 01:14:50.20ID:I5Y7Pcau
>>871
ブーメラン乙
0878デフォルトの名無しさん2014/08/18(月) 01:54:05.88ID:AtjSee8v
>>866
イテレーターにremoveがあるのがおかしいんじゃね
コンテナーにremoveがあれば誰も間違わないだろうに
0879デフォルトの名無しさん2014/08/18(月) 02:08:58.07ID:25W6zNTo
ネーミングにケチつけたらキリないよ。
互換性も考えず気に入らないからちゃぶ台返しで
レボリューションとか無意味でしょ?
決め事なんだからと
こういうものとだと割り切ればいいんだよ。
丸暗記し常用する人にとっては無意味な指摘だし
そうでない人はリファレンス片手に確認するのは
当たり前の行為でしょ?
0880デフォルトの名無しさん2014/08/18(月) 03:47:10.49ID:MNSilLcC
>>878
コンテナの種類を選ばない(普通の配列も含む)アルゴリズムってところが味噌

2行かくのめんどくせえ(C++11以前はiteratorの型も)、vectorとかにもremove入れてくれって思うこともよくあるけど
0881デフォルトの名無しさん2014/08/18(月) 10:53:24.91ID:tfvUMLju
自作のコンテナでもイテレータを用意するだけでイテレータベースの任意のアルゴリズムを適用可能というのは気楽で便利なものだな
0882デフォルトの名無しさん2014/08/18(月) 18:55:36.09ID:NQYyoXw8
モノリスを建てるか否か、それが問題だ
実のところ、モノリスはみんな大好きという
0883デフォルトの名無しさん2014/08/18(月) 19:15:47.49ID:MNSilLcC
listなどのeraseとremove持つものは
指定した位置の要素を削除=erase
ある値をもつ要素を取り除く=remove
って考えたら納得いかないか?
0884デフォルトの名無しさん2014/08/18(月) 19:32:59.44ID:3r7iC6ga
IDEの関数やクラスの折り畳みって必要なくないですか?
0885デフォルトの名無しさん2014/08/18(月) 20:04:05.14ID:CmA20L1X
>>880
コンテナから取り除かれないremoveになんか存在意義あんの?
コンテナを選びません、でもコンテナから削除されません、
ムーブされるから戻り値以降の要素はunspecified、
配列の要素を先頭に集めるのには使えますってか
0886デフォルトの名無しさん2014/08/18(月) 20:37:02.40ID:MNSilLcC
>>885
お前ん中では存在意義ないんだろうな。
0887デフォルトの名無しさん2014/08/18(月) 20:45:21.74ID:awt0BVWX
名前だけの問題やん
それよりforward_list
順アクセスで後ろに追加できるリストが欲しいんだがforward_listは微妙
0888デフォルトの名無しさん2014/08/18(月) 20:46:27.23ID:h5oTZc+5
もうこれでいいよ
削除 .e45cbdd1c4984f338d44474b9754a510()
除去 .b82615c7daea4d2aac20ae5a25324b3c()
0889デフォルトの名無しさん2014/08/18(月) 21:15:33.39ID:OcdzlI+N
>>888
名前だけの問題だな
0890デフォルトの名無しさん2014/08/18(月) 23:05:16.80ID:sIBxNP11
>>885

>>881じゃないかな。
実際に消去するのはコンテナじゃないとできないけど、アルゴリズムとして
提供できる部分は提供するという。
0891デフォルトの名無しさん2014/08/18(月) 23:23:03.58ID:Yuyf5SDo
>>884
要るか要らないかは別として、それがC++と何の関係が?
0892デフォルトの名無しさん2014/08/18(月) 23:43:37.84ID:n2zyA1aT
言葉のうわべの意味だけでないニュアンスやつかいどころの違いやなにが主語・主題かなどを正しく理解・意識せずにいるから
多くの人からは理解されない繰り言を延々と述べ続けることになるんや
0893デフォルトの名無しさん2014/08/18(月) 23:52:29.19ID:5sD8cT31
>>885
君はアプリ向き開発者だね。
アルゴリズムとコンテナの直交性を美しいと思える奴はライブラリ開発向きだと思う。
もちろん、どちらが優れているとかは無く、向き不向きの話ね。
0894デフォルトの名無しさん2014/08/19(火) 01:28:10.36ID:rjGJ9GA+
わ・・・、わしゃ・・・、アルゴリズムとコンテナの直交性が美しいと思えるで・・・!
0895デフォルトの名無しさん2014/08/19(火) 01:39:10.41ID:SHDCVG6F
>>893
お前、頭悪いな。
直交性などどうでもよくて名前は適切に付けろよって話だよ。
removeという一つの目的を達成するための処理の一部のアルゴリズムが
コンテナから分離出来たとして、
それがどうして全体の目的の名前を冠してるのかって言ってんのよ。

listにはremoveがあるだろ。
これがvectorだとc.erase(remove(c.begin(), c.end(),V))とかおかしいだろ。
c.erase( prepare_to_erase(c.begin(),c.end(),V) )
とか
c.erase( destructive_filter(begin,end, pred) )
なら文句言わねーよ。
0896デフォルトの名無しさん2014/08/19(火) 02:00:21.39ID:TPeuIISX
お上の決めたことに異を唱えないでください
リファレンス片手にドカタ作業を
続けてください
疑問を抱いたり是非を議論する
ことは禁止です
0897デフォルトの名無しさん2014/08/19(火) 02:15:12.94ID:DnbUByEk
命名当時は気づかず問題にもしなかったものが
今更事後法よろしく人民裁判の情緒法とか
どこの国の話だよとか思うわ。

ネーミングが気に入らないのなら代替案でも出せばいい。
typedefのaliasひとつで解決じゃないのよ。

てかboostでいいじゃないのよ
0898デフォルトの名無しさん2014/08/19(火) 02:16:40.56ID:+82V+2V/
list::removeは取り除くの意味が強くて
std::removeは外す、移動の意味が強くて
向こうの人的にはどっちも違和感が少ないんじゃね?
コンテナのいちメンバと、「アルゴリズム」に重点が置かれた関数では
ニュアンスが変わるのは不自然じゃないだろ
0899デフォルトの名無しさん2014/08/19(火) 07:19:38.38ID:xKtD/m8e
抹消→destory 除去→discard にしようぜ!
0900デフォルトの名無しさん2014/08/19(火) 07:20:36.42ID:xKtD/m8e
×destory
○destroy

orz..
0901デフォルトの名無しさん2014/08/19(火) 07:28:02.02ID:zcKRpZUs
ヤヴァいのは仕様の是非の話を
今から仕様変更出来るかどうかの話に
すり替えて批判的意見を弾圧しようという
>>896>>897の発想
リリース後にバグ報告受けると
ファビョるタイプ
0902デフォルトの名無しさん2014/08/19(火) 07:35:38.38ID:p9aNiYg4
ファビョるという言葉を使いたくなる年頃
0903デフォルトの名無しさん2014/08/19(火) 11:17:22.54ID:4oI8t6Hf
解体→destroy 構造物をバラす
破棄→discard, drop トランプなどの手札から捨てる、落とす
打消→delete ×印や横線で無効化
除去→remove どこかへ移す
消去→erase 消しゴム
白紙化→clear 範囲内をバッサリ
0904デフォルトの名無しさん2014/08/19(火) 11:24:52.40ID:TQuop3PL
DBだとdropなんて表現もあるね
0905デフォルトの名無しさん2014/08/19(火) 11:48:15.32ID:tg7i16ue
じじいは purge とかかな w
0906デフォルトの名無しさん2014/08/19(火) 12:03:44.61ID:DBq2SJW9
vectorにremoveが無いからIteratorのremoveを使ってるってだけだろ
removeの意味がどうとか関係ない
0907デフォルトの名無しさん2014/08/19(火) 14:26:13.31ID:DvvGiAkt
因果が逆で、vectorではiteratorベースのremoveより速い削除アルゴリズムがないからremoveメンバ関数がない
listはデータ構造を生かせばO(1)の削除アルゴリズムを実装できるからremoveメンバ関数がある

基本はあくまでalgorithmで、特定のデータ構造でより高速なアルゴリズムが実装できる場合同名のメンバ関数がある、というふうに設計されてる
0908デフォルトの名無しさん2014/08/19(火) 16:02:00.44ID:HsmMdsYc
>>907
それは知ってるんだけどそれがそんなに大事な事なのかとはちょっと思う。

コンテナを引数に取るremoveをstd::に追加したらいいんだろうか?
今以上に混乱する人が出てくる?
removeの対象をちゃんと意識してくれるようになる?

ただ今のところalgorithmにコンテナを引数に取るものが一つもないからremoveだけ特別扱いするわけにもいかんよな
0909デフォルトの名無しさん2014/08/19(火) 18:53:19.91ID:zRcLEfwx
まだ続ける?
0910デフォルトの名無しさん2014/08/19(火) 20:52:34.32ID:iFFmJSW6
流れ切るけど、

T getT();
decltype(getT());

ってのは T がコピー不可だとダメなんだろうか?(規格上)
0911デフォルトの名無しさん2014/08/19(火) 20:54:22.20ID:iFFmJSW6
↑

std::declval<T> の存在は今日知って、それに書き換えようとしてるんだけど、ちょっとやりにくい個所がある。
もし>>909がセーフならそのままにしておくのも手かなって思ってます。
0912デフォルトの名無しさん2014/08/19(火) 20:55:19.56ID:iFFmJSW6
× >>909がセーフなら
○ >>910がセーフなら
0913デフォルトの名無しさん2014/08/20(水) 00:45:40.24ID:CJ+/lxVQ
>>910
T getT();を実装した時点でエラーになるよね?
それともdecltypeに渡しても呼び出さないから実装しなくてもリンクエラーにもならないけどOKかって話?
09149102014/08/20(水) 00:55:29.40ID:Xc00efjU
>>913
実装なしで宣言だけ書くパターンです。
動いてるんで問題ないと思ってたけど、規格上の保証はどうなのかな?と。
0915デフォルトの名無しさん2014/08/20(水) 01:08:21.23ID:CJ+/lxVQ
多分大丈夫。
decltypeは呼び出さないことが保証されてるし、宣言だけして実装しない、呼び出したらリンクエラーってのもnoncopyableで広く知られて使われてるし。
規格のどの辺かってのはわからんので規格の鬼に任せた。
0916デフォルトの名無しさん2014/08/20(水) 04:46:01.37ID:/Cro3iuI
>>907
>iteratorベースのremoveより速い削除アルゴリズムがないから

イテレータのremoveは削除できてないのに何を言ってるんだ君は
0917デフォルトの名無しさん2014/08/20(水) 04:49:32.11ID:CRkNrzOH
速度重視でネーミングセンスがないのはごめんなさいって話でしょ
今更言葉遊びしても意味がない
0918sage2014/08/20(水) 06:53:37.94ID:lf2AdZUe
>>916
https://ideone.com/LwWSMh
削除できますけど?
0919デフォルトの名無しさん2014/08/20(水) 07:43:33.68ID:lf2AdZUe
ネーミングセンスの問題とかいってる奴はアホなの?
イテレーターの範囲受け取ってイテレーターの持ち主のコンテナから削除を出来るremoveを作れるもんなら作ってみろよ。
それが無理と解ってたらネーミングセンスの問題って話にならんだろ。
0920デフォルトの名無しさん2014/08/20(水) 08:13:36.78ID:ywmZeMUB
まだやってるのか…
0921デフォルトの名無しさん2014/08/20(水) 08:50:41.05ID:a6nB2I5x
std::removeは削除するアルゴではありません
削除された並びをbeginの位置に作成するアルゴです
終端位置の調整は自前でやってください
make_removed_sequenceの略とお考えくださ
0922デフォルトの名無しさん2014/08/20(水) 09:27:06.92ID:1h9BQl6b
A「どうしてアルゴリズム名がunkoなんた!」
B「(1)ネーミングセンスの問題とかいってる奴はアホなの?
(2)イテレーターの範囲受け取ってイテレーターの持ち主のコンテナから削除を出来るunkoを作れるもんなら作ってみろよ。
(3)それが無理と解ってたらネーミングセンスの問題って話にならんだろ。」
iteratorからコンテナの要素数が変更できなければ名前の問題ではないという
(2)と(3)の因果関係が不明です
0923デフォルトの名無しさん2014/08/20(水) 12:12:36.86ID:sD4N7Cu6
エントリから葬り去るかゴミ箱に捨てるかの違いだろ
どっちもremoveが相応しい名前だよ
0924デフォルトの名無しさん2014/08/20(水) 13:56:15.20ID:cYiGvIKn
もう飽きたよ
次の話題いこ
0925デフォルトの名無しさん2014/08/20(水) 19:11:50.38ID:BQQ7sfTc
LaTeXのコマンドは/から始まるじゃないですか。
特別な文字の$,#などの記号は/を先頭につけると文字として認識しますじゃないですか。
/#は#というコマンドが#という記号を返すコマンドだからそうなるじゃないですか。
この発想はなかった。
0926デフォルトの名無しさん2014/08/20(水) 21:18:10.82ID:XDmeoQrb
特にアライメントせずに確保した配列(std::vector標準のアロケータ)に対し、
AVXの_mm256_load_psや_mm256_store_psでアクセスしても何事もなく処理が実行されます。

以前、SSEのときは、アライメントされていない配列に対し、_mm_load_psや_mm_store_psを行うと、
プログラムがクラッシュしていました。

アライメントされた配列に対し、loadu_psやstoreu_psを使っても、
load_psやstore_psと比べてパフォーマンス低下が起こらなくなったというのは聞いていますが、
アライメントされていない配列に対し、load_psやsotre_psを使っても動くようになったというのは聞いたことがありません。

AVXになってから、このような挙動に変更されたのでしょうか??
0927デフォルトの名無しさん2014/08/20(水) 21:19:45.68ID:n3zfLcUJ
すれ違いだ去れ
09289262014/08/20(水) 21:20:47.82ID:XDmeoQrb
>>927
失礼しました!
去ります。
0929デフォルトの名無しさん2014/08/20(水) 21:29:40.73ID:sD4N7Cu6
特にアライメントせずとも32byte揃えなんて余裕でされてること多いよね
もちろんそれに頼っちゃいかんけど。
0930デフォルトの名無しさん2014/08/20(水) 21:35:58.20ID:i1z9yiRc
荒らすなボケ
0931デフォルトの名無しさん2014/08/20(水) 21:46:23.09ID:jqykiaF0
あなたはHogeを使っていますか?
0932デフォルトの名無しさん2014/08/20(水) 23:18:53.81ID:Of49Uqmr
Yes. I am Hoge.
0933デフォルトの名無しさん2014/08/21(木) 04:14:40.12ID:JsL1zQzE
やっほー
0934デフォルトの名無しさん2014/08/21(木) 06:16:39.11ID:ImdJ7Vgv
ガリバー旅行記の「ヤフー」の語源について
聖書ヘブライ語で「ユダヤ人」を hayyahu:di:m と記述します。ha- は定冠詞、-di:m は複数形を示します。
この単語は定冠詞不規則変化の例として頻繁に言及されます。 ジョナサン・スウィフトがいかにもやりそうなこと‥
0935デフォルトの名無しさん2014/08/21(木) 21:59:36.46ID:s//ch5e2
>>873
delete この世から消す
remove 集団から外す(単一)
erase 削り取る(複数)

本来の意味合いが判ってれば自然な表現なんだけどね。
0936デフォルトの名無しさん2014/08/21(木) 22:09:33.31ID:s//ch5e2
>>899
destroy → 壊す → 残骸が残る
discard → 取り消す・元に戻す → 一度発生した状態にしか戻れない

意味合いが違いすぎるのでヤダ
0937デフォルトの名無しさん2014/08/21(木) 22:21:50.74ID:s//ch5e2
>>926
偶然だからなんら保証された話じゃない。
てかSIMD使いたいなら、std::valarray使え。
近年の処理系なら大概SIMD命令に置き換えてくれる。
反復時も式内の演算子ごとに発生せず、
式単位で反復してくれるから手間を掛けずに高速な演算が書ける。
0938デフォルトの名無しさん2014/08/21(木) 22:32:45.02ID:aNMEdI4h
>>926
配列がアライメントされてないってどうやって確認したんだ?
問題無いと言うことはアライメントされてんだろ
0939デフォルトの名無しさん2014/08/21(木) 22:44:20.85ID:s//ch5e2
>>938
アドレス見れば解るがな
0940デフォルトの名無しさん2014/08/22(金) 00:04:54.96ID:AbsdoYQw
一時変数のスコープに関する質問なのですが、
以下のようなコードでprintfに正しいポインタが渡されるのは
言語仕様的に保証されていますでしょうか?
http://codepad.org/jIHpQKuz
0941デフォルトの名無しさん2014/08/22(金) 00:09:10.69ID:+dOKMbSQ
保証されていなかったら俺は頭を刈る
0942デフォルトの名無しさん2014/08/22(金) 01:20:51.38ID:zva1Lxc2
デストラクタがいつ呼ばれるか確認すればよいだけのことを
こんなクソスレで質問とはなめてるのかキサマ
0943デフォルトの名無しさん2014/08/22(金) 01:47:40.26ID:HCGWXYac
言語仕様的につってんのに実装で確認とかなめてるのかキサマ
0944デフォルトの名無しさん2014/08/22(金) 03:02:22.81ID:M3NxvgHB
>>940
それやってコンパイラに怒られたことがあったような…
0945デフォルトの名無しさん2014/08/22(金) 04:33:01.62ID:cJuKMHCG
http://jobinjapan.jp/job-listing/keyword-cpp-pg.html
0946デフォルトの名無しさん2014/08/22(金) 07:33:52.10ID:mvEiVivf
>>940
テンポラリオブジェクトの寿命は式の終わり、すなわちセミコロンまで。
0947デフォルトの名無しさん2014/08/22(金) 09:10:17.82ID:LEOz23XR
>>941
ハゲの分際でw
0948デフォルトの名無しさん2014/08/22(金) 21:47:38.52ID:x+gT+YRB
>>946
嘘つくなよ。一時Objectの寿命はBlockだろうが。
0949デフォルトの名無しさん2014/08/22(金) 22:01:47.61ID:gPV13GVT
>>948
0950デフォルトの名無しさん2014/08/22(金) 22:31:46.89ID:x+gT+YRB
const std::string &message = std::string( "hello" );
std::cerr << message << std::endl;
0951デフォルトの名無しさん2014/08/22(金) 22:38:09.09ID:OcYTE7Kh
>>950
左辺値const参照は一時オブジェクトの寿命を延ばす効果があり、
C++03時代のお年寄りにも大人気です
0952デフォルトの名無しさん2014/08/22(金) 23:45:57.26ID:dDS1zWIn
>>948
0953デフォルトの名無しさん2014/08/22(金) 23:52:17.59ID:SDBQFK+H
自信満々に人を嘘つき呼ばわりして間違えたこと言ってるからってそんなに弄ってやるなよ。
0954デフォルトの名無しさん2014/08/23(土) 00:01:07.29ID:SH82neqj
嘘つきどもは消えうせろ
0955デフォルトの名無しさん2014/08/23(土) 00:10:29.67ID:QZwie3oX
どもって?
0956片山博文MZ次期CEO ◆T6xkBnTXz7B0 2014/08/23(土) 00:28:52.29ID:rS5gMmQG
size_tの前にstd::は必要ですか?
0957デフォルトの名無しさん2014/08/23(土) 00:36:11.62ID:Xuwelhvr
>>956
必要ないけど、流行ってるらしいからつけてる。
0958デフォルトの名無しさん2014/08/23(土) 00:39:29.30ID:I78/Db1K
>>957
std名前空間のsize_tを
std::無しに使えるという根拠は?
0959デフォルトの名無しさん2014/08/23(土) 00:43:57.77ID:I78/Db1K
>>951
一時オブジェクトの寿命を伸ばすのは参照の初期化であって
左辺値かどうかは関係ないぞ

string && s = f_returns_string();
0960デフォルトの名無しさん2014/08/23(土) 00:55:20.05ID:PgMx3/I0
>>948
0961デフォルトの名無しさん2014/08/23(土) 01:00:38.51ID:Xuwelhvr
>>958
17.6.4.3.4 ?
0962デフォルトの名無しさん2014/08/23(土) 01:04:12.97ID:fsgh+7wu
>>948
0963片山博文MZ次期CEO ◆T6xkBnTXz7B0 2014/08/23(土) 01:06:47.22ID:rS5gMmQG
>>961
蟻がとう
0964デフォルトの名無しさん2014/08/23(土) 01:32:26.18ID:DFqma1HT
12.2.3
full-expressionの終わりで破棄。ただし2種類の文脈では寿命が伸びる、てとこか
0965デフォルトの名無しさん2014/08/23(土) 01:54:15.20ID:Xuwelhvr
ところで型のbindってないんだっけ?
複数のテンプレート引数の一部を束縛するの。

たとえば、std::is_base_of<T, U> のT側を特定のクラスに固定して、1変数のメタ関数にしたい.。
0966デフォルトの名無しさん2014/08/23(土) 01:57:35.49ID:I78/Db1K
むしろなぜできないと思ったの
0967デフォルトの名無しさん2014/08/23(土) 02:09:23.02ID:I78/Db1K
>>965
こんな感じで出来なかったっけ?
template<typename U>
unko = std::is_base_of<fixed_type, U>;
0968デフォルトの名無しさん2014/08/23(土) 02:11:30.22ID:Xuwelhvr
>>966

bind_left<std::is_base_of, std::string>::type

とすれば1変数のメタ関数ができるような bind_left なんてものがあるか、って質問だけど。
0969デフォルトの名無しさん2014/08/23(土) 02:20:48.63ID:IA1PXU7l
>>959
0970デフォルトの名無しさん2014/08/23(土) 02:40:38.14ID:I78/Db1K
>>968
メタ関数というのがよくわからないんだが
これではだめなのか?
http://ideone.com/GEigUt
0971デフォルトの名無しさん2014/08/23(土) 06:36:31.89ID:akTuwZSl
次スレ
http://peace.2ch.net/test/read.cgi/tech/1408743258/l50
0972デフォルトの名無しさん2014/08/23(土) 11:36:28.45ID:ZWPa2xFI
C++11でbasic_stringの同型右辺値代入,assginが追加されてmoveになってたんだな
main、temp二つオブジェクト用意してmain->tmp変換、main.swap(temp);でループさせたらほとんどメモリ拡張しないはずなのに都度メモリ確保しててびっくりした
0973デフォルトの名無しさん2014/08/23(土) 11:41:37.18ID:Xuwelhvr
>>970
そういうことです。

こういうことがやりたい。
http://ideone.com/R99E2q

そこにある 「binder」 のもう少し汎用的なものが標準もしくはboostにないでしょうか?
0974デフォルトの名無しさん2014/08/23(土) 13:32:08.74ID:cWaKBK7i
>>953
どの辺が間違ってんの?
const参照と寿命同じって事実じゃん。
0975デフォルトの名無しさん2014/08/23(土) 13:46:29.99ID:P/wcKMRu
>>974
何言ってるのかわからんのだが。
嘘つき呼ばわりしたやつは一時オブジェクトの寿命がブロックだって言ってたんだぞ?

まさか本人?ここまで弄られてまだそう思ってるの?
0976デフォルトの名無しさん2014/08/23(土) 15:35:14.44ID:MWdvL8zP
あいだにキチガイ>>949が入ったから
勘違いしたんだろ
0977デフォルトの名無しさん2014/08/23(土) 15:48:43.92ID:Xuwelhvr
なんで>>949がキチガイなんだ?
指摘された>>948がさっさと間違いを認めれば良かっただけなのだ。
0978デフォルトの名無しさん2014/08/23(土) 16:36:37.17ID:yoAkunMO
>>977
>>949は文章すらかけない、重度コミュ障だからだろ
重度コミュ障はほぼ100%リアル基地外だからな
0979デフォルトの名無しさん2014/08/23(土) 16:47:38.52ID:Xuwelhvr
早く間違いを認めろよw
0980デフォルトの名無しさん2014/08/23(土) 18:31:14.63ID:eQ44R1S2
うめ
0981デフォルトの名無しさん2014/08/23(土) 18:35:51.96ID:P/wcKMRu
ちゃんと人を嘘つき呼ばわりしてごめんなさいしないとな。
0982デフォルトの名無しさん2014/08/23(土) 19:21:30.77ID:akTuwZSl
>>948
0983デフォルトの名無しさん2014/08/23(土) 20:42:37.95ID:6SV55f31
>>979
0984デフォルトの名無しさん2014/08/23(土) 20:46:24.05ID:q/+BPTqG
俺わかった
このスレキチガイしかいない
0985デフォルトの名無しさん2014/08/23(土) 20:50:22.11ID:q/+BPTqG
うめりん
0986デフォルトの名無しさん2014/08/23(土) 22:15:48.70ID:pke7qR66
うめ
0987デフォルトの名無しさん2014/08/23(土) 22:45:11.28ID:8gauEl5G
嘘っていうか「一時オブジェクト」の意味を
自動変数と勘違いしたんだろう
もうライフはゼロなんだからそっとしておいてやれよ
0988デフォルトの名無しさん2014/08/23(土) 22:51:19.97ID:akTuwZSl
>>948
0989デフォルトの名無しさん2014/08/23(土) 23:11:36.18ID:q/+BPTqG
うめ
0990デフォルトの名無しさん2014/08/23(土) 23:14:14.25ID:wNqU04YW
うめうめうっせーうめ!
0991デフォルトの名無しさん2014/08/23(土) 23:52:51.73ID:ynVdLgsY
うめうめ
0992デフォルトの名無しさん2014/08/24(日) 00:09:34.81ID:jlCuRdJh
うめ
0993デフォルトの名無しさん2014/08/24(日) 00:52:33.97ID:XBQdtjov
>>987
あー、そっちかぁ〜
0994デフォルトの名無しさん2014/08/24(日) 01:45:40.82ID:jlCuRdJh
梅
0995デフォルトの名無しさん2014/08/24(日) 01:48:52.67ID:jlCuRdJh
うめくん
0996デフォルトの名無しさん2014/08/24(日) 02:00:29.52ID:jlCuRdJh
ほー
0997デフォルトの名無しさん2014/08/24(日) 02:02:46.56ID:jlCuRdJh
千取り合戦開始
0998デフォルトの名無しさん2014/08/24(日) 02:45:58.80ID:vsEkk/Px
一人合戦?
0999デフォルトの名無しさん2014/08/24(日) 03:23:25.03ID:jlCuRdJh
いくでー
1000デフォルトの名無しさん2014/08/24(日) 03:24:07.53ID:jlCuRdJh
オワコン
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。