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

C++相談室 part114

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

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

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

次期規格C++1yはこちら
C++14/C++1y
http://peace.2ch.net/test/read.cgi/tech/1382889622/

■長いソースを貼るときはここへ。■
 http://codepad.org/
 http://ideone.com/
0002デフォルトの名無しさん2014/08/23(土) 06:34:50.15ID:akTuwZSl
テンプレここまで
0003デフォルトの名無しさん2014/08/23(土) 10:44:35.91ID:DIp5Rbsw
>>1乙
0004デフォルトの名無しさん2014/08/23(土) 12:36:45.76ID:FfLkKFUC
STLつかうと一気に実行ファイルサイズが10倍に?!

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

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

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

#include <stdafx.h>
後死ね。

言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。
0005デフォルトの名無しさん2014/08/23(土) 20:50:09.64ID:IjpJYp7Y
http://jobinjapan.jp/job-listing/keyword-cpp-pg.html
0006デフォルトの名無しさん2014/08/24(日) 13:25:28.05ID:EYMdVqe7
西アフリカで、アウトブレイクした潜伏期間延長型エボラの死者・罹患者の数を散布図にし近似曲線を出してみたら
片対数グラフで直線だから既に指数関数的増加だった

2014年に、西アフリカでアウトブレイクした潜伏期間延長型エボラの死者は、2014年8月半ばで1000人。←今ココ
2014年12月上旬で1万人。
この時点で世界規模で空路シャットダウン開始、世界経済大混乱

2015年5月で10万人。
2015年9月で100万人。
この時点で、第二次世界大恐慌発生

2015年大晦日で1000万人。

ちなみに
http://ja.wikipedia.org/wiki/2014%E5%B9%B4%E3%81%AE%E8%A5%BF%E3%82%A2%E3%83%95%E3%83%AA%E3%82%AB%E3%82%A8%E3%83%9C%E3%83%A9%E5%A4%A7%E6%B5%81%E8%A1%8C
:カナダ保健省のサイトでは体内に数個のエボラウィルスエアロゾルが侵入しただけでも発症するとしている
:ハマダラカが、吸血したての人の新鮮血を媒介しているという学説が浮上している

エボラ出血熱は蚊やアブに刺されただけで感染する。

:「この地域には内戦、政府による搾取、テロが長い間続いており、それによって生まれた恐怖、貧困、猜疑心などがある。エボラは耐え難い騒音に付け加えられた一つのざわめきに過ぎない」
現地では

や る 気 は 皆 無
0007デフォルトの名無しさん2014/08/24(日) 14:02:18.17ID:gaQQwBox
コピペマン参上!まで読んだ。
0008デフォルトの名無しさん2014/08/24(日) 15:03:11.49ID:jlCuRdJh
C++はゴミ
0009デフォルトの名無しさん2014/08/24(日) 20:17:07.83ID:PrtgRoPN
幽霊みたいな関数があるんだが、他人が見ると意味不明になるじゃん
0010デフォルトの名無しさん2014/08/24(日) 20:24:38.96ID:jlCuRdJh
だってさ
0011デフォルトの名無しさん2014/08/26(火) 12:48:47.12ID:SgRytTOZ
class A{
private:
 struct B{
  ...
 };
 std::vector<B>::iterator FindTarget(std::vector<B>& list);
};

こういう、戻り値にprivateなクラスを含むときにFindTarget()の定義をどう書けばいい?
Bをpublicにしない限り無理?
0012デフォルトの名無しさん2014/08/26(火) 14:02:54.73ID:vTZxB5CV
A::Bでいいだろ
0013デフォルトの名無しさん2014/08/26(火) 15:29:18.77ID:SgRytTOZ
>>12
普通にそれでいけた・・・thx
0014デフォルトの名無しさん2014/08/28(木) 11:45:54.16ID:Bh3cAGzC
引数で一時的にオブジェクト作って渡す方法ある?
0015デフォルトの名無しさん2014/08/28(木) 11:56:31.26ID:oZIyRrF6
struct timpo {};
void f(timpo){
}
int main() {
 f(timpo{});
}
0016デフォルトの名無しさん2014/08/28(木) 13:06:33.92ID:Bh3cAGzC
>>15
ありがとうございました
0017デフォルトの名無しさん2014/08/28(木) 22:10:32.98ID:PwHue3Wr
void f(timpo&&) {}のほうがよくね
0018デフォルトの名無しさん2014/08/28(木) 22:15:42.22ID:lY73S80C
それはおかしいな
受け取るのを変更しないなら
 void f(const timpo &);
変更するなら
 void f(timpo &);
 void f(timpo &&);
とするべきだろう
0019デフォルトの名無しさん2014/08/28(木) 22:19:45.36ID:VOdIeR3q
一時オブジェクトをtimpo & で受け取るのはできないけどな。
0020デフォルトの名無しさん2014/08/28(木) 23:55:44.50ID:PwHue3Wr
>>18
&&を指定すれば右辺値引数限定の関数だからいいのです、const値は渡せない
あと>>19
0021デフォルトの名無しさん2014/08/29(金) 00:06:57.19ID:PwHue3Wr
コピーコンストラクタが動く
void func(timpo);
一時オブジェクトだけ対象とするなら
void func(timpo&&);
普通の値も一時オブジェクトも両方渡せる関数なら
void func(const timpo&);
0022デフォルトの名無しさん2014/08/29(金) 02:54:16.49ID:tEMF8U6D
>>21
>普通の値も一時オブジェクトも両方

勝手にconstの制限付けるなよ。
>>18を劣化させて何がしたいの?池沼?
0023デフォルトの名無しさん2014/08/29(金) 05:18:48.03ID:VXFTpnaP
>>18 にもconst付いてるように見えるんだが…
0024デフォルトの名無しさん2014/08/29(金) 08:06:42.55ID:w9uKf29m
const付けていい場合はconst参照で付けたくない場合は
&と&&のオーバーロードを用意しろってことでしょ
0025デフォルトの名無しさん2014/08/29(金) 10:55:34.05ID:VXFTpnaP
constなしの参照にするときはコピーやmoveで渡すときと引数の意味が違うだろ。
0026デフォルトの名無しさん2014/08/29(金) 11:06:35.19ID:VXFTpnaP
そんな意味の違う物をオーバーロードで用意するとか自分の足を撃つようなものだろ。
勝手に制限付けるなとか言ってるキチガイはいつもそんなコード書いてんの?
0027デフォルトの名無しさん2014/08/29(金) 12:52:23.15ID:bxnhpnUI
>>26
標準ライブラリをdisってんの?
0028デフォルトの名無しさん2014/08/29(金) 13:00:19.66ID:E3XtwHX8
>>15
ダメでした
5行目の呼び出しの引数がエラーになります
0029デフォルトの名無しさん2014/08/29(金) 13:04:02.61ID:6RqTPaml
>>27
え?どれ?
0030デフォルトの名無しさん2014/08/29(金) 19:44:34.98ID:kA47mpnV
右辺値参照のコードって微妙にもどかしくない?
template <typename T>
void func(T&& t);
ってやって T自身が右辺値の場合も左辺値参照の場合も包括的に扱えるのはいいんだけど、
それをたとえば int に限定したいとかが楽にできない。
0031デフォルトの名無しさん2014/08/29(金) 19:47:04.47ID:RBlY9ysO
intなら
void func(int t)
でいいだろ
そもそもたいていは
void func(T t)
で済むんじゃないか
0032デフォルトの名無しさん2014/08/29(金) 20:13:09.57ID:wF0sLSuE
>>30
左辺値参照にするときは右辺値参照で渡すときと引数の意味が違うだろ。
そんな意味の違う物を一つのテンプレートにするとか自分の足を撃つようなものだろ。
キチガイはいつもそんなコード書いてんの?
0033デフォルトの名無しさん2014/08/29(金) 21:25:54.23ID:kA47mpnV
>>32
template <typename T>
void func(T&& t)
{
なんたらかんたら
std::forward<T>(t);
}

ってよくやるだろうが。
何のための完全転送だよ?
0034デフォルトの名無しさん2014/08/29(金) 21:30:46.46ID:0nMqjYvV
>>33
お前がよくやるかどうかはどうでもいいので
move前提の右辺値参照渡しと非const左辺値参照渡しを
同一のテンプレートで扱わなければならない例を挙げてみろカス。
0035デフォルトの名無しさん2014/08/29(金) 21:37:05.38ID:kA47mpnV
>>34
std::forward_as_tuple
0036デフォルトの名無しさん2014/08/29(金) 21:39:02.27ID:kA47mpnV
>>34
ん?「非」const左辺値参照渡し?

どっから「非」が出てきた?
0037デフォルトの名無しさん2014/08/29(金) 21:47:16.74ID:kA47mpnV
>>34
std::make_tuple
std::tuple_cat
std::make_unique
std::make_shared
0038デフォルトの名無しさん2014/08/29(金) 21:50:54.97ID:TqQhQJVV
>>36
多分
>>25 と >>26 の真似したかったんだと思う。
すまんなその前の言葉が汚いやつに釣られてキチガイなんて言葉を使ったばかりにそれを呼び出してしまったようだ。
0039デフォルトの名無しさん2014/08/29(金) 21:56:36.69ID:kA47mpnV
>>34
vector::emplace_back
とかいろいろあるな。自分でも調べてみたら?

そもそも T&& 以外に何を使うってんだ...
0040デフォルトの名無しさん2014/08/29(金) 22:18:36.34ID:XZcOusjf
>>32
標準ライブラリをdisってんの?
0041デフォルトの名無しさん2014/08/29(金) 22:40:09.64ID:A/Ep2b4s
&&を使ってる例を幾ら出したところで必要になる理由の説明にはなってないような

必要になるのは受け取り側と渡す側の両方がライブラリを使用する側で定義される場合だと思う
例えばvector<T>のemplace_backはvectorを利用するコードが
Tのコンストラクタとその引数を知っていて
vector自体は左辺値でも右辺値でも完全転送する必要がある
0042デフォルトの名無しさん2014/08/29(金) 22:59:29.49ID:kA47mpnV
>>41
>vector自体は左辺値でも右辺値でも完全転送する必要がある

それで十分じゃないか。
引数がふたつ以上あって、それぞれ右辺値だったり左辺値だったりする時のことを考えてみれば?
0043デフォルトの名無しさん2014/08/29(金) 23:30:35.43ID:kA47mpnV
>>41>>32>>34

テンプレートで何か受け取る : 右辺値か左辺値かconstか非constか しかも複数別々
  何かする
    下に転送
       ↓
受け取る:右辺値か左辺値かconstか非constか不明
  何かする
     下に転送
        ↓
        ・・・
 ↓     ↓     ↓
 T&    constT&  T&&  それぞれオーバーロードして処理

左辺値か右辺値か意味の違いで区別はするが、それは最後の段階でやること多いよ。
その前の段階では一律 T&& になる。
必要になる理由のひとつがこれ。
0044デフォルトの名無しさん2014/08/30(土) 00:36:13.45ID:UmMrAs+7
右辺値参照専用のメソッドは用意しとくといいことあるよ
stringはじめとしてコンテナ類の代入はmoveになってるみたいだからうまく使えばどんどん早くなる
0045デフォルトの名無しさん2014/08/30(土) 00:47:21.31ID:yF8fXWqp
>>43
constなしの参照は呼び出し側が結果受け取るためにある。
const有りの参照、右辺値参照、コピー渡しは受け取った側が使うためで、呼び出し側に影響を与えてはダメ。
だからそこは一番最初に区別してオーバーロードしちゃだめな所。

標準ライブラリでもconst無しの参照と右辺値をオーバーロードしてるようなものは無いと思う。(隅々まで見てるわけじゃないからあったらごめんな!)

そこが解ってれば俺は何も文句ないな。
0046デフォルトの名無しさん2014/08/30(土) 01:28:16.61ID:UmMrAs+7
C++ basic_stringは右辺値moveになってたよ
string (1) basic_string& assign (const basic_string& str);
move (8) basic_string& assign (basic_string&& str) noexcept;
0047デフォルトの名無しさん2014/08/30(土) 01:29:52.09ID:UmMrAs+7
C++11ね
右辺値オーバーロードしてないやつは意識してswap呼び出せばokだけど
0048デフォルトの名無しさん2014/08/30(土) 01:39:26.70ID:j0sdYczD
>>46
なんの話?
0049デフォルトの名無しさん2014/08/30(土) 07:45:16.70ID:ftaKNhdW
最近 && が演算子でもあることを忘れつつある
0050デフォルトの名無しさん2014/08/31(日) 05:40:51.07ID:fJLy6+qM
&&の呼び方ってアンパサンドアンパサンド?
0051デフォルトの名無しさん2014/08/31(日) 08:19:21.04ID:T22Ulum9
>>48
コミュ障に構わないで
0052デフォルトの名無しさん2014/08/31(日) 12:42:18.56ID:gPjYOqNI
>>50
アンパアンパ
0053デフォルトの名無しさん2014/08/31(日) 12:45:16.43ID:nYTEAaY7
>>50
アンアン
0054デフォルトの名無しさん2014/08/31(日) 12:51:05.20ID:OWTpspDD
>>50
ダブルアンパサンド(論理AND演算子)
0055デフォルトの名無しさん2014/08/31(日) 14:16:45.53ID:lPRYYbfg
ネタ抜きにしてキーボード打つときの脳内音は >>53 だな
0056デフォルトの名無しさん2014/08/31(日) 16:03:38.69ID:X/rA3LMs
入力する際に音に変換してないな
人との会話で読み上げるときは
アンドアンドかな
0057デフォルトの名無しさん2014/09/01(月) 01:28:59.39ID:Lsx4I8Xh
>>50
文法的な読み方はK&Rに書いてた気がする
自分はダブルアンドって読んでる
0058デフォルトの名無しさん2014/09/01(月) 01:32:21.76ID:JDj2K3Fk
アンアンいいな
>>56 自分はこれ
0059デフォルトの名無しさん2014/09/01(月) 02:03:08.73ID:TmYD4LXk
普通に右辺値参照演算子て呼んでる。
演算子は省略する事も多いかな。
0060デフォルトの名無しさん2014/09/01(月) 02:05:00.92ID:TmYD4LXk
語呂的にはアンアンもイイけどダブアンもイイな。
さすがに脳内以外で使う勇気は無いけど。
0061デフォルトの名無しさん2014/09/01(月) 04:11:14.22ID:jjf167cN
アンスコとかぶるか

__internalMember
0062デフォルトの名無しさん2014/09/01(月) 07:35:21.97ID:RKM8pJnC
>>61
アンアンスコスコ
0063デフォルトの名無しさん2014/09/02(火) 01:13:12.41ID:55rrG2QH
template< typename T >
inline void Hoge( T* data, size_t size, const size_t* sorted_index ) {
  T* tmp = new T[size];
  for( size_t i = 0 ; i < size ; ++i ) {
    tmp[sorted_index[i]] = std::move( data[i] );
  }
  for( size_t i = 0 ; i < size ; ++i ) {
    data[i] = std::move( tmp[i] );
  }
  delete[] tmp;
}

このHoge関数なんだが再帰とメモリ確保使わずに作れないかね?
0064デフォルトの名無しさん2014/09/02(火) 01:22:35.28ID:/I0Am/11
>>63
i = 0
i = sorted_index[i]
i = sorted_index[i]
i = sorted_index[i]
…
の順で data[i] を data[sorted_index[i]] に移していけばいいんじゃん。tmp は T 1個で済む。
i == sorted_index[i] で止まっちゃうけど、そのときはまだ処理してない sorted_index[i] を探す。
sorted_index[i] は処理するごとに -1 とかで処理したフラグ立てとく。
0065デフォルトの名無しさん2014/09/02(火) 01:30:48.69ID:55rrG2QH
>>64
意見ありがとう!
一応その方法でもできるけどsorted_indexはconstだから調査済みフラグを立てれないという罠が...
0066デフォルトの名無しさん2014/09/02(火) 01:37:33.37ID:/I0Am/11
>>65
こっそり const_cast しといて、最上位ビットをフラグとして使うとか。
最上位ビット立ってる index 用 size_t とか現実的になさそうだし。
sort 終わったら最後にこっそり0に戻しておく。 (だいぶ無理矢理)
0067デフォルトの名無しさん2014/09/02(火) 01:47:37.81ID:55rrG2QH
>>66
こらーー!!
でもまぁそれもそうなんで妥協案としてはありですな(最上位bitで管理)
0068デフォルトの名無しさん2014/09/02(火) 14:57:29.12ID:GSaV/2XZ
c++のtemplateがよく分からないので質問。

templateなクラスを以下のように実装してます。
 - ヘッダにtemplateなクラスを定義、メソッドはプロトタイプのみ。
 - メソッドをcppファイルに定義

このクラスを別のファイルから利用するとメソッドが未定義になり困ってます
(g++ *.cpp でリンクエラー)。どうやら各ファイルのオブジェクト生成時に
templateなクラスが上手く展開されないようです。

以下再現のコードです。

http://www1.axfc.net/u/3311017
DL pass: cpptemplate

make allで未定の問題が再現します。
make whyで無理やりtemplateなクラスを展開してます
(template クラスのメソッドを定義したcppファイルに、クラスを使用するコードを追加)。

以下、質問です。

STL等のtemplateなクラスを提供するライブラリではどうしてるのでしょうか?
(ユーザが使用するtemplateなクラスはヘッダファイルのみで完結?)
それともtemplateなクラスを展開させる良い方法があるのでしょうか?
0069デフォルトの名無しさん2014/09/02(火) 15:01:01.51ID:TZPZ5z46
ヘッダに全部書くべし
STLもBoostもそうしてる
これはもうどうしようもない
0070デフォルトの名無しさん2014/09/02(火) 15:01:46.87ID:p3UmGF9E
テンプレートはそこに何らかの型を当てはめて具体化するタイミングで
テンプレートの定義が見えてないと未定義になるので
定義もヘッダに書くのが基本

テンプレートの定義をコロコロ変えるのでコンパイル時間を減らしたい場合などは
定義をcppファイル(あるいは通常のcppファイルと区別するためにinlファイルなど)に書いて
具体化する場所で定義をincludeする
0071デフォルトの名無しさん2014/09/02(火) 15:04:10.45ID:TYnEDLky
わざわざパスいれて開きたくない
クリックしたら見られるところのほうが解答がきやすいはず
0072682014/09/02(火) 15:11:33.52ID:GSaV/2XZ
すばやい回答ありがとうございます。
>>69
了解です。
>>70
inlファイルの方法も勉強してみます。
0073デフォルトの名無しさん2014/09/02(火) 21:22:43.81ID:T4NLWN7N
>>63
メモリ確保くらいいいじゃん。

それより new size_t[size]; にしてswapで要素入れ替えしなよ。
0074デフォルトの名無しさん2014/09/02(火) 22:53:33.90ID:55rrG2QH
>>73
意見ありがとうございます!
たしかにsize_t[size]のほうが良いですね
そちらの実装に書き換えます

メモリ確保自体は別にいいのですが確保せずに
実装できる方法がありそうで考えつかなかったので
投稿した次第であります
0075デフォルトの名無しさん2014/09/02(火) 23:05:46.73ID:T4NLWN7N
>>74
new T[size]; は問題あるかもしれないしね。
もちろん unique_ptr<size_t[]> を使う前提で。

自分でメモリ確保の要らない形にもできるし。
template< typename T >
inline void Hoge( T* data, size_t size, std::vector<size_t>&& sorted_index);

Hoge( data, size, { index_begin, index_end});
0076デフォルトの名無しさん2014/09/03(水) 10:38:30.70ID:UDA0xvxD
>>63
for (size_t i = 0; i < size; ++i) {
size_t from = index[i];
while (from < i) from = index[from];
if (i < from) swap(data[i], data[from]);
}
0077デフォルトの名無しさん2014/09/03(水) 12:27:41.18ID:JCcUSsWh
>>76
おほー!これは素晴らしい
早速使わせていただきますね
ありがとうございます
0078デフォルトの名無しさん2014/09/04(木) 00:46:31.16ID:xtYJRclN
>>76
permutate とでも名付けるか。
stdに無いってことは、実際上の効率はあまり良くないのかな?
0079デフォルトの名無しさん2014/09/04(木) 05:29:52.27ID:7YOpRBOi
>>78
ソート順にindex振るのと入れ替えるのを分ける事自体が用途が限られてると思う
0080デフォルトの名無しさん2014/09/04(木) 08:03:53.44ID:+NZ8wh13
>>78
while ループが size に対して O(N) だとすると全体で O(N^2) になって
おとなしく std::sort(&data[0], &data[size]) したほうが O(NlogN) でマシか、
比較のコストが整数比較で済むぶんがあるとしても劇的に速くなることは少なそう。
0081デフォルトの名無しさん2014/09/04(木) 12:15:39.78ID:ocfaVGGo
よし。

完了フラグ1、2
Thread t1{
 []{76のアルゴ}
};
Thread t2{
 []{std::ソートやり直し}
};

先に終わった方を採用しよう。
0082デフォルトの名無しさん2014/09/04(木) 14:30:44.76ID:b5Guug5j
スレッド生成のラグがあるからフラグ用意して
t1もt2も立ち上がったのをメインで確認後、開始フラグ立ててスタートしようぜ。
0083デフォルトの名無しさん2014/09/04(木) 15:57:32.80ID:EOgLIza0
同時に行う場合コピーが必要なので
63より遅くなるのがネックだな
0084デフォルトの名無しさん2014/09/04(木) 22:54:43.69ID:xtYJRclN
結果はよ
0085デフォルトの名無しさん2014/09/07(日) 00:51:37.46ID:iR4jmHzA
intの配列で測定してみた(入力値はランダム)
100000件位までは>>76の方が高速
それ以上になるとstd::sortの方が速くなる

なんかミスってたらすまん
0086デフォルトの名無しさん2014/09/09(火) 09:10:09.25ID:JXa3okj9
std::sortって意外と重い娘なんやな
0087デフォルトの名無しさん2014/09/09(火) 09:36:16.97ID:VSMYfOSx
そりゃ76のはソートの結果を既に持ってるの前提なわけだし。
0088デフォルトの名無しさん2014/09/17(水) 10:34:16.68ID:epONY4U2
とりまpartial_sortでお茶濁す
timsort試す
0089デフォルトの名無しさん2014/09/18(木) 08:42:56.02ID:ov/0I+4y
http://peace.2ch.net/test/read.cgi/tech/1408962564/165
でC++11 の便利な汎用初期化子を使ったら

http://peace.2ch.net/test/read.cgi/tech/1408962564/183
>C++11でやってるあたりまさにオナニー

というコメントがかえってきました。彼のいうことを真に受けるかどうかさておき、世間一般でもC++11 はまだまだマイナーで一部でしか使用されていない、ということなのでしょうか?
0090デフォルトの名無しさん2014/09/18(木) 10:04:24.95ID:FM/QfY4S
>>89
未だにC++を蛇蝎の如く忌み嫌うSIerもあるし、C++11を積極的に使うよう指示してくる研究者もいる。
つまり、適材適所。
宿題スレと言うことを考えたら避けた方が問題提示者には都合がいいかもしれないが、
そうでないからと言って文句を言われる筋合いでもない。
0091デフォルトの名無しさん2014/09/18(木) 12:40:58.55ID:0+D2RILR
>>89
爺はスルーしとけ
0092デフォルトの名無しさん2014/09/18(木) 13:04:54.35ID:xCeqnwti
宿題スレのお題は標準C(89)準拠ですら怪しい環境での話があったりもするから・・・
0093デフォルトの名無しさん2014/09/18(木) 15:54:50.35ID:WD6xtm/l
K&Rで書いて提出してやれ
0094892014/09/18(木) 18:41:22.66ID:ov/0I+4y
>>93
それは罰ゲームとしてはさいこーですね‥
0095デフォルトの名無しさん2014/09/19(金) 13:06:20.42ID:DK1dQFYn
char* s = "abcdefg";
という初期化は出来るのに、
int* a = {1,2,3,4,5};
という初期化が出来ないのはなぜですか?
0096デフォルトの名無しさん2014/09/19(金) 13:12:13.34ID:auM1uAiy
文字列リテラルは静的領域に実体を生成するから
やるなら
int a[] = {1,2,3,4,5};
0097デフォルトの名無しさん2014/09/19(金) 13:14:16.95ID:NULeqarn
>>95
後者はint a[] = {1, 2, 3, 4, 5};でいいじゃん
0098デフォルトの名無しさん2014/09/19(金) 13:27:39.41ID:DK1dQFYn
>>96-97
ありです。charもintもバイト数は1バイト、4バイトとサイズは決まってるので、
'a','b','c','d','e'というのがまとめてcharのポインタ型で初期化できるなら
1,2,3,4,5というのもまとめてintのポインタ型で初期化できたらいいのになとちょっと疑問に思ったもので。
0099デフォルトの名無しさん2014/09/19(金) 13:27:58.80ID:Yn2YgLOH
C/C++の配列処理に長さの概念が無いからだよ
0100デフォルトの名無しさん2014/09/19(金) 14:59:42.98ID:T3pYRqja
整数列リテラルなるモノがないからだな。
0101デフォルトの名無しさん2014/09/19(金) 18:03:21.44ID:9isi5Zm8
int *a = {1,2,3,4,5} ができたとして、ポインタでは配列の長さが返せない欠点がある
素直に配列使えば十分だと思うし、この機能をわざわざ追加することは果たして有用なのだろうかね?
0102デフォルトの名無しさん2014/09/19(金) 19:19:32.90ID:YE33y6IJ
文字列リテラルってなんで左辺値なん?
0103デフォルトの名無しさん2014/09/19(金) 19:20:55.67ID:SCZ+cOgA
右辺値だろ
0104デフォルトの名無しさん2014/09/19(金) 19:30:23.31ID:l/ZT/QLf
左辺値なリテラルって…
0105デフォルトの名無しさん2014/09/19(金) 20:11:37.06ID:ZKmo/Yor
左辺値だろ。
ISO/IEC 14882 5.1.1p1
>A string literal is an lvalue; all other literals are prvalues.
0106デフォルトの名無しさん2014/09/19(金) 20:20:11.43ID:NULeqarn
>>98
>charもintもバイト数は1バイト、4バイトとサイズは決まってるので
charはともかくintはおかしいだろw
まあデータ型モデルの都合上大抵は32bitだけど>int
0107デフォルトの名無しさん2014/09/19(金) 20:51:25.45ID:Hrwgc7MY
>>98
>>106
いつそんな事決まったんだっけ?
ワードアドレッシングコンピューターのsizeof()はみんな1を返すよ
0108デフォルトの名無しさん2014/09/19(金) 20:55:54.75ID:NULeqarn
>>107
「大抵は」って言ってるじゃんか……
0109デフォルトの名無しさん2014/09/19(金) 23:34:24.19ID:jtajSA4X
>>108は日本語が不自由な低脳
0110デフォルトの名無しさん2014/09/19(金) 23:39:43.80ID:YE33y6IJ
んで文字列リテラルってなんで左辺値なん!?
0111デフォルトの名無しさん2014/09/19(金) 23:55:13.98ID:526ppMDR
左辺値だろ
0112デフォルトの名無しさん2014/09/19(金) 23:58:40.60ID:Pjq/AHDS
むしろ配列が値だと思う方が不思議
0113デフォルトの名無しさん2014/09/20(土) 09:24:47.10ID:j948TmPI
3.14 object
region of data storage in the execution environment, the contents of which can represent values

6.3.2.1 Lvalues, arrays, and function designators
An lvalue is an expression with an object type or an incomplete type other than void;

6.4.5 String literals
In translation phase 7, (中略) The multibyte character sequence is then used to
initialize an array of static storage duration and length just sufficient to contain the sequence.

文字列リテラルは静的記憶域の配列 -> 記憶域のものはオブジェクト -> オブジェクト型のexpressionは左辺値
これであってる?
0114デフォルトの名無しさん2014/09/20(土) 22:20:38.71ID:mRYinM9k
>>113
何で>>105を無視してるの?
思いっきりダイレクトに左辺値だって書いてあるじゃん。
0115デフォルトの名無しさん2014/09/20(土) 23:37:17.27ID:z3Nx+hdd
>>114
なんで>>110を無視してるの?
思いっきりダイレクトに別の質問してるじゃん。
0116デフォルトの名無しさん2014/09/21(日) 00:08:45.16ID:V/2PcQDk
>>110
アドレス取れないと困るだろ。
0117デフォルトの名無しさん2014/09/21(日) 04:15:27.41ID:JQQIecj/
>>105 は C++ の規格
>>113 は C の規格
文字列リテラルが左辺値とゆーのは C の規格から受け継がれてるな
0118デフォルトの名無しさん2014/09/21(日) 04:34:46.43ID:tIzOsIsU
右辺地と値だったら何か嬉しいことあるの?
0119デフォルトの名無しさん2014/09/21(日) 07:20:16.93ID:Ds9W1/T0
リテラルが右辺値に統一されてきもちいい
0120デフォルトの名無しさん2014/09/21(日) 14:06:12.99ID:urDZcnqs
>>115
何でっていう疑問はわからないでもないけど、その答えが常に存在するとは限らないよ。
そういう意味で、唯一の確実な答えは、規格に明示してある事だけなんだよ。
要は、「そう決まってるから」が確実に言える答え。

で、ここからは推測になるけど、上記のように言いつつも、僕も>>113の考えに賛成。
文字列リテラル自体に記憶域が無い(=rvalue)と、そのアドレスを関数の戻り値に使えなくなる。
イチイチ名前を付けて領域を確保するのもめんどくさいし、文字列リテラルに限れば必ず静的に保持しているはずなんだから、直接参照できても構わないはず。
0121デフォルトの名無しさん2014/09/21(日) 14:08:43.93ID:urDZcnqs
って事で、本質的にlvalueである事が自然だから、規格としてもそう明言したのだと思う。
0122デフォルトの名無しさん2014/09/21(日) 21:49:13.79ID:fZliI4BG
「どうして規格では左辺値なの?」
「そう決まってるから」

日本語が不自由な人ですね
0123デフォルトの名無しさん2014/09/21(日) 22:02:35.21ID:14Np6+sv
「そう決めたから」が正しい
0124デフォルトの名無しさん2014/09/22(月) 00:14:38.22ID:U5niCD0a
「そう決められている理由は僕にはわかりません」が正しい
>>123は同じことを言い直しているだけの低脳
0125デフォルトの名無しさん2014/09/22(月) 00:48:28.69ID:2mp10LVt
決定に至った理由なんてのは楽屋裏を知らないと明言できるはずがない。
せいぜい強く推察できる…という主張ができるくらいだろう。
だから理由を知りたいが疑い深い人だったら自力で調査するしかないだろう。
0126デフォルトの名無しさん2014/09/22(月) 01:06:15.66ID:4/XZCUNz
>>122
それ以外の答えを持っているならぜひ教えて欲しいね。
君は日本語は得意みたいだけど、論理力が無いのかな?
0127デフォルトの名無しさん2014/09/22(月) 04:04:11.09ID:5JECNKJa
K&R第2版に>>113と似たようなことが書かれている
どうしてそういう設計にしたのかなんてニッチな話は
設計者K&Rにしかわからんだろ
0128デフォルトの名無しさん2014/09/22(月) 21:12:28.80ID:wq/41zv3
>>126
>>123
0129デフォルトの名無しさん2014/09/23(火) 00:15:17.01ID:6PMa5Put
>>126
日本語が不自由な人ですね
0130デフォルトの名無しさん2014/09/27(土) 16:03:37.59ID:lZc14wWH
C++で可変引数で複数のvector<string>を連結する関数を書こうとしたのですが、
出来ませんでした。どう書けばよいでしょうか?

#include <vector>
using namespace std;

vector<string> concatenate_vectors(vector<string> vectors, ...)
{
  // どう書けばよいでしょうか?
}

void main()
{
  vector<string> vect1 ;
  vector<string> vect2 ;
  vector<string> vect3 ;

  vect1.push_back("item11");
  vect1.push_back("item12");
  vect1.push_back("item13");

  vect2.push_back("item21");
  vect2.push_back("item22");

  vect3.push_back("item31");
  vect3.push_back("item32");

  vector<string> vectConcat = concatenate_vectors(vect1, vect2, vect3);
}
0131デフォルトの名無しさん2014/09/27(土) 16:39:23.93ID:MIcHrHKM
>>130
次の手順で。
・二個連結する関数を作る。
・可変個数引数を取り扱う関数を作ってみる。
・両者を融合する。

つーか、そもそも必要なのか?
>130の例なら、二個連結する関数を用意したとして
vector<string> vecCat = catVectors(catVectors(vec1, vec2), vec3);
でいいような。
0132デフォルトの名無しさん2014/09/27(土) 16:53:55.61ID:DXaZxPH6
vector<string>::insert
値渡しはコスト高い
const vector<string>&で渡せ
0133デフォルトの名無しさん2014/09/27(土) 18:14:14.62ID:RQc4Fizj
可変引数に非POD型渡すのはC++03で未定義、C++11で処理系定義だからやめとけ
0134デフォルトの名無しさん2014/09/27(土) 22:09:50.79ID:4KEDy6y8
>>130
詳細未確認

template <typename C, typename...R>
std::vector<C> concatenate_vectors_imple(std::vector<C>& v0, const std::vector<C>& v1, const std::vector<R>&...v2)
{
for ( auto it = v1.begin(); it < v1.end() ; ++it )
v0.push_back(*it);
return concatenate_vectors_imple(v0, v2...);
}

template <typename C>
std::vector<C>& concatenate_vectors_imple(std::vector<C>& v0)
{
return v0;
}

template <typename C, typename...R>
std::vector<C> concatenate_vectors(const std::vector<C>& v0, const std::vector<C>& v1, const std::vector<R>&...v2)
{
std::vector<C> v(v0);
for ( auto it = v1.begin(); it < v1.end(); ++it )
v.push_back(*it);
return concatenate_vectors_imple(v, v2...);
}
01351342014/09/27(土) 22:22:55.83ID:4KEDy6y8
>>130
間違えた。
最初の concatenate_vectors_imple の戻り値型は std::vector<C>& ね。
0136デフォルトの名無しさん2014/09/27(土) 22:54:28.00ID:7K/XJF0S
まあ…うん…、とりあえずいちいちpush_backとかアホですかい、といっておく
01371342014/09/27(土) 23:07:31.83ID:4KEDy6y8
>>136
もしも効率のことを言ってるんだったら君がアホだが、まさかそうじゃないよな?
01381342014/09/27(土) 23:08:01.47ID:4KEDy6y8
>>136
もしも効率のことを言ってるんだったら君がアホだが、まさかそうじゃないよな?
01391302014/09/27(土) 23:29:38.26ID:lZc14wWH
皆さん、レス有難うございました。
134さんの方式で出来ました。完璧に動きました。
ググッて知ったのですが、可変長テンプレートというやつですか?
私は、可変長引数の関数を作る従来の方式でやろうとして出来なかったのですが、
本機能を実現するには、この可変長テンプレートでしか出来ない
という理解で良いですか?
134さん、とにかく、大変有難うございました。
01401342014/09/27(土) 23:57:00.78ID:4KEDy6y8
>>139
>この可変長テンプレートでしか出来ない

それはわかりません。>>134のは確かに可変長テンプレートで、従来の可変長引数よりはずっといいものですが、
>>136氏または他の人からより良い回答がある可能性があります。
0141デフォルトの名無しさん2014/09/27(土) 23:58:37.54ID:4KEDy6y8
>>135 も忘れずにね。
0142デフォルトの名無しさん2014/09/28(日) 00:39:48.19ID:2ehfaXz0
>>137
お試しコードだから効率なんかどうでもいいって話?まあそれはそうかもですが
他人の言葉を正しく理解できず(132は読んだ?)何の疑問も持たず無駄なコードを書ける才能の持ち主はプログラマとしてはアホでしょ

std::vector<C> v;
v.reserve(v0.size() + v1.size()); //全合計サイズ求めとけばもっといいだろうな
v.insert(v.end(), v0.begin(), v0.end());
v.insert(v.end(), v1.begin(), v1.end());
0143デフォルトの名無しさん2014/09/28(日) 00:46:33.29ID:w7RNtATm
知ったことを試したくなるお年頃
0144デフォルトの名無しさん2014/09/28(日) 00:58:58.02ID:3/ISLNZo
>>142
事前reserveとpush_backの比較か。お約束気味だな。
0145デフォルトの名無しさん2014/09/28(日) 01:09:36.52ID:WR77cIPq
range based forの方が好み
0146デフォルトの名無しさん2014/09/28(日) 01:12:11.45ID:h4WI77pQ
std::listのほうがよくね
0147デフォルトの名無しさん2014/09/28(日) 01:12:17.68ID:BhCM8Imx
http://ideone.com/e.js/T6JCKd

効率求めるならこうだろ
debugビルドじゃない限り、reserveしたらinsertもpush_back()も変わらん。
0148デフォルトの名無しさん2014/09/28(日) 01:27:26.45ID:BhCM8Imx
http://ideone.com/e.js/Ov9DWa
コンテナの種類関係無しにつなげたい場合
0149デフォルトの名無しさん2014/09/28(日) 02:35:08.89ID:mV9kHGDG
お遊び。もちろん効率は悪い
ttp://ideone.com/aErAsu
0150デフォルトの名無しさん2014/09/28(日) 09:58:11.70ID:BhCM8Imx
>>142 みたいな中途半端なreserveはパフォーマンス下がることも多いから気を付けよう。
0151デフォルトの名無しさん2014/09/28(日) 10:41:26.77ID:3/ISLNZo
vector<std::string>だと要素の構築コストがそれぞれかかるから、
vectorのreserveの効果とかは埋没しちゃうんじゃないか?試してないけど。
vector<int>で試したらだいたい6〜7倍にはなったから意味はある。
もともとの質問が「可変長にするやり方がわかりません」なんだし、効率とかは質問者に任せすべき問題だろ。
0152デフォルトの名無しさん2014/09/28(日) 11:09:59.47ID:9wEZYyyD
http://melpon.org/wandbox/permlink/fxtS5akvzx6qq6TW
俺も適当に書いてみた
一応コンテナのほかに普通の配列も渡せているみたいだ
0153デフォルトの名無しさん2014/09/28(日) 11:16:20.23ID:yTX/1oq/
reserve は一気にどんとやってこそ意味があるわけで、ちまちま reserve やってたら何の意味もない
0154デフォルトの名無しさん2014/09/28(日) 11:19:31.10ID:V8dGoEdD
>>151
ちゃんとstringのムーブが実装されてる環境ならそうだろうな
0155デフォルトの名無しさん2014/09/28(日) 11:30:09.24ID:3/A3g7Z1
>>136は効率の話ではなく自分でかかなくていいループは書くなっていうc++では当然の指摘で
それを理解できないか理解したうえで認めず効率の話にすりかえてる人たちはプログラマとしてはアホ認定でいいじゃん
0156デフォルトの名無しさん2014/09/28(日) 12:02:42.69ID:BhCM8Imx
>>155
じゃあ142が下手な反論する前に効率の話じゃねえって否定すればよかったのにね。
0157デフォルトの名無しさん2014/09/28(日) 12:44:57.42ID:lwUZotcA
サンプルにアホなツッコミして、引っ込みつかなくなったアホグラマー乙
0158デフォルトの名無しさん2014/09/28(日) 13:19:52.27ID:3/A3g7Z1
>>156
>>142の主題も無駄なコード=自分で書かなくていいループ、を書かずに
>>132ですでにでているinsertを使えって話(直接と関数の中でって違いはあるけど)じゃん

> 142 名前:デフォルトの名無しさん[sage] 投稿日:2014/09/28(日) 00:39:48.19 ID:2ehfaXz0
> >>137
> お試しコードだから効率なんかどうでもいいって話?まあそれはそうかもですが
> 他人の言葉を正しく理解できず(132は読んだ?)何の疑問も持たず無駄なコードを書ける才能の持ち主はプログラマとしてはアホでしょ

> 132 名前:デフォルトの名無しさん[sage] 投稿日:2014/09/27(土) 16:53:55.61 ID:DXaZxPH6
> vector<string>::insert
0159デフォルトの名無しさん2014/09/28(日) 13:32:57.09ID:B+Ni/mev
無駄なコードと言ったら142のreserveも良い勝負だけどな。
0160デフォルトの名無しさん2014/09/28(日) 13:38:19.88ID:B+Ni/mev
>>158
すまんな。俺にはお前みたいに >>142 の意図を読み取れなかったよ。
もっとストレートに表現してくれるとありがたいな。
01611302014/09/28(日) 20:23:30.03ID:KnhFoiG8
テンプレート関数のインスタンス化というのが有りますが、
今回皆さんに教えていただいた可変引数のテンプレート関数
も、インスタンス化できるのでしょうか?
少し試したのですが出来ませんでした。それで、
ググッても見付けられなかったので、出来ないのかな。
0162デフォルトの名無しさん2014/09/28(日) 20:55:32.98ID:3/ISLNZo
>>161
特定のパターンを指定してアドレスを取って呼び出すとかだったらできるけど、そういう意味?
ついでに効率いい/悪いの比較したやつ。

http://ideone.com/5Pdu0W
01631302014/09/28(日) 21:53:05.39ID:KnhFoiG8
>>162
サンプルコード、大変有難うございました。
とても参考になります。
でも私がやろうとしたのは、関数宣言のみをヘッダー.hに書いて、
実装は.cppに書いて、それで
vector<C> を
vector<string> や
vector<wstring> や
でインスタンス化する(というのかな?)ことです。出来ませんでした。
0164デフォルトの名無しさん2014/09/28(日) 22:05:01.25ID:3/ISLNZo
>>163
exprort template でググればいいんじゃないか。実装されてないか。

だが知りたい。なぜそういうことがしたいのか。
01651302014/09/28(日) 22:55:38.88ID:KnhFoiG8
>>164
情報ありがとうごいざいました。
理由は、テンプレートのままだと、どうも私には理解しにくいので、
具体的なstringやwstringでインスタンス化したいと思ったのです。
exprort template を試してみます。
0166デフォルトの名無しさん2014/09/28(日) 23:31:50.44ID:DoC3ycvg
11のextern templateだろ

.hpp
template<class T, class... U>
void f(std::vector<T> const & t, std::vector<U> const & ... u);

extern template void f(std::vector<std::string> const &, std::vector<std::string> const &);


.cpp
template<class T, class... U>
void f(std::vector<T> const & t, std::vector<U> const & ... u) {}

template void f(std::vector<std::string> const &, std::vector<std::string> const &);


hppだけをインクルードすればf(vector<string>const&, vector<string>const&)だけが使える
0167デフォルトの名無しさん2014/09/29(月) 07:05:39.91ID:q4h5mGIH
IDEONE使いにくいし、いらいらする。
0168デフォルトの名無しさん2014/09/29(月) 07:41:56.01ID:9JQp905q
>>165
それ、そもそもテンプレート使う意味無くなってる。

std::vector<std::string> std::string concat_vector(const std::vector<std::string>&,const std::vector<std::string>&){中身省略}
std::vector<std::string> concat_vector(const std::vector<std::string>&,const std::vector<std::string>&, const std::vector<std::string>& ) {中身省略}

こんな風に引数2〜使いたい数まで全部実装すればいい。
0169デフォルトの名無しさん2014/09/30(火) 21:30:46.37ID:hQ3BMz9t
ラムダ式が入りそうな変数に右辺参照&&が付いている場合が多いけど、
これは何に効くの?
例えばthread↓
template< class Function, class... Args > explicit thread( Function&amp;&amp; f, Args&amp;&amp;... args );
0170デフォルトの名無しさん2014/09/30(火) 21:33:37.39ID:gpzW0Gxh
Perfect Forwarding
0171デフォルトの名無しさん2014/09/30(火) 22:09:33.58ID:AOM1YMTX
右辺値だからコピーせず乗っ取っちゃうよ宣言
0172デフォルトの名無しさん2014/09/30(火) 22:29:51.96ID:LL2el0Wn
lvalue でも rvalue でも受け取れるようにするため
01731672014/09/30(火) 22:35:52.72ID:hQ3BMz9t
なるほど・・・?
右辺参照にしてんのは効率の問題onlyってことかな?
エラるのかな?と思って参照取ったり色々試してみても別にエラらないんだよね。
0174デフォルトの名無しさん2014/09/30(火) 23:08:56.50ID:CA/ThWcz
>>173
単純に一時オブジェクトを使うことが多いからでしょ
ラムダやファンクタは一時オブジェクトとしてその場に書き下す事が多いしね
0175デフォルトの名無しさん2014/09/30(火) 23:11:22.57ID:Yd0T+aaC
テンプレートパラメータに対しての&&は右辺値参照とは確定しない
C++ universal reference でぐぐるか↓この辺から読んでおく
ttp://suikaba.hatenablog.com/entry/2013/07/26/023910
0176デフォルトの名無しさん2014/10/01(水) 09:36:54.22ID:wda39WGJ
>>175
勉強になった。あんがと
0177デフォルトの名無しさん2014/10/01(水) 14:08:14.52ID:d08nCdaw
>>172
それならconst&でよし
0178デフォルトの名無しさん2014/10/01(水) 20:52:37.51ID:DTMRbqd/
>>177
状態を持つようなファンクタを受け取れないじゃん
0179デフォルトの名無しさん2014/10/01(水) 22:04:53.93ID:iMfoFiuu
lambdaの[]がダサい。
0180デフォルトの名無しさん2014/10/01(水) 22:15:58.06ID:IDwTE5ky
ダサイダサイ言うが誰も代案ださないからそのまんまなんだよ
0181デフォルトの名無しさん2014/10/02(木) 10:32:59.09ID:oO5iGiGV
[](){}();
0182デフォルトの名無しさん2014/10/02(木) 10:33:42.24ID:bT+XEaGF
焼き鳥かな
0183デフォルトの名無しさん2014/10/02(木) 12:31:55.72ID:MkOsHImN
Schemeプログラマのレベル10
http://practical-scheme.net/wiliki/wiliki.cgi?Scheme%3AScheme%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%81%AE%E3%83%AC%E3%83%99%E3%83%AB10

レベル5
仕事でJavaやC++を使っている時にああここでちょいと クロージャを使って再帰すれば、と思うことがある。
救いを求めてファンクタなど使ってみるが、 (), {}, [], <>などという4種類もの括弧にもはや頭がついていかない。
括弧は()で十分だ。
0184デフォルトの名無しさん2014/10/05(日) 13:45:24.83ID:sgw8Gftb
C++(windows) ってテキストエリアできますか?
0185デフォルトの名無しさん2014/10/05(日) 14:06:28.44ID:/uvjpa4w
>>184
意味不明
0186デフォルトの名無しさん2014/10/05(日) 14:29:42.40ID:TPVUn8gD
>>184
複数行エディットコントロール
0187デフォルトの名無しさん2014/10/05(日) 15:12:44.14ID:sgw8Gftb
>>186
ありがとです

c++ってなんであんなに同じことする関数が多いんですか?
例えば時刻取得でもいろいろあるし
型も多すぎ
0188デフォルトの名無しさん2014/10/05(日) 16:23:17.77ID:kdm+QxET
たとえば?
0189デフォルトの名無しさん2014/10/05(日) 18:00:22.24ID:u9G+/APz
gettimeofday
clock_gettime
time
などなど
0190デフォルトの名無しさん2014/10/05(日) 18:05:37.04ID:TPVUn8gD
互換性、精度、スピードの違いのわかる奴になれ
0191デフォルトの名無しさん2014/10/05(日) 18:08:36.76ID:qVSrPPMg
そこでchronoですよ!
0192デフォルトの名無しさん2014/10/05(日) 19:44:35.30ID:kUyZAgcB
>>187
とりあえずWall Timeを測りたいのかCPU Timeを測りたいのかはっきりさせろ
前者については個人的にchronoとかomp_get_wtimeとかが好き
後者は使ったことないから(゚�听)シラネ
0193デフォルトの名無しさん2014/10/05(日) 23:38:29.40ID:IhD3/i0T
時刻取得と言ってる人に「Wall Timeを測りたいのかCPU Time」などとCPU時間を持ち出すのは
小難しい用語で話を攪乱し意図的に相手を混乱させることが目的ではないか
と勘ぐってしまう
0194デフォルトの名無しさん2014/10/06(月) 02:25:06.03ID:hlfW/IbB
>>189
Javaで、
java.util.Date
java.sql.Date
java.sql.Time
android.text.format.Time
と一杯同じような型が一杯あるのはなんで?
っていってるようなもん。
0195デフォルトの名無しさん2014/10/06(月) 02:44:29.63ID:8Vsp+6MZ
android.text.format.Timeはともかく
java.sql.Date、java.sql.Timeは例えが的外れだな
0196デフォルトの名無しさん2014/10/06(月) 10:38:06.75ID:KyLSGL2c
>>193
ああ時刻だったか素で間違えたw
0197デフォルトの名無しさん2014/10/07(火) 16:45:06.54ID:sF407jY4
下のVBのコードをC++のコードにしてほしいんです
頼みます

Function test(pic As Image) As Image
test = pic
End Function
0198デフォルトの名無しさん2014/10/07(火) 18:05:42.26ID:tX6Nr/4U
Image test(Image pic) {return pic;}
0199デフォルトの名無しさん2014/10/07(火) 23:16:54.89ID:oyL24YJn
デフォルトは ByRef だったけ?
0200デフォルトの名無しさん2014/10/08(水) 00:31:25.26ID:h+M9nGsc
>>198
ありがとうございました。
>>199
デフォはByValです
0201デフォルトの名無しさん2014/10/08(水) 21:18:17.13ID:IwW4BCh1
共有メモリにstd::deque<std::string>を割り当てるときdequeのサイズ最大100で
stringの文字列数が無限とした場合、sizeにはどういう数値を設定するべき?

int shmget(key_t key, size_t size, int shmflg);
0202デフォルトの名無しさん2014/10/09(木) 00:12:40.55ID:O8gj2Oze
スレ違い。つーか、文字列数が無限と言っている段階で妄想お断り。
0203デフォルトの名無しさん2014/10/09(木) 01:14:38.65ID:qyCusoHv
>>202
わかんねえ上に誘導スレもはらねえ役立たずのボンクラなら黙ってろカスが
0204デフォルトの名無しさん2014/10/09(木) 03:48:45.50ID:zccLNdfB
意味わからん
dequeのアロケータもstringのアロケータもあってstringのアロケータはそれぞれ細切れ要求すんのに全部一括どかんとやりたいわけ?
そしたら自分でアロケータ作って共有メモリをヒープのように扱うんだな
string長可変ならフラグメンテーションも起こるしただでさえ見積もり困難なの文字数無制限なんていってたらサイズ割り出せるわけねーだろ
センスない
0205デフォルトの名無しさん2014/10/09(木) 07:07:34.45ID:awPClF6T
>>202
無限て上限の指定がないってだけの意味だろ
0206デフォルトの名無しさん2014/10/09(木) 07:35:21.81ID:TFiTr1YN
この業界は意味・文脈を理解できず単語レベルのパターン認識で反応するアスペが多いのです
だから他人との会話が困難
0207デフォルトの名無しさん2014/10/09(木) 10:13:38.21ID:L1QxHxFV
>>203
>>205
>>206
わかんねえ役立たずのボンクラなら黙ってろカスが
0208デフォルトの名無しさん2014/10/09(木) 11:39:07.25ID:ST5H/C5n
「どういう数値を設定すべき」

回答例:
×「可変で上限が定義されていないものは回答不能 ※典型的なコミュ障
○「長さの平均をLとするとL×100×xxx
○「長さの平均でなく最大値のみに依存するものなので、上限を定義しないと決められない
0209デフォルトの名無しさん2014/10/09(木) 12:01:24.64ID:QqvefLsG
自分で作れないアホが他人を罵倒するとか
0210デフォルトの名無しさん2014/10/09(木) 12:47:16.57ID:80F8eYzB
>>208
1番目も3番目も変わらんような。

そもそも元の質問が何がしたいのか意味分からんからな。
自分ですら説明出来ない事をやろうとしてるのかコミュ障なのかはしらんが。
0211デフォルトの名無しさん2014/10/09(木) 13:41:38.37ID:4Fk78vGx
解凍不能と決められないの違いって何?
どっちも答えられないことには変わりないのに
0212デフォルトの名無しさん2014/10/09(木) 14:40:03.33ID:80F8eYzB
2番目も質問者の意図によっては間違いだしな。

コミュニケーションスキルを発揮するなら意図を質問者から引き出してそれに対して的確な回答をするところだけど、そもそもそこまでする義理があるんかって話。
0213デフォルトの名無しさん2014/10/09(木) 17:28:23.68ID:Gep9zwGH
オーバーロードとオーバーライド
いつもまちがえるけど
みんなどう覚えてるの?
0214デフォルトの名無しさん2014/10/09(木) 17:35:03.00ID:5Klz1bKa
ロードは積み込み。
Now loadingのloadね。

ライドは乗り込み。
仮面ライダーはバイクに「乗る」からライダー。
0215デフォルトの名無しさん2014/10/09(木) 17:35:35.55ID:MCK9hkSC
オーバーライド直訳すりゃ"上書き"なんだから間違えっこないだろ
0216デフォルトの名無しさん2014/10/09(木) 17:37:01.06ID:hFWJtEjM
オーバーロードとオーバーライドのどちらが上書きなのかは
どうすると間違えなくなるのでしょうか
0217デフォルトの名無しさん2014/10/09(木) 17:49:50.71ID:BvafHE+c
間違えてもしょうが無いだろ。
JIS規格ですら間違えて訳していたんだから。
0218デフォルトの名無しさん2014/10/09(木) 20:32:27.78ID:9/qS7Lgu
乗っかるのは派生クラスだけ!
って覚えてる。
0219デフォルトの名無しさん2014/10/09(木) 21:58:55.09ID:SEo86Ilh
VBやれば間違わない
0220デフォルトの名無しさん2014/10/09(木) 23:53:22.08ID:awPClF6T
オブジェクト指向っぽいコードはとんと書かなくなったなあ
オーバーライドなんてまずしない。オーバーロードばっかりだ。
0221デフォルトの名無しさん2014/10/10(金) 00:26:03.80ID:HJyCcpx7
>>204
ありがとうございます。他の手段を検討することにします。

他の方々も得意のコミュニケーションスキルで頑張ってください。
0222デフォルトの名無しさん2014/10/10(金) 02:06:58.21ID:S5S2nArM
おれは逆でオーバーロードはあんま多用しないようにしてるな、なるべく別の名前つける
逆にオーバーライドは意識してよく使うわ
ベースクラスで普遍的な処理実装して個別は全部仮想メソッドで処理したり
仮想メソッドじゃなくてもベースクラスのメソッドに追加処理入れたいときオーバーライドで追加処理+ベースクラスのメソッド呼び出しにする

>>221
どう考えてもあんたがコミュ障
0223デフォルトの名無しさん2014/10/10(金) 05:09:11.88ID:O7ZZtB04
真面目な内容書いた後ならクソみたいな煽りに乗っかっても良くなるわけじゃないぞ
0224デフォルトの名無しさん2014/10/10(金) 06:51:54.72ID:PjwRa4Gs
constなstringをunsigned char* に型変換したいのですが、
どうやってもエラーします。どうすればよいでしょうか?
VS2013のC++です。
const string str = "12345";
unsigned char *p =(???) str.c_str();
0225デフォルトの名無しさん2014/10/10(金) 07:03:44.86ID:JWe5SEhS
unsigned char *p =(unsigned char *) str.c_str();
0226デフォルトの名無しさん2014/10/10(金) 07:11:05.18ID:0aZbUNVl
>>224
constを無理矢理外してる事には気づいてる?
0227デフォルトの名無しさん2014/10/10(金) 07:18:48.12ID:PjwRa4Gs
>>225
ありがとうございました。
reinterpret_castとかstatic_castとか、そういうのを使ってやるのかな
と思っていろいろ試したのですが、出来ませんでした。
>>226
constというのが良く分っていません。
0228デフォルトの名無しさん2014/10/10(金) 07:21:27.44ID:yXhPCI1a
&str[0]とか、(unsigned char *) &str[0]でダメか
0229デフォルトの名無しさん2014/10/10(金) 07:28:53.30ID:zoT34cDO
>>227
この場合のconstは変更不可能であることを示す
変更不可能であることを宣言したのにキャストで変更可能にし直すってのは
不自然だから、「C++でのキャスト」の場合const_castを使う必要がある
……という以前に、std::stringの中身はunsigned charじゃなくて
charだからconst_castすら使えないんだけどね。要するにコードが変!
(unsignedを取ればconst_castで大丈夫だが)
0230デフォルトの名無しさん2014/10/10(金) 07:42:46.91ID:BOqLnx27
auto *kuso=str.c_str();
auto *p=(unsigned char *)malloc(strlen(kuso)+1);
strcpy(p, kuso);
0231デフォルトの名無しさん2014/10/10(金) 07:47:36.25ID:PjwRa4Gs
>>229
解説ありがとうございました。なんとなく理解できました。
結論としては、皆さんに教えていただいた方法でstringを
unsigned char*にキャストして使っても問題ないですか?
あるいは、unsigned charなstringは無いのでしょうか?
std::ustring と呼べばいいのかな。
0232デフォルトの名無しさん2014/10/10(金) 08:20:29.30ID:zoT34cDO
>>231
そこまでしてunsigned char*にこだわる意味は?
0233デフォルトの名無しさん2014/10/10(金) 08:22:24.93ID:SMnu3esb
unsigned char *にしなきゃいけない理由はなんなんだ
その要求が間違ってる可能性のが高いぞ
0234デフォルトの名無しさん2014/10/10(金) 09:00:18.10ID:j+lfyng9
>>231
std::stringってstd::basic_string<char>だぞ。

>>232-233
やりたいってんだから、やらせてやりゃ良いじゃん。
間違ってて後戻りするのも経験。
0235デフォルトの名無しさん2014/10/10(金) 09:01:00.88ID:PjwRa4Gs
>>232>>233
unsigned char* を引数に取る関数にそのstringを渡す為です。
0236デフォルトの名無しさん2014/10/10(金) 09:32:32.07ID:2xykwDXZ
同じ関数をちがうよびかたで上書きするからオーバーライド、
継承して積まれるからオーバーロード

って覚えればいいのか
いい国作ろう鎌倉幕府みたいにスッと覚える方法ほしいね
0237デフォルトの名無しさん2014/10/10(金) 09:40:42.30ID:JWe5SEhS
オーバーロードは継承関係ないだろ
0238デフォルトの名無しさん2014/10/10(金) 10:35:36.96ID:ehxSzPpo
オペレータオーバーロード
0239デフォルトの名無しさん2014/10/10(金) 10:53:28.99ID:0aZbUNVl
>>235
constが付いてるってことは中身を変えませんって宣言してることになるから変えてはダメなの。
const付いてないものは変え放題。
だからconstが付いてないものに渡したいときは、それをコピーして渡すとかするべき


const string str = "12345";
vector<unsigned char> ustrdata;
ustrdata.assign(str.begin(),str.end());

unsigned char *p =ustrdata.data();

stringの中身を変えたいのであれば、constで渡すべきじゃないし、
unsigned char*を受け取る関数の方がその中身を変更しないのであれば、その関数の方をconst unsigned char*とかに変えるべき
0240デフォルトの名無しさん2014/10/10(金) 12:00:56.49ID:2xykwDXZ
>>237
継承して同じ関数名が積まれるからオーバーロード
って上で説明受けたよ
0241デフォルトの名無しさん2014/10/10(金) 12:07:28.97ID:iHp7wziF
お前が習ったの完全に間違ってると思われ
0242デフォルトの名無しさん2014/10/10(金) 12:31:37.81ID:4Jxm1TDD
>>239
昔のライブラリとかだろ
うちの会社にもこう言うべき論かざす奴いるけど、そんなことはわかってるし、そいつがライブラリ直してくれる訳でもないから、正直うざいだけ
0243デフォルトの名無しさん2014/10/10(金) 12:35:09.91ID:9Y9G4apO
>>240
継承して同じ関数名を使うと隠蔽されるからオーバーロードにならない
0244デフォルトの名無しさん2014/10/10(金) 12:50:19.77ID:YgFoHfJW
ライブラリの方を変えると
ほかのユーザーが同じライブラリ使ってるのにコンパイルエラーになるからな
const_castが手っ取り早い
0245デフォルトの名無しさん2014/10/10(金) 12:54:13.19ID:AbUawxmF
>>236
逆
0246デフォルトの名無しさん2014/10/10(金) 12:57:55.86ID:AbUawxmF
全く同じ引数仕様で、「派生側」で処理を上書く(乗っかる)から、オーバーライド
引数仕様を変えて、「同じクラス」での処理を増やすから、オーバーロード
0247デフォルトの名無しさん2014/10/10(金) 13:13:27.33ID:Z9E+F4Dm
>>239
まあ正論だけど典型的なエンバグコードを例示しないでください
0248デフォルトの名無しさん2014/10/10(金) 13:20:05.18ID:0aZbUNVl
>>242
>>244
解ってないかもしれないから言ってんだろ
だいたいそうやって修正諦めてるやつは糞
0249デフォルトの名無しさん2014/10/10(金) 13:23:01.74ID:qRrpLzSZ
単語の原義的ニュアンスと機能の概念を合わせて理解してれば迷わないだろ

オーバーロード overload: load:積む
なにかがすでに積まれているところにさらに積む
もとから積まれていたものと新たに積まれたものは同格

オーバーライド override: ride:乗る
何かに乗る。物理的・位置的にというのではなく存在として完全に上に立つ
乗られたものはどうでもいいんで無視、乗ったものが全て
0250デフォルトの名無しさん2014/10/10(金) 13:30:50.26ID:xW4jBuFw
overloadから過積載を連想するから、トラックの積み荷のイメージができて迷ったことないな。
0251デフォルトの名無しさん2014/10/10(金) 13:44:33.36ID:YgFoHfJW
>>248
ttp://msdn.microsoft.com/ja-jp/library/windows/desktop/ms649010(v=vs.85).aspx
WM_COPYDATAに使うCOPYDATASTRUCTのlpDataは
値が変更されないにも関わらずPVOID型だ
Winuser.hを修正しろと?
アホ抜かせ
0252デフォルトの名無しさん2014/10/10(金) 13:47:39.66ID:YgFoHfJW
>>549
残念ながら…
0253デフォルトの名無しさん2014/10/10(金) 13:53:51.84ID:rQGEs1EG
>>249
overrideを辞書で引いたことある?
0254デフォルトの名無しさん2014/10/10(金) 14:16:21.38ID:5tgJonUn
>>549に期待
0255デフォルトの名無しさん2014/10/10(金) 14:18:08.52ID:5tgJonUn
権力者がやるのがoverride
雑魚がやらされるのがoverload
0256デフォルトの名無しさん2014/10/10(金) 14:27:55.59ID:0aZbUNVl
>>251
直せる範囲の話じゃなかったんか?
そいつが直してくれるわけでもないとかライブラリー変えるとそのライブラリー使ってる方がエラー出るとか言ってた癖に
0257デフォルトの名無しさん2014/10/10(金) 14:48:59.05ID:YgFoHfJW
直せる範囲なんて一言も書いてないが
ライブラリのほうを変えると他のユーザーでコンパイルエラーが出る
だからライブラリは編集できない
0258デフォルトの名無しさん2014/10/10(金) 18:18:35.67ID:cGiw//Qi
>>248
> だいたいそうやって修正諦めてるやつは糞

はいはい、言うだけなら誰でも言えるわな w

>>249
辞書でオーバーロードをひくと過積載とか過負荷の意味しかない
なので、オーバーロードと多重定義がどう繋がるのか全然わからん
ネイティブだと、何となくわかるんだろうか?
0259デフォルトの名無しさん2014/10/10(金) 18:29:41.14ID:Z9E+F4Dm
>>258
同じ識別子に定義を次々載せていくんだから全然わからんってことはないだろ
原義にイメージの近い、シンプルで弁別性も良い単語をあてがった結果がoverloadなんだろう
0260デフォルトの名無しさん2014/10/10(金) 18:32:04.51ID:sYIHgfEb
一つの皿にたくさんの料理を載せるのがオーバーロード
皿の上に別の皿を乗せるのがオーバーライド
0261デフォルトの名無しさん2014/10/10(金) 19:33:06.62ID:LNVBxRDn
>>258
> はいはい、言うだけなら誰でも言えるわな w

言うだけのやつも等しく糞っていってんだよ
0262デフォルトの名無しさん2014/10/10(金) 19:38:58.22ID:InUbBFTK
オーバー「ロード」: 「読み込む」イメージ、上書きはしておらず、同じ「レベル」で違うもの(関数)をいくつも展開してるイメージ
オーバー「ライド」: 「ライド = 乗っかってる」イメージ、何かに「乗っかってる」=「上書きしてる」イメージ
0263デフォルトの名無しさん2014/10/10(金) 19:41:39.60ID:cGiw//Qi
>>261
なら >>239 にもアンカーつけてやれよ、かわいそうだろ w
0264デフォルトの名無しさん2014/10/10(金) 19:44:06.38ID:LNVBxRDn
>>263
なんで?
0265デフォルトの名無しさん2014/10/10(金) 19:48:47.41ID:2xykwDXZ
なんかもうオーバードライブとオーラロードの
区別がつかなくなってきた
0266デフォルトの名無しさん2014/10/10(金) 20:37:22.03ID:PjwRa4Gs
unsigned char* のキャストで質問した者ですが、
また質問があります。
charの配列をstringに変換したい時には、

 char *p = "12345";

 string str(p);

で行けると思いますが、charの中に非ASCII文字が有る場合にも、char配列の全体を
stringにしたいのですが、以下のような場合、"123%" になってしまいました。

 char *p = "123\045";
 string str(p);

どうすれば、

 str = "123\045"

のような文字列が作れますか?
0267デフォルトの名無しさん2014/10/10(金) 20:43:06.25ID:Z9E+F4Dm
string str(p,p+6);
0268デフォルトの名無しさん2014/10/10(金) 20:53:25.75ID:cGiw//Qi
相変わらず、口だけ君はしつこいな
口の前に手を動かせよ w

>>266
釣りか?
非ASCII文字なんてどこにもないし
取り敢えず、それ string 関係ない、p が指す文字列デバッガとかで確認してみな
ヒントとして "123\x25" とか、試してみ
0269デフォルトの名無しさん2014/10/10(金) 21:08:37.82ID:5tgJonUn
overdose
0270片山博文MZ次期CEO ◆T6xkBnTXz7B0 2014/10/10(金) 21:12:30.22ID:naOIlr8a
>>266
ヌル文字を入れたいなら
"123\0" "45"
とする。バックスラッシュを入れたいなら
"123\\045";
とする。
詳しくは「C言語 文字列 エスケープシーケンス」で検索。
0271デフォルトの名無しさん2014/10/10(金) 21:26:38.21ID:S5S2nArM
char*定義いじってもコンストラクタにlength渡さないとstrlenは\0来たらちょん切るので意味ない
string str(p, 6);
0272デフォルトの名無しさん2014/10/10(金) 21:44:40.72ID:kwgAp7cQ
君は1000%
02732662014/10/10(金) 22:06:10.61ID:PjwRa4Gs
みなさん有難うございました。
まだ完全には理解できていませんが、有る程度分ってきました。
0274デフォルトの名無しさん2014/10/10(金) 23:15:20.22ID:E7H7wFtU
そりゃ未だ分かってないよ。
0275デフォルトの名無しさん2014/10/11(土) 14:48:43.23ID:BtCnKocW
RITT実行時型情報の仕組みを解説したページを知ってる方いませんか
0276デフォルトの名無しさん2014/10/11(土) 14:52:09.12ID:Cjm5vDPZ
何の頭文字かを教えてくれたら
0277デフォルトの名無しさん2014/10/11(土) 14:53:57.06ID:BtCnKocW
run time type dentificationだっけ
0278デフォルトの名無しさん2014/10/11(土) 14:54:34.25ID:BtCnKocW
アァごめん間違ってたのね
0279デフォルトの名無しさん2014/10/11(土) 16:25:08.92ID:/1O2GRV2
いや自分で正解を既に書いてるだろ
0280デフォルトの名無しさん2014/10/12(日) 20:19:06.81ID:5hTZCkoa
質問です。
C++11のstd::mt19937を一度だけ初期化して、複数のクラスで使いまわすというような使い方を
したいのですが、どうやれば出来るでしょうか?

メンバ変数にstd::mt19937を置いてしまうとデフォルト引数で初期化されてしまいます
複数のクラスから呼び出されても常にその時のメルセンヌ・ツイスタの状態をそのまま使いたいと
思っています

そうしないとあまりに終了時間が速いクラスだと例えばstd::time(nullptr)を使っても1秒単位だし
clock_t()を使ってももしかしたら同一になってしまうかも知れません

本当はstd::random_device()が使えれば良いのですが、これが常に同じ値を返す環境なのです
0281デフォルトの名無しさん2014/10/12(日) 20:29:00.26ID:Pw6ew7gw
std::mt19937を静的に持つ関数をメンバ関数に持つクラスを一つ別に作って
そこから乱数返すようにすればいいじゃん

uniform_****_distributionはどうするのかわからんけど
0282デフォルトの名無しさん2014/10/12(日) 20:35:58.92ID:sv4A2Uaz
>>280
シングルトンじゃダメなの?
0283デフォルトの名無しさん2014/10/12(日) 21:20:31.34ID:mXx7tmN6
>>282
具体的に短いプログラムでよろしいですからどんな感じになりますか?
クラスへのポインタか参照をシングルトンとして返せばいいでしょうか?
0284デフォルトの名無しさん2014/10/12(日) 21:24:27.50ID:b9jCVfHE
>>280
グローバルに置いて main() で初期化すればいいじゃない。
0285デフォルトの名無しさん2014/10/12(日) 21:26:01.64ID:sv4A2Uaz
>>283
http://ja.m.wikipedia.org/wiki/Singleton_%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3
0286デフォルトの名無しさん2014/10/12(日) 21:26:41.13ID:mXx7tmN6
>>284
グローバルに置くと多分デフォルト引数で初期化されてしまうと思うんです
そうなるとそのプログラムを起動する度に同じ結果の乱数になりませんか?
0287デフォルトの名無しさん2014/10/12(日) 21:27:43.94ID:mXx7tmN6
>>285
ありがとうございます
= delete を付けてやってみます
0288デフォルトの名無しさん2014/10/12(日) 21:48:54.03ID:sv4A2Uaz
>>286
いや、それはシングルトンでも同じだよ?
0289デフォルトの名無しさん2014/10/12(日) 21:50:40.92ID:b9jCVfHE
>>286
seed 知らんのか?
https://www.google.co.jp/search?q=mt19937+seed
0290デフォルトの名無しさん2014/10/12(日) 22:41:43.81ID:nsJ7qQZk
なかなかうまくいかないなあ

>>288
ですよね

>>289
http://www.cplusplus.com/reference/random/
C++11には見当たらないのですが・・・・
0291デフォルトの名無しさん2014/10/12(日) 22:58:18.36ID:XvaZQGye
>>290
http://www.cplusplus.com/reference/random/mersenne_twister_engine/seed/
0292デフォルトの名無しさん2014/10/12(日) 23:03:09.30ID:nsJ7qQZk
>>291
ごめんなさい
ヘッダファイルを探してみたらあったのでどこかにあるはずだと思って探していました
しかしrandomクラスはお世辞にも使いやすいとは言いがたい・・・
0293デフォルトの名無しさん2014/10/13(月) 00:15:46.26ID:/XhokP7j
かなりdirtyなプログラムになりましたが(Randomクラスのメンバ変数が全部グローバル変数><)
何とか動きました

しかしメンバ変数がグローバルになってちゃシングルトンも怪しくなりますね
でも今のところこれしか方法を思いつかない
0294デフォルトの名無しさん2014/10/13(月) 01:12:11.39ID:Rhz3F1Ts
>>280
終了時間というのが実行単位の話ならpidもまぜるといいよ。
手間かかってもよいなら、gettimeofday()使えばかなり細かい時間とれる。
0295デフォルトの名無しさん2014/10/13(月) 01:19:33.62ID:/XhokP7j
×グローバル変数
○public変数

>>294
それもぐぐったら出てきました
VCのstd::random_device()はそういうの使ってるみたいです
0296デフォルトの名無しさん2014/10/13(月) 02:12:48.26ID:/XhokP7j
あ、今寝ようとベッドに入ってぼんやり考えてたんですけど、public変数にせずにprivateにして
setterを作ればいいですね

そしてgetterはシングルトンにすればよりカプセル化が進められていい形になると気づきました
どう考えてもstaticなpublic変数にmain()内で代入するというのは設計がおかしいです
0297デフォルトの名無しさん2014/10/13(月) 02:23:31.23ID:8x6aEVro
モノステートでいいんじゃないの?
uniform_もmapにキャッシュすればいい
0298デフォルトの名無しさん2014/10/13(月) 02:25:25.21ID:/XhokP7j
綺麗になりました
いずれideoneにでも気が向いたら上げます
これでstd::randomの柔軟性が増して嬉しいです
0299デフォルトの名無しさん2014/10/13(月) 02:28:30.71ID:/XhokP7j
>>297
それでもいいですね
uniform_の方は、Calc()という別のpublicメンバ関数を作ってその中でハードコードしました
std::bindを使えばuniform_の使い回しも出来るようになると思います
0300デフォルトの名無しさん2014/10/13(月) 02:37:00.93ID:8x6aEVro
ま、random_deviceが動作しないってだけの話だから
それを実装すればすむ話なんだけどね
0301デフォルトの名無しさん2014/10/13(月) 05:25:09.46ID:GrLroV7M
randam_deviceが使えない環境あるんだ
boostにもあるけどそれでも無理なんか
0302デフォルトの名無しさん2014/10/16(木) 16:56:02.61ID:NghbfOwW
VC++で以下のようにメンバ変数を初期化しようとしたらエラーが出るので
class MyClass{
public:
 static const char array[] = "abcde"; // IntelliSense: 型 "const char []" のメンバーは in-class initializer を持つことができません
};

関数にして、その中でなら初期化できたので、
class MyClass{
public:
 static const char *array() {
   static const char arrayData[] = "abcde";
   return arrayData;
 }
};
こんなふうにして
void main(){
 MyClass mc;
 char c_data = mc.array()[2];
}
みたいに、そのデータを使うのは、変なやり方でしょうか?
もっと正統派のお勧めの方法がありましたら教えてください。
0303デフォルトの名無しさん2014/10/16(木) 17:06:33.76ID:fQZydVE9
中は宣言だけにして
定義は外出しにしたらイケたとおもうが、忘れた

class MyClass{
public:
 static const char array[];
};

const char MyClass::array[] = "abcde";
0304デフォルトの名無しさん2014/10/16(木) 17:08:56.39ID:J1KqAEmY
それで行ける
ただし複数の翻訳単位で定義すると多重定義エラーが出るから注意
extern グローバル変数とおなじ感覚
0305デフォルトの名無しさん2014/10/16(木) 18:53:57.13ID:NghbfOwW
みなさんレスありがとうございました。
>>304
みすません、
>ただし複数の翻訳単位で定義すると多重定義エラーが出るから注意
この部分が良く分らないのですが、もう少し具体的に教えてください。
0306デフォルトの名無しさん2014/10/16(木) 18:57:49.04ID:J1KqAEmY
ひとつのヘッダにクラス外定義:
const char MyClass::array[] = "ahogehoge";
を書いて、それを複数のcppファイルでincludeするとエラー
書くならどれかひとつのcppファイルに書く
クラスはヘッダに、定義はcppに、それだけ
0307デフォルトの名無しさん2014/10/16(木) 23:32:55.72ID:NghbfOwW
>>306
解説ありがとうございました。理解できました。
とりあえず初期化もヘッダーの中に書きたいので、
私が最初に書いた方法でやってみます。ちょっとヘンテコな方法かも
しれませんが。
0308デフォルトの名無しさん2014/10/16(木) 23:35:46.02ID:SBUE/h0X
__attribute__((selectany))や__declspec(selectany)を使った方が記述は簡潔にはなるわさ
0309デフォルトの名無しさん2014/10/17(金) 00:01:20.80ID:Hi4Jootu
ヘッダ
class MyClass { /* define */ };
#ifdef _STATIC_MEMBER_MyCLASS_
const char MyClass::array[] = "hage";
#endif // _STATIC_MEMBER_MyCLASS_

ヘッダをインクルードするcppのうちの一つだけ
#define _STATIC_MEMBER_MyCLASS_
#include "MyClass.h"

にしたらどうだろうか
0310デフォルトの名無しさん2014/10/17(金) 00:24:57.41ID:8dgyPSmR
>>302の型 "const char []" のメンバー...エラーってC++の仕様上だめなの?
それともVCは駄目なの?
0311デフォルトの名無しさん2014/10/17(金) 01:06:30.79ID:2dsrxbSJ
仕様的に古い規格と新しい規格のどちらかで動作しているかによる
そうなるとコンパイラのバージョンも絡んでくる
0312デフォルトの名無しさん2014/10/17(金) 01:16:05.02ID:Hi4Jootu
元々クラス内で静的メンバの初期化はできなかったしね
て言ってもだいぶ前の話だけど
0313デフォルトの名無しさん2014/10/17(金) 02:07:31.20ID:AZJ5K6SV
非静的メンバーの初期化はC++11の機能でVC実装は2013から
静的メンバーはクラス定義とはべつに実体定義しないといけないからそこでするもの
0314デフォルトの名無しさん2014/10/17(金) 12:39:25.69ID:huHM4qB3
コンパイル済みライブラリーはlib
プログラムはprogram
ではソースファイルのまま使うライブラリーは何ですか?
0315デフォルトの名無しさん2014/10/17(金) 12:39:52.21ID:6TqJmkOF
template
0316デフォルトの名無しさん2014/10/17(金) 13:03:55.84ID:huHM4qB3
オブジェクトファイルをライブラリーの代わりに使うやつも
テンプレートというんですか?
ありがとうございます。
0317デフォルトの名無しさん2014/10/17(金) 22:39:43.98ID:2ADS1pFu
オブジェクトファイルをarで固めたのがライブラリーだよ
0318デフォルトの名無しさん2014/10/17(金) 23:38:21.23ID:Q4VSFD/U
unsigned int X;
(Xに何かが代入される)
max( 1, X );

とすると、

error C2784: '_Ty std::max(std::initializer_list<_Elem>,_Pr)' : テンプレート 引数を 'std::initializer_list<_Elem>' に対して 'int' から減少できませんでした

というコンパイルエラーになります。

int X;
(Xに何かが代入される)
max( 1, X )

となるとコンパイルに成功します。
これって、コンパイラが1をintと解釈してしまって、型が揃わないことによるエラーでしょうか?
何でunsigned intと推論してくれないんでしょうか?
0319デフォルトの名無しさん2014/10/17(金) 23:46:42.65ID:6TqJmkOF
>これって、コンパイラが1をintと解釈してしまって、型が揃わないことによるエラーでしょうか?
はい
>何でunsigned intと推論してくれないんでしょうか?
1uとすれば推論してくれます
03203182014/10/17(金) 23:57:04.02ID:Q4VSFD/U
>>319
おお、そんな記法があったとは!
おかげさまで、いちいちキャストしなくてもコンパイルできるようになりました。
ありがとうございました!
0321デフォルトの名無しさん2014/10/18(土) 00:50:25.77ID:pBwE5r6C
unsignedなら、max(1, x)じゃなくてもx == 0 ? 1 : xでいい希ガス。
03223182014/10/18(土) 00:54:30.16ID:BkuevoKh
>>321
たしかに、
x ? x : 1
って感じで、だいぶコンパクトに書けますね。
命令数もこっちのほうが減る可能性ありそうですけど、
max使うほうが、より明示的で可読性の面でイイかも・・・。
検討してみます。

ありがとうございました!
0323デフォルトの名無しさん2014/10/18(土) 02:44:10.00ID:Whe7ZyB5
>>318
std::max, std::minは引数の型が同じじゃないとダメだから
>>319
1の型はint, 1uの型はunsigned
詳しくはsuffixでggr
03243182014/10/18(土) 09:54:08.92ID:BkuevoKh
>>323
suffixっていうんですね。
float定数はfを付けるってのは知ってたんですけど、
他のは知りませんでした。
ありがとうございました!
0325デフォルトの名無しさん2014/10/18(土) 10:40:11.51ID:Wgwlosqi
>>317
ありがとうございます。
調べてもわからないのですが
オブジェクトをスターティックライブラリーにしない利点はあるのでしょうか?
考えてみた結果、スターティックライブラリーにすればコンパイル時間が省ける
利点しか見つかりませんでした。
たぶん不必要な関数は取り除かれますよね?
ということはオブジェクトを持つ意味はないですね。
0326デフォルトの名無しさん2014/10/18(土) 11:33:38.98ID:fZO/tonl
>>325
お前が生きる意味もない。
0327デフォルトの名無しさん2014/10/18(土) 11:47:38.28ID:nuGnKMLU
>>325
なんの話をしてんの?
本気で言ってるならちょっと理解力ヤバい方だよ
0328デフォルトの名無しさん2014/10/18(土) 14:07:12.19ID:iHa5u1oQ
すみません、説明不足でした。
プログラムの関数の集合的なものをつくるとするじゃないですか。
その時cppとhファイルができますよね。
それをほかのプログラムで使うときcppとhファイルをコピーしてきて使うのを
最終的にcppがoファイルになるのでオブジェクトを使ったライブラリーと定義しました。
上のcppとhをARでスターティックライブラリーにするのとオブジェクトを使ったライブラリーの
違いについて質問しました。
ありがとうございます。
0329デフォルトの名無しさん2014/10/18(土) 14:09:58.23ID:2d9yKbqY
>>318
unsigned は負を表せないから、
普通の四則演算用の数値として使わない方がいい

フラグ・ビット演算・リソースIDなどの特殊な用途に使う
組み込み・制御系で使うことが多い

C/C++の欠点は、intで表現できない範囲の数でも、
unsigned intで表現できるなら、キャストしてしまうこと

これにより正負のある数が、正だけの数になり、
符号ビットがなくなる

このキャスト規則があるおかげで、
プログラミングがかなり難しくなった
言語設計の誤り
0330デフォルトの名無しさん2014/10/18(土) 14:38:35.78ID:2d9yKbqY
>>328
一般的にライブラリは、
動的ライブラリ(Dynamic Link Library, DLL)を使う
静的ライブラリは使わないのが普通

例えば、PCなどのシステムに最初から、A.dll があるとすれば、
自分がコンパイルして、B.exe という実行ファイルを作るときに、
B.exeの中に、A.dllを含まないように作る

B.exeを実行時に、A.dllを呼び出すと、
最初からシステムにある、A.dllを呼び出す

多くのプログラムで、システム上の同じ、A.dllを使うことで、
各プログラムの中に、A.dllを持たないので、
システムのメモリやディスク領域を節約できる

またA.dllに、バグやセキュリティの修正があった際も、
システム上のA.dll、1つだけを修正すれば、
A.dllを呼び出すすべてのプログラムで、恩恵が受けられる
0331デフォルトの名無しさん2014/10/18(土) 15:01:28.01ID:/oNwCDSd
>>330
想定外の dll (バージョン違いも含む)を勝手にリンクされても困るのですが‥
03323302014/10/18(土) 15:27:34.08ID:2d9yKbqY
よく知らんけど、呼び出すDLLのバージョンを指定できないの?

例えば自分が、ver3のDLLを呼び出す際に、
そのバージョン固定で、バージョンを進めない
(ただし、セキュリティ修正は受け入れる)とか

ver3以降の新しいバージョン(ver4, 5, 6など)を受け入れるとか。
メジャー番号が上がるのは受け入れないが、
マイナー番号だけが上がるのは受け入れるとか

まあ通常、メジャー番号が上がったら、互換性はなくなるか、
Win7→8みたいに、システム自体が変わるだろうが
0333デフォルトの名無しさん2014/10/18(土) 16:24:30.41ID:ldbOAwfE
パスの検索条件がカレントディレクトリ優先なので
実行ファイルと同じフォルダにおいておけば
そっちを優先で読み込む。

ただし、VS2005からVS2008の場合WinSxSというやっかいなものがあるが。
03343182014/10/18(土) 16:54:34.41ID:BkuevoKh
>>329
心得ました!
0335デフォルトの名無しさん2014/10/18(土) 17:10:02.33ID:RedYKMT6
互換性がないときは名前を変えればいい。
Linuxではバージョン番号付きの名前となしの名前でシンボリックリンクが張ってあったりするし、
Windowsでもある程度は同じ名前で互換性がなくなったりすると名前を変えるとかたまに見る。
WindowsでC++だと、COMみたいなのもあるが。

>>333
Windowsならその方法で依存関係地獄を脱出できるが、Linuxだと…
0336デフォルトの名無しさん2014/10/18(土) 18:51:15.91ID:pBwE5r6C
ライブラリ周りの話をしだすと、Linuxの知識しかない奴とWindowsの知識しかない奴が
それぞれ相手の話を誤解したまま話を続けるから傍で見ている方は混沌としてしまうw
0337デフォルトの名無しさん2014/10/18(土) 19:16:08.52ID:ldbOAwfE
Linuxのmakeだと組み込みのルール定義は.ccなので、
会話の中に.cppが出てくればWindowsだと思ってしまう。
0338デフォルトの名無しさん2014/10/18(土) 19:34:51.57ID:RedYKMT6
C++なのにどっから2つ目のCが出てきたというかコマンドのccと紛らわしいから.ccはあまり好きじゃない
0339デフォルトの名無しさん2014/10/18(土) 22:19:34.55ID:Whe7ZyB5
それを言ったら.cppもC preprocessorとかぶるんだが
0340デフォルトの名無しさん2014/10/18(土) 23:38:36.60ID:pBwE5r6C
では、.cxxで。
0341デフォルトの名無しさん2014/10/18(土) 23:54:10.59ID:rmwWJ1dQ
そこは.Cだろ
0342デフォルトの名無しさん2014/10/19(日) 00:41:58.23ID:1lbGX/cA
*.cpsとかどうよ
c plus plus source
0343デフォルトの名無しさん2014/10/19(日) 00:55:59.79ID:TD8KaiPQ
Linuxなら共有ライブラリのファイル名を変えなくても対応できる
https://sourceware.org/binutils/docs/ld/VERSION.html
0344デフォルトの名無しさん2014/10/19(日) 02:44:18.76ID:cw5JQu3z
そんなのWindowsでもLoadLibrary、GetProcAddressすればいいだろ
0345デフォルトの名無しさん2014/10/19(日) 10:24:41.64ID:5d/1QuxN
初歩的な質問ですみませんが
static libraliesはリンクのとき不必要なライブラリーを追加してもしなくても同じですか?
全体のライブラリーの中から必要な関数と変数をコピーするだけだから
関数を1個使うのと2個使うのではファイルサイズは違いますか?
0346デフォルトの名無しさん2014/10/19(日) 13:31:39.36ID:PsSi0GjT
class Class1{
public:
 Class1 c1;
};
としたらエラーするのですが、理由を教えてください。
0347デフォルトの名無しさん2014/10/19(日) 13:37:07.68ID:c/fNN/TF
Class1のサイズを決定するにはc1のサイズがわからないといけないが
c1のサイズはClass1のサイズなのでClass1のサイズを決定しなければならないが
Class1のサイズを決定するには…
0348デフォルトの名無しさん2014/10/19(日) 13:47:29.76ID:PsSi0GjT
レスありがとうございます。
class Class1{
public:
Class1 c2;
};

void main(){
Class1 c1;
Class1 c2;
c1.c2 = c2;
}
こんなふうにして、c2をc1の中で保持したい場合、どうすれば良いでしょうか?
0349デフォルトの名無しさん2014/10/19(日) 13:51:07.32ID:c/fNN/TF
class Class1{
public:
Class1* c2;
};
とすればメンバとして持てる
0350デフォルトの名無しさん2014/10/19(日) 14:01:07.82ID:PsSi0GjT
ありがとうございました。
出来ました。
0351デフォルトの名無しさん2014/10/19(日) 16:48:58.34ID:FiSSuAAU
行列を動的な1次元配列で実装する場合、

C言語、C++は行主順(行列を行ベクトルの集まりとみて1行目、2行目・・・と並べていく)
fortran  は列主順(行列を列ベクトルの集まりとみて1列目、2列目・・・と並べていく)

です。fortranのサブルーチンとインターフェースをとるためには列主順にしなければ
ならないのですが、ここで困るのがoperator []です。

m行n列の行列Aを1次元配列で実装した時の先頭アドレスをpとすると

列主順では

double* operator [](int j) { return p + m * j; }

となりそうですが、これではAのi行j列の要素にアクセスするときは
A[j][i]になってしまいます。()演算子のオーバーロードならこんな
問題は起きませんが、ポインタを返す[]演算子では列主順である限り、
A[i][j]とアクセスとできないでしょうか。テンプレートか何か使って
A[i][j]をA[j][i]に変換できる方法ないですかねえ。それとも、何か
勘違いしてんのかなあ。
0352デフォルトの名無しさん2014/10/19(日) 16:55:02.77ID:FiSSuAAU
ポインタを返す[]演算子では
↓
アドレスを返す[]演算子では


A[i][j]とアクセスとできないでしょうか。
↓
A[i][j]とアクセスできないでしょうか。
0353デフォルトの名無しさん2014/10/19(日) 17:03:14.95ID:BmB5xxVy
べつに中間オブジェクト作って返せば
出来ないことはないが、そこまでする意味があるのか?

素直に()使っておけばいい
0354デフォルトの名無しさん2014/10/19(日) 17:24:28.62ID:cPpgakZM
全部Fortran基準に合わせればいいだけじゃん。
Cは行主順だなんてのは只の妄想だよ。
0355デフォルトの名無しさん2014/10/19(日) 17:42:05.00ID:FiSSuAAU
>>353

ありがとう

>>354

いいから、馬鹿は黙ってろ
0356デフォルトの名無しさん2014/10/19(日) 18:03:59.91ID:cPpgakZM
そうかそうか、OpenGLは馬鹿か。
0357デフォルトの名無しさん2014/10/19(日) 18:06:11.23ID:1lbGX/cA
ちょっと男子ー
gl泣いちゃったじゃーん
0358デフォルトの名無しさん2014/10/19(日) 18:08:12.06ID:FiSSuAAU
なんか馬鹿がわけのわからんころを

これだから、こいつらはスズメの学校でチーチーぱっぱのアホなんよ
0359デフォルトの名無しさん2014/10/19(日) 19:04:17.43ID:PsSi0GjT
VC++のmapで教えてください。
#include <map>
using namespace std;
map<string, int> create_map(){
 map<string, int> str2int_map;
 str2int_map["one"] = 1;
 str2int_map["two"] = 2;
 str2int_map["three"] = 3;
 return str2int_map;
}

map<string, int> my_map = create_map();        // (1)これなら行けるが、
//const map<string, int> my_map = create_map(); // (2)これだと

void main(){
 auto i = my_map.size(); //
 auto j = my_map["two"];                     // (3)ここでエラーする
}

(2)のところでconstを付けると、(3)のところでエラーしてビルド出来ないのですが、
理由が良く分りません。だれか理由を教えてください。よろしく。
不思議なのは、constがあると(3)はダメでも、その上のsizeを求めているところまでは、constの有無に
関わらず問題なくビルド、実行できることです。
0360デフォルトの名無しさん2014/10/19(日) 19:20:32.06ID:cxtXDO92
>>359
http://msdn.microsoft.com/en-us/library/fe72hft9.aspx
0361デフォルトの名無しさん2014/10/19(日) 19:20:39.01ID:BmB5xxVy
mapのoperator[]にはconst版は無い。
findかatを使う
0362デフォルトの名無しさん2014/10/19(日) 19:31:21.47ID:I8zMPvcx
>>359
> auto j = my_map["two"];

my_map に "two" がなかったら、"two" のエントリー作るんじゃなかったっけ?
0363デフォルトの名無しさん2014/10/19(日) 19:41:01.00ID:PsSi0GjT
みなさんレスありがとうございました。
at でうまく行きました。
0364デフォルトの名無しさん2014/10/20(月) 00:04:16.14ID:YIaZ+UJI
テンプレートで質問なのですが、
#include <vector>
#include <string>
#include <iostream>
using namespace std;
void func_vect(const vector<string> &vstr){
   // do something
}
void func_int(const int i){
   // do something
}

template<typename T> void func(T arg){
   if (argがvector<string>なら)
      func_vect(arg);
   else if (argがintなら)
      func_int(arg);
}

void main(){
   vector<string> v = {"123","456","789"};
   func(v);

   int i = 123;
   func(i);
}
こんな処理はできますか?
実際に試したら、vector<string> か int かに限定しないと、ビルド出来ませんでした。
0365デフォルトの名無しさん2014/10/20(月) 00:10:34.15ID:wkmRSgvg
何故わざわざtemplate関数にするの?
その使い方なら普通にオーバーロードすればいいのに
0366デフォルトの名無しさん2014/10/20(月) 00:13:30.48ID:KWC1n/5d
これだけだとメリット薄いけど、特殊化って呼ばれるヤツでいけるんじゃね
0367デフォルトの名無しさん2014/10/20(月) 00:19:54.15ID:Z/nnvF1A
テンプレートじゃなくて
boost::anyあたりに入れないとな
0368デフォルトの名無しさん2014/10/20(月) 00:34:43.39ID:YIaZ+UJI
みなさんレスありがとうございました。
>>365
実際はTの種類が10個くらいあり、 template関数func()もかなりの行数なので、
できればtemplate関数一個でスッキリ書きたいのですが。

>>366
特殊化というのを調べてみます。

>>367
>テンプレートじゃなくて
boost::anyあたりに入れないとな
テンプレートでは、実現不可能でしょうか?
0369デフォルトの名無しさん2014/10/20(月) 00:45:47.61ID:wkmRSgvg
templateで書いても書く手間変わらない

関数呼び出し時にtemplate引数を明示指定したいなら
特殊化する意味もあるんだろうが
0370デフォルトの名無しさん2014/10/20(月) 01:03:27.00ID:ue6UcWSy
>>368
funcとは別の名前(ここではfunc1とする)の中身何もしないtemplate関数を作る
必要な型だけfunc1のオーバーロードを作成する。
funcから呼ぶ
0371デフォルトの名無しさん2014/10/20(月) 04:00:30.17ID:jjiQL4kf
>>345
リンカ(やそのオプション)によっては馬鹿正直に全部コピーするし、
デバッグ情報その他メタ情報として引数などを埋める実装ってのも有りだから同じとは断言できない。
使ってる奴だけリンクする状態なら参照する関数増やしたらサイズも普通は増えるけど、
ページサイズで切り上げされてたりしたら変わらない場合も普通にある。
0372デフォルトの名無しさん2014/10/20(月) 06:37:20.07ID:cU31huaM
>>371
忘れたころに回答ありがとうございます。
0373デフォルトの名無しさん2014/10/20(月) 21:13:43.88ID:X9l2Mfw6
class Hoge {
virtual ~Hoge() final {
}
};
があるときHogeを継承したクラスを作ることはできますか?
0374デフォルトの名無しさん2014/10/21(火) 00:07:23.57ID:mXM/35MR
できない
0375デフォルトの名無しさん2014/10/21(火) 00:09:20.36ID:Qa1TKKho
デストラクタは暗黙のうちに作られちゃうからだろうね。
0376デフォルトの名無しさん2014/10/21(火) 00:44:10.50ID:KrgwDc8d
=delete;して定義を削除すればいいかと思ったけど、この宣言自体がfinalで弾かれて駄目だったわ。
finalは宣言自体できないのかね。
0377デフォルトの名無しさん2014/10/21(火) 01:05:23.78ID:QVo453t/
>>373
finalってのが最近のC++にはあるのか
C++のfinalは知らないけどJavaのfinalと同じなら出来ないだろ
0378デフォルトの名無しさん2014/10/21(火) 01:30:24.30ID:xnLzWUl1
これを実行すると
class MyBase{
public:
  int method(){ return 10; }
};
class MyDerived :public MyBase{
public:
  int method(){ return 20; }
};

void main(){
  MyBase mb = MyDerived();
  int x = mb.method(); // = 10
}
x=10 になるんですが、C#で同じような処理をすると20が戻ります。
C++でもMyDerivedのmethodを実行して20が戻るようにすることは出来ますか?
0379デフォルトの名無しさん2014/10/21(火) 01:42:29.38ID:BH8kXLH7
int method()をvirtual int method()に書き換えましょう。
0380デフォルトの名無しさん2014/10/21(火) 01:45:12.43ID:xnLzWUl1
>>379
レスありがとうございました。
早速やってみたのですが、10でした。
0381デフォルトの名無しさん2014/10/21(火) 01:47:52.42ID:TXfJYF3K
http://ideone.com/wM7DzK
0382デフォルトの名無しさん2014/10/21(火) 01:54:23.45ID:BH8kXLH7
MyBaseがポインタになっていないのを見落としていた。すまん。
0383デフォルトの名無しさん2014/10/21(火) 01:54:51.85ID:xnLzWUl1
>>380,381
ありがとうございました。
無事にできました。virtual overrideとポインタが必要だったんですね。
勉強になりました。
03843832014/10/21(火) 21:35:24.11ID:xnLzWUl1
---- header.hpp ---
using namespace std;
class MyBase{
public:
  MyBase *p;
  MyBase(){};
  MyBase(int n);
  virtual ~MyBase();
};
class MyDerived : public MyBase{
public:
  int N;
  MyDerived(){};
  MyDerived(int n){ N = n; };
};
---- main.cpp -----
MyBase::MyBase(int n){
  this->p = new MyDerived(n);
}
MyBase::~MyBase(){
  delete this->p;   // ここでエラーします。
}
void main() {
  MyBase *mb = new MyBase(2);
  delete mb;
}
デストラクタの書き方が良く分りません。最後にdeleteを実行すると
エラーするんですが、どうやれば良いのか3時間くらい考えても分りません。
だれか教えてください。
0385片山博文MZ次期CEO ◆T6xkBnTXz7B0 2014/10/21(火) 21:43:23.30ID:tyo0JEbH
pは初期化されてるか?
0386デフォルトの名無しさん2014/10/21(火) 21:44:54.89ID:M5Ku/KlJ
>>384
MyDerivedの生成時に呼ばれる
MyBase::MyBase()で
MyBase::pが初期化されていない。
0387デフォルトの名無しさん2014/10/21(火) 21:50:37.67ID:CyXjalgJ
分かってないのはコンストラクタの書き方だったな
0388デフォルトの名無しさん2014/10/21(火) 22:04:05.63ID:luau+y4R
やっぱり手動deleteは悪だな
0389デフォルトの名無しさん2014/10/21(火) 22:12:21.90ID:M5Ku/KlJ
unique_ptr使えばなにも考えなくていいものな
03903832014/10/21(火) 22:18:54.96ID:xnLzWUl1
みなさん有難うございました。
無事解決しました。助かりました。
>>387
どのあたりが悪いかできればもう少し詳しく指摘お願いします。
>>388
お勧めの方法ありましたら、アドバイスお願いします。

ググりながら自己流で勉強しているので、分らないことだらけです。
0391デフォルトの名無しさん2014/10/21(火) 22:28:40.60ID:luau+y4R
unique_ptrって書いてるだろ
0392デフォルトの名無しさん2014/10/21(火) 23:59:59.42ID:TXfJYF3K
習作なんだろうから突っ込むのもアレだけど、なんでそんなややこしい作りにする必要があるの?
基底クラスが派生クラスのインスタンスをコンストラクタでnewするなんて理解しがたいんだけど…
0393デフォルトの名無しさん2014/10/22(水) 00:10:48.81ID:9I7eA0V+
馬鹿の考えることに論理性を求めてはいけない
0394デフォルトの名無しさん2014/10/22(水) 01:45:37.05ID:hkgchR3Y
>>392
Java/C# からの人だったら、こう書いてしまうと思う‥
0395デフォルトの名無しさん2014/10/22(水) 02:20:25.16ID:iE8blC7u
>>394
さすがにないやろw

なんにしろこの手の人は数千円の入門書を何故読まないのか
金がないなら図書館だってあるだろう
方程式も教科書と教師に教えてもらって理解した経験があるだろうに、ネットに散らばるチラ裏で修得できるほど頭が良いと思っているんだろうか
0396デフォルトの名無しさん2014/10/22(水) 07:18:57.00ID:VYFezLJe
How to shoot yourself in the foot:
C++: You accidentally create a dozen instances of yourself and
shoot them all in the foot. Providing emergency medical assistance
is impossible since you can't tell which are bitwise copies and which
are just pointing at others and saying, "That's me, over there."
0397デフォルトの名無しさん2014/10/22(水) 08:43:48.15ID:hkgchR3Y
おう、このProviding (≒provided) はほとんど even if で前の文章につながるとかんがえていいの?
最近はやりの move semantics を加味するとどうなるんだろうね‥
0398デフォルトの名無しさん2014/10/22(水) 16:11:15.00ID:AcjAFVtk
>MyBase::MyBase(int n){
>  this->p = new MyDerived(n);

言語を問わずこんなことはするものではないな。
Baseの中に自身と別のBaseがもう一つ居るとか
どんな糞設計だよ。
0399デフォルトの名無しさん2014/10/22(水) 16:20:16.90ID:+lUzyECg
>>397
その Providing は(emergency medical assistance を)「提供すること」でしょ。
0400片山博文MZ次期CEO ◆T6xkBnTXz7B0 2014/10/22(水) 16:31:57.12ID:T8R/UYV6
アンパンマン、新しい顔ができたよ。

MZC3_Blowfish (Blowfish暗号化・復号化)
https://github.com/katahiromz/MZC3_Blowfish
0401デフォルトの名無しさん2014/10/22(水) 23:18:54.65ID:hkgchR3Y
>>399
ちっ、ただの動名詞だったか、素直に読めないようではもうだめだね‥
0402デフォルトの名無しさん2014/10/23(木) 14:56:43.60ID:eDVkHXcG
冠詞の有無に注意を払うべき
0403デフォルトの名無しさん2014/10/23(木) 18:13:43.78ID:hSW+FkP+
>>398
質問なのですが、一般論として、クラスが正しく設計されている場合には、
Baseクラスの中でDerivedクラスのインスタンスを変数で持つような状況は、
あり得ないのでしょうか?
0404デフォルトの名無しさん2014/10/23(木) 18:22:05.38ID:YOPswA+s
リストや木構造とかで無いことは無いが
少なくとも今回みたいな
基底クラスのコンストラクタ内で
派生クラスのインスタンスを直接作るのは
設計が狂っている。
0405デフォルトの名無しさん2014/10/23(木) 19:20:44.81ID:EQz9OYFC
子が居ないと親が存在できないっておかしいだろうよ
0406デフォルトの名無しさん2014/10/23(木) 19:35:08.39ID:pHiXUqCq
ポインターを持つことは有ってもインスタンス丸ごとは狂気の沙汰
0407デフォルトの名無しさん2014/10/23(木) 20:50:27.23ID:hSW+FkP+
>>406
すいません、初心者なので良く分らないのですが、
ポインターを持つことは、インスタンスを持つことと同じじゃあ
ないんでしょうか?
0408デフォルトの名無しさん2014/10/23(木) 22:55:51.63ID:V+SB6iWv
それがわからないならほんとに初心者本買いなって
あんたがやろうとしてるのは足し算わからないけど連立方程式解こうとしてるのと変わらん
基礎理論を理解してないのに応用が理解できるはずないだろ
というか初心者スレ行きだろいい加減
0409デフォルトの名無しさん2014/10/23(木) 22:58:46.59ID:tX24EZ6L
>>407
依存関係がループするような作りはしないよ。
0410デフォルトの名無しさん2014/10/24(金) 03:04:10.76ID:DvSLv01W
>>403
派生クラスの中の基底クラスが別の派生クラス作ったら無限ループだよ?

一般的なデザインパターンだって不適切に使えば非合理的なんだし、
何か理由があってそうなったのならその理由の方から事を考えないと断定は出来ないけど…
「派生クラスの中の基底クラスは基底クラス単体の時とは異なる挙動をする
(派生クラスを作らずNULLなり自分自身なりをその変数に代入するなど)」
ってのは委譲の方法にちょっと近いものの、それよりも分かり難く無駄な構造だと思う。
0411片山博文MZ次期CEO ◆T6xkBnTXz7B0 2014/10/25(土) 10:03:25.41ID:O1Q4q8Ry
パスワードの暗号化ができるよ!!!

MZC3_SHA-256
https://github.com/katahiromz/MZC3_SHA-256
0412デフォルトの名無しさん2014/10/25(土) 10:25:16.26ID:8AZi4m8m
>>411
スレ違いは去れ
0413デフォルトの名無しさん2014/10/25(土) 10:37:57.97ID:GmtDWvI2
そいつに何言っても無駄
たまにちゃんとした回答もするからまーほっとけ
0414デフォルトの名無しさん2014/10/25(土) 10:39:54.47ID:N6/70Jtm
クソコテ=キチガイ
0415デフォルトの名無しさん2014/10/26(日) 01:28:22.44ID:4871dmM2
t
0416デフォルトの名無しさん2014/10/29(水) 10:12:10.65ID:RfXOlH81
std::stoiで空の文字列が引数だと例外が出るんですが、
それは仕様かと思いますが、例外を出したくないので事前に
整数に変換できるかどうか確認してからstd::stoiしたいのですが、
どういう方法でチェックするのが良いでしょうか?
それともstd::stoi使う時はtry catchで囲むんでしょうか?
0417デフォルトの名無しさん2014/10/29(水) 10:21:10.90ID:n7T4qk3X
strtolを使う
0418デフォルトの名無しさん2014/10/29(水) 14:51:03.47ID:xTSKNpvJ
数字以外含む可能性あるならtry...catch
基本数字だけど空の場合があるならempty()で分岐だろ
0419デフォルトの名無しさん2014/10/30(木) 01:30:33.01ID:2b2DRP+p
std::regex以外に無いだろ
0420デフォルトの名無しさん2014/10/30(木) 01:34:30.66ID:YHBMm73x
正規表現で \d+
0421デフォルトの名無しさん2014/10/30(木) 01:35:11.09ID:DI94Uq9B
>>419
単なる整数変換にregexなんて使うかよバーカ
0422デフォルトの名無しさん2014/10/30(木) 01:35:28.23ID:s/3Hn11s
16進数かもしれない
0423デフォルトの名無しさん2014/10/30(木) 04:13:14.85ID:vgyl7cm2
それなら尚更、strtol()。
0424デフォルトの名無しさん2014/10/30(木) 05:44:57.13ID:2RRbr+Zv
>>418かboost::lexical_cast
どっちも当然try...catch
それがC++
今更strolはないわ
0425デフォルトの名無しさん2014/10/30(木) 06:06:20.94ID:QJEzbmXX
strtol微妙に使いづらいんだよな
C#のParseがstd::stoi的なものとしてTryParseが欲しいんだよ俺は
0426デフォルトの名無しさん2014/10/30(木) 07:29:41.39ID:7fc6WtHX
>>421
そもそも整数変換の話じゃなくてチェックの話だ、バーカ
0427デフォルトの名無しさん2014/10/30(木) 08:05:54.49ID:bJcsLIv5
プログラムの内部処理のための数値変換と
プログラムの利用者の入力値の数値変換が
同じでいいと思ってる奴は素人
0428デフォルトの名無しさん2014/10/31(金) 07:05:09.20ID:qzXnBU4c
>>426
単なる整数かどうかのチェックに正規表現なんて使うかよ、バーカ
とでも返せばいいのか?w
0429デフォルトの名無しさん2014/10/31(金) 07:18:20.71ID:H/kqMfAT
>>428
変換とチェックの区別もついてませんでした、ごめんなさい

だろ、バーカ w
0430デフォルトの名無しさん2014/10/31(金) 07:28:23.21ID:EAvtXQzc
整数判定って書くとしたらこんなでいい?
isdigit(static_cast<unsigned char>(s[s[0]=='-'?1:0]));
0431デフォルトの名無しさん2014/10/31(金) 07:46:08.44ID:oaAdI0DZ
sscanfじゃだめなの?
0432デフォルトの名無しさん2014/10/31(金) 08:29:46.59ID:qzXnBU4c
>>429
「返す」って言葉を使ったのが悪かったよ
>>421は自分じゃないんです、ごめんなさい
今後は言葉に気をつけます(>_<)
0433デフォルトの名無しさん2014/10/31(金) 10:59:32.96ID:NwqKHC4I
>>431
strtol()の方がいいよ。
0434デフォルトの名無しさん2014/10/31(金) 12:21:53.12ID:9bxfywyg
string str = "-0123";
stringstream ss(str);

int n;

while(!(ss >> std::ws >> n).eof());

if(ss.fail()) cout << "not a number" << endl;
else cout << n << endl;
0435デフォルトの名無しさん2014/10/31(金) 12:26:44.93ID:aPk8p0sK
failだとeofにならないんじゃ
0436デフォルトの名無しさん2014/10/31(金) 12:29:37.98ID:9bxfywyg
そうだっけか。
while中であれこれ調査したかったけど、2chのレスはインデントつけられないから・・。
0437デフォルトの名無しさん2014/10/31(金) 15:23:11.59ID:zWE6Wm7I
>>436
そのためのコードパッド
 http://codepad.org/
 http://ideone.com/
0438デフォルトの名無しさん2014/11/01(土) 00:17:22.85ID:fnbcpSuD
リテラルが最初にくるときのstringの+演算ってこう書くことになると思うんだが、どっちがメジャー?
【A】str += std::string("<") + bracedStr + ">";
【B】str += static_cast<std::string>("<") + bracedStr + ">";

そらコスト的にはこれ↓が一番だろうけど。
str += "<";
str += bracedStr;
str += ">";
0439デフォルトの名無しさん2014/11/01(土) 00:22:31.39ID:jtBHZTX6
A
0440デフォルトの名無しさん2014/11/01(土) 00:34:15.99ID:fnbcpSuD
>>439
thx Aで書くわ。まあタイプ数少ないし直接的だものな
0441デフォルトの名無しさん2014/11/01(土) 00:44:47.17ID:joQzlbVj
>>438
str += "<" + bracedStr + ">";
0442デフォルトの名無しさん2014/11/01(土) 01:09:03.37ID:Wlerh3A3
>>438
str += '<'; ってしちゃう
0443デフォルトの名無しさん2014/11/01(土) 10:13:26.75ID:RYAQh7Zn
もうすぐC++14ができるから
"<"s + bracedStr + ">"
と書けるようになる日は近い
0444デフォルトの名無しさん2014/11/01(土) 10:28:06.11ID:vyu/j3vj
リテラルが最初としか書いてないけど、みんなbracedStrがconst char*である前提で話してるん?
0445デフォルトの名無しさん2014/11/01(土) 10:42:03.09ID:fnbcpSuD
>>444
bracedStrはもちろんstd::stringのつもりなんだけど
どうあろうが>>441みたいに書くと左オペランド(const char*)の+演算子で解決しようとするから
なんとかしないとコンパイルできんよね、みたいな相談
0446デフォルトの名無しさん2014/11/01(土) 10:48:42.05ID:vyu/j3vj
>>445
え?なんでコンパイル出来ないの?
0447デフォルトの名無しさん2014/11/01(土) 11:35:09.50ID:1LKSyDzH
ttp://en.cppreference.com/w/cpp/string/basic_string/operator%2B
bracedStrがstringならchar*をとるオーバーロードがあるから>>441で普通にコンパイルできますがな
0448デフォルトの名無しさん2014/11/03(月) 02:40:35.50ID:gzxZLKcA
#include <iostream>
class Class1{
public:
   void prt(int i){printf("Class1 i=%d\n",i);}
};
class Class2{
public:
   void prt(double d){printf("Class2 d=%lf\n",d);}
};
void func1(int i){
   Class1 c1;
   c1.prt(i);
}
void func2(double d){
   Class2 c2;
   c2.prt(d);
}
void main(){
   func1(1);
   func2(2);
}
こういう状況で、実際はfunc1,func2は100行くらいの処理があるんですが、中身は殆ど同じで違うのは、途中で呼び出すのが
Class1かClass2かの違いだけです。この二つの関数func1とfunc2を一つにまとめてスッキリさせたいのですが、
良い方法が思う付きません。何か良いアイディアありますか?
0449デフォルトの名無しさん2014/11/03(月) 02:53:51.11ID:wj4A8VFW
多態性を使う
0450デフォルトの名無しさん2014/11/03(月) 03:02:39.91ID:wj4A8VFW
型が違うからテンプレートじゃないとダメか
0451デフォルトの名無しさん2014/11/03(月) 03:06:14.87ID:GHCh+c9h
テンプレートにしてもテンプレート引数にクラスの型指定しなきゃならんから場合によっては筋が悪い感じするな。中の実装知らなきゃならんという意味で
0452デフォルトの名無しさん2014/11/03(月) 03:30:41.90ID:LskjCgED
えっ、Class1とClass2の基底クラスにvirtualでprtを宣言しておくだけじゃなくて?
0453デフォルトの名無しさん2014/11/03(月) 03:39:31.08ID:GHCh+c9h
>>452
ちゃんと質問のコード見なよ
誰がClass1とClass2生成すんだよ
0454デフォルトの名無しさん2014/11/03(月) 03:44:12.06ID:LskjCgED
>>453
mainで生成して渡すくらいの設計変更はありなのかと。
func1とfunc2はコピペなんでしょ
0455デフォルトの名無しさん2014/11/03(月) 03:55:22.22ID:N6prQvSh
>>448
>100行くらいの処理があるんですが、中身は殆ど同じ

であれば、その100行くらいの同じ処理だけを記述したaaa関数を用意して
そのaaa関数とfunc1関数、aaa関数とfunc2関数と言う風に
それぞれの関数を組み合わせるように処理してはどうでしょうか
0456デフォルトの名無しさん2014/11/03(月) 04:14:35.20ID:GHCh+c9h
http://ideone.com/iQPu2U

こんな風にしてその100行程度の処理をfuncに纏めるのが一番簡単でオーバーヘッドが無く今までと同じように動くはず
そもそもClass1とClass2は別のクラスにする必要があるん?そこは変更できない所?
0457デフォルトの名無しさん2014/11/03(月) 06:31:39.40ID:fnGOptBY
func1,func2を一つにまとめるなら Class1,Class2も一つにまとめたいよな
引数が違うだけで処理内容は同じようなものだし
0458デフォルトの名無しさん2014/11/03(月) 08:18:02.22ID:N6prQvSh
>>457
つまりこういうことですね

#include <iostream>

class Class{
  int ii;
  double dd;
public:
  Class();
  void Run();
  void prt1(int i){printf("func1 i=%d\n",i);}
  void prt2(double d){printf("func2 d=%lf\n",d);}
};

Class::Class(){
  ii = 1;
  dd = 2;
}

void Class::Run(){
   prt1(ii);
   prt2(dd);
}

void main(){
  Class cc;
  cc.Run();
}

これはこんな風に1つのクラスにまとめてしまう癖がある
ここからメンバ関数を追加してprt1関数とprt2関数をどう料理しようかと考えるかな?
0459デフォルトの名無しさん2014/11/03(月) 08:32:12.56ID:N6prQvSh
もっと短くまとめるならこうしてもいいかw

#include <iostream>

class Class{
public:
  void Run(int , double);
  void prt1(int i){printf("func1 i=%d\n",i);}
  void prt2(double d){printf("func2 d=%lf\n",d);}
};

void Class::Run(int ii , double dd){
  prt1(ii);
  prt2(dd);
}

void main(){
  Class cc;
  cc.Run( 1 , 2 );
}

ここから100行のコードとやらをどう織り交ぜるかですね
コードの全文を見せてくれたら
短いコードにまとめることに挑戦してみたい気もするw
0460デフォルトの名無しさん2014/11/03(月) 10:55:21.77ID:N0odnBwS
Template Method パターン 使えない?
0461デフォルトの名無しさん2014/11/03(月) 11:43:38.94ID:C9Z/RfTt
これでいいんじゃない?
http://codepad.org/HSIDTYFP
0462デフォルトの名無しさん2014/11/03(月) 12:34:12.16ID:N6prQvSh
よし、できたw

#include <iostream>

class Class{
public:
  void Run(int , double);
  void prt1(int i){printf("func1 i=%d\n",i);}
  void prt2(double d){printf("func2 d=%lf\n",d);}
  void Onaji100();
};

void Class::Run(int ii , double dd){
   prt1(ii);
   prt2(dd);
}

void Class::Onaji100(){

  // 100行くらいのコード前編

  Run( 1 , 2 );

  // 100行くらいのコード後編

}

void main(){
  Class cc;
  cc.Onaji100();
}
0463デフォルトの名無しさん2014/11/03(月) 12:41:51.37ID:N6prQvSh
いや、やっぱこっちにしようw

#include <iostream>

class Class{
public:
  void Run(int , double);
  void prt1(int i){printf("func1 i=%d\n",i);}
  void prt2(double d){printf("func2 d=%lf\n",d);}
  void Onaji100(int , double);
};

void Class::Run(int ii , double dd){
   prt1(ii);
   prt2(dd);
}

void Class::Onaji100(iii , ddd){

  // 100行くらいの同じコード前編

  Run( iii , ddd );

  // 100行くらいの同じコード後編

}

void main(){
  Class cc;
  cc.Onaji100(1 , 2);
}
0464デフォルトの名無しさん2014/11/03(月) 12:49:40.78ID:N6prQvSh
ごめんごめん、ミスったw
こっちが正解だわ

#include <iostream>

class Class{
public:
  void Run(int , double);
  void prt1(int i){printf("func1 i=%d\n",i);}
  void prt2(double d){printf("func2 d=%lf\n",d);}
  void Onaji100(int , double);
};

void Class::Run(int ii , double dd){
   prt1(ii);
   prt2(dd);
}

void Class::Onaji100(int iii , double ddd){

  // 100行くらいの同じコード前編

  Run( iii , ddd );

  // 100行くらいの同じコード後編

}

void main(){
  Class cc;
  cc.Onaji100(1 , 2);
}
04654612014/11/03(月) 13:14:08.22ID:C9Z/RfTt
関数のオーバーロードが利くから Class::prt1(), Class::prt2() もまとめちゃっていいんじゃない?
0466デフォルトの名無しさん2014/11/03(月) 13:24:01.57ID:gzxZLKcA
みなさん、いろんなアイデア有難うございました。大変参考になります。
これらのアイデアを元にして、改良してみます。なおclass1と2は、実際はもう少し複雑な処理をするのと、処理内容が若干異なるので一つにまとめるのは無理があるかなあと思っています。
0467デフォルトの名無しさん2014/11/03(月) 14:01:47.26ID:N6prQvSh
>>466
がんばってね
0468デフォルトの名無しさん2014/11/03(月) 14:17:40.61ID:PZ/xM7RR
処理が同じで型が違う
templateを使わない理由があるだろうか?いや、ない
>>456でFAでしょ
0469デフォルトの名無しさん2014/11/03(月) 20:34:46.78ID:Cdjwvl/d
Class1、2を生成するbuilderクラスがいてもいいかなとは思った。
でも、func1、2の引数が違うあたり、コードがにてるだけで別の方向へ拡張されることは無いのかな?
統合は、目的と役割を意識しないと突然破綻する。
0470デフォルトの名無しさん2014/11/03(月) 23:08:19.80ID:hSdP9ipE
autoと言うのを知って勉強しているのですがよくわかりません
 int const * const p = nullptr;
 auto p2 = p;
このp2がint const *型になるらしいのですが
int const * const でもなく
int const * const & でもなく
int const *になるというのはどういったルールーになっているのでしょうか?
0471デフォルトの名無しさん2014/11/03(月) 23:16:35.89ID:hJid5R30
いや、ルールーにはなっていないと思うぞ。
0472デフォルトの名無しさん2014/11/03(月) 23:33:44.36ID:yTqbg0pj
ここでカードバトルが始まります
0473デフォルトの名無しさん2014/11/03(月) 23:37:45.51ID:vLChkxGX
〜* constは定数ポインタだから、const intのconstと同じ意味。

const int a = 123;
int b = a;
0474デフォルトの名無しさん2014/11/03(月) 23:44:11.57ID:qti+b2VY
ffx
0475デフォルトの名無しさん2014/11/03(月) 23:55:15.98ID:IpGBffRx
>>473は論理的思考のできない馬鹿。

命題
 int b = (const int)100;がコンパイルできるなら
 「?」 b2 = (const int)100;の「?」はintである
は真か?
0476デフォルトの名無しさん2014/11/04(火) 00:17:09.73ID:0eOV+naS
?がconst intでもintでも問題ない。だが自由度はintが勝る。
constが必要ならautoに付けておけばいい。
0477デフォルトの名無しさん2014/11/04(火) 00:37:12.15ID:OIFhoe2e
>>476はアスペ ヒキヲタDTニートのコミュ障。
0478デフォルトの名無しさん2014/11/04(火) 00:39:06.13ID:0eOV+naS
>>477
シネマ
0479デフォルトの名無しさん2014/11/04(火) 00:43:44.90ID:0eOV+naS
自分の間違いが認められないからって人格攻撃すんじゃねーぞ、ハゲタコ
0480デフォルトの名無しさん2014/11/04(火) 23:38:42.83ID:Rug3DE9L
>>475は紛れもないウンコ野郎
const int a = 0;
auto b = a; // bはint型
>>476はウンコと喋るアスペ ヒキヲタDTニートのコミュ障
0481デフォルトの名無しさん2014/11/05(水) 00:00:56.09ID:aCq1CxqU
しかし、autoって何とかならなかったのか?
次はentryでも使い回すのか?
0482デフォルトの名無しさん2014/11/05(水) 00:25:14.61ID:GT+3eS/X
>>481
C++にentryなんて識別子ありませんけど
0483デフォルトの名無しさん2014/11/05(水) 09:26:13.69ID:tYBGZQUI
C++はまだマシな方
Cなんて名前を衝突しないようにした結果
勉強する気も失せるくらい汚いキーワードだらけ
0484デフォルトの名無しさん2014/11/05(水) 11:56:09.66ID:bBYPRYMe
今の流行りは勉強する気も失せるくらい汚い文脈依存キーワードだらけ
0485デフォルトの名無しさん2014/11/05(水) 18:53:16.58ID:pjOZNQFt
>>484
文脈依存キーワードはfinalとoverrideだけじゃないの
あんま汚いとは思わないけど

class unko final : public unko_base {
public:
  void f() override final {}
};
0486デフォルトの名無しさん2014/11/05(水) 20:17:26.24ID:+x9XCqU/
>>483
え?たとえば?
0487デフォルトの名無しさん2014/11/05(水) 21:40:52.15ID:hovJhJ2c
>>486
_Alignas
_Alignof
_Atomic
_Bool
_Complex
_Generic
_Imaginary
_Noreturn
_Static_assert
_Thread_local

_Noreturnと_Static_assertみたいな統一性の無さは何なのかと
0488デフォルトの名無しさん2014/11/05(水) 21:47:49.87ID:CNahLZw/
しらんもんばっかりでてきたなw
一体どこのCなんだか。
0489デフォルトの名無しさん2014/11/05(水) 21:52:00.63ID:NzSYiW9O
C99すら知らん奴が何か言ってる
0490デフォルトの名無しさん2014/11/05(水) 22:03:31.49ID:Q9wGrCYd
C11は何処へ向かってるのかわからん
0491デフォルトの名無しさん2014/11/05(水) 22:17:15.38ID:/z/j+wh9
頑なに名前空間の導入を拒んだ結果がこれだよ!
0492デフォルトの名無しさん2014/11/05(水) 23:53:39.48ID:f4xTES2w
>>487
C++のCって当然それらをサポートする気ないんだろ
もうCとC++のCって違う言語になってきたんだな
0493デフォルトの名無しさん2014/11/06(木) 00:07:03.61ID:gP4K9KZX
Cの標準化委員会ってハゲと仲でも悪いのか
もうちょっとお互い歩み寄ろうぜ?
0494デフォルトの名無しさん2014/11/06(木) 00:26:11.91ID:xTDp5Iua
namespace は愚策だからどうでもいいけど
マングリングは入れるべきだったな
0495デフォルトの名無しさん2014/11/06(木) 00:54:59.47ID:ZDtXQLoJ
フーン全然知らんけど、アンスコ始まりなのはそのせいなのか。
てか_Genericしか聞いたことない
0496デフォルトの名無しさん2014/11/06(木) 00:58:42.38ID:gP4K9KZX
アンスコいうな
0497デフォルトの名無しさん2014/11/06(木) 01:06:01.78ID:ofOV7+3E
C: void f() {_Thread_local static int n;}
C++: void f() { thread_local int n; }

Cの機能の範囲で書いたコードがC++で通らないなんて糞すぎる
0498デフォルトの名無しさん2014/11/06(木) 01:13:01.32ID:PmjlTjUD
>>497
> Cの機能の範囲で書いたコードがC++で通らないなんて糞すぎる

何を今更
0499デフォルトの名無しさん2014/11/06(木) 01:26:13.80ID:vSFIErAp
>>498
C99で書いたコードはいまだにC++では駄目なんだろう
もうC++2014なのにC99は駄目って、何を今更だよな。
0500デフォルトの名無しさん2014/11/06(木) 06:38:27.89ID:PmjlTjUD
int* b=malloc(sizeof(int)*100);
C++で通らないCのコード
0501デフォルトの名無しさん2014/11/06(木) 06:46:01.73ID:noUJsPy0
Cは型に緩いからな
0502デフォルトの名無しさん2014/11/06(木) 21:02:25.11ID:ZGYm08Q2
ハーブサッター「C99対応はしません」
0503デフォルトの名無しさん2014/11/08(土) 11:47:50.09ID:mPKQy0O+
よし両方に対応させよう

#if defined(__cplusplus)
# define THREAD_LOCAL thread_local
#else
# define THREAD_LOCAL _Thread_local
#end

void fnc() {
 THREAD_LOCAL static int v;
 int* b=(int*)malloc(sizeof(int)*100);
}
0504デフォルトの名無しさん2014/11/08(土) 12:04:34.31ID:u3CaXMsI
大文字は嫌い
#ifndef __cplusplus
#define thread_local _Thread_local
#endif
つかstdbool.h相当のもんはねーのかなコレ
0505デフォルトの名無しさん2014/11/08(土) 13:10:35.10ID:9PbWBn7f
何のために両方
0506デフォルトの名無しさん2014/11/08(土) 15:26:31.09ID:d2K/ITfx
宗教戦争になるけど
#defineは他と完全に区別したいから大文字で識別子をつけるなあ
0507デフォルトの名無しさん2014/11/08(土) 15:48:03.09ID:u3CaXMsI
俺は関数やキーワードのエイリアスとして使うマクロに大文字ルールは必ずしも適用しないな
たしかに宗教戦争になる
0508デフォルトの名無しさん2014/11/08(土) 16:51:00.40ID:d2K/ITfx
Visual Studio 2014 CTP触ってる人いますか。
どうしてもコード通らなくてGCCに突っ込んでみたら通ったのですけれど、
これはバグなのか、それとも拡張とかで偶然通ってるのか教えてください。

http://ideone.com/P1RW7H

mylib::conditional_t は boostのものと同じです。
mylib::meta_bool は boolの値から std::true_type か std::false_type を生成します。
mylib::anyof は第一引数に述語メタ関数、それ以降に述語に渡す引数を指定して、第二引数以降の型リストの中に述語がtrueを返すものがあるかどうかを判定します。
( main関数最初のprintboolを参照してください。 )

問題はpred_orで、述語を統合して新しい述語を生成することが意図です。
例えば、std::is_void と std::is_integral を渡すと void と integral-type をマッチさせる述語を生成します。
( main関数2つめのprintboolを参照してください。 )

mylib名前空間にあるものに問題がないことを保証します(たぶん)。
pred_or の実装は少し複雑なメタ関数になっていますが、
79行目 typename pred_or < Body... >::template type < Ty > あたりでVSはコケているようですが、当然エラー文はアテになりません。

よろしくお願いします。
0509デフォルトの名無しさん2014/11/08(土) 17:41:39.84ID:bEhJQBB/
>>508

meta-predicate-or の特殊化のさせ方が変じゃない?

これでVC通ると思うが
http://ideone.com/7cKLN0
0510デフォルトの名無しさん2014/11/08(土) 17:57:55.98ID:d2K/ITfx
>>509
ウォオォオオオありがとうございます、通りました!!
全然私が気にして弄り回してたところと違ったのでとても助かりました
ありがとうございました!
0511デフォルトの名無しさん2014/11/08(土) 18:07:04.69ID:bEhJQBB/
>>510
ちょっと聞きたいんだけど、anyof とか pred_or の用途というか、実際にどう使うのかを教えて。
動作サンプルじゃなくて、「こういうことがしたいとき、こいつらが役立つ」ってやつ。
0512デフォルトの名無しさん2014/11/08(土) 18:38:05.49ID:d2K/ITfx
>>511
実は趣味でC++を触り始めてまだ1年ほど(その前にCを1ヶ月くらい勉強しました)で、新しい概念を取り込んでは弄り回すばっかりなのです。
ここ最近はメタ関数に打ち込んでいて、type_traitsの実装を眺めてたらこんなこともできる! と色々作ってみていたところだったのです。
なのであまり実用は考えてなかったというのが正直なところだったのですが、使うならSFINAEやコンセプトの判定に使ったりでしょうか…
0513デフォルトの名無しさん2014/11/09(日) 00:54:17.05ID:M361BJ1e
>>508-509
いまのC++って
template < class _Test, class _Ty1, class _Ty2 >
using conditional = std::conditional < _Test::value, _Ty1, _Ty2 >;
なんて出来るのか。これ、C++11、14、どっちなんだ
0514デフォルトの名無しさん2014/11/09(日) 01:20:55.35ID:sCVwZIOx
>>513
C++11, Alias template
0515デフォルトの名無しさん2014/11/09(日) 01:35:19.71ID:M361BJ1e
>>514
有難う
templateって糞長くなるときあるからtemplateのtypedef的なものあって良いよな
0516デフォルトの名無しさん2014/11/09(日) 08:26:22.82ID:fRLoLeal
>>513
昔から待ち望まれていたもので、やはり非常に便利だ。
ただ惜しいのは、書けるスコープが限定されてること。
関数の中でちょっと必要になったからってその場に書くことは出来ない。
0517デフォルトの名無しさん2014/11/09(日) 08:43:42.94ID:KHhjW+e6
privateメンバにアクセスする画期的な方法を思いついた。
おまえら知りたいか?
0518デフォルトの名無しさん2014/11/09(日) 11:04:50.60ID:YGX/79Mq
offsetof してmemset
0519デフォルトの名無しさん2014/11/09(日) 11:26:17.43ID:wpgGAMvu
#define private public
05205172014/11/09(日) 12:17:24.19ID:m2xsLIsq
>>519
このたわけめ
>>518
まあまあな発想だがprivateメンバはoffsetできんのだ
しょうがないから教えてやろうw
class test_dayon {
public:
void check() {
cout << m;
}
private:
hogehoge* hoge;
friend class hogehoge;
test_dayon(hogehoge* p){
hoge = p;
p.test = this;
}
};
class hogehoge {
test_dayon* test;
int test(){
return test->m;
}
friend class test_dayon;
};
int main() {
hogehoge hoge;
test_dayon test(&hoge);
cout << hoge.test() << endl;//プライベートをアクセス!!
}
相互にフレンドリするところが味噌だ
0521 ◆QZaw55cn4c 2014/11/09(日) 12:45:09.27ID:dwdWovit
>>520
コンパイルできないんだが‥
ideone か codepad に貼ってくれ
0522デフォルトの名無しさん2014/11/09(日) 16:04:24.76ID:SVRFGMXr
みんな友達の輪に入れてやればいいじゃん
0523デフォルトの名無しさん2014/11/09(日) 16:20:55.78ID:bgXiTjDP
質問です。Visual C++で謎の挙動に困っています。

http://ideone.com/PN7360
のサンプルなのですが
mainの前に値を覚えてmainで取り出しているつもりです。
しかし覚える値の型が「仮想継承したクラスのメンバへのポインタ」
の場合に限って異なる値が取り出せてしまいます。
GCCだと正しく動きます。
何かやり方がまずいのでしょうか
0524デフォルトの名無しさん2014/11/09(日) 20:52:16.94ID:Vau5E+lS
言語仕様を見直してprivateでもアスセス出来るようにしたらよくないですか?
register int n;
&n;
と同レベルで警告だけ。
既存のコードも影響ないはず。
0525デフォルトの名無しさん2014/11/09(日) 23:24:53.35ID:f045qkg9
struct hoge
{
 void age(){ sage< int >(); }
 template< typename T > void sage(){}
};
template<> inline void hoge::sage< int >(){}

VS2013で
エラー 1 error C2908: 明示的な特殊化; 'void hoge::sage<int>(void)' は既にインスタンス化されています。
エラー 2 error C2910: 'hoge::sage' : 明示的な特殊化にすることはできません。
とでます。
うまく特殊化するにはどうすればいいですか。
0526デフォルトの名無しさん2014/11/09(日) 23:42:25.77ID:ivFVAUXX
>>525
http://ideone.com/xfhf81
0527デフォルトの名無しさん2014/11/09(日) 23:45:32.42ID:fRLoLeal
struct hoge
{
template< typename T > void sage(){}
template<> void sage< int >();
void age(){ sage< int >(); }
};

template<> void hoge::sage< int >() {}
0528512 ◆QZaw55cn4c 2014/11/10(月) 01:10:03.92ID:x8aX3rE8
>>520
まだか?
0529デフォルトの名無しさん2014/11/10(月) 01:14:05.00ID:JRzPNX3C
定期的に湧く無意味な事を頑張るアホはほっといてやれよ
0530デフォルトの名無しさん2014/11/10(月) 12:19:36.69ID:5fw2t1kv
>>523
staticメンバ変数とグローバル変数の初期化タイミングの問題じゃないかな
関数とstaticローカル変数を使ったシングルトン的手法にしてみれば
ttp://ideone.com/YBKgQT
0531デフォルトの名無しさん2014/11/10(月) 16:10:54.33ID:rxYrHuXJ
これは読むべきっていう設計が綺麗なコードってありますか?
0532デフォルトの名無しさん2014/11/10(月) 17:20:06.80ID:H0dF1SvN
マルチすんなカス死ね
05335232014/11/10(月) 18:31:03.02ID:X6HQT2Fj
>>530
試してみます!ありがとうございます

グローバル変数のコンストラクタの後にゼロ初期化が走っているような
挙動だったので怪しいとは思っていましたが、やはりタイミングですか。。
0534デフォルトの名無しさん2014/11/10(月) 18:34:49.67ID:PIy5tpss
>>531
つ http://www.pro.or.jp/~fuji/mybooks/cdiag/cdiag.1.2.html
0535デフォルトの名無しさん2014/11/10(月) 20:34:10.67ID:z0LTTBXI
>>526
これでうまくいきました

>>527
こっちはVCだといけたけどarmのなんちゃらではだめでした
0536デフォルトの名無しさん2014/11/10(月) 22:46:12.62ID:p3rDMgdK
>>528
privateアクセスはテンプレートの特殊化使うやつが王道だろ。
何年か前に見たけどこんな感じ
http://ideone.com/0mjF1L
0537デフォルトの名無しさん2014/11/11(火) 06:55:09.77ID:99v8OZfb
double x::* って何ですか?
0538デフォルトの名無しさん2014/11/11(火) 07:08:37.14ID:bgJKYijO
メンバ変数へのポインタ
0539デフォルトの名無しさん2014/11/11(火) 10:21:57.52ID:+zIxmZb5
プレインな機能より複雑なものは使ったら負けかなと思う
0540デフォルトの名無しさん2014/11/11(火) 22:10:10.38ID:P9zO5vlj
標準type_traitsのSFINAEテクニックが黒魔術のかたまりだというのに
何をプレインと言うのか
0541デフォルトの名無しさん2014/11/11(火) 23:12:24.62ID:0yMQgPtM
>>540
そんな個所に黒魔術なんかあったっけ?
0542デフォルトの名無しさん2014/11/12(水) 00:30:47.64ID:yfOFknA+
>>540にとってはそうなんだろ
0543デフォルトの名無しさん2014/11/18(火) 06:12:02.52ID:5SkfsGvC
#include <future>
#include <thread>
#include <iostream>

class MyClass{
public:
   int m_x, m_y;
   MyClass(int x, int y){
      this->m_x = x;
      this->m_y = y;
   }
   int add(){
      return m_x + m_y;
   }
};

template<class C> int func2(C &mc){
   return z = mc.add();
}

void main(){
   MyClass mc(10, 20);
   std::packaged_task<int(MyClass)> tsk(func2);   // このあたりの書き方が
   std::future<int> ret = tsk.get_future();
   std::thread th = std::thread(std::move(tsk), mc); // 分りません。
   int z = ret.get();
   printf("z = %d\n", z);
   th.join();
}
std::threadでテンプレート関数func2を呼び出すことは可能でしょうか?
ググってもさっぱり分らないので教えて下さい。よろしく。
0544デフォルトの名無しさん2014/11/18(火) 06:55:44.18ID:5SkfsGvC
訂正
誤 return z = mc.add();
正 return mc.add();
0545デフォルトの名無しさん2014/11/18(火) 08:15:00.65ID:ZuiIPd1e
>>543
こうか?
   MyClass mc(10, 20);
   std::packaged_task tsk([&mc]{
return mc.add();
});
   std::future<int> ret = tsk.get_future();
   int z = ret.get();
0546デフォルトの名無しさん2014/11/18(火) 08:21:21.36ID:5SkfsGvC
レス有難うございました。
書くのを忘れていたのですが、使っているのはVS2013のC++なんですが、
545さんのコードを入れたら
 IntelliSense: クラス テンプレート "std::packaged_task" の引数リストがありません
というエラーになります。
0547デフォルトの名無しさん2014/11/18(火) 11:06:10.49ID:4NAmYBh0
>>543
std::packaged_task<int(MyClass &)> tsk(&func2<MyClass>); // このあたりの書き方が
...
std::thread th = std::thread(std::move(tsk), std::ref(mc)); // 分りません。
0548デフォルトの名無しさん2014/11/18(火) 16:06:55.24ID:nqmEmvVP
これで通ったが

int main() {
MyClass mc(10, 20);
std::packaged_task<int(MyClass&&)> tsk(&MyClass::add);
std::future<int> ret = tsk.get_future();
std::thread th = std::thread(std::move(tsk), mc);
int z = ret.get();
std::cout << "z = " << z << std::endl;
th.join();
}
0549デフォルトの名無しさん2014/11/18(火) 17:40:06.80ID:5SkfsGvC
みなさんレスありがとうございました。
547さんの方法で上手く行きました。

その後、良く分らないまま試行錯誤していたら、二か所の&が有っても無くてもVS2013 C++では実行できたのですが、


std::packaged_task<int(MyClass &)> tsk(&func2<MyClass>); // このあたりの書き方が(1) 547さんオリジナル
std::packaged_task<int(MyClass &)> tsk(func2<MyClass>); // このあたりの書き方が(2)
std::packaged_task<int(MyClass)> tsk(&func2<MyClass>); // このあたりの書き方が(3)
std::packaged_task<int(MyClass)> tsk(func2<MyClass>); // このあたりの書き方が(4)

(1)以外はたまたま動いたということでしょうか?なお、(2)(4)は

IntelliSense: コンストラクター "std::packaged_task<_Ret (_ArgTypes...)>::packaged_task [代入_Ret=int, _ArgTypes=<MyClass &>]" のインスタンスが引数リストと一致しません
引数の型: (<unknown-type>)
みたいな警告が出ますが、実行できます。
threadって難しいですね。さっぱりわからない。

548さんの方法ではVS2013C++ではエラーでビルドできませんでした。
error C2664: 'void std::packaged_task<int (MyClass &&)>::operator ()(MyClass &&)' :
引数 1 を 'MyClass' から 'MyClass &&' へ変換できません。
c:\program files (x86)\microsoft visual studio 12.0\vc\include\xrefwrap 58 1

とにかくいろいろありがとうございました。
0550デフォルトの名無しさん2014/11/18(火) 20:14:06.75ID:nqmEmvVP
>>548はgcc4.9.2での結果だよ
CLangではどうなるんかな?
0551デフォルトの名無しさん2014/11/19(水) 16:06:51.72ID:aCVs5KcF
>>547さんの方法だとgcc4.9.2で

try {
z = ret.get();
}
catch (const std::future_error& e) {
std::cout << e.what() << std::endl;
}

No associated state

となってしまう
コンパイラによって挙動が違うのか?
0552デフォルトの名無しさん2014/11/19(水) 16:17:28.89ID:aCVs5KcF
くそ、Clang入れて比較してみる
0553デフォルトの名無しさん2014/11/20(木) 05:56:16.37ID:scCp81fx
質問です。
void plus(int &a,int &b ,int &c{c=a+b;}
ここでaとbのアドレスが静的に同じならば
void plus(int &a,int &c{c=a+a;}
aとcが同じならば
void plus(int &a,int &b{a=a+c;}
,and so on.
のように自動で関数を生成して呼び出すことはできますか?
0554デフォルトの名無しさん2014/11/20(木) 06:11:35.07ID:TrsJQyqJ
>>553
その前提なら一個目と二個目一緒じゃん。
三個目bはどこいったん?
0555デフォルトの名無しさん2014/11/20(木) 06:27:50.92ID:scCp81fx
3個めは間違えました。
bをcに置き換えよろしくお願いします。
0556デフォルトの名無しさん2014/11/20(木) 06:30:58.89ID:scCp81fx
1個目と2個目の違いは関数に渡す引数が少なくてすむことです。
0557デフォルトの名無しさん2014/11/20(木) 07:01:00.62ID:NeVUFuiv
できません
0558デフォルトの名無しさん2014/11/20(木) 07:02:08.64ID:hEWhG4fb
関数に渡す引数が少ないと何が嬉しいの
0559デフォルトの名無しさん2014/11/20(木) 07:07:37.71ID:Tjnke0pB
スタックに乗せるコストとか?
そんなことならfastcallいいじゃんね
0560デフォルトの名無しさん2014/11/20(木) 07:13:10.73ID:TrsJQyqJ
>>559
普通にinline展開で良いと思うけど

何がしたいのかわからんけど本当にスタック消費の話であればバカの考える最適化ってほんと無駄でしかないって事の見本だな。
0561デフォルトの名無しさん2014/11/20(木) 08:09:52.28ID:ETx3qczZ
>>527
テンプレート特殊化ってクラスの中ではできないと思ったけど
なんで通るんだ?
14.7.3 Explicit specialization
P2
An explicit specialization shall be declared in a namespace enclosing the specialized template
0562デフォルトの名無しさん2014/11/20(木) 10:06:52.24ID:BgWocquL
>>561
vc++の規格違反
…というより標準C++と直接の関係は無い独自のC++方言であるVC++という言語での仕様
ttp://stackoverflow.com/questions/3052579/explicit-specialization-in-non-namespace-scope
0563デフォルトの名無しさん2014/11/20(木) 11:01:48.63ID:3nar01e/
VCははよconstexprフル実装しろ
つかはよVS2015リリースしろ
0564デフォルトの名無しさん2014/11/20(木) 14:26:03.16ID:uBJa9BCk
>>553
二番目は一番目で事が足りるだろう。
三番目は、bをcに置き換えるとvoid plus(int & a, int & c) {a = a + c;}となって
void plus(int & a) {a += a;}になってしまいそうなんだが。
それが説明の間違いだとしたら、やはり一番目で事が足りそうだ。
0565デフォルトの名無しさん2014/11/20(木) 14:39:28.35ID:knj2VTr5
>>563
VS2015っていつごろなんだろな
もうプレビュー出てるし来年の早いうちにはでるかな
めんどいから5の倍数年のリリースしか入れぬ
0566デフォルトの名無しさん2014/11/20(木) 14:46:27.28ID:EwXerdR3
まあレガシーなC++の機能しか使わないんであれば、そう頻繁に開発環境を更新する必要もないしね。
0567デフォルトの名無しさん2014/11/20(木) 17:39:26.39ID:Md1N5omv
質問です。
template<typename T>
void f() {
 static_assert(false, "aaa");
}
int main(){}
というコードがVC++だと通るのですがg++だとエラーになります。
テンプレートインスタンス化の時点でエラー判定
するのが自然ではないかと思うのですが
どうしてg++だとエラーになるのでしょうか?
0568デフォルトの名無しさん2014/11/20(木) 19:02:31.82ID:GbKt4AUc
VCがうんこだからです
0569デフォルトの名無しさん2014/11/20(木) 19:24:08.80ID:yLyj3wB/
A「VCとGCCでこの様な動作の違いがある
 VCが正しいのでは
B「VCは糞

Bは会話のできないアスペ
0570デフォルトの名無しさん2014/11/20(木) 19:47:34.23ID:Dot4vBSi
先生はうんこじゃありません
0571デフォルトの名無しさん2014/11/20(木) 20:44:18.59ID:0zaPf18Z
>>567
http://stackoverflow.com/questions/14637356/static-assert-fails-compilation-even-though-template-function-is-called-nowhere

どちらでも文句は言えない
0572デフォルトの名無しさん2014/11/20(木) 21:49:35.38ID:g8XTKwkF
テンプレートの部分特殊化なら使いまくってるけどな
0573デフォルトの名無しさん2014/11/20(木) 23:48:14.49ID:RQaSz/aQ
int a[100];
int *p;

p=a;

delete [] p;

がgcc4.7.2でビルド実行されるけど、この時、配列aは本当にdeleteされるの?
それとも無視されるの? まったく、アホなコードだけど。ちなみに、

delete [] a; 

だと警告がでる。
0574デフォルトの名無しさん2014/11/20(木) 23:51:05.91ID:OR5YYWfS
>>571
これでOK
template<typename T>
void f() {
 static_assert((static_cast<T*>(nullptr),false), "aaa");
}
int main(){}

>>573
そのコードはundefind behavior
0575デフォルトの名無しさん2014/11/20(木) 23:57:24.12ID:RQaSz/aQ
>>574

>そのコードはundefind behavior

つまり、「何が起こっても知らないよ」という奴ですか?
0576デフォルトの名無しさん2014/11/21(金) 00:08:26.45ID:gIUtG8Vl
>>575
イエス、マダーム
0577デフォルトの名無しさん2014/11/21(金) 00:09:46.96ID:gIUtG8Vl
ちなみにID変わったけど
>>576=>>574
0578デフォルトの名無しさん2014/11/21(金) 06:42:46.17ID:bT+kokin
--------------------------------------------
template<typename Container, typename Index>
decltype(auto)
authAndAccess(Container&& c, Index i)
{
authenticateUser();
return std::forward<Container>(c)[i];
}
---------------------------------------------
std::deque<std::string> makeStringDeque(); // factory function
auto s = authAndAccess(makeStringDeque(), 5);
---------------------------------------------
このC++14のコードでsの型が&std::stringにならないでstd::stringになるのは
なぜですか?authAndAccessの第一引数にlvalueを入れると参照になるらしいです。
0579デフォルトの名無しさん2014/11/21(金) 06:52:16.95ID:QcsmP8sQ
スレ違いは去れ
0580デフォルトの名無しさん2014/11/21(金) 07:22:05.12ID:hRQqxbac
よくわからんがたぶん
auto
authAndAccess(Container&& c, Index i)
-> decltype((std::forward<Container>(c)[i]))
{
}
0581デフォルトの名無しさん2014/11/21(金) 11:37:50.43ID:PqjDKRiy
>>578
auto s = ... の形では初期化子がなんであれsは参照にはならない
sを参照にしたければ decltype(auto) s = authAndAccess(makeStringDeque(), 5);
あるいはただのautoだけを使う場合は auto & s = authAndAccess(makeStringDeque(), 5); とか書く
0582デフォルトの名無しさん2014/11/21(金) 11:38:26.70ID:xkc9s2op
throwするエラー情報物体を定義しようと思います。

・エラー情報構造体
・エラー情報クラス

どちらが優位なんでしょう?_・」
0583デフォルトの名無しさん2014/11/21(金) 11:48:08.68ID:qLCHZ6x8
>>582
> ・エラー情報クラス

言語にもよるけど、こっちのが良い場合が多いと思う。
なぜなら、ベースクラスで一括でcatchすることもできるし、個別のクラスでcatchすることもできるから。
それに、インスタンスメソッドも使えるしね。
0584デフォルトの名無しさん2014/11/21(金) 12:14:19.47ID:xkc9s2op
>ベースクラスで一括でcatchすることもできるし

なるほど、設計の綺麗さから言うと、100%クラスですね。

>インスタンスメソッド

って、要りますか?
0585デフォルトの名無しさん2014/11/21(金) 12:34:49.08ID:bT+kokin
>>581
ありがとうございます。
authAndAccess(makeStringDeque(), 5)の型はstd::string&なのですが、
typeid((makeStringDeque(), 5))::name()はSsでsの型と同じだったのですが
なぜでしょうか。
0586デフォルトの名無しさん2014/11/21(金) 12:52:58.06ID:qLCHZ6x8
>>584
> >インスタンスメソッド

エラーメッセージやスタックトレース等を、クラスごとにいい感じで整形して表示するメソッドを提供するとか。
0587デフォルトの名無しさん2014/11/21(金) 13:04:43.36ID:PqjDKRiy
>>585
typeidは参照を取り除いた型の型情報を返すから
0588デフォルトの名無しさん2014/11/21(金) 13:09:41.61ID:bT+kokin
ありがとうございます。
boost使ってもう一回調べてみます。
0589デフォルトの名無しさん2014/11/21(金) 13:13:19.77ID:bT+kokin
>>579
すみませんでした、二度とこのスレには書き込みません。
0590デフォルトの名無しさん2014/11/21(金) 17:50:56.96ID:9qivY6oH
>582
>・エラー情報構造体
>・エラー情報クラス

C++に構造体はありません。
優位以前に用語を正しく使ってください。
0591デフォルトの名無しさん2014/11/21(金) 18:25:11.23ID:xkc9s2op
このスレの流れで、

>C++に構造体はありません。

って言ってしまうと、
「C++では構造体を使えません」という文意になるよね。

C++で構造体は使えるよ???
0592 ◆QZaw55cn4c 2014/11/21(金) 18:40:51.50ID:9WrlNOac
>>590
C++に構造体はあるんじゃないの?
0593デフォルトの名無しさん2014/11/21(金) 18:48:57.39ID:PTqBTGLu
ねーよ馬鹿ども
0594デフォルトの名無しさん2014/11/21(金) 18:53:16.40ID:QZ7tZ7Fi
?structキーワードが普通に使えますが?
0595デフォルトの名無しさん2014/11/21(金) 19:00:56.64ID:2cbiUBRX
「構造体」って言葉が何を指すのかはっきりさせないと
無いとも有るともこじつけられる
0596デフォルトの名無しさん2014/11/21(金) 19:02:21.66ID:PTqBTGLu
>>594
で?
仮想関数もデストラクタも使える既定でpublicなだけのクラスを定義するstructが使えるから何?
0597デフォルトの名無しさん2014/11/21(金) 19:05:27.18ID:O7gTtOKh
>>595
まあ「クラス」並にふわふわした言い方であることは間違いない
0598デフォルトの名無しさん2014/11/21(金) 19:06:01.84ID:QZ7tZ7Fi
結局オレ定義で構造体ないってのかよ
Cと共有できるPOD型構造体だって作れるだろうに
0599デフォルトの名無しさん2014/11/21(金) 19:09:18.83ID:2cbiUBRX
JISの定義にはとりあえず存在するよ
"構造体は,《クラスキー》structを付けて定義するクラスとする。"
0600デフォルトの名無しさん2014/11/21(金) 19:12:35.60ID:QZ7tZ7Fi
定期的にC++には構造体はないって主張する奴がいたけど
実用的にも定義的にも存在するってことだな
無論クラスのサブセットとして
0601デフォルトの名無しさん2014/11/21(金) 19:21:38.52ID:XqCFqcOo
標準ライブラリのコンテナ群はSTLじゃないって連中と同じ臭いがするな。
0602デフォルトの名無しさん2014/11/21(金) 20:17:30.33ID:VVhfey73
STLという用語はC+11以降使わないのか?

なんかコンテナとアルゴリズムという用語が多いような。
0603デフォルトの名無しさん2014/11/21(金) 20:27:07.80ID:phJWTXbI
Clangまだだめだなこりゃ
VS 2013をツールチェーンにして
std::threadとstd::futureを使おうとすると

c:\program files (x86)\microsoft visual studio 12.0\vc\include\concrt.h(4774): error C3861: '__uncaught_exception': 識別子が見つかりませんでした

なんて出る
もちろん

/GR- /D_HAS_EXCEPTIONS=0

も指定してるけどダメ

という事でVCとgccの比較しか出来ないな今のところ
0604デフォルトの名無しさん2014/11/21(金) 20:47:45.79ID:8zZQIEvj
>>599
以前はそんな定義も有ったけど今の規格では定義が修正されて
構造体は無くなった筈
君が使ってるのは11年前の化石コンパイラーなの?
0605デフォルトの名無しさん2014/11/21(金) 20:56:43.40ID:OZreIA4g
Cの範囲内の構文で定義することができ、Cの構造体とのインタフェースとして使用可能な、C++上の 何がしか を便宜的に構造体と呼ぼう
0606デフォルトの名無しさん2014/11/21(金) 20:58:24.19ID:OZreIA4g
定義でき、は要らないか
0607デフォルトの名無しさん2014/11/21(金) 20:59:01.48ID:9WrlNOac
>>604
具体的に
0608デフォルトの名無しさん2014/11/21(金) 21:08:05.29ID:2cbiUBRX
>>604
具体的にどの文書で打ち消された(or消滅した)のか言ってくれないと困る
わざわざ"構造体(structure)"という文言を文書から抹消しなくちゃいけなくなったのなら興味深い
0609デフォルトの名無しさん2014/11/21(金) 21:51:37.84ID:hjbuKfth
>>582-583でクラスと構造体が決定的に違う何かのように用語を使ったのが悪いので、その二人をまず叩こう。
0610デフォルトの名無しさん2014/11/21(金) 21:56:03.22ID:z6ESDxk5
A「JIS X 3014:2003ではこうかかれている!
B「その定義は改訂された!
C「どの文書で改訂されたのか!?

ISO 14882:2003を訳したJISが改訂されていないんだから
ISO 14882:2011以外に有り得ないだろうに低脳は
0611デフォルトの名無しさん2014/11/21(金) 22:08:27.14ID:gIUtG8Vl
>>609
ISO/IEC 14882:1998と2003では
>>582-583で正しいので
叩かないでください。
ちょっと情報が古いだけです。
0612デフォルトの名無しさん2014/11/21(金) 22:28:41.39ID:/FjHZOth
>>602
最初からそんな用語は無い
有るというなら1998年規格のどのページに書いてあるのか言ってみろ
0613デフォルトの名無しさん2014/11/21(金) 23:56:25.28ID:cDn/MZSK
規格厨 知識自慢のまとめ
・C++に構造体はない(らしい)
・C++規格のコンテナやアルゴリズムはSTLとは言わない(らしい)
・処理系提供のヘッダー以外のincludeファイルを
 「ヘッダー」と呼んではいけない(らしい)
・インスタンスと言ったらオブジェクトでなくテンプレートのこと(らしい)
0614デフォルトの名無しさん2014/11/22(土) 05:52:44.28ID:ROyo8ZjH
intなどの組み込み型の配列の添え字の型は規定されてますか?
0615デフォルトの名無しさん2014/11/22(土) 05:55:34.98ID:row4W7Ki
>>614
同じことでしょ
0616デフォルトの名無しさん2014/11/22(土) 06:15:25.58ID:18N8Upow
>>614
配列の宣言: std::size_tに変換可能な型
配列のインデックスアクセス:整数
ポインターの加減算:integral type

「integral type」はchar,intなどの整数型に加えwchar_t,bool などを含む。
0617デフォルトの名無しさん2014/11/22(土) 10:46:54.64ID:0WzJgSsg
最近書くclassとstructの割合は8:1くらいだな
class なんとか {

やむなくclassにするって感じ
0618デフォルトの名無しさん2014/11/22(土) 10:50:29.95ID:0WzJgSsg
途中で書き込んでしまった
privateが無い方がムダがなくていい
0619デフォルトの名無しさん2014/11/22(土) 10:57:53.34ID:SaKq1orW
プライベートは欲しい、仕事だけなんてヤダヤダ
0620デフォルトの名無しさん2014/11/22(土) 11:34:53.77ID:rrzuQBQt
彼女がいないプライベートはいるのか?
0621デフォルトの名無しさん2014/11/22(土) 11:47:14.01ID:A5WZOELB
>>605
逆
c++のクラス自体がcの構造体を拡張したものだから、cの構造体と互換性のあるものは、自動的にクラスでもあり構造体でもあることになる。
0622デフォルトの名無しさん2014/11/22(土) 11:47:58.90ID:0WzJgSsg
全部privateでfriendもないクラスか。
斬新な発想だ。使い途を考えてみよう。
0623デフォルトの名無しさん2014/11/22(土) 11:52:32.92ID:4W6g/VMc
621は論理的思考の出来ない馬鹿
0624デフォルトの名無しさん2014/11/22(土) 12:01:24.97ID:A5WZOELB
名前空間を占有して同じ名前を作らせないことはできる。
sizeofでサイズは取れる。
0625デフォルトの名無しさん2014/11/22(土) 16:14:57.46ID:mfqPLINB
ディスパッチ用のタグじゃね
0626デフォルトの名無しさん2014/11/22(土) 19:08:35.46ID:0WzJgSsg
それじゃメンバが不要だから。
0627デフォルトの名無しさん2014/11/23(日) 00:34:23.40ID:USxuilQQ
ID:0WzJgSsg は会話の出来ないアスペ
0628デフォルトの名無しさん2014/11/23(日) 16:12:33.19ID:953N3eH5
methodメンバ関数を持つかどうかで仕分けするメタ関数を作りたくてとりあえずSFINAEでオーバオーロードすることを考えているんだけど
こんなふうに作った。
http://ideone.com/iq6uZ3

confirmが判断する関数で、戻り値にSFINAEを適用してて、
void method()をメンバ関数に持っていればstd::true_typeを、持っていなければstd::false_typeが戻り値になる関数になっているのだけれど、
GCCならこの通りうまくいくんだけどVisual Studio 2014CTPだと両方std::false_typeが返ってきちゃうんだ

ってことはどっかに未定義動作が含まれてるんだと思うのだけれど、わかる方いませんか
0629デフォルトの名無しさん2014/11/23(日) 16:44:44.95ID:/0kLZ+hc
未定義未規定でなく
どちらかが間違ってるに一票
0630デフォルトの名無しさん2014/11/23(日) 17:12:09.80ID:CR1zTSeb
>>628
テンプレートと非テンプレートが有ったら
非テンプレートが選ばれると思ってた
0631デフォルトの名無しさん2014/11/23(日) 18:04:40.06ID:rJsYj8HK
>>628
Visual C++の11/18版アルファビルドだとtrueになる模様
http://webcompiler.cloudapp.net/

clangもtrueになるのでVCのバグだろう
0632デフォルトの名無しさん2014/11/23(日) 18:16:13.16ID:953N3eH5
>>629-631
ありがとう
こいつのせいで土曜日を潰した
0633デフォルトの名無しさん2014/11/23(日) 19:03:34.43ID:cfDrJbxW
初歩的な質問ですみませんが、

コンストラクタでクラスのメンバ変数を設定したいとき、読みやすさから考えてパラメーター名と変数名を同じにしようと思ったのですが
thisキーワードに「式にはクラス型が必要です」のエラーが出ます。どうしたらいいんでしょうか?

class hoge
{
int value;
hoge(int value);
}

hoge(int value)
{
*this.value = value;
}
0634デフォルトの名無しさん2014/11/23(日) 19:04:56.49ID:gLhfEvRo
hoge::hoge(int value) : value(value) {}
0635デフォルトの名無しさん2014/11/23(日) 19:05:56.59ID:JoMNOld1
>>633
this (ポインタ)経由のメンバアクセスなら this->value あるいは (*this).value で。
コンストラクタで初期化したいなら >634 で。
0636デフォルトの名無しさん2014/11/23(日) 19:06:25.58ID:Rv8Citpb
>>634
横だけどそんなんできたのか
0637デフォルトの名無しさん2014/11/23(日) 19:08:35.56ID:cfDrJbxW
>>634-635さん
ありがとうございました
かっこつけたら通りました
本当にありがとうございましたあああ
0638デフォルトの名無しさん2014/11/23(日) 19:23:46.85ID:Rv8Citpb
this->value = valueの右辺ってメンバーか引数かコンパイラが見分けつくものなの?
0639デフォルトの名無しさん2014/11/23(日) 19:28:55.37ID:vO8N+N37
ローカルのほうが優先だから
0640デフォルトの名無しさん2014/11/23(日) 19:36:42.77ID:Rv8Citpb
そうだったのか〜
しらなかった
一生懸命別名考えてたw
0641デフォルトの名無しさん2014/11/23(日) 20:04:47.38ID:953N3eH5
>>630
型変換なし非テンプレート > テンプレート > 暗黙の型変換非テンプレート > ...演算子(何でも受け取る, cdeclのみ)
だった気がするよ
0642デフォルトの名無しさん2014/11/23(日) 22:20:28.56ID:amUFvmRp
超初心者ですが質問を一つ。
Visual stdio2013がフリー化されたので自分の仕事用のアプリを作ろうとしています。
(www cactussoft co jp/Sarbo/divBeginPrgCP html)を参考にしています。

エディットボックスにファイル名が入力されているのか確認したいのですが、

if (m_strFilePath == NULL){
MessageBox(_T("ファイル名が指定されていません"), _T("エラー"), MB_ICONERROR | MB_OK);
}else{
m_xcProgress.SetPos(3);
}
UpdateData(FALSE);

で動きません。ファイルの存在確認まで教えて下さい。お願いします。
0643デフォルトの名無しさん2014/11/23(日) 22:37:31.09ID:7yqymy8T
>>642
限定的な情報しか与えられていない上に、最低限「どう動かないのか?」も書かれていないとなると、誰も答えられないと思うよ。
時々超エスパーがいるから、そういう人に頼っているのかもしれないけど。
0644デフォルトの名無しさん2014/11/23(日) 22:39:32.08ID:4iH8sv6P
>>642
環境依存スレで質問してくれ
this->UpdateData();
if (this->m_strFilePath == _T(""))
じゃないのか

>>632
↓こんな感じでどう?
http://ideone.com/sKXuJK
0645デフォルトの名無しさん2014/11/23(日) 22:47:05.24ID:amUFvmRp
642です。すいません、エラーで頭がどうかしてました。

VC側のエラーは「引数リスト '(CString, int)' を一致させようとしているとき」と出ています。
error C2593: 'operator ==' があいまいです。 と最初に出ています。

>644様の通りで通りました。
ありがとうございました。
NULL万能だと思ってたのに。。。。厳格すぎる。
0646デフォルトの名無しさん2014/11/23(日) 22:51:02.11ID:QHZ/jO6T
寧ろ>645の頭が緩過ぎるんだろ。
0647デフォルトの名無しさん2014/11/23(日) 22:51:05.49ID:KUMpdGac
>NULL万能だと思ってたのに。。。。厳格すぎる

それ、厳格とかじゃなくて
C++がC#/Javaと考えが異なる所の根幹だから
0648デフォルトの名無しさん2014/11/23(日) 22:52:42.51ID:x3sx5vaM
nullと空文字リテラルは違うだろ…
null万能とか勘弁してくれ
0649デフォルトの名無しさん2014/11/24(月) 02:01:11.60ID:3jV5I9o7
>>644
レスありがとう
だけど、それじゃあだめなんだ。
引数があるバージョンを定義した場合、引数を渡すとどうしても暗黙の変換が起こる
(ヘルパの定義で整数型同士の変換とかは防げてもconstやreferrenceは防げない、さらに戻り値も指定できない)
ので、引数を渡さない方法を考えたんだけど……

http://ideone.com/VJgAGz
実際にメタ関数を作ってみたら、GCCでも動かないんじゃ使い物にならん

アドレスの型も取れないとしたらどうしたらいいのやら…
0650デフォルトの名無しさん2014/11/24(月) 10:10:45.95ID:sgGvWpbg
>>633がダメなのってhoge::hoge(int value)じゃないからじゃ
0651デフォルトの名無しさん2014/11/24(月) 11:27:15.51ID:fEDkGqiu
普通空かどうかは==でもなくemptyメソッド使うよな
0652デフォルトの名無しさん2014/11/24(月) 11:32:35.20ID:oLVsuOeh
普通はな
NULLと区別が付かない馬鹿に強調して覚えさせるにはいいだろう
0653デフォルトの名無しさん2014/11/24(月) 20:53:46.48ID:2saiCoSE
>>649
gcc 4.9.0 で両方ともtrue になるけどそれでOK?
0654デフォルトの名無しさん2014/11/24(月) 21:19:59.70ID:2saiCoSE
このconfirmtって関数、const版と非const版のメンバ関数があり得ることを考慮してコーディング
しようとすると面倒なことが起きないか?
0655デフォルトの名無しさん2014/11/25(火) 01:10:02.80ID:mm5pAxId
>>649
http://ideone.com/Srs4gi
0656デフォルトの名無しさん2014/11/25(火) 07:39:16.03ID:ljgVcsVa
江添さんチーッス
0657デフォルトの名無しさん2014/11/25(火) 20:34:24.62ID:zeaofDXp
お前らh-o-g-eとか使ってると
またQが荒らしにくるぞ
0658デフォルトの名無しさん2014/11/25(火) 21:55:48.77ID:mm5pAxId
あっホントだ
元のコードにあったからうっかりそのまま残しちゃったじゃないかー!
0659デフォルトの名無しさん2014/11/26(水) 02:10:02.14ID:0QLkzEdU
今はID出てるから荒らしにくいだろ

強いて言えばQの書き込みを確認後 h o g e と書いて荒らされた後QのIDを見て
変わっていたらIDを変えて荒らしたとみなすくらい
0660デフォルトの名無しさん2014/11/27(木) 08:58:06.24ID:SL56IrD7
ファイルはどう分割したらいいのか分かりません
教えてください
javaのようにクラスや関数ごとにファイルを作りますか?
0661デフォルトの名無しさん2014/11/27(木) 11:31:13.28ID:s6v6wpOO
一個でいいよ
main.cpp
0662デフォルトの名無しさん2014/11/27(木) 11:42:43.78ID:PqE1QkEI
エディタの折り畳み機能が普及した今では強ち間違いでもない
0663片山博文MZ次期CEO ◆T6xkBnTXz7B0 2014/11/27(木) 11:49:19.24ID:349+7nGh
>>660
再利用する機能や単体試験するまとまりで分けるといいよ
0664デフォルトの名無しさん2014/11/27(木) 13:32:27.35ID:h1qlAPx0
>>661-663 も間違いではないけど、
基本はクラスごとじゃないかね。
0665デフォルトの名無しさん2014/11/27(木) 13:51:52.05ID:r+bsdp9/
>>662
> エディタの折り畳み機能が普及した今では強ち間違いでもない
ファイルの変更履歴が全部main.cppなんですが。
0666デフォルトの名無しさん2014/11/27(木) 21:15:19.52ID:5nk9uWA6
クラスごとにファイル分割しろって、どういう粒度でクラスを作ってんのかな?
0667デフォルトの名無しさん2014/11/27(木) 21:35:28.79ID:mrCuQuxO
アプリケーションとドックとビューの3つ
0668デフォルトの名無しさん2014/11/27(木) 22:19:08.72ID:5nk9uWA6
じっさいのところ気になって最近書いたクラスを見たら、平均すると5〜6行くらいのところだった。
この単位でファイル分割したら大変なことになってしまう。
0669デフォルトの名無しさん2014/11/27(木) 22:54:53.47ID:cuJ5rv8l
クラスの実装が?
0670デフォルトの名無しさん2014/11/27(木) 22:58:52.66ID:5nk9uWA6
>>669
書き方によるけど、長くて30行くらい、短くて2行とかだから。
0671デフォルトの名無しさん2014/11/27(木) 23:02:12.86ID:cuJ5rv8l
>>670
> 短くて2行とかだから。

それ、中身あるんか? w
0672デフォルトの名無しさん2014/11/27(木) 23:16:00.90ID:O0FTx3e8
1行目、クラス名と開き括弧
2行目、閉じ括弧
以上

その部分抜かしても
publicで1行、コンストラクタで1行
0673デフォルトの名無しさん2014/11/27(木) 23:53:36.68ID:5nk9uWA6
だから書き方によるんだよ。

たとえばこれで4行
template <typename T, typename>
struct param {
using apply = std::enable_if<true, T>;
};

こう書けば2行
template <typename T, typename>
struct param { using apply = std::enable_if<true, T>; };

これを特殊化すれば2行クラスが増えていく。
0674デフォルトの名無しさん2014/11/28(金) 11:41:38.39ID:or+BN4BA
GUIしか作らん奴は画面ごとでもいいだろうが、1クラス1ファイルでルールを作るのだけはやめて欲しい。
0675デフォルトの名無しさん2014/11/28(金) 11:49:10.68ID:xopRmUVK
ちっさな便利クラスの類をまとめた util(misc).h/cpp みたいなのはほぼ必ず作るわ
こまいクラスごとに1ファイルなんて、いちいちファイル開くのがめんどい
0676デフォルトの名無しさん2014/11/28(金) 14:55:53.33ID:NIWmc4eA
目安としては標準のやつくらいのがいいかもね。
array、vector、memory、iostream、iomanipとか、そこそこの粒度の機能毎ってくらいか。
0677デフォルトの名無しさん2014/11/28(金) 19:32:19.09ID:nrrhqrjP
1クラス1ファイル以外だとファイルの名づけ方に悩む
ファンクションはfunction1.h function2.hの付け方してるから
class1.h class2.hにしようかな
と書き込んでみるテスト
0678デフォルトの名無しさん2014/11/28(金) 21:03:58.12ID:qlxPjrnX
>>677
ひとつのクラスにメンバ関数は平均何個くらいあります?
0679デフォルトの名無しさん2014/11/28(金) 22:43:25.15ID:n9kyNgts
>>655
亀ゴメソ
まじありがとう!!!!
勉強になった
0680デフォルトの名無しさん2014/11/28(金) 22:57:26.15ID:olZCGtlT
>>678
尻の拭き方を質問してるみたいだな。
06816552014/11/28(金) 23:02:01.18ID:qlxPjrnX
>>679
"method"という名前限定だから自分では満足してないんだけど、あれで何か役に立つの?

>>680
?
0682デフォルトの名無しさん2014/11/29(土) 13:34:20.24ID:Ppi1W3oY
>>681
constexpr付けたらテンプレ引数のチェックに使える
0683デフォルトの名無しさん2014/11/29(土) 16:23:17.79ID:1L1G4cU3
無名共用体ってC++に始めからある機能だって事を知った…ずっとg++の拡張機能だと思ってた
動的言語っぽい事が出来るから好きな機能だ
0684デフォルトの名無しさん2014/11/30(日) 02:25:48.01ID:b4+MGIqB
>動的言語っぽい事が出来るから

動的言語−タイプセーフ=無名共用体
0685デフォルトの名無しさん2014/11/30(日) 11:35:16.74ID:xgK7ePig
std::stack<int> st1;
std::stack<int> st2;
が有る時に、forループなどを使わずに、二つのスタックを一つに積み上げる記述方法ありますか?
VS2013 C++です。
0686デフォルトの名無しさん2014/11/30(日) 11:45:57.17ID:awyRf5UB
えっ?stackをforループで?ど、どうやって?
0687デフォルトの名無しさん2014/11/30(日) 11:45:59.54ID:p5vf56Ui
>>685
「一つに積み上げる」の意味が分からないんだが……
0688デフォルトの名無しさん2014/11/30(日) 11:51:22.60ID:DcwYkOUV
std::stack<std::stack<int> >にその二つを積めばいい
0689デフォルトの名無しさん2014/11/30(日) 12:00:03.93ID:lmH+eA8O
つ back_insert_iterator
0690デフォルトの名無しさん2014/11/30(日) 12:11:25.42ID:xgK7ePig
>>689
もう少しヒント下さい。
0691デフォルトの名無しさん2014/11/30(日) 12:17:04.32ID:kOBZPODW
std::for_each使えばとかそういうあれではなくて
0692デフォルトの名無しさん2014/11/30(日) 15:35:00.05ID:2hiiWexa
正攻法では無理だろう。
範囲を取るコンストラクターも無いし
イテレーターも取れないし
operator=も無いのでback_inserterも使えずどうしようもない。
0693デフォルトの名無しさん2014/11/30(日) 15:55:15.32ID:b1aZbome
forループ前提としても、2つのスタックをどういう風に1つにしたいかでやることが変わってくるな。
0694デフォルトの名無しさん2014/11/30(日) 16:22:48.28ID:CusdtlBf
テンプレートなんだしそういうときはstackの機能満たすvectorかlistに切り替えたらいいのに
0695デフォルトの名無しさん2014/11/30(日) 17:06:24.19ID:EfOCJfpf
目的を明らかにせよ。
ふたつのスタックを内部に抱えて、外部からはひとつのスタックのように見えればそれでいいのか、
あくまでstd::stack型でなければならないのか、など。
0696KUSO KOTE ◆unko./w.Osri 2014/11/30(日) 17:08:04.45ID:nlo0X8fT
>>685
ほい。
http://ideone.com/1jI0Bu
0697デフォルトの名無しさん2014/11/30(日) 19:23:51.31ID:xgK7ePig
>>696
ありがとうこざいました。
こういうことをやりたかったのです。
s1.push(s2);
みたいな記述が出来るのを期待していたのですが、やはりループで処理するんですね。

> std::deque<int> const &c2 = s2._Get_container();
> std::for_each(c2.begin(), c2.end(), [&s1](int const &item){ s1.push(item); });
それにしてもC++初心者の私には、この構文の意味がほとんど分りません。勉強します。
[&s1]のカッコ[]の意味が分りません。何ていうキーワードでググれば良いでしょうか?
よろしくお願いします。
0698デフォルトの名無しさん2014/11/30(日) 19:45:08.30ID:p5vf56Ui
>>697
ラムダ式じゃね?
0699デフォルトの名無しさん2014/11/30(日) 19:56:58.61ID:xgK7ePig
>>698
レスありがとうございました。早速ググってみました。

//最小のラムダ式の呼び出し
int main(int argc, char *argv[]) {
[](){}();
return 0;
}
こんなの見つかりました。もう何が何だか分りません。
なんだか間違った方向に進化しているような気がするけれど、
前途有望な優秀な皆さんは違和感無く受け入れられるんでしょか?
まあ、とにかく理解しなくてはならない。頑張ります。
0700デフォルトの名無しさん2014/11/30(日) 20:05:17.76ID:8nuRzney
>>699
まずはここからだ。
for (auto &itr = c2.begin();
 itr != c2.end();
 ++itr) {
 int v = *itr;
 s1.push(v);
}
0701デフォルトの名無しさん2014/11/30(日) 20:27:07.09ID:xgK7ePig
>>700
コーチありがとうございます。
このあたりまでは、どうにか理解できます。
0702デフォルトの名無しさん2014/11/30(日) 20:42:28.89ID:DcwYkOUV
テンプレートで
template<typename =型名>
というのを見たんですけど
どいう意味ですか?
0703デフォルトの名無しさん2014/11/30(日) 20:54:03.91ID:EfOCJfpf
デフォルト引数の型版にすぎない
0704デフォルトの名無しさん2014/11/30(日) 21:05:02.34ID:nlo0X8fT
>>699
まあ文法が複雑で、覚えることが多いからねぇ。
参考までに
http://ideone.com/Xyuokf
このunko_functor2の定義と生成を簡潔に書いたのがラムダ。
0705デフォルトの名無しさん2014/11/30(日) 21:16:41.33ID:qLRyV8Wk
class A{
string str_;
public:
A(string s):str_(s){}
・・・
A& operator=(const A& rhs){・・・}

A& operator=(A&& rhs)
{
if (this != &rhs) {
str_=std::move(rhs).str_; //(1)
}
return *this;
}

(1)の部分が、gcc4.8.1では通ります.正しくは
str_=std::move(rhs.str_); のようですが,
オブジェクトrhs自体を右辺値にするとまずいの
でしょうか?
0706デフォルトの名無しさん2014/11/30(日) 21:17:21.14ID:DcwYkOUV
template<typename T=型名>ではなくてtemplate<typename =型名>ですよ
0707デフォルトの名無しさん2014/11/30(日) 21:17:29.16ID:A9gOCRkZ
>>702
template<typename T=型名>
の省略かと
Tを本体で使用していないので省略したと思われ
0708デフォルトの名無しさん2014/11/30(日) 21:18:10.69ID:DcwYkOUV
>>707
ありがとうございます。
どこにも乗ってないので助かりました。
0709デフォルトの名無しさん2014/11/30(日) 21:23:06.93ID:qLRyV8Wk
>>705

すみません.class Aに対する}; が抜けてました.
0710デフォルトの名無しさん2014/11/30(日) 21:24:23.36ID:A9gOCRkZ
>>705
いいんじゃないの別に

((A&&)a).str ってstringのxvalueになるのか。
知らなかったけどconstと同じ考えなんだろうな
0711デフォルトの名無しさん2014/11/30(日) 21:35:52.51ID:qLRyV8Wk
>>710

ありがとうございます。

str_=std::move(rhs.str_); だとrhsオブジェクトのstr_メンバのみが右辺値になるだけで、
rhsオブジェクト自体は右辺値にならないのではないか?オブジェクトrhsを右辺値にするには、
str_=std::move(rhs).str_;とすべきではないか?と思ったものですから。

まだ、std::moveに対する理解が足りないのかもしれません。
0712デフォルトの名無しさん2014/11/30(日) 21:42:59.63ID:A9gOCRkZ
うんこVC(2015 Preview)はmove(rhs).str_がlvalueになるようだなファッキン
0713デフォルトの名無しさん2014/11/30(日) 21:58:51.00ID:qLRyV8Wk
>>712

試していただいてありがとうございます。左辺値になってしまうのですか。

オブジェクトを右辺値参照で受け取っている時点でrhsオブジェクトは名前「rhs」
がついているにせよ、廃棄される運命にある。

ただし、str_=rhs.str_; とすると、データメンバrhs.str_が左辺値となってしまう
ので、rhsオブジェクトも廃棄されなくなってしまう。

の解釈でどうでしょうか? しかし、何か混乱してきました。
0714デフォルトの名無しさん2014/11/30(日) 22:09:04.92ID:W7MDah/M
>>713
最後だけ違う
× rhsオブジェクトも廃棄されなくなってしまう
○ 破棄寸前のrhsに含まれる(破棄寸前の)str_がコピー渡しになるので性能的にもったいない

あと細かいことだが
× 左辺値となってしまう
○ あたかも左辺値のようにオーバーロード解決されてしまう
0715デフォルトの名無しさん2014/11/30(日) 22:14:59.74ID:EfOCJfpf
>>712
static_castが左辺値を返すのは直ってる?
0716デフォルトの名無しさん2014/11/30(日) 22:22:39.29ID:qLRyV8Wk
>>714

ありがとうございます。かなり理解できました。

ただ、まだ誤解をしている部分がありそうなので(頭の悪い初心者は
信じられない解釈を・・・)、言葉の意味をもう少し掘り下げてみます。
0717KUSO KOTE ◆unko./w.Osri 2014/11/30(日) 22:38:20.66ID:nlo0X8fT
>>715
残念。
http://ideone.com/HcJZT8
0718デフォルトの名無しさん2014/11/30(日) 23:00:41.70ID:GHd3kGft
> str_=std::move(rhs).str_;
この発想は無かった

しかしムーブ代入に
>if (this != &rhs) {
これは要るのか?
0719デフォルトの名無しさん2014/11/30(日) 23:20:20.00ID:EfOCJfpf
>>717
そうか。
これ結構まずいんだよね。
0720デフォルトの名無しさん2014/11/30(日) 23:32:16.01ID:5aDdRTHG
struct baka {
 ~baka() {}
 int d = 0;
};
int main()
{
 int && o = baka{}.d;
}
糞VCがfull-expression後にデストラクタ走るのはマジなの?どんだけクソなの
0721デフォルトの名無しさん2014/11/30(日) 23:42:37.39ID:EfOCJfpf
>>720
江添さんチーッス

そのあとに
int i = o;
と書いたとしても、その代入の前にデストラクタが走るようですYO!
0722デフォルトの名無しさん2014/12/01(月) 00:27:01.59ID:XBtafqbV
本物の江添さんならこう書く筈だ

struct baka
{★
 int d = 0 ;★
 ~baka() {}
} ;★
int main()
{
 int && o = baka{}.d ;★
}
糞VCがfull-expression後にデストラクター★走るのは、★マジなの。★どんだけクソなの。★
0723デフォルトの名無しさん2014/12/01(月) 00:39:16.31ID:gRrDjFp+
☆多すぎぃっ!☆
0724デフォルトの名無しさん2014/12/01(月) 07:14:39.07ID:RgGkv1x9
ハーブサッターはこんなコンパイラ使って発狂しないんだろか
0725デフォルトの名無しさん2014/12/01(月) 15:10:01.18ID:0r4ekpEo
test
0726デフォルトの名無しさん2014/12/01(月) 15:19:36.86ID:0r4ekpEo
投稿したのですが、「書き込まれました」のメッセージが出ても、表示
されません。文が長いせいかな?

すみません、4回投稿を繰り返したので後で4回、長い質問文が現れる
かもしれません。そのときはごめんなさい。
0727デフォルトの名無しさん2014/12/02(火) 08:41:23.75ID:yGw9j998
#include <stack>
struct Data1{
  int i;
  Data1::Data1(const int i) :i(i){};
};
struct Data2{
  Data1 d1;
  Data2::Data2(const Data1 &d1) :d1(d1){};
};

void main(){
  std::stack<Data2> myStack;
  Data1 d1(777);
  Data2 d2(d1);
  myStack.push(d2); //(1) これは分るんですが
  myStack.push(d1); //(2) これでも行けるんですが、何故でしょうか。
}
stackで質問なのですが、(2)でもエラーせずにstackにpush出来るのですが、何故でしょうか?
データの型が違うのでエラーすると思ったのですが。VS2013C++です。
0728デフォルトの名無しさん2014/12/02(火) 08:48:49.30ID:f9s0ibqS
Data2::Data2(const Data1 &d1) :d1(d1){};

これでData2に変換されているから
0729デフォルトの名無しさん2014/12/02(火) 08:53:37.27ID:yGw9j998
>>728
レスありがとうございます。
うーん、勝手に変換してくれるのは嬉しいような嬉しくないような。
(2)の場合には、型が違うみたいな警告とかエラーを出すことは
可能でしょうか?
0730デフォルトの名無しさん2014/12/02(火) 08:58:31.08ID:f9s0ibqS
explicit Data2::Data2(const Data1 &d1) :d1(d1){};
とすればいい
0731デフォルトの名無しさん2014/12/02(火) 09:02:07.77ID:yGw9j998
>>730
ありがとうございます。出来ました!
詳しいですね。
0732デフォルトの名無しさん2014/12/02(火) 10:32:45.66ID:P59XjAfc
gccのfmod関数の誤差が大きいようです.VC++2008ではfmodもyもきっちり0
です.バグだと思うのですが,どこに言ったらいいんでしょうか?
int i;
double x,y,fmd,dx=0.01;

for(i=0; i<=100000000; ++i) {
x=i*dx;
fmd=fmod(x, 2.0);
y=sin(pi*fmd);
}
[gcc4.8.1の実行結果]
x=1e+006 fmod=2.08047e-011 y=6.53599e-011
0733デフォルトの名無しさん2014/12/02(火) 10:37:46.55ID:P59XjAfc
>>732

あ・・・,実行結果はforループで回した直後に出力したものです.
0734デフォルトの名無しさん2014/12/02(火) 10:44:04.57ID:deKVkNPa
cygwinのgccでやってみたけど0になるぞ。
0にならないプログラム全体をideone辺りに上げてくれ。
0735デフォルトの名無しさん2014/12/02(火) 10:46:20.03ID:deKVkNPa
それ以前に、その0にならなかったプログラムを動かした環境も明らかにしてくれ。
0736デフォルトの名無しさん2014/12/02(火) 11:11:06.10ID:VFkk3rE2
「想定どおりに動かないからバグだ」と言って良いのは素人だけ
プログラマなら想定どおりに動かない原因を特定してから騒げ
0737デフォルトの名無しさん2014/12/02(火) 11:15:57.77ID:P59XjAfc
ideoneが使ったことがなくてC++4.8.1のところに貼り付けて実行
してみましたが,時間オーバーになってしまいました.

>>734
そうですか.正常に実行されましたか.
環境はWindows7,TDM gcc(MinGWのBinary,gcc.4.8.1)です.
ideoneで実行してみましたが,そちらから見れるかどうか
わかりませんので,下に問題のプログラム全体を貼り付けます.
0738デフォルトの名無しさん2014/12/02(火) 11:17:33.11ID:P59XjAfc
#include <cmath>
#include <iostream>
using namespace std;

int main()
{
const double pi=3.141592653589793;
double x, y, fmd, dx=0.01;
int i;

for(i=0; i<=100000000; ++i) {
x=i*dx;
fmd=fmod(x, 2.0);
y=sin(pi*fmd);
}
cout<<"x="<< x <<" fmod="<< fmd << " y=" <<y<<endl;

return 0;
}
0739デフォルトの名無しさん2014/12/02(火) 11:31:25.78ID:VFkk3rE2
> ideoneが使ったことがなくてC++4.8.1のところに貼り付けて実行
> してみましたが,時間オーバーになってしまいました.

バカなの? ループの意味ないじゃん。
> for(i=100000000 - 1; i<=100000000; ++i)
で充分だろ。
0740デフォルトの名無しさん2014/12/02(火) 11:35:52.17ID:aFwNwwZT
ネタか、釣り?
0741デフォルトの名無しさん2014/12/02(火) 12:29:41.82ID:TEjDQr/p
勝手にじゃないべ
Data1を受けとるコンストラクタをわざわざ作って、変換してくれるように指定されてるやん。

型が違う!ということでエラーにしたいならそれを外す。
Data1からData2への変換は必要だが、暗黙的にはされたくないということなら >>730 の方法だな。
※explicit指定は、暗黙的なコンストラクタの使用を制限する為の指定
0742デフォルトの名無しさん2014/12/02(火) 12:32:19.89ID:P59XjAfc
>>738です.

forループを取っ払って, fmd=fmod(100000000,2.0);とやると,0 になりました.

forループの直後のiを調べてみると,i=100000001になっています.

それでx=i*dxの値が増えたのでしょうが,わからないのはループの直後
でprintf("%21.14e \n", x);としても1.00000000000000e+006が出力され
ることです.

まあ,fmodみたいな単純な関数にバグがあるとは考えにくいので,言い過ぎ
たのですが,何でxの値が1.00000001000000e+006と表示されないのか
わかりません.
0743デフォルトの名無しさん2014/12/02(火) 12:37:06.74ID:P59XjAfc
i<=iが100000000の判定からi=100000001になってもokだし,
xが100000000*0.01のままであることもok.

ならなぜfmod(x,2.0)が0にならない?わかりません.
0744デフォルトの名無しさん2014/12/02(火) 12:42:17.87ID:P59XjAfc
i<=iが100000000の判定から→i<=100000000の判定から
0745デフォルトの名無しさん2014/12/02(火) 12:46:55.08ID:4lPIVtOy
>>741は朝に書いたはずなのに、なぜ今書き込まれてるのだ・・・



windows 7 64bit
clang for windows 3.5 with vc++2010

result : x = 1e+006 fmod = 0 y = 0
0746デフォルトの名無しさん2014/12/02(火) 12:48:53.67ID:EFSW/FUl
浮動小数点演算に誤差が出るのは当たり前だろ。表示精度の問題だ。
0747デフォルトの名無しさん2014/12/02(火) 12:59:59.60ID:P59XjAfc
>>739
for(i=100000000 - 1; i<=100000000; ++i)なら,自分の環境でもidoneでも
fmod=0となる.

>>745
ありがとうございます.VC++上でのクラングでうまくいくんですね.VC++2008
では問題なく動きます.

>>746
倍精度の有効桁数が14〜15桁,0か1e-14以下となるべきなのが,fmod=2.08047e-011
というのは誤差が大きすぎる.


まあ,いいや.これ以上書き込むのは止めておきます.
0748デフォルトの名無しさん2014/12/02(火) 13:14:27.01ID:29qWGDZd
>734だけど、やっぱりきちんとした答えになるなぁ。
gccだったら最適化オプションの違いでどうなるか知りたい。
つーか、アセンブリ出力を見てみたいがそこまではまぁいいや。
0749デフォルトの名無しさん2014/12/02(火) 13:22:07.05ID:9Mv2XCFg
ツリー構造のコンテナをあらわすのために、こんな感じのクラスを作ったとして、

class Node {
public:
 typedef std::shared_ptr<Node> Shared;
 typedef std::weak_ptr<Node> Weak;

 Node() {}
 Node(Weak parent) { parent_ = parent; }
 Shared addChild() { Shared node(new Node); children_.push_back(node); return node; }
 Shared getChild(int index) { return children_[index]; }
 Weak getRoot() { ... }

private:
 std::vector<Shared> children_;
 Weak parent_; // 循環参照防止のため親は弱参照で保持する
}

getRootメソッドを

Weak getRoot() {
 if (! parent_.expired()) {
  return parent_.getRoot(); // 再帰的に親をたどっていく
 } else {
  return this ???; // 親が存在しない場合は自分自身がルートノードになる
 }
}

みたいに書きたいのですが、このとき自分自身を返すときの書き方がよくわかりません。
this への弱参照を返すには this を shared_ptr で管理しないといけないと思うのですが、どういう風に書けばいいのでしょう?
0750デフォルトの名無しさん2014/12/02(火) 13:47:31.90ID:9KoaOWmb
>>749
ttps://sites.google.com/site/cpprefjp/reference/memory/enable_shared_from_this/shared_from_this
0751デフォルトの名無しさん2014/12/02(火) 15:04:23.68ID:1t1KnUm2
a.cpp a.h が有った場合、
a.hでクラスを宣言して、a.cppにコードを書きますが、

b.cpp b.h と言った別のファイルに、 にa.hで宣言したクラスのコードを書くにはどうしたら良いんでしょうか。

a.cppが長くなるので他のファイルに書きたいのです。
0752デフォルトの名無しさん2014/12/02(火) 15:06:30.16ID:9KoaOWmb
a.hをincludeして実装を書けばいい
0753デフォルトの名無しさん2014/12/02(火) 15:06:34.74ID:pJIRapOB
普通に書けば?
0754デフォルトの名無しさん2014/12/02(火) 15:33:18.05ID:P59XjAfc
>>748 gccだったら最適化オプションの違いでどうなるか知りたい。

これが原因でした.話には聞いてましたが,経験するのは今回が初めてです.
それも最適化なしで0にならないなんて

最適化オプション:
指定なし,-o, -o2, -o3 (速度重視)
x=1e+006 fmod(x, 2.0)=2.08047e-011 y=sin(pi*fmod(x, 2.0))=6.53599e-011

-os (サイズ重視)
x=1e+006 fmod(x, 2.0)=0 y=sin(pi*fmod(x, 2.0))=0

もう一度環境を書くと,テストコード >>738
Intel Corei7, Windows 7 Professional 64bit,TDM gcc4.8.1 + Code::Blocks13.12
-std=C++11,Releaseモード
0755デフォルトの名無しさん2014/12/02(火) 17:37:29.90ID:eMZ01uNz
FPUがらみのオプションだと思うぞ
VCだと/fp
0756デフォルトの名無しさん2014/12/02(火) 18:00:37.71ID:LC+23/o8
f(int g(int)); とf(int (*g)(int)); が同じ意味になるのはなぜでしょうか?
0757デフォルトの名無しさん2014/12/02(火) 20:34:54.69ID:/z1AotGw
>>756
C からの仕様
C/C++ では関数は第一級のオブジェクトにならない、
したがって、たとえば関数ポインタ f: void (*f)(void) の指す関数を呼び出す方法として
(*f)(void)
のほかに
f(void)
も許容されている

たんなるシンタックスシュガーだね
0758デフォルトの名無しさん2014/12/02(火) 20:46:25.92ID:yGw9j998
>>757
そうなんですか。
意味が良く分らない void (*f)(void) という記述方法が関数ポインタだと必死で
覚えたのに、f(void) でも行けるなら、最初からそうして欲しかった。
0759デフォルトの名無しさん2014/12/02(火) 20:47:03.95ID:oipIVQ1v
Cから受け継いだクソ文法の一つ
void g();

(************g)(); // function call

つまり関数と関数ポインターの関係は出鱈目ってこった
0760デフォルトの名無しさん2014/12/02(火) 20:48:39.99ID:S9717AJf
>>759
なんかスゲー勢いがあるなw
0761デフォルトの名無しさん2014/12/02(火) 20:51:06.09ID:HwzviBJK
C++の人に聞きたかったんだけど、尽くしても尽くしても、たまにもてあそばれる
それでも辞めないC++の良さって何よ
0762デフォルトの名無しさん2014/12/02(火) 20:55:29.93ID:b9w37TQx
>>761
不要な所は楽に書けて、必要ならば限界まで最適化出来るところ。
0763デフォルトの名無しさん2014/12/02(火) 21:33:09.33ID:eCxnGLB/
>>759
関数だとポインタを逆参照する必要がないなら、
普通のポインタも -> じゃなくて . でアクセスできても良かったような気もする。いまさらだが。
まぁ、そのおかげで C++ になって operator -> がカスタマイズできる利点もあったけど。
0764デフォルトの名無しさん2014/12/02(火) 22:27:42.54ID:Ut8Zj3uq
>>761
中島みゆきの歌に出てくる「悪女の深情け」みたいなものw

まあ、それは冗談として、C言語ではチマチマと書かなければならないことを、
あっさりとクールに記述できることがある。地獄に落ちることも多いけど。
あれだけいろんな機能を詰め込んでいるんだもの、複雑になるのは当たり前。

数値計算の分野に限ると、

javaは演算子のオーバーロードがないのが致命的。
C#は良いとこ取りだけど、genericsとか演算子のオーバーロードがもの足りない。
それにマイクロソフトがofficeやdirectxみたいに仕様をコロコロ変えないか不安。

matlabは遅い。a(1,:)みたいな記法が馴染めない。

最近のfortranは構造体、ポインタもサポートしている。しかし、fortranでそれを
究めるくらいなら、C++を究めた方が良い。ところで、fortran77はプログラムを全部
組まないと動かなくてバグとりが大変だったけど、今のfortranはどうですか?
0765デフォルトの名無しさん2014/12/02(火) 22:40:12.59ID:9ZuIsk2j
Fortranを使う人は数値計算するためにFortranを使います。
C++を使う人はC++をするために使います。
0766デフォルトの名無しさん2014/12/02(火) 22:41:23.59ID:i0GjTWfH
言語選べるなんて楽でいいな
0767デフォルトの名無しさん2014/12/02(火) 22:48:22.86ID:olNY9lUq
ええやろ
0768デフォルトの名無しさん2014/12/02(火) 22:55:07.67ID:2KIXoM7e
ここは2chでもかなり客層が特殊なんだなあ・・・
0769デフォルトの名無しさん2014/12/02(火) 23:04:38.22ID:p9/SP/jm
template<typename TList>
struct Example{
typedef TList::Next Next; //この行でエラーになる
};

テンプレートで引数型として受け取った型の内部型を参照するとき
どうすればいいんでしょうか?
0770デフォルトの名無しさん2014/12/02(火) 23:06:12.75ID:2KIXoM7e
typedef typename TList::Next Next;
0771デフォルトの名無しさん2014/12/02(火) 23:06:51.63ID:4i/Pm7cC
>765
段階的詳細化で、メインプログラムを書き、
以下サブルーチンやサブプログラムを
一つ一つ作ってはデバッグしていくというので
だめですか。
0772デフォルトの名無しさん2014/12/02(火) 23:07:09.34ID:2KIXoM7e
using Next = typename TList::Next;
の方がよいかも。(好みの問題か?)
0773デフォルトの名無しさん2014/12/02(火) 23:09:31.07ID:p9/SP/jm
>>770
キモい! でもコンパイル通りました!
まじかこれ
0774デフォルトの名無しさん2014/12/02(火) 23:15:58.24ID:2KIXoM7e
>>773
TList::Next が何を表しているのか不明だから。

例えば、
struct TList {
static int Next = 1;
};
なのかも知れん。
この場合は TList::Next は整数。
0775デフォルトの名無しさん2014/12/02(火) 23:19:21.66ID:Ut8Zj3uq
>>771

そうですね。fortran77でもそれはできたかもしれませんね。
若かったから、そういう発想がなかったのかも。

ただ、C++だと「ここの部分に関数はまだないけど、とりあえず宣言か、voidf(・・・){}と
しておいて」が簡単にできて、デバッグが楽だなと感じました。

とにかく、メインフレームコンピュータのfortranのバグ取りに苦い経験しかなくて。
数値計算上のバグにC++もfortranも関係ないでしょうけど。
0776デフォルトの名無しさん2014/12/02(火) 23:23:25.19ID:2KIXoM7e
>>775
メインフレームではC/C++等がどうして普通に使われないんでしょうか?
アーキテクチャ上の問題?
0777デフォルトの名無しさん2014/12/02(火) 23:26:06.44ID:p9/SP/jm
>>774
VC6時代までしかやってませんでしたが
typedef typename の時点でコンパイルエラーになるイメージだった
0778デフォルトの名無しさん2014/12/02(火) 23:31:09.05ID:Ut8Zj3uq
C/C++が出現したのはパソコンが普及してから。一応、メインフレームでもCコンパイラ
はあったけど、普及してなかった。

それに、生ポインタを扱うC言語(shared_ptrみたいなしゃれたものはなかった)をメイン
フレームに使うのは、専門家でない限り危なかったのでは?
0779デフォルトの名無しさん2014/12/02(火) 23:36:34.28ID:Ut8Zj3uq
>>776

あ、現在の話ですが。やはり、C/C++をメインフレームに使うのは実績がなくて信頼性がないからだと思います。
ATMのオンラインシステムでメモリやリソースのリークがあると「祭り」になりますから。
0780デフォルトの名無しさん2014/12/02(火) 23:37:15.87ID:Ut8Zj3uq
現在の話ですが。→ 現在の話ですか?
0781デフォルトの名無しさん2014/12/02(火) 23:55:31.58ID:/t4MmAPU
>>776
BCD演算できない言語をATMとかに使うのはちょっと……
後、科学技術計算的には自由度が高過ぎる言語は
最適化しにくいので嫌われるという面もある
(未だにFortranが生きている理由でもある)
0782デフォルトの名無しさん2014/12/02(火) 23:55:42.34ID:vQAvR2Wb
ゲーム業界はほぼ100%C++を使ってるが、それ以外に選択肢が無いのが現実だ
0783デフォルトの名無しさん2014/12/03(水) 00:03:11.70ID:6lRqEEU9
PS4とかWiiUとかXBOXは当然だけど、開発言語はC#だよな確か
0784デフォルトの名無しさん2014/12/03(水) 00:09:26.63ID:O29A/gXK
>>779
ATMや銀行のシステムで問題起こすとニュースで大騒ぎになるだろうから
メモリやリソースのリークと共生するC・C++は嫌だろうな
0785デフォルトの名無しさん2014/12/03(水) 00:15:04.77ID:GUgf5pKA
ハードとしての信頼性が高くて、今どきの言語が普通に使えて、だったら別に金融じゃなくても使われるのじゃ?
それに10進計算くらい正確にこなすライブラリくらい需要さえあればいくらでも標準化できるはず。
0786デフォルトの名無しさん2014/12/03(水) 00:29:49.64ID:rw40JVQB
ここでの話では、C++が銀行で使われないのは処理系・コンパイラのせいという事になってるようだが。
それよりもコボルという蓄積があるからだと思うが。
C++だとコンパイラのせいなら、コボルのコンパイラも何十年も更新しないということなるぞ。
0787デフォルトの名無しさん2014/12/03(水) 00:42:07.51ID:y9iXgVRU
そう、ATMではいまだにCOBOLが使われている。
PL/Iとかあったけど。結局、新しい言語に書き換えるのは勇気が要る。
0788デフォルトの名無しさん2014/12/03(水) 01:05:05.15ID:sMoc/59c
COBOLの時代にはテストコードを残すなんて考えが無かったから
後の移植を難しくしてんだよな
0789デフォルトの名無しさん2014/12/03(水) 01:05:15.36ID:GUgf5pKA
>>778まではそうではなかったが、>>779から急にATMとか銀行というキーワードが出てきてそれ前提になった。
0790デフォルトの名無しさん2014/12/03(水) 01:23:09.43ID:GUgf5pKA
銀行ATM以外の世界でも、ホストを使えばいいじゃん。
いまどきの普通の言語を普通に使えばいいじゃん。
信頼性はすごく高いんでしょ?

現実がそうなってないのは、何かアーキテクチャ上の理由でC/C++等があまり適さず(これ想像)、
COBOLじゃ金融アプリにしか向かないうえ、技術者も限定されてしまったからなのかな?

銀行の件は、まず大規模な電算化を始めたのが銀行オンラインだから過去の蓄積も他業界に比べて多いし、
安全性にシビアだからってのは理解できる。
0791デフォルトの名無しさん2014/12/03(水) 02:27:37.74ID:j3x4QC7i
97年くらいに沖のATM作ってたけどC言語だったよ
0792デフォルトの名無しさん2014/12/03(水) 02:33:52.64ID:FQ894e1e
FORTAN が数値計算によく使われているのは、cやc++より自動並列化しやすいからね。cやc++は、ポインタがあるから、依存関係の解析がすごく難しく、自動並列化コンパイラの作成が難しい。
0793デフォルトの名無しさん2014/12/03(水) 02:46:56.27ID:/c7/jI5U
なにいってるんですか
0794デフォルトの名無しさん2014/12/03(水) 02:49:25.48ID:/c7/jI5U
COBOLって帳票用に特化してるからね
0795デフォルトの名無しさん2014/12/03(水) 07:03:08.38ID:GUgf5pKA
結局コストの問題なのかね。
メインフレームが高いからダウンサイズされたってだけ?
0796デフォルトの名無しさん2014/12/03(水) 07:03:59.74ID:GUgf5pKA
どうでもいいが「メーンフレーム」と書かれるとイラッとする。
0797デフォルトの名無しさん2014/12/03(水) 07:44:27.35ID:iJZhsnsV
>>787
COBOL 使ってる ATM なんて見たことないぞ w

>>790
> 現実がそうなってないのは、何かアーキテクチャ上の理由でC/C++等があまり適さず(これ想像)、

ハードウェアスタックないし、メモリー上のバイト列を扱うのもあまり得意じゃなかったと思う
逆に 10進演算命令持ってたりするから COBOL には有利
0798デフォルトの名無しさん2014/12/03(水) 08:54:52.15ID:U2wzi8cW
勘定系でコボルを使うのは、過去の情報資産の活用と実績に裏打ちされた信頼性、応答速度、誤りの排除、扱える数字の桁数、システム運用の安定性
内部システムのパンピーへの漏洩予防と色々あるが、
勘定系で発生した事故に責任もって対応するメーカーがない。
RDBMSは遅い、手間かかりすぎ、複雑すぎって言うのが強い理由じゃないかな
オラクルは高過ぎ、サイベースは要件が高い、そしてどちらも本質的に責任を取らないからな
不具合あっても修正しない製品を使えるか、と
0799デフォルトの名無しさん2014/12/03(水) 08:59:10.25ID:qyQGW3RA
>776
ダイクストラ大先生の構造化プログラミング
でも段階的詳細化が推奨されていたような……
なにしろFORTLAN IV からFORTRAN 77に
移行した時期に多少FORTRANをいじった程度
ですから、思い違いかもしれません。あしからず
0800デフォルトの名無しさん2014/12/03(水) 09:04:47.50ID:PeV925Ei
>>783
C++やで?
0801デフォルトの名無しさん2014/12/03(水) 09:34:20.91ID:X03avSaF
Unityの話が全てだと思っちゃってるんだろうな。そのUnityもC#だけじゃないんだけど。
0802デフォルトの名無しさん2014/12/03(水) 15:58:51.61ID:nApiywvA
class Foo {
public:
Foo();
bool operator()( int i );
}

std::queue<Foo*> q;

p.push( new Foo() );
p.push( new Foo() );
p.push( new Foo() );


hile( !q.empty() && /* Fooのoperator()がtrue */ ){
delet q.front();
q.pop();
....
}

オブジェクトのポインタの先頭キューからoeprator()を実行するのってどう書けばいいですか?
0803デフォルトの名無しさん2014/12/03(水) 16:04:22.41ID:GXUScfW3
どのインスタンスのoperaterを実行したいかわからん
0804デフォルトの名無しさん2014/12/03(水) 16:08:30.36ID:nApiywvA
馬鹿は黙ってろ
0805デフォルトの名無しさん2014/12/03(水) 16:13:10.36ID:VD9hCEh/
馬鹿じゃないなら自分で書け
0806デフォルトの名無しさん2014/12/03(水) 16:45:21.75ID:jxdxvQyf
>>802
listじゃだめなん?
0807デフォルトの名無しさん2014/12/03(水) 17:23:42.14ID:L9LC7bkp
http://ideone.com/A46qtN

こういう話?
0808デフォルトの名無しさん2014/12/03(水) 17:40:39.19ID:8JkTKL6j
>>803
『先頭キューから』と書かれているのだが
そこから「キューの先頭」の間違いと
脳内補完ぐらいしてやれないものか
0809デフォルトの名無しさん2014/12/03(水) 17:48:49.38ID:3hK2TsBb
非asciiなメインフレームなどで
c++を使う顧客が結構いるから、
トライグラフの削除にibmが反対している
という話しもあるが。

そもそもGCでどうにかできるのは、メモリリークだけで、リソースリークには何の効果もない。
0810デフォルトの名無しさん2014/12/03(水) 18:43:23.05ID:iwjiwLd6
プリプロセッサかましたらいいやん
0811デフォルトの名無しさん2014/12/03(水) 21:02:17.14ID:FV93VIEk
??=include "baka.h"
int main(int argc, char *argv??(??)) ??<
 return ??-0;
??>

こんな暗号に等しいコードを書いているキチガイのために
C++の言語仕様をクソにされてはたまらん
0812デフォルトの名無しさん2014/12/03(水) 21:06:14.29ID:dAu5DHm9
ebsdic に{ }は無いのに?
0813デフォルトの名無しさん2014/12/03(水) 21:53:40.23ID:S725Rch2
>>812
EBCDICは基本文字集合すら扱えない環境なんでしょ?
ならC++コンパイラ作るのを諦めるべき。
もしくはディレクティブで切り替えるようにして
みんなに迷惑をかけないでほしい。
void f() {
 cout << "???"; // ???
#ibm // 以降はトライグラフ有効
 cout << "???"; // ?
??>
0814デフォルトの名無しさん2014/12/04(木) 01:11:20.13ID:aDlePqdz
EBCDICの不都合ならそんなもんEBCDICの親玉のIBMが自分で自分のケツ拭けよと思うわ
名前も出せないような連中のためになぜ規格まで縛られなきゃならんのかと
0815デフォルトの名無しさん2014/12/04(木) 15:45:16.97ID:WpEST6VT
既に生成してある構造体のゼロクリアってもっとシンプルな書き方ないん?
MyStruct m_st;
...
MyStruct tmp = {};
m_st = tmp;
0816デフォルトの名無しさん2014/12/04(木) 15:54:21.08ID:kcelZJjW
m_st = MyStruct{};
0817デフォルトの名無しさん2014/12/04(木) 17:41:32.91ID:aeP/K117
memset、clearメソッド実装
0818デフォルトの名無しさん2014/12/04(木) 17:59:24.98ID:WpEST6VT
>>816
その書き方って一時オブジェクトをクリアしてコピー、以上の最適化が十分に期待できるのかな?
代入演算になるからVROとはちょっと違うし。
0819デフォルトの名無しさん2014/12/04(木) 18:05:26.81ID:WCx73E+2
モダンC++プログラマーのintの初期化は
auto x=static_cast<int>(int{3});
こちらでよろしかったでしょうか?
0820デフォルトの名無しさん2014/12/04(木) 18:11:59.10ID:dV1gB9nf
>>818
ttp://ideone.com/A2Ohli
vs2013の最適化バイナリの逆アセンブル見たけど
構造体すら作られるず即値がpushされてたから大丈夫なんじゃないの
0821デフォルトの名無しさん2014/12/04(木) 18:19:49.70ID:WpEST6VT
>>820
thx C++11環境では>>816でいくわ
なんにしろ未だvc2010だからそろそろ更新せんとなあ・・・
0822デフォルトの名無しさん2014/12/04(木) 18:19:51.81ID:LnUCu0aq
>>817
ビットパターンのゼロがdoubleの0.0になる保証あったっけ?
0823デフォルトの名無しさん2014/12/04(木) 19:00:47.05ID:EKldnoaY
>>821
振り替えると
VSは五年周期で更新しているわ
前2005、今2010
2015は新しい機能が追加されているし、日本語版のSP1が出たらMSDN付きのを買うつもり
0824デフォルトの名無しさん2014/12/04(木) 19:04:54.14ID:kcelZJjW
最近はspは出ないよ
0825デフォルトの名無しさん2014/12/04(木) 19:20:21.73ID:EKldnoaY
そうなんだ
2010だとSP当てるとコンパイラを消される不具合があったし、待たずに買うかね
0826デフォルトの名無しさん2014/12/04(木) 19:42:46.41ID:3VxMuzS2
>>822
IEEEの規格上それだけはある。
逆はダーティー0とかあるけど
0827デフォルトの名無しさん2014/12/04(木) 20:08:59.33ID:OR7LBgh+
>>826
numeric_limits<double>::is_iec559がfalseの環境は?
0828デフォルトの名無しさん2014/12/04(木) 22:23:44.40ID:ywZiE0/d
そういう環境のこと知らなかったんだろ
0829デフォルトの名無しさん2014/12/05(金) 00:15:29.13ID:OI0AeH7O
マジでそういう環境何処にあんのって感じなんだけど。
多分俺は一生さわる機会無いと思う
0830デフォルトの名無しさん2014/12/05(金) 01:15:20.73ID:RLAGUYZX
ほぼありもしない環境のためにコード書くなんて嫌だわ
かといって実数にmemsetかけるかと問われればそんな事しないけど。
0831デフォルトの名無しさん2014/12/05(金) 03:00:59.44ID:PNErZr5e
>>819
>auto x=static_cast<int>(int{3});

int{3}ならわかるがなんでキャストしてんだよ。
ちなみにコピー・ムーブコンストラクターが省略される保証は無いからな。
0832デフォルトの名無しさん2014/12/05(金) 03:47:31.87ID:jZQvPIwz
>>830
memsetはしないけどfloatをIEE754のバイナリとしてファイルに出力したものをそのまま読み込むぐらいはするなー。
glTFみたいな3Dデータの頂点配列とかで。
0833デフォルトの名無しさん2014/12/05(金) 07:25:26.85ID:RLAGUYZX
>>831
そこだよなぁ
例えばデバッグモードだけでたまにスタック領域溢れるみたいな面倒くさいバグに見舞われそう
0834デフォルトの名無しさん2014/12/05(金) 07:41:48.93ID:Hl6lKR2t
constな関数じゃなければスレッドセーフに書かなくていいということですか?
0835デフォルトの名無しさん2014/12/05(金) 07:46:51.03ID:F2ZjRsjm
>>832
初期化でそれやってたら、単なるバカだろ
0836デフォルトの名無しさん2014/12/05(金) 07:59:07.28ID:jZQvPIwz
>>835
え?なんで?
RAIIって言葉知らないの?
0837デフォルトの名無しさん2014/12/05(金) 08:01:32.00ID:iYPJoG1E
>>834
マイクロソフトのChannel9でハーブサッターがそう力説していたような
0838デフォルトの名無しさん2014/12/05(金) 08:15:06.55ID:F2ZjRsjm
>>836
>>815 > 既に生成してある構造体

RAII と関係ないことは猿でもわかるだろ
0839デフォルトの名無しさん2014/12/05(金) 12:04:09.10ID:xbUCe08O
Windowsエクスプローラでのファイル名ソートと同じことをしたくて
std::string 同士で比較したら _ は大文字と小文字の間、 {} はアルファベットより後ろに来てしまいました。
記号類<数字<アルファベット で std::sort するには比較関数を自作しないといけないですか?
0840デフォルトの名無しさん2014/12/05(金) 12:12:49.54ID:V1LIMZ+K
>>839
StrCmpLogicalW
0841デフォルトの名無しさん2014/12/05(金) 15:58:18.80ID:ZlsEazWI
>>840
StrCmpLogicalW と結果が同じとは限らないけど、
このスレ的には std::locale (or strcoll) なのかね。
0842デフォルトの名無しさん2014/12/05(金) 19:37:57.88ID:oen9HK+b
前後だけでなく途中に現れた数字もソートしたりStrCmpLogicalWって不思議なソート関数
0843デフォルトの名無しさん2014/12/06(土) 01:46:34.86ID:m3qT2GXt
VS 2015 Preview でようやく Unicode string literals がくるのか
どんだけ仕事遅いんだよ MS
0844デフォルトの名無しさん2014/12/06(土) 02:50:12.36ID:Rv0+CLq9
ファクトリメソッドをスマートに書く方法無いかな
if文ならベルの
0845デフォルトの名無しさん2014/12/06(土) 10:55:58.86ID:8e1EU+sD
>>844
https://github.com/i-saint/DynamicPatcher
0846デフォルトの名無しさん2014/12/06(土) 12:44:34.73ID:mUmYp1k7
>>818
チキンな野郎はこうしとけ
new(&m_st) MyStruct{};
std::allocator<MyStruct>{}.construct(&m_pt);
0847デフォルトの名無しさん2014/12/07(日) 09:34:34.50ID:UZuhwYEx
クラスがトリビアルじゃなかったら
memsetやplacement newは危険だよね?
0848デフォルトの名無しさん2014/12/07(日) 09:37:16.94ID:Bzu/18ga
長年C、C++やってるけど
memsetを一度も使った事がない。
0849デフォルトの名無しさん2014/12/07(日) 09:39:27.57ID:O9ZKS+UT
長年って20年以上?
0850デフォルトの名無しさん2014/12/07(日) 09:42:36.29ID:Bzu/18ga
はい
0851デフォルトの名無しさん2014/12/07(日) 09:43:24.41ID:O9ZKS+UT
環境は?
0852デフォルトの名無しさん2014/12/07(日) 09:43:36.11ID:7O3aLCEZ
----ここからカレー臭に注意してください。懐かしい単語が飛び交います----
0853デフォルトの名無しさん2014/12/07(日) 09:45:15.92ID:Bzu/18ga
>>851
gccやvc++
0854デフォルトの名無しさん2014/12/07(日) 09:54:39.10ID:O9ZKS+UT
BSD系ならbzero使いってのがいるけどね
0855デフォルトの名無しさん2014/12/07(日) 10:37:09.90ID:LyR3T0H9
c++ならまあ使わなくてもいけるがcは……
0856デフォルトの名無しさん2014/12/07(日) 10:40:27.17ID:Y6g2DhD+
WindowsにはZeroMemoryをやたら使いたがる派閥がいる
今のVCじゃ結局memsetに置き換えられるんだけどね
0857デフォルトの名無しさん2014/12/07(日) 11:36:27.66ID:d5J/JrDi
= { 0 } 派なのかも
0858デフォルトの名無しさん2014/12/07(日) 11:48:01.53ID:MxitlF62
>WindowsにはZeroMemoryをやたら使いたがる派閥がいる

そりゃZeroMemoryとmemsetはもともと使いどころが違ったからな
今は同じになったからとはいえ
0859デフォルトの名無しさん2014/12/07(日) 12:08:43.68ID:tjSdQb8Q
昔はCRT使わないこともあったしな。
0860デフォルトの名無しさん2014/12/07(日) 12:10:22.94ID:mrRmmrII
bzero() も忘れないで!
0861デフォルトの名無しさん2014/12/07(日) 15:48:06.05ID:Y58/hvmd
bzero何ソレ?信者なの?
0862デフォルトの名無しさん2014/12/07(日) 18:46:16.92ID:hNd25+GQ
>>852
にちゃんなんて今時爺しかいないんだから、いちいちウザイわ

>>860
>>854
0863デフォルトの名無しさん2014/12/07(日) 23:20:07.61ID:nGMF7SWq
型と式の分類が別物であることを最近知りました。
int&& a = 0;
int b = a;
の二つ目のa(式a)は
型が右辺値参照型、式の分類が左辺値でよかですか?
0864デフォルトの名無しさん2014/12/07(日) 23:25:57.15ID:eO6Kzaov
うぃ
0865デフォルトの名無しさん2014/12/08(月) 20:20:05.15ID:UbHlR7lR
符号つき整数の最大値と、それに対応する符号なし整数値の変換って規格で定められてる?
つまりこういうことは合法?それとも一旦long longに上げないとダメなんかな
unsigned int a = 2147483648;
int b = -static_cast<int>(a);
0866デフォルトの名無しさん2014/12/08(月) 20:26:44.01ID:U2G/o8q1
>>863
>int&& a = 0;
この右辺値参照型と言うのが、いくらググって説明を読んでも良く分かりません。
これを使うメリットが分かる最もシンプルなサンプルコードを誰か書いてくれませんか?
0867片山博文MZ ◆T6xkBnTXz7B0 2014/12/08(月) 20:31:50.41ID:BjF8LS0B
コピーに時間がかかる例を試してみれば?

struct A{
A(){Sleep(100000);}
A(const A&){Sleep(100000);}
A& operator=(const A&){Sleep(100000);return *this;}
};
0868片山博文MZ ◆T6xkBnTXz7B0 2014/12/08(月) 20:34:34.31ID:BjF8LS0B
こっちの方が分かりやすいかな

struct A{
A(){}
A(const A&){std::puts("copied");}
A& operator=(const A&){std::puts("copied");return *this;}
};
0869デフォルトの名無しさん2014/12/08(月) 20:39:45.79ID:Po48fBTc
4.7 汎整数変換
3 目的の型が符号付きの型の場合,その値が目的の型 (及びビットフィールドの幅) で表現できる場合には,値は変化しない。そうでない場合,結果の値は,処理系定義とする。
0870デフォルトの名無しさん2014/12/08(月) 21:23:41.40ID:U2G/o8q1
>>868
せっかく教えていただいたのですが、分りません。
このAをどうすれば&&のメリットが分るのでしょうか?
0871デフォルトの名無しさん2014/12/08(月) 21:30:25.92ID:UbHlR7lR
>>869
そうか…処理系依存か
2の補数系では当たり前に見えるような変換も規格通りに書くのは大変なんだな
0872デフォルトの名無しさん2014/12/08(月) 21:42:34.00ID:KFPTh4ct
>>870
↓この&&を引数に取るコンストラクターが無かったら
生ポで渡すしかなくなっていろいろ困るだろ
class unique_ptr {
 T * p;
public:
 unique_ptr(unique_ptr && expiring_other) {
  this->p = expiring_other.p;
  expiring_other.p = nullptr;
 }
};
int main() {
 extern unique_ptr create();
 unique_ptr r = create();
}
0873デフォルトの名無しさん2014/12/08(月) 21:57:45.66ID:dG3YdRcj
>>870
class Foo {
char *buf;
public:
Foo() : buf( new char[2048 ] ){}
Foo( Foo const &val ){
// rhsに渡されたものはこの先使うかもしれない。rhsの内容を壊すわけにはいかない
buf = new char[ 2048 ];
std::memcpy( buf, rhs.buf, 2048 );
}
Foo( Foo &&rval ){
// rvalはこの先もう使われない。わざわざコピーしなくておk
buf = rval.buf;
rval.buf = nullptr;
}

};

簡単なメリットはコメントの通り、ディープコピーを行わずシャローコピーだけで済ませられる。
なぜこの先使われないかどうかが分かるのかと聞かれたら、そういうものがrvalueだからと
答える予定。
0874デフォルトの名無しさん2014/12/08(月) 22:00:41.86ID:dG3YdRcj
コピーコンストラクタの引数名と中で書いてるのあってないわ、はずかしっ

Foo( Foo const &val )はFoo( Foo const &rhs )で読み替えてくんなまし
0875デフォルトの名無しさん2014/12/08(月) 22:09:48.76ID:8JWbfxme
あとはRVOでは上手くいかない例をあげればOKだろう。
0876デフォルトの名無しさん2014/12/08(月) 22:20:00.99ID:U2G/o8q1
>>872
>>873
せっかく詳しく教えていただいたのですが、さっぱり分りません。
出来れば class Foo を呼び出すmain(){}の例を教えて頂けないでしょうか?
class unique_ptr のほうはmain(){}がありますが、
T と create() が見つからないのでエラーしました。VS2013です。
0877デフォルトの名無しさん2014/12/09(火) 03:29:40.78ID:DWnEV/Hl
>>845
なにこれ?
0878デフォルトの名無しさん2014/12/09(火) 11:39:09.96ID:hZR3cOBJ
>>876
rvalueにならない場合となる場合がそれぞれどういう時かは分かるだろ?
分からないならまずそこからだ。

それは分かっているがclass Fooを用いる部分のコードが欲しいなんていうなら
自分で学ぶのに向いていなさすぎるぞ
0879デフォルトの名無しさん2014/12/09(火) 11:51:50.54ID:z5bRXXBA
rvalueというか、std::move(x) した後に変数 x を使ってはいけないってのは
コードを書く人が意識しなければいけない作法だという認識でよい?
後で x に触るようなコードを書いても、コンパイル自体は通っちゃうよね?
0880デフォルトの名無しさん2014/12/09(火) 12:04:36.81ID:nPE1PwLA
はい
0881デフォルトの名無しさん2014/12/09(火) 13:13:28.97ID:hZR3cOBJ
合ってる。
明示的に「これ以降は自分はxを使わない。という意思表示がstd::move( x )なだけで
実際それ以降使ってもコンパイルは通る。

STLのコンテナがmove後の抜け殻を、再度代入等を行えば使えるようにすべきか否かって
論争があったような記憶が微レ存
0882デフォルトの名無しさん2014/12/09(火) 18:26:29.72ID:jpM0TPrm
ttp://helloidea.org/index.php/archives/377.html
このサイトにある録音プログラムを少しいじって録音が終了するのと同時に再生する
というものにしたいのですがC++をあまり使ったことがないので良く分かりません。
知恵を貸してもらえると有り難いです。
0883デフォルトの名無しさん2014/12/09(火) 18:30:34.13ID:nPE1PwLA
サウンドルーティングならvista以降なら標準でついてるだろ
0884デフォルトの名無しさん2014/12/09(火) 18:35:29.99ID:er2zR8sq
ここは右辺値山椒でごはん10杯いける人たちのスレです。
Win32 APIの使い方はよそでやってください。
0885デフォルトの名無しさん2014/12/09(火) 22:14:20.67ID:Z26sHvLQ
>>883
Vista は知らんが、7 は標準ではついてないよ
まあ、たいていのサウンドドライバについてるから困ることはあまりないけど
0886デフォルトの名無しさん2014/12/09(火) 22:29:43.20ID:unK8ssu0
>>884
まあまあ面白かった
0887デフォルトの名無しさん2014/12/09(火) 23:08:59.96ID:nPE1PwLA
>>885
ttp://farm8.staticflickr.com/7526/15797728217_880407d69d_o.png
嘘言うなよついてるじゃないか
0888デフォルトの名無しさん2014/12/09(火) 23:43:10.39ID:Z26sHvLQ
>>887
だからそれはサウンドドライバにその機能があるからだよ

ついてない奴だとミキサー自体がない
http://www.internal.co.jp/support/common/windows/stereomix.php
0889デフォルトの名無しさん2014/12/10(水) 07:35:21.48ID:OFJKiOer
ステレオミキサーはもともとSoundBlaster固有の機能。
むしろVista以降は使えないことの方が多い。
0890デフォルトの名無しさん2014/12/10(水) 13:38:34.43ID:LfrFh5yt
スレッド関数に std::shared_ptr を渡したい時はどうすればよいのでしょうか?

unsigned int CALLBACK run(void *p) {
 std::shared_ptr<Data> data = *(std::shared_ptr<Data>*)p;
 ....
}

HANDLE make_thread() {
 std::shared_ptr<Data> data = make_shared_data();
 return _beginthreadex(NULL, 0, run, &amp;data, 0, NULL);
}

とかやってしまうと、_beginthreadex に渡した data については参照カウンタが増えてくれず、make_thread を出た時点で data が破棄されてしまいますよね?
やはり自前のスタックや変数を外部に用意するしかないのでしょうか?
ちなみに上記の例ではWin32APIを使っていますが、特別な理由があって使っているわけではないので、標準C++ライブラリだけで
完結できるならそちらの方がよいです。
0891デフォルトの名無しさん2014/12/10(水) 13:41:23.72ID:Lk9vW6tq
std::threadつかえ
0892デフォルトの名無しさん2014/12/10(水) 15:31:27.62ID:LfrFh5yt
>>891
ああ、そんなものがあったんですね。ありがとう!
0893デフォルトの名無しさん2014/12/10(水) 17:53:09.33ID:SOWQYR2u
std::thread使ったらこの問題が解決すんの?
threadのコンストラクターに渡すクロージャが実行されるのは
make_thread抜けた後になることがあるので
threadのコンストラクターに渡すクロージャに
リソース保持させるようにしないといかんよね?
0894デフォルトの名無しさん2014/12/10(水) 18:04:41.90ID:xrKn9Lbe
解決します。値渡しすればいいだけ。
0895デフォルトの名無しさん2014/12/10(水) 18:19:17.10ID:Lk9vW6tq
実行されようがされまいがクロージャーが持ってるんだから問題ない
0896デフォルトの名無しさん2014/12/10(水) 18:28:18.82ID:ICK0nNNi
std::threadはいろいろ問題点があるから
std::asyncの使用をお勧めする。
0897デフォルトの名無しさん2014/12/10(水) 18:35:36.90ID:IBqu5Hq8
問題点って?
joinしないと強制終了するとかって話か?
0898デフォルトの名無しさん2014/12/10(水) 18:44:40.52ID:zcHVZHaY
問題と言う奴のほとんどは仕様を読んでないだけ
0899デフォルトの名無しさん2014/12/10(水) 19:25:25.12ID:evuGnqnA
void*はどうかと思う
0900デフォルトの名無しさん2014/12/10(水) 19:56:57.45ID:N8F28/n0
むしろ中途半端なasyncこそUNKO
てかasyncとthreadは使い所が異なる
0901デフォルトの名無しさん2014/12/10(水) 20:15:04.45ID:ICK0nNNi
std::threadはリソースが不足するとスレッドを作られなくて例外を投げてメモリーリークをおこす。
std::threadを使うとオーバーサブスクリプションが起こる。
std::asyncに将来スレッドプールが実装されてもstd::threadを使っていると
恩恵を得られない。
0902デフォルトの名無しさん2014/12/10(水) 20:23:25.33ID:Lk9vW6tq
そんなこと言ったこれ
ttp://msdn.microsoft.com/ja-jp/library/dd492418.aspx
でいいじゃん将来じゃなくて今恩恵を得られるぞ
0903デフォルトの名無しさん2014/12/10(水) 20:29:42.21ID:IBqu5Hq8
std::asyncでスレッドが立てられないとどうなるの?
0904デフォルトの名無しさん2014/12/10(水) 20:56:18.43ID:OOX1q/Uh
>>901
何で例外がスローされるとメモリリークすんの?
0905デフォルトの名無しさん2014/12/10(水) 21:36:44.75ID:OE3nWLD+
>>901
>threadを使うとオーバーサブスクリプションが起こる

「関数を使うとスタックオーバーフローするから全部メイン関数に書く」
並のアホな理屈だな
0906デフォルトの名無しさん2014/12/10(水) 21:44:31.48ID:PoGTwE5c
スタックオーバーフローが嫌なら全てグローバル変数に
すれば良いじゃない。by マリー
COBOLという前駆者もいるよ〜
0907デフォルトの名無しさん2014/12/10(水) 21:45:36.79ID:CLJY23gy
>>890
Dataをenable_shared_from_thisを継承したクラスにする・enable_shared_from_thisを継承したクラスでラップする
0908デフォルトの名無しさん2014/12/10(水) 22:40:46.07ID:5IiOJn2a
クラス内クラスを、外側のクラスの外で定義するのって許されてる?

// Foo.h
class Foo { class Impl; };
// Foo.cpp
class Foo::Impl { ... };

Foo の private に触るサブルーチンを static 関数として Impl に追加するだけなら
.h を変更しないで済む利点があるように思うんだけど、どうでしょう?
0909デフォルトの名無しさん2014/12/10(水) 22:44:05.05ID:Lk9vW6tq
pimplパターンってやつだな
0910デフォルトの名無しさん2014/12/11(木) 08:41:13.00ID:q7/3cWR7
>>909
調べてみました。 "P" (Pointer?) は使ってませんが、確かにpimplで使われる書き方ですね。

これが許されるなら、いわゆる partial class のように、クラスの定義後も、
非仮想関数だけは後付けで追加できても良いような気がするんですが…
0911デフォルトの名無しさん2014/12/11(木) 21:19:16.19ID:NmALJRhK
>>910
>"P" (Pointer?) は使ってませんが

ポインター使わなかったらできねーぞ
0912片山博文MZ ◆T6xkBnTXz7B0 2014/12/11(木) 21:23:53.12ID:Knr7owVD
ガー、ガー、ガー、
人間様、御言葉ですが、参照でもできます。
0913デフォルトの名無しさん2014/12/12(金) 01:52:53.02ID:g0bIf78o
下のmain内のsrc_imgを別関数(nega())に引数と渡す場合、どうやるベストなんでしょうか?
初心者すぎて申し訳ありません


main(int argc, char *argv[])
{
cv::Mat src_img = cv::imread("../../image/lenna.png", 0);
if(src_img.empty()) return -1;

// NOT演算
cv::Mat dst_img = ~src_img;

cv::namedWindow("src image", CV_WINDOW_AUTOSIZE|CV_WINDOW_FREERATIO);
cv::namedWindow("dst image", CV_WINDOW_AUTOSIZE|CV_WINDOW_FREERATIO);
cv::imshow("src image", src_img);
cv::imshow("dst image", dst_img);
cv::waitKey(0);
}



int
nega()
{

 //ここでsrc_imgを使いたい
}
0914デフォルトの名無しさん2014/12/12(金) 02:11:09.69ID:d9CqU0jA
int nega(cv::Mat src_img)
0915デフォルトの名無しさん2014/12/12(金) 02:21:27.39ID:+hKqCGtl
>>911
//a.h
struct A {A();
struct IMPL;
IMPL& m_impl;
IMPL& GetImpl();
};
//a.cpp
#include "a.h"
struct A::IMPL {char a;};
A::A() : m_impl(GetImpl()) {}
A::IMPL& A::GetImpl() {static A::IMPL s_i; return s_i; }
//b.cpp
main(){A a;}
参ったか
0916デフォルトの名無しさん2014/12/12(金) 02:46:35.70ID:g0bIf78o
>>914
おおお、こんなに簡単だったとはw

(Mat src_img)は出来ないし、ポインタ使えばいいのかとあれこれ悩んだですが、聞いてよかったw
とても助かりました。
0917デフォルトの名無しさん2014/12/12(金) 07:54:48.48ID:xI0j+bo/
opencvは浅いコピーだが参照渡しの方が良いだろうな
0918デフォルトの名無しさん2014/12/12(金) 08:18:24.16ID:bObcca+g
>911
>908 はメンバ変数の隠蔽までいってないからポインタがいらない
単にprivateメソッドを隠しただけ
0919デフォルトの名無しさん2014/12/12(金) 11:25:13.54ID:TWt75Sw9
>>918
かくしてるだろ
0920デフォルトの名無しさん2014/12/12(金) 19:50:37.50ID:XX/G5P6q
>>915
static変数を参照型のメンバに設定してドヤ顔とかアホなの?
Aごとに実体を持ってなきゃ使い物にならないでしょ
0921デフォルトの名無しさん2014/12/12(金) 21:46:49.57ID:zSk1Cb1M
>>915
pimplではないな
singletonか?
0922名無しさん@そうだ選挙に行こう2014/12/14(日) 11:28:15.55ID:pr1GnDgz
typedef ratio<1, 1000000000000000000LL> atto;
typedef ratio<1, 1000000000000000LL> femto;
typedef ratio<1, 1000000000000LL> pico;

typedef ratio<1, 1000000000> nano;
typedef ratio<1, 1000000> micro;
typedef ratio<1, 1000> milli;
typedef ratio<1, 100> centi;
typedef ratio<1, 10> deci;
typedef ratio<10, 1> deca;
typedef ratio<100, 1> hecto;
typedef ratio<1000, 1> kilo;
typedef ratio<1000000, 1> mega;
typedef ratio<1000000000, 1> giga;

typedef ratio<1000000000000LL, 1> tera;
typedef ratio<1000000000000000LL, 1> peta;
typedef ratio<1000000000000000000LL, 1> exa;
0923デフォルトの名無しさん2014/12/15(月) 17:52:17.61ID:nc0SWf6B
ファイルの内容を構造体にキャストして
読み込む方法って安全ですか?
0924デフォルトの名無しさん2014/12/15(月) 17:53:28.58ID:3s9eDA20
bmpとかそうしてるわな
0925デフォルトの名無しさん2014/12/15(月) 18:17:49.05ID:WOi/F5O3
>>923
アライメントもバイトオーダーもあるでよ
0926デフォルトの名無しさん2014/12/15(月) 18:17:52.04ID:nc0SWf6B
構造体のサイズが詰まってない場合とかあるでしょ。
0927デフォルトの名無しさん2014/12/15(月) 18:23:31.91ID:OL+lbztu
特定のコンパイラ依存でやるのはかつては常套手段だった。
だが現代では性能の問題が無い限り採用すべきではないな。
0928デフォルトの名無しさん2014/12/15(月) 18:25:38.99ID:nc0SWf6B
ありがとうございます。
ひと文字づつ読み込むことにします。
0929デフォルトの名無しさん2014/12/15(月) 19:29:38.20ID:pNwHOn6x
__attribute__ ((packed))
でむりくり詰めるのは今でも常套手段だと思う
公開する訳じゃないならバイトオーダーまで考えなくてもいいし
0930デフォルトの名無しさん2014/12/15(月) 19:34:05.85ID:WOi/F5O3
公開しないプログラムをC++で書くことはなくなったなぁ
0931デフォルトの名無しさん2014/12/15(月) 19:53:35.24ID:U6CA+1sN
>>930
対偶をとると
「C++で書くのは公開するプログラムだ」
となるが、正しいか?
0932 ◆QZaw55cn4c 2014/12/15(月) 19:56:40.96ID:/SsCOr8K
>>923
いろいろうるさいので、もういちいち要素を読むのが‥あ〜1byte ずつ読むのが結局は一番楽だとおもいますぅ
http://peace.2ch.net/test/read.cgi/tech/1313183984/34
0933デフォルトの名無しさん2014/12/15(月) 20:19:33.68ID:zp/a3var
>>931
違うだろ。
0934デフォルトの名無しさん2014/12/15(月) 20:24:10.35ID:cHr+ai5R
>>931
930にとっては正しいんでないの。
公開するならC++で書く可能性があると言ってるんだから。
0935デフォルトの名無しさん2014/12/15(月) 20:27:40.50ID:l7adVrbr
正しいが、C++でプログラムを書くことがあるとは言っていない
0936デフォルトの名無しさん2014/12/15(月) 20:29:32.82ID:zp/a3var
>>934
>公開するならC++で書く可能性があると言ってるんだから。
それも違うように思う。
0937デフォルトの名無しさん2014/12/15(月) 20:40:14.88ID:/RjxNv/g
>>935
もしそうなら、
> 公開しないプログラムをC++で書くことはなくなったなぁ
の、前半は冗長
プログラマー失格
0938デフォルトの名無しさん2014/12/15(月) 20:42:22.03ID:iBkobFrR
論理的には935だけど国語的には934じゃね。

わざわざ公開しないプログラムをって言ってるくらいだからC++で何かは書くんだろ。
でも930によるとそれは公開しないプログラムではない。
0939デフォルトの名無しさん2014/12/15(月) 20:45:41.68ID:l7adVrbr
>>937
もしそうなら、というのは君の勝手な仮定で無駄と言われても困る。
つまり書かないとも言っていないわけで、情報として別に過不足はない。
0940デフォルトの名無しさん2014/12/15(月) 20:46:33.92ID:zp/a3var
>>938
930 の対偶は
C++以外で書いたプログラムなら公開することもある
だろ
0941デフォルトの名無しさん2014/12/15(月) 20:48:22.38ID:l7adVrbr
>>940
ウッソだろお前wwww
0942デフォルトの名無しさん2014/12/15(月) 21:00:22.83ID:pNwHOn6x
しない⇔することもある
だから

公開するかもしれないプログラムをC++以外で書くこともある

なんか騙されてる気がするなw
0943デフォルトの名無しさん2014/12/15(月) 21:05:40.73ID:zp/a3var
>>941
嘘でした。
焼酎飲んで酔っ払っていました。すみません。
0944デフォルトの名無しさん2014/12/15(月) 21:09:14.27ID:pNwHOn6x
>>942
間違えた…

公開するかもしれないプログラムをC++で書くこともある

だった
0945デフォルトの名無しさん2014/12/15(月) 21:09:31.72ID:U6CA+1sN
>>930の言明は
 Pがプログラムであるとき
公開しない → C++で書かない

と解釈できるから、その対偶は

 Pがプログラムであるとき
C++で書く → 公開する

となる。もしPがプログラムではなく小説だとしたらC++で書かれていても公開する必要はない。
(C++で小説が書けるとは言っていない)
0946デフォルトの名無しさん2014/12/15(月) 21:10:34.87ID:pNwHOn6x
要するに

C++で書かない ⇔ 違う言語で書く

か

C++で書かない ⇔ C++で書くこともある

の違いか
0947デフォルトの名無しさん2014/12/15(月) 21:12:17.54ID:zp/a3var
要するに、焼酎で酔っ払ったら
プログラムは掛けないというこだ。
0948デフォルトの名無しさん2014/12/15(月) 21:13:01.16ID:pNwHOn6x
>>945
「しない」の反対は「することもある」だぞ
0949デフォルトの名無しさん2014/12/15(月) 21:21:40.60ID:/RjxNv/g
>>939
> もしそうなら、というのは君の勝手な仮定

違うよ
「その場合は」って言い換えれば理解できるかな?
0950デフォルトの名無しさん2014/12/15(月) 21:25:02.44ID:U6CA+1sN
>>948
>「しない」の反対は「することもある」だぞ

左側が命題論理で右側が述語論理か?それはおかしいだろ。
0951デフォルトの名無しさん2014/12/15(月) 21:30:31.85ID:U6CA+1sN
>>948
この場合、「すべて(∀)」と「ある(∃)」の入れ替えとかは関係ない

Pをプログラムの集合としたとき、

∀p∈P ( pを公開しない → pはC++で書かない )
∀p∈P ( pはC++で書かれている → pを公開する )

の両者が同値だと言ってるので、書き換えは ( ) の中だけ。
0952デフォルトの名無しさん2014/12/15(月) 21:39:46.02ID:l7adVrbr
>>949
Cppでプログラムを書くことがない
という命題と
>>930,>>931は別物だよな?
0953デフォルトの名無しさん2014/12/15(月) 21:46:42.75ID:scyQtu+8
その場合は、

C++でプログラムを書く →  >>930 が真である とき、
(¬ C++でプログラムを書く) であってもまた >>930 は真であるから
0954デフォルトの名無しさん2014/12/16(火) 12:41:16.47ID:GDEYR09Q
どーでもえーわ
0955デフォルトの名無しさん2014/12/16(火) 13:37:28.76ID:YQHLhHBa
どうということもないレスを変な方向に掘り下げるはプ技板らしくて良い
0956デフォルトの名無しさん2014/12/16(火) 21:06:06.57ID:GW6/SfZ/
(¬∀¬)
0957デフォルトの名無しさん2014/12/17(水) 06:09:02.32ID:DdxdyuB4
stlのイテレーターをインターフェイスから継承させれば
インターフェイスを継承しているクラスならば動的にダックタイピングができるとおもうんですけど
なぜできるようにしないんですか?
できないのなら代わりにどうしたらいいですか?
0958デフォルトの名無しさん2014/12/17(水) 07:05:15.67ID:s8VStUph
×ダックタイピング
○ポリモーフィズム
0959デフォルトの名無しさん2014/12/17(水) 07:56:30.20ID:N9O75ow6
そうだね
まずSTLなんて古いものは使うの止めるべき
0960デフォルトの名無しさん2014/12/17(水) 08:40:51.57ID:6Xcg5+WD
STLの代わりに何使うんだよ
0961デフォルトの名無しさん2014/12/17(水) 09:29:49.48ID:hluG9Z0Y
主に2chでしか活動しない
”標準ライブラリに含まれてるのはSTLではない党”
の人達ですよ
0962デフォルトの名無しさん2014/12/17(水) 09:42:28.31ID:q42MmlyA
だからstd::stringやstd::vectorやstd::unique_ptrを避けたら代わりに何を使うのか、ってことよ
0963デフォルトの名無しさん2014/12/17(水) 09:49:03.17ID:VSFyd8tT
>>962
const char*
new[]
ポインタ
各々注意してご使用ください(古典派)
0964デフォルトの名無しさん2014/12/17(水) 10:05:00.39ID:hluG9Z0Y
さすがに標準ライブラリすべてをSTLと呼ぶのは無いな
0965デフォルトの名無しさん2014/12/17(水) 10:07:56.14ID:egX2f05O
STLのTはテンプレート
0966デフォルトの名無しさん2014/12/17(水) 12:01:06.01ID:DdxdyuB4
stlのポリモーフィズム版
スタンダードポリモーフィズムライブラリーは
SPLが無いのはなぜですか?
0967デフォルトの名無しさん2014/12/17(水) 12:34:49.95ID:LL4LS8IO
>>966
C++の哲学的に、ポリモーフィズムのコストが望まれなかったからだと思うが。
たかがコンテナを走査するためだけに vtable + 仮想関数呼び出し は避けたかったんだろう。

Cの配列も同等に扱いたいというのもあったかもしれない。
配列や、配列のiterator(≒ただのポインタ)は、ポリモーフィズムできないしな。
0968デフォルトの名無しさん2014/12/17(水) 18:53:40.73ID:oskgmNh2
std::stringとstd:: unique_ptrはSTLじゃないだろ
コンテナ・アルゴリズム・イテレータ・ファンクタが限界
0969デフォルトの名無しさん2014/12/17(水) 18:55:33.07ID:cvokdp9c
どっちもテンプレートだし
0970デフォルトの名無しさん2014/12/17(水) 21:34:50.51ID:oqHNikZ2
>>961
事実に対してわざわざ "派" を付けるのは変ですよ

>>969
その通り、テンプレートですよね
素人でも知ってます
STLじゃないだけ
0971デフォルトの名無しさん2014/12/17(水) 21:48:11.66ID:KocJU1bl
派? 党?
0972デフォルトの名無しさん2014/12/17(水) 22:08:16.99ID:ogC9pRrQ
STLをdisってる人々がいるので、そういう時代なのかと最初は身構えた。
だけど国内海外を問わずSTLという呼び方がdeprecatedになったという実感はない。
つまりはそういうことだ。
0973デフォルトの名無しさん2014/12/17(水) 22:21:52.32ID:NbvfeN3M
こういう場所や日常会話で使う分には構わないが、きちんとした定義がないので書籍とかで定義せずに使われるとモニョるな
0974デフォルトの名無しさん2014/12/17(水) 22:24:22.95ID:VSFyd8tT
unique_ptrは微妙なとこだけどstringはSTLとは呼ばないかな
設計的に"テンプレート"が主眼じゃないもんコレ。
0975デフォルトの名無しさん2014/12/17(水) 22:25:56.74ID:G53RorvD
・STLは標準化前の遺物派
 (ステパノフのアレ、もしくはSGIのアレ)
・コンテナ、イテレーター、アルゴ、ファンクタ
 のみSTL派(string含まず)
・stringもSTL派(iostream含まず)
・テンプレートは全てSTL派
・C++の標準ライブラリは全てSTL派
・なんとなくライブラリは全てSTL派

STLという用語の根拠があるのは最初のみで
他はコンセンサスの得られない脳内定義
0976デフォルトの名無しさん2014/12/17(水) 22:25:59.72ID:cvokdp9c
std::basic_stringは無視できないだろう
0977デフォルトの名無しさん2014/12/17(水) 22:26:27.02ID:cvokdp9c
こいつら子供はキャベツ畑から取れるとでも思ってんのかよwwwwww
0978デフォルトの名無しさん2014/12/17(水) 22:26:51.32ID:G53RorvD
530 デフォルトの名無しさん sage 2014/01/16(木) 07:56:19.19
話が理解できていない>>529が哀れ
「化石のSTLは標準ライブラリのコンテナの基礎となった」
が正しい。
標準ライブラリには「ここはSTL」という説明はなく
また化石STLと標準ライブラリの類似部分とは完全に一致でもない
0979デフォルトの名無しさん2014/12/17(水) 22:32:02.66ID:VSFyd8tT
>>977
日本政府がなんでコウノトリさんの保護に躍起になってるか推して知るべしだよなw
0980デフォルトの名無しさん2014/12/17(水) 22:32:52.23ID:LL4LS8IO
最近のboostが標準ライブラリに取り込まれている流れと同じなのかな。
STLと呼ばれていたものが、過去に取り込まれたと。
std::threadをboostと呼ぶのか、みたいな議論に聞こえる。
0981デフォルトの名無しさん2014/12/17(水) 22:44:00.79ID:ogC9pRrQ
諸君!どうでもいいではないか
0982デフォルトの名無しさん2014/12/17(水) 23:10:34.23ID:z75DAbdw
俺の定義
.h拡張子の付かないヘッダーファイルの物は全てSTL
0983デフォルトの名無しさん2014/12/18(木) 00:39:29.24ID:fLZ4/WP5
文脈とSTLという単語で何を指しているかだいたいわかることに対して厳密な定義はこうだから!と、話の本質を無視するのがダメなところだ
だいたいそうなると元の話がどこかにいって罵りあいになるのに飽きないことよなぁ
0984デフォルトの名無しさん2014/12/18(木) 03:34:42.11ID:3DYbSfY0
>>980
似てるようで少し違うな。Boostは実装の一つだけど、STLと呼ばれる物は複数の実装があった。
今の標準ライブラリとして各コンパイラ用に実装されている物も
0985デフォルトの名無しさん2014/12/18(木) 03:46:43.93ID:3DYbSfY0
途中で書き込まれてしまった。
なんか面倒くさくなったからもういいや。
0986デフォルトの名無しさん2014/12/18(木) 05:39:46.73ID:mATKagVZ
あ
0987デフォルトの名無しさん2014/12/18(木) 07:07:48.12ID:ZC5ElBjJ
話し手双方の認識がずれているのに
不思議と会話できてしまった気分にさせてしまう魔法の言葉STL。
意味もなく文頭に付けておくのがトレンド
0988デフォルトの名無しさん2014/12/18(木) 07:29:09.97ID:Myc4f1K9
マイクロソフト版は惨かったな。
0989デフォルトの名無しさん2014/12/18(木) 08:59:22.03ID:UJb2HcUv
STL
ATL
WTL
テンプレートを巧みに利用したものはみんなナントカTLだな
0990デフォルトの名無しさん2014/12/18(木) 09:12:07.85ID:lEIIG5qv
OTL
0991デフォルトの名無しさん2014/12/18(木) 11:29:27.40ID:7LvNfPgX
Undefined identifier: STL
0992デフォルトの名無しさん2014/12/18(木) 13:47:32.19ID:Mboq20NA
次スレです。

C++相談室 part115 [転載禁止]2ch.net
http://peace.2ch.net/test/read.cgi/tech/1418877984/
0993デフォルトの名無しさん2014/12/18(木) 19:10:51.11ID:7Nj/hQDp
うめ
0994デフォルトの名無しさん2014/12/18(木) 19:44:59.09ID:ozqPNhmK
たけ
0995デフォルトの名無しさん2014/12/18(木) 19:49:03.26ID:6p59/Cj7
シーチキン
0996デフォルトの名無しさん2014/12/19(金) 03:50:11.75ID:FE5qeIwb
うめ
0997デフォルトの名無しさん2014/12/19(金) 13:58:00.56ID:qsG/8pF5
たけ
0998デフォルトの名無しさん2014/12/19(金) 16:13:53.01ID:jlzS90kf
まつ
0999デフォルトの名無しさん2014/12/19(金) 20:53:01.36ID:Wapt+wuq
うめ
1000デフォルトの名無しさん2014/12/19(金) 20:54:19.51ID:Wapt+wuq
千
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。