C++相談室 part114
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2014/08/23(土) 06:34:18.91ID:akTuwZSlただし質問の前には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:akTuwZSl0003デフォルトの名無しさん
2014/08/23(土) 10:44:35.91ID:DIp5Rbsw0004デフォルトの名無しさん
2014/08/23(土) 12:36:45.76ID:FfLkKFUC環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?
#include <stdafx.h>
後死ね。
言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。
0005デフォルトの名無しさん
2014/08/23(土) 20:50:09.64ID:IjpJYp7Y0006デフォルトの名無しさん
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:gaQQwBox0008デフォルトの名無しさん
2014/08/24(日) 15:03:11.49ID:jlCuRdJh0009デフォルトの名無しさん
2014/08/24(日) 20:17:07.83ID:PrtgRoPN0010デフォルトの名無しさん
2014/08/24(日) 20:24:38.96ID:jlCuRdJh0011デフォルトの名無しさん
2014/08/26(火) 12:48:47.12ID:SgRytTOZprivate:
struct B{
...
};
std::vector<B>::iterator FindTarget(std::vector<B>& list);
};
こういう、戻り値にprivateなクラスを含むときにFindTarget()の定義をどう書けばいい?
Bをpublicにしない限り無理?
0012デフォルトの名無しさん
2014/08/26(火) 14:02:54.73ID:vTZxB5CV0013デフォルトの名無しさん
2014/08/26(火) 15:29:18.77ID:SgRytTOZ普通にそれでいけた・・・thx
0014デフォルトの名無しさん
2014/08/28(木) 11:45:54.16ID:Bh3cAGzC0015デフォルトの名無しさん
2014/08/28(木) 11:56:31.26ID:oZIyRrF6void f(timpo){
}
int main() {
f(timpo{});
}
0016デフォルトの名無しさん
2014/08/28(木) 13:06:33.92ID:Bh3cAGzCありがとうございました
0017デフォルトの名無しさん
2014/08/28(木) 22:10:32.98ID:PwHue3Wr0018デフォルトの名無しさん
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:VOdIeR3q0020デフォルトの名無しさん
2014/08/28(木) 23:55:44.50ID:PwHue3Wr&&を指定すれば右辺値引数限定の関数だからいいのです、const値は渡せない
あと>>19
0021デフォルトの名無しさん
2014/08/29(金) 00:06:57.19ID:PwHue3Wrvoid func(timpo);
一時オブジェクトだけ対象とするなら
void func(timpo&&);
普通の値も一時オブジェクトも両方渡せる関数なら
void func(const timpo&);
0022デフォルトの名無しさん
2014/08/29(金) 02:54:16.49ID:tEMF8U6D>普通の値も一時オブジェクトも両方
勝手にconstの制限付けるなよ。
>>18を劣化させて何がしたいの?池沼?
0023デフォルトの名無しさん
2014/08/29(金) 05:18:48.03ID:VXFTpnaP0024デフォルトの名無しさん
2014/08/29(金) 08:06:42.55ID:w9uKf29m&と&&のオーバーロードを用意しろってことでしょ
0025デフォルトの名無しさん
2014/08/29(金) 10:55:34.05ID:VXFTpnaP0026デフォルトの名無しさん
2014/08/29(金) 11:06:35.19ID:VXFTpnaP勝手に制限付けるなとか言ってるキチガイはいつもそんなコード書いてんの?
0027デフォルトの名無しさん
2014/08/29(金) 12:52:23.15ID:bxnhpnUI標準ライブラリをdisってんの?
0028デフォルトの名無しさん
2014/08/29(金) 13:00:19.66ID:E3XtwHX8ダメでした
5行目の呼び出しの引数がエラーになります
0029デフォルトの名無しさん
2014/08/29(金) 13:04:02.61ID:6RqTPamlえ?どれ?
0030デフォルトの名無しさん
2014/08/29(金) 19:44:34.98ID:kA47mpnVtemplate <typename T>
void func(T&& t);
ってやって T自身が右辺値の場合も左辺値参照の場合も包括的に扱えるのはいいんだけど、
それをたとえば int に限定したいとかが楽にできない。
0031デフォルトの名無しさん
2014/08/29(金) 19:47:04.47ID:RBlY9ysOvoid func(int t)
でいいだろ
そもそもたいていは
void func(T t)
で済むんじゃないか
0032デフォルトの名無しさん
2014/08/29(金) 20:13:09.57ID:wF0sLSuE左辺値参照にするときは右辺値参照で渡すときと引数の意味が違うだろ。
そんな意味の違う物を一つのテンプレートにするとか自分の足を撃つようなものだろ。
キチガイはいつもそんなコード書いてんの?
0033デフォルトの名無しさん
2014/08/29(金) 21:25:54.23ID:kA47mpnVtemplate <typename T>
void func(T&& t)
{
なんたらかんたら
std::forward<T>(t);
}
ってよくやるだろうが。
何のための完全転送だよ?
0034デフォルトの名無しさん
2014/08/29(金) 21:30:46.46ID:0nMqjYvVお前がよくやるかどうかはどうでもいいので
move前提の右辺値参照渡しと非const左辺値参照渡しを
同一のテンプレートで扱わなければならない例を挙げてみろカス。
0035デフォルトの名無しさん
2014/08/29(金) 21:37:05.38ID:kA47mpnVstd::forward_as_tuple
0036デフォルトの名無しさん
2014/08/29(金) 21:39:02.27ID:kA47mpnVん?「非」const左辺値参照渡し?
どっから「非」が出てきた?
0037デフォルトの名無しさん
2014/08/29(金) 21:47:16.74ID:kA47mpnVstd::make_tuple
std::tuple_cat
std::make_unique
std::make_shared
0038デフォルトの名無しさん
2014/08/29(金) 21:50:54.97ID:TqQhQJVV多分
>>25 と >>26 の真似したかったんだと思う。
すまんなその前の言葉が汚いやつに釣られてキチガイなんて言葉を使ったばかりにそれを呼び出してしまったようだ。
0039デフォルトの名無しさん
2014/08/29(金) 21:56:36.69ID:kA47mpnVvector::emplace_back
とかいろいろあるな。自分でも調べてみたら?
そもそも T&& 以外に何を使うってんだ...
0040デフォルトの名無しさん
2014/08/29(金) 22:18:36.34ID:XZcOusjf標準ライブラリを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>vector自体は左辺値でも右辺値でも完全転送する必要がある
それで十分じゃないか。
引数がふたつ以上あって、それぞれ右辺値だったり左辺値だったりする時のことを考えてみれば?
0043デフォルトの名無しさん
2014/08/29(金) 23:30:35.43ID:kA47mpnVテンプレートで何か受け取る : 右辺値か左辺値かconstか非constか しかも複数別々
何かする
下に転送
↓
受け取る:右辺値か左辺値かconstか非constか不明
何かする
下に転送
↓
・・・
↓ ↓ ↓
T& constT& T&& それぞれオーバーロードして処理
左辺値か右辺値か意味の違いで区別はするが、それは最後の段階でやること多いよ。
その前の段階では一律 T&& になる。
必要になる理由のひとつがこれ。
0044デフォルトの名無しさん
2014/08/30(土) 00:36:13.45ID:UmMrAs+7stringはじめとしてコンテナ類の代入はmoveになってるみたいだからうまく使えばどんどん早くなる
0045デフォルトの名無しさん
2014/08/30(土) 00:47:21.31ID:yF8fXWqpconstなしの参照は呼び出し側が結果受け取るためにある。
const有りの参照、右辺値参照、コピー渡しは受け取った側が使うためで、呼び出し側に影響を与えてはダメ。
だからそこは一番最初に区別してオーバーロードしちゃだめな所。
標準ライブラリでもconst無しの参照と右辺値をオーバーロードしてるようなものは無いと思う。(隅々まで見てるわけじゃないからあったらごめんな!)
そこが解ってれば俺は何も文句ないな。
0046デフォルトの名無しさん
2014/08/30(土) 01:28:16.61ID:UmMrAs+7string (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右辺値オーバーロードしてないやつは意識してswap呼び出せばokだけど
0048デフォルトの名無しさん
2014/08/30(土) 01:39:26.70ID:j0sdYczDなんの話?
0049デフォルトの名無しさん
2014/08/30(土) 07:45:16.70ID:ftaKNhdW0050デフォルトの名無しさん
2014/08/31(日) 05:40:51.07ID:fJLy6+qM0051デフォルトの名無しさん
2014/08/31(日) 08:19:21.04ID:T22Ulum9コミュ障に構わないで
0052デフォルトの名無しさん
2014/08/31(日) 12:42:18.56ID:gPjYOqNIアンパアンパ
0053デフォルトの名無しさん
2014/08/31(日) 12:45:16.43ID:nYTEAaY7アンアン
0054デフォルトの名無しさん
2014/08/31(日) 12:51:05.20ID:OWTpspDDダブルアンパサンド(論理AND演算子)
0055デフォルトの名無しさん
2014/08/31(日) 14:16:45.53ID:lPRYYbfg0056デフォルトの名無しさん
2014/08/31(日) 16:03:38.69ID:X/rA3LMs人との会話で読み上げるときは
アンドアンドかな
0057デフォルトの名無しさん
2014/09/01(月) 01:28:59.39ID:Lsx4I8Xh文法的な読み方は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アンアンスコスコ
0063デフォルトの名無しさん
2014/09/02(火) 01:13:12.41ID:55rrG2QHinline 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/11i = 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意見ありがとう!
一応その方法でもできるけどsorted_indexはconstだから調査済みフラグを立てれないという罠が...
0066デフォルトの名無しさん
2014/09/02(火) 01:37:33.37ID:/I0Am/11こっそり const_cast しといて、最上位ビットをフラグとして使うとか。
最上位ビット立ってる index 用 size_t とか現実的になさそうだし。
sort 終わったら最後にこっそり0に戻しておく。 (だいぶ無理矢理)
0067デフォルトの名無しさん
2014/09/02(火) 01:47:37.81ID:55rrG2QHこらーー!!
でもまぁそれもそうなんで妥協案としてはありですな(最上位bitで管理)
0068デフォルトの名無しさん
2014/09/02(火) 14:57:29.12ID:GSaV/2XZtemplateなクラスを以下のように実装してます。
- ヘッダに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:TZPZ5z46STLもBoostもそうしてる
これはもうどうしようもない
0070デフォルトの名無しさん
2014/09/02(火) 15:01:46.87ID:p3UmGF9Eテンプレートの定義が見えてないと未定義になるので
定義もヘッダに書くのが基本
テンプレートの定義をコロコロ変えるのでコンパイル時間を減らしたい場合などは
定義をcppファイル(あるいは通常のcppファイルと区別するためにinlファイルなど)に書いて
具体化する場所で定義をincludeする
0071デフォルトの名無しさん
2014/09/02(火) 15:04:10.45ID:TYnEDLkyクリックしたら見られるところのほうが解答がきやすいはず
0073デフォルトの名無しさん
2014/09/02(火) 21:22:43.81ID:T4NLWN7Nメモリ確保くらいいいじゃん。
それより new size_t[size]; にしてswapで要素入れ替えしなよ。
0074デフォルトの名無しさん
2014/09/02(火) 22:53:33.90ID:55rrG2QH意見ありがとうございます!
たしかにsize_t[size]のほうが良いですね
そちらの実装に書き換えます
メモリ確保自体は別にいいのですが確保せずに
実装できる方法がありそうで考えつかなかったので
投稿した次第であります
0075デフォルトの名無しさん
2014/09/02(火) 23:05:46.73ID:T4NLWN7Nnew 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:UDA0xvxDfor (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おほー!これは素晴らしい
早速使わせていただきますね
ありがとうございます
0078デフォルトの名無しさん
2014/09/04(木) 00:46:31.16ID:xtYJRclNpermutate とでも名付けるか。
stdに無いってことは、実際上の効率はあまり良くないのかな?
0079デフォルトの名無しさん
2014/09/04(木) 05:29:52.27ID:7YOpRBOiソート順にindex振るのと入れ替えるのを分ける事自体が用途が限られてると思う
0080デフォルトの名無しさん
2014/09/04(木) 08:03:53.44ID:+NZ8wh13while ループが 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:b5Guug5jt1もt2も立ち上がったのをメインで確認後、開始フラグ立ててスタートしようぜ。
0083デフォルトの名無しさん
2014/09/04(木) 15:57:32.80ID:EOgLIza063より遅くなるのがネックだな
0084デフォルトの名無しさん
2014/09/04(木) 22:54:43.69ID:xtYJRclN0085デフォルトの名無しさん
2014/09/07(日) 00:51:37.46ID:iR4jmHzA100000件位までは>>76の方が高速
それ以上になるとstd::sortの方が速くなる
なんかミスってたらすまん
0086デフォルトの名無しさん
2014/09/09(火) 09:10:09.25ID:JXa3okj90087デフォルトの名無しさん
2014/09/09(火) 09:36:16.97ID:VSMYfOSx0088デフォルトの名無しさん
2014/09/17(水) 10:34:16.68ID:epONY4U2timsort試す
0089デフォルトの名無しさん
2014/09/18(木) 08:42:56.02ID:ov/0I+4yで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未だにC++を蛇蝎の如く忌み嫌うSIerもあるし、C++11を積極的に使うよう指示してくる研究者もいる。
つまり、適材適所。
宿題スレと言うことを考えたら避けた方が問題提示者には都合がいいかもしれないが、
そうでないからと言って文句を言われる筋合いでもない。
0091デフォルトの名無しさん
2014/09/18(木) 12:40:58.55ID:0+D2RILR爺はスルーしとけ
0092デフォルトの名無しさん
2014/09/18(木) 13:04:54.35ID:xCeqnwti0093デフォルトの名無しさん
2014/09/18(木) 15:54:50.35ID:WD6xtm/l0095デフォルトの名無しさん
2014/09/19(金) 13:06:20.42ID:DK1dQFYnという初期化は出来るのに、
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後者はint a[] = {1, 2, 3, 4, 5};でいいじゃん
0098デフォルトの名無しさん
2014/09/19(金) 13:27:39.41ID:DK1dQFYnありです。charもintもバイト数は1バイト、4バイトとサイズは決まってるので、
'a','b','c','d','e'というのがまとめてcharのポインタ型で初期化できるなら
1,2,3,4,5というのもまとめてintのポインタ型で初期化できたらいいのになとちょっと疑問に思ったもので。
0099デフォルトの名無しさん
2014/09/19(金) 13:27:58.80ID:Yn2YgLOH0100デフォルトの名無しさん
2014/09/19(金) 14:59:42.98ID:T3pYRqja0101デフォルトの名無しさん
2014/09/19(金) 18:03:21.44ID:9isi5Zm8素直に配列使えば十分だと思うし、この機能をわざわざ追加することは果たして有用なのだろうかね?
0102デフォルトの名無しさん
2014/09/19(金) 19:19:32.90ID:YE33y6IJ0103デフォルトの名無しさん
2014/09/19(金) 19:20:55.67ID:SCZ+cOgA0104デフォルトの名無しさん
2014/09/19(金) 19:30:23.31ID:l/ZT/QLf0105デフォルトの名無しさん
2014/09/19(金) 20:11:37.06ID:ZKmo/YorISO/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>charもintもバイト数は1バイト、4バイトとサイズは決まってるので
charはともかくintはおかしいだろw
まあデータ型モデルの都合上大抵は32bitだけど>int
0107デフォルトの名無しさん
2014/09/19(金) 20:51:25.45ID:Hrwgc7MY>>106
いつそんな事決まったんだっけ?
ワードアドレッシングコンピューターのsizeof()はみんな1を返すよ
0108デフォルトの名無しさん
2014/09/19(金) 20:55:54.75ID:NULeqarn「大抵は」って言ってるじゃんか……
0109デフォルトの名無しさん
2014/09/19(金) 23:34:24.19ID:jtajSA4X0110デフォルトの名無しさん
2014/09/19(金) 23:39:43.80ID:YE33y6IJ0111デフォルトの名無しさん
2014/09/19(金) 23:55:13.98ID:526ppMDR0112デフォルトの名無しさん
2014/09/19(金) 23:58:40.60ID:Pjq/AHDS0113デフォルトの名無しさん
2014/09/20(土) 09:24:47.10ID:j948TmPIregion 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何で>>105を無視してるの?
思いっきりダイレクトに左辺値だって書いてあるじゃん。
0115デフォルトの名無しさん
2014/09/20(土) 23:37:17.27ID:z3Nx+hddなんで>>110を無視してるの?
思いっきりダイレクトに別の質問してるじゃん。
0116デフォルトの名無しさん
2014/09/21(日) 00:08:45.16ID:V/2PcQDkアドレス取れないと困るだろ。
0117デフォルトの名無しさん
2014/09/21(日) 04:15:27.41ID:JQQIecj/>>113 は C の規格
文字列リテラルが左辺値とゆーのは C の規格から受け継がれてるな
0118デフォルトの名無しさん
2014/09/21(日) 04:34:46.43ID:tIzOsIsU0119デフォルトの名無しさん
2014/09/21(日) 07:20:16.93ID:Ds9W1/T00120デフォルトの名無しさん
2014/09/21(日) 14:06:12.99ID:urDZcnqs何でっていう疑問はわからないでもないけど、その答えが常に存在するとは限らないよ。
そういう意味で、唯一の確実な答えは、規格に明示してある事だけなんだよ。
要は、「そう決まってるから」が確実に言える答え。
で、ここからは推測になるけど、上記のように言いつつも、僕も>>113の考えに賛成。
文字列リテラル自体に記憶域が無い(=rvalue)と、そのアドレスを関数の戻り値に使えなくなる。
イチイチ名前を付けて領域を確保するのもめんどくさいし、文字列リテラルに限れば必ず静的に保持しているはずなんだから、直接参照できても構わないはず。
0121デフォルトの名無しさん
2014/09/21(日) 14:08:43.93ID:urDZcnqs0122デフォルトの名無しさん
2014/09/21(日) 21:49:13.79ID:fZliI4BG「そう決まってるから」
日本語が不自由な人ですね
0123デフォルトの名無しさん
2014/09/21(日) 22:02:35.21ID:14Np6+sv0124デフォルトの名無しさん
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それ以外の答えを持っているならぜひ教えて欲しいね。
君は日本語は得意みたいだけど、論理力が無いのかな?
0127デフォルトの名無しさん
2014/09/22(月) 04:04:11.09ID:5JECNKJaどうしてそういう設計にしたのかなんてニッチな話は
設計者K&Rにしかわからんだろ
0128デフォルトの名無しさん
2014/09/22(月) 21:12:28.80ID:wq/41zv3>>123
0129デフォルトの名無しさん
2014/09/23(火) 00:15:17.01ID:6PMa5Put日本語が不自由な人ですね
0130デフォルトの名無しさん
2014/09/27(土) 16:03:37.59ID:lZc14wWH出来ませんでした。どう書けばよいでしょうか?
#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の例なら、二個連結する関数を用意したとして
vector<string> vecCat = catVectors(catVectors(vec1, vec2), vec3);
でいいような。
0132デフォルトの名無しさん
2014/09/27(土) 16:53:55.61ID:DXaZxPH6値渡しはコスト高い
const vector<string>&で渡せ
0133デフォルトの名無しさん
2014/09/27(土) 18:14:14.62ID:RQc4Fizj0134デフォルトの名無しさん
2014/09/27(土) 22:09:50.79ID:4KEDy6y8詳細未確認
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...);
}
0135134
2014/09/27(土) 22:22:55.83ID:4KEDy6y8間違えた。
最初の concatenate_vectors_imple の戻り値型は std::vector<C>& ね。
0136デフォルトの名無しさん
2014/09/27(土) 22:54:28.00ID:7K/XJF0S0139130
2014/09/27(土) 23:29:38.26ID:lZc14wWH134さんの方式で出来ました。完璧に動きました。
ググッて知ったのですが、可変長テンプレートというやつですか?
私は、可変長引数の関数を作る従来の方式でやろうとして出来なかったのですが、
本機能を実現するには、この可変長テンプレートでしか出来ない
という理解で良いですか?
134さん、とにかく、大変有難うございました。
0140134
2014/09/27(土) 23:57:00.78ID:4KEDy6y8>この可変長テンプレートでしか出来ない
それはわかりません。>>134のは確かに可変長テンプレートで、従来の可変長引数よりはずっといいものですが、
>>136氏または他の人からより良い回答がある可能性があります。
0141デフォルトの名無しさん
2014/09/27(土) 23:58:37.54ID:4KEDy6y80142デフォルトの名無しさん
2014/09/28(日) 00:39:48.19ID:2ehfaXz0お試しコードだから効率なんかどうでもいいって話?まあそれはそうかもですが
他人の言葉を正しく理解できず(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:w7RNtATm0144デフォルトの名無しさん
2014/09/28(日) 00:58:58.02ID:3/ISLNZo事前reserveとpush_backの比較か。お約束気味だな。
0145デフォルトの名無しさん
2014/09/28(日) 01:09:36.52ID:WR77cIPq0146デフォルトの名無しさん
2014/09/28(日) 01:12:11.45ID:h4WI77pQ0147デフォルトの名無しさん
2014/09/28(日) 01:12:17.68ID:BhCM8Imx効率求めるならこうだろ
debugビルドじゃない限り、reserveしたらinsertもpush_back()も変わらん。
0148デフォルトの名無しさん
2014/09/28(日) 01:27:26.45ID:BhCM8Imxコンテナの種類関係無しにつなげたい場合
0149デフォルトの名無しさん
2014/09/28(日) 02:35:08.89ID:mV9kHGDGttp://ideone.com/aErAsu
0150デフォルトの名無しさん
2014/09/28(日) 09:58:11.70ID:BhCM8Imx0151デフォルトの名無しさん
2014/09/28(日) 10:41:26.77ID:3/ISLNZovectorのreserveの効果とかは埋没しちゃうんじゃないか?試してないけど。
vector<int>で試したらだいたい6〜7倍にはなったから意味はある。
もともとの質問が「可変長にするやり方がわかりません」なんだし、効率とかは質問者に任せすべき問題だろ。
0152デフォルトの名無しさん
2014/09/28(日) 11:09:59.47ID:9wEZYyyD俺も適当に書いてみた
一応コンテナのほかに普通の配列も渡せているみたいだ
0153デフォルトの名無しさん
2014/09/28(日) 11:16:20.23ID:yTX/1oq/0154デフォルトの名無しさん
2014/09/28(日) 11:19:31.10ID:V8dGoEdDちゃんとstringのムーブが実装されてる環境ならそうだろうな
0155デフォルトの名無しさん
2014/09/28(日) 11:30:09.24ID:3/A3g7Z1それを理解できないか理解したうえで認めず効率の話にすりかえてる人たちはプログラマとしてはアホ認定でいいじゃん
0156デフォルトの名無しさん
2014/09/28(日) 12:02:42.69ID:BhCM8Imxじゃあ142が下手な反論する前に効率の話じゃねえって否定すればよかったのにね。
0157デフォルトの名無しさん
2014/09/28(日) 12:44:57.42ID:lwUZotcA0158デフォルトの名無しさん
2014/09/28(日) 13:19:52.27ID:3/A3g7Z1>>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/mev0160デフォルトの名無しさん
2014/09/28(日) 13:38:19.88ID:B+Ni/mevすまんな。俺にはお前みたいに >>142 の意図を読み取れなかったよ。
もっとストレートに表現してくれるとありがたいな。
0161130
2014/09/28(日) 20:23:30.03ID:KnhFoiG8今回皆さんに教えていただいた可変引数のテンプレート関数
も、インスタンス化できるのでしょうか?
少し試したのですが出来ませんでした。それで、
ググッても見付けられなかったので、出来ないのかな。
0162デフォルトの名無しさん
2014/09/28(日) 20:55:32.98ID:3/ISLNZo特定のパターンを指定してアドレスを取って呼び出すとかだったらできるけど、そういう意味?
ついでに効率いい/悪いの比較したやつ。
http://ideone.com/5Pdu0W
0163130
2014/09/28(日) 21:53:05.39ID:KnhFoiG8サンプルコード、大変有難うございました。
とても参考になります。
でも私がやろうとしたのは、関数宣言のみをヘッダー.hに書いて、
実装は.cppに書いて、それで
vector<C> を
vector<string> や
vector<wstring> や
でインスタンス化する(というのかな?)ことです。出来ませんでした。
0164デフォルトの名無しさん
2014/09/28(日) 22:05:01.25ID:3/ISLNZoexprort template でググればいいんじゃないか。実装されてないか。
だが知りたい。なぜそういうことがしたいのか。
0165130
2014/09/28(日) 22:55:38.88ID:KnhFoiG8情報ありがとうごいざいました。
理由は、テンプレートのままだと、どうも私には理解しにくいので、
具体的なstringやwstringでインスタンス化したいと思ったのです。
exprort template を試してみます。
0166デフォルトの名無しさん
2014/09/28(日) 23:31:50.44ID:DoC3ycvg.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:q4h5mGIH0168デフォルトの名無しさん
2014/09/29(月) 07:41:56.01ID:9JQp905qそれ、そもそもテンプレート使う意味無くなってる。
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&& f, Args&&... args );
0170デフォルトの名無しさん
2014/09/30(火) 21:33:37.39ID:gpzW0Gxh0171デフォルトの名無しさん
2014/09/30(火) 22:09:33.58ID:AOM1YMTX0172デフォルトの名無しさん
2014/09/30(火) 22:29:51.96ID:LL2el0Wn0173167
2014/09/30(火) 22:35:52.72ID:hQ3BMz9t右辺参照にしてんのは効率の問題onlyってことかな?
エラるのかな?と思って参照取ったり色々試してみても別にエラらないんだよね。
0174デフォルトの名無しさん
2014/09/30(火) 23:08:56.50ID:CA/ThWcz単純に一時オブジェクトを使うことが多いからでしょ
ラムダやファンクタは一時オブジェクトとしてその場に書き下す事が多いしね
0175デフォルトの名無しさん
2014/09/30(火) 23:11:22.57ID:Yd0T+aaCC++ universal reference でぐぐるか↓この辺から読んでおく
ttp://suikaba.hatenablog.com/entry/2013/07/26/023910
0176デフォルトの名無しさん
2014/10/01(水) 09:36:54.22ID:wda39WGJ勉強になった。あんがと
0177デフォルトの名無しさん
2014/10/01(水) 14:08:14.52ID:d08nCdawそれならconst&でよし
0178デフォルトの名無しさん
2014/10/01(水) 20:52:37.51ID:DTMRbqd/状態を持つようなファンクタを受け取れないじゃん
0179デフォルトの名無しさん
2014/10/01(水) 22:04:53.93ID:iMfoFiuu0180デフォルトの名無しさん
2014/10/01(水) 22:15:58.06ID:IDwTE5ky0181デフォルトの名無しさん
2014/10/02(木) 10:32:59.09ID:oO5iGiGV0182デフォルトの名無しさん
2014/10/02(木) 10:33:42.24ID:bT+XEaGF0183デフォルトの名無しさん
2014/10/02(木) 12:31:55.72ID:MkOsHImNhttp://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:sgw8Gftb0185デフォルトの名無しさん
2014/10/05(日) 14:06:28.44ID:/uvjpa4w意味不明
0186デフォルトの名無しさん
2014/10/05(日) 14:29:42.40ID:TPVUn8gD複数行エディットコントロール
0187デフォルトの名無しさん
2014/10/05(日) 15:12:44.14ID:sgw8Gftbありがとです
c++ってなんであんなに同じことする関数が多いんですか?
例えば時刻取得でもいろいろあるし
型も多すぎ
0188デフォルトの名無しさん
2014/10/05(日) 16:23:17.77ID:kdm+QxET0189デフォルトの名無しさん
2014/10/05(日) 18:00:22.24ID:u9G+/APzclock_gettime
time
などなど
0190デフォルトの名無しさん
2014/10/05(日) 18:05:37.04ID:TPVUn8gD0191デフォルトの名無しさん
2014/10/05(日) 18:08:36.76ID:qVSrPPMg0192デフォルトの名無しさん
2014/10/05(日) 19:44:35.30ID:kUyZAgcBとりあえずWall Timeを測りたいのかCPU Timeを測りたいのかはっきりさせろ
前者については個人的にchronoとかomp_get_wtimeとかが好き
後者は使ったことないから(゚�听)シラネ
0193デフォルトの名無しさん
2014/10/05(日) 23:38:29.40ID:IhD3/i0T小難しい用語で話を攪乱し意図的に相手を混乱させることが目的ではないか
と勘ぐってしまう
0194デフォルトの名無しさん
2014/10/06(月) 02:25:06.03ID:hlfW/IbBJavaで、
java.util.Date
java.sql.Date
java.sql.Time
android.text.format.Time
と一杯同じような型が一杯あるのはなんで?
っていってるようなもん。
0195デフォルトの名無しさん
2014/10/06(月) 02:44:29.63ID:8Vsp+6MZjava.sql.Date、java.sql.Timeは例えが的外れだな
0196デフォルトの名無しさん
2014/10/06(月) 10:38:06.75ID:KyLSGL2cああ時刻だったか素で間違えたw
0197デフォルトの名無しさん
2014/10/07(火) 16:45:06.54ID:sF407jY4頼みます
Function test(pic As Image) As Image
test = pic
End Function
0198デフォルトの名無しさん
2014/10/07(火) 18:05:42.26ID:tX6Nr/4U0199デフォルトの名無しさん
2014/10/07(火) 23:16:54.89ID:oyL24YJn0200デフォルトの名無しさん
2014/10/08(水) 00:31:25.26ID:h+M9nGscありがとうございました。
>>199
デフォはByValです
0201デフォルトの名無しさん
2014/10/08(水) 21:18:17.13ID:IwW4BCh1stringの文字列数が無限とした場合、sizeにはどういう数値を設定するべき?
int shmget(key_t key, size_t size, int shmflg);
0202デフォルトの名無しさん
2014/10/09(木) 00:12:40.55ID:O8gj2Oze0203デフォルトの名無しさん
2014/10/09(木) 01:14:38.65ID:qyCusoHvわかんねえ上に誘導スレもはらねえ役立たずのボンクラなら黙ってろカスが
0204デフォルトの名無しさん
2014/10/09(木) 03:48:45.50ID:zccLNdfBdequeのアロケータもstringのアロケータもあってstringのアロケータはそれぞれ細切れ要求すんのに全部一括どかんとやりたいわけ?
そしたら自分でアロケータ作って共有メモリをヒープのように扱うんだな
string長可変ならフラグメンテーションも起こるしただでさえ見積もり困難なの文字数無制限なんていってたらサイズ割り出せるわけねーだろ
センスない
0205デフォルトの名無しさん
2014/10/09(木) 07:07:34.45ID:awPClF6T無限て上限の指定がないってだけの意味だろ
0206デフォルトの名無しさん
2014/10/09(木) 07:35:21.81ID:TFiTr1YNだから他人との会話が困難
0207デフォルトの名無しさん
2014/10/09(木) 10:13:38.21ID:L1QxHxFV>>205
>>206
わかんねえ役立たずのボンクラなら黙ってろカスが
0208デフォルトの名無しさん
2014/10/09(木) 11:39:07.25ID:ST5H/C5n回答例:
×「可変で上限が定義されていないものは回答不能 ※典型的なコミュ障
○「長さの平均をLとするとL×100×xxx
○「長さの平均でなく最大値のみに依存するものなので、上限を定義しないと決められない
0209デフォルトの名無しさん
2014/10/09(木) 12:01:24.64ID:QqvefLsG0210デフォルトの名無しさん
2014/10/09(木) 12:47:16.57ID:80F8eYzB1番目も3番目も変わらんような。
そもそも元の質問が何がしたいのか意味分からんからな。
自分ですら説明出来ない事をやろうとしてるのかコミュ障なのかはしらんが。
0211デフォルトの名無しさん
2014/10/09(木) 13:41:38.37ID:4Fk78vGxどっちも答えられないことには変わりないのに
0212デフォルトの名無しさん
2014/10/09(木) 14:40:03.33ID:80F8eYzBコミュニケーションスキルを発揮するなら意図を質問者から引き出してそれに対して的確な回答をするところだけど、そもそもそこまでする義理があるんかって話。
0213デフォルトの名無しさん
2014/10/09(木) 17:28:23.68ID:Gep9zwGHいつもまちがえるけど
みんなどう覚えてるの?
0214デフォルトの名無しさん
2014/10/09(木) 17:35:03.00ID:5Klz1bKaNow loadingのloadね。
ライドは乗り込み。
仮面ライダーはバイクに「乗る」からライダー。
0215デフォルトの名無しさん
2014/10/09(木) 17:35:35.55ID:MCK9hkSC0216デフォルトの名無しさん
2014/10/09(木) 17:37:01.06ID:hFWJtEjMどうすると間違えなくなるのでしょうか
0217デフォルトの名無しさん
2014/10/09(木) 17:49:50.71ID:BvafHE+cJIS規格ですら間違えて訳していたんだから。
0218デフォルトの名無しさん
2014/10/09(木) 20:32:27.78ID:9/qS7Lguって覚えてる。
0219デフォルトの名無しさん
2014/10/09(木) 21:58:55.09ID:SEo86Ilh0220デフォルトの名無しさん
2014/10/09(木) 23:53:22.08ID:awPClF6Tオーバーライドなんてまずしない。オーバーロードばっかりだ。
0221デフォルトの名無しさん
2014/10/10(金) 00:26:03.80ID:HJyCcpx7ありがとうございます。他の手段を検討することにします。
他の方々も得意のコミュニケーションスキルで頑張ってください。
0222デフォルトの名無しさん
2014/10/10(金) 02:06:58.21ID:S5S2nArM逆にオーバーライドは意識してよく使うわ
ベースクラスで普遍的な処理実装して個別は全部仮想メソッドで処理したり
仮想メソッドじゃなくてもベースクラスのメソッドに追加処理入れたいときオーバーライドで追加処理+ベースクラスのメソッド呼び出しにする
>>221
どう考えてもあんたがコミュ障
0223デフォルトの名無しさん
2014/10/10(金) 05:09:11.88ID:O7ZZtB040224デフォルトの名無しさん
2014/10/10(金) 06:51:54.72ID:PjwRa4Gsどうやってもエラーします。どうすればよいでしょうか?
VS2013のC++です。
const string str = "12345";
unsigned char *p =(???) str.c_str();
0225デフォルトの名無しさん
2014/10/10(金) 07:03:44.86ID:JWe5SEhS0226デフォルトの名無しさん
2014/10/10(金) 07:11:05.18ID:0aZbUNVlconstを無理矢理外してる事には気づいてる?
0227デフォルトの名無しさん
2014/10/10(金) 07:18:48.12ID:PjwRa4Gsありがとうございました。
reinterpret_castとかstatic_castとか、そういうのを使ってやるのかな
と思っていろいろ試したのですが、出来ませんでした。
>>226
constというのが良く分っていません。
0228デフォルトの名無しさん
2014/10/10(金) 07:21:27.44ID:yXhPCI1a0229デフォルトの名無しさん
2014/10/10(金) 07:28:53.30ID:zoT34cDOこの場合のconstは変更不可能であることを示す
変更不可能であることを宣言したのにキャストで変更可能にし直すってのは
不自然だから、「C++でのキャスト」の場合const_castを使う必要がある
……という以前に、std::stringの中身はunsigned charじゃなくて
charだからconst_castすら使えないんだけどね。要するにコードが変!
(unsignedを取ればconst_castで大丈夫だが)
0230デフォルトの名無しさん
2014/10/10(金) 07:42:46.91ID:BOqLnx27auto *p=(unsigned char *)malloc(strlen(kuso)+1);
strcpy(p, kuso);
0231デフォルトの名無しさん
2014/10/10(金) 07:47:36.25ID:PjwRa4Gs解説ありがとうございました。なんとなく理解できました。
結論としては、皆さんに教えていただいた方法でstringを
unsigned char*にキャストして使っても問題ないですか?
あるいは、unsigned charなstringは無いのでしょうか?
std::ustring と呼べばいいのかな。
0232デフォルトの名無しさん
2014/10/10(金) 08:20:29.30ID:zoT34cDOそこまでしてunsigned char*にこだわる意味は?
0233デフォルトの名無しさん
2014/10/10(金) 08:22:24.93ID:SMnu3esbその要求が間違ってる可能性のが高いぞ
0234デフォルトの名無しさん
2014/10/10(金) 09:00:18.10ID:j+lfyng9std::stringってstd::basic_string<char>だぞ。
>>232-233
やりたいってんだから、やらせてやりゃ良いじゃん。
間違ってて後戻りするのも経験。
0235デフォルトの名無しさん
2014/10/10(金) 09:01:00.88ID:PjwRa4Gsunsigned char* を引数に取る関数にそのstringを渡す為です。
0236デフォルトの名無しさん
2014/10/10(金) 09:32:32.07ID:2xykwDXZ継承して積まれるからオーバーロード
って覚えればいいのか
いい国作ろう鎌倉幕府みたいにスッと覚える方法ほしいね
0237デフォルトの名無しさん
2014/10/10(金) 09:40:42.30ID:JWe5SEhS0238デフォルトの名無しさん
2014/10/10(金) 10:35:36.96ID:ehxSzPpo0239デフォルトの名無しさん
2014/10/10(金) 10:53:28.99ID:0aZbUNVlconstが付いてるってことは中身を変えませんって宣言してることになるから変えてはダメなの。
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継承して同じ関数名が積まれるからオーバーロード
って上で説明受けたよ
0241デフォルトの名無しさん
2014/10/10(金) 12:07:28.97ID:iHp7wziF0242デフォルトの名無しさん
2014/10/10(金) 12:31:37.81ID:4Jxm1TDD昔のライブラリとかだろ
うちの会社にもこう言うべき論かざす奴いるけど、そんなことはわかってるし、そいつがライブラリ直してくれる訳でもないから、正直うざいだけ
0243デフォルトの名無しさん
2014/10/10(金) 12:35:09.91ID:9Y9G4apO継承して同じ関数名を使うと隠蔽されるからオーバーロードにならない
0244デフォルトの名無しさん
2014/10/10(金) 12:50:19.77ID:YgFoHfJWほかのユーザーが同じライブラリ使ってるのにコンパイルエラーになるからな
const_castが手っ取り早い
0245デフォルトの名無しさん
2014/10/10(金) 12:54:13.19ID:AbUawxmF逆
0246デフォルトの名無しさん
2014/10/10(金) 12:57:55.86ID:AbUawxmF引数仕様を変えて、「同じクラス」での処理を増やすから、オーバーロード
0247デフォルトの名無しさん
2014/10/10(金) 13:13:27.33ID:Z9E+F4Dmまあ正論だけど典型的なエンバグコードを例示しないでください
0248デフォルトの名無しさん
2014/10/10(金) 13:20:05.18ID:0aZbUNVl>>244
解ってないかもしれないから言ってんだろ
だいたいそうやって修正諦めてるやつは糞
0249デフォルトの名無しさん
2014/10/10(金) 13:23:01.74ID:qRrpLzSZオーバーロード overload: load:積む
なにかがすでに積まれているところにさらに積む
もとから積まれていたものと新たに積まれたものは同格
オーバーライド override: ride:乗る
何かに乗る。物理的・位置的にというのではなく存在として完全に上に立つ
乗られたものはどうでもいいんで無視、乗ったものが全て
0250デフォルトの名無しさん
2014/10/10(金) 13:30:50.26ID:xW4jBuFw0251デフォルトの名無しさん
2014/10/10(金) 13:44:33.36ID:YgFoHfJWttp://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残念ながら…
0253デフォルトの名無しさん
2014/10/10(金) 13:53:51.84ID:rQGEs1EGoverrideを辞書で引いたことある?
0254デフォルトの名無しさん
2014/10/10(金) 14:16:21.38ID:5tgJonUn0255デフォルトの名無しさん
2014/10/10(金) 14:18:08.52ID:5tgJonUn雑魚がやらされるのがoverload
0256デフォルトの名無しさん
2014/10/10(金) 14:27:55.59ID:0aZbUNVl直せる範囲の話じゃなかったんか?
そいつが直してくれるわけでもないとかライブラリー変えるとそのライブラリー使ってる方がエラー出るとか言ってた癖に
0257デフォルトの名無しさん
2014/10/10(金) 14:48:59.05ID:YgFoHfJWライブラリのほうを変えると他のユーザーでコンパイルエラーが出る
だからライブラリは編集できない
0258デフォルトの名無しさん
2014/10/10(金) 18:18:35.67ID:cGiw//Qi> だいたいそうやって修正諦めてるやつは糞
はいはい、言うだけなら誰でも言えるわな w
>>249
辞書でオーバーロードをひくと過積載とか過負荷の意味しかない
なので、オーバーロードと多重定義がどう繋がるのか全然わからん
ネイティブだと、何となくわかるんだろうか?
0259デフォルトの名無しさん
2014/10/10(金) 18:29:41.14ID:Z9E+F4Dm同じ識別子に定義を次々載せていくんだから全然わからんってことはないだろ
原義にイメージの近い、シンプルで弁別性も良い単語をあてがった結果がoverloadなんだろう
0260デフォルトの名無しさん
2014/10/10(金) 18:32:04.51ID:sYIHgfEb皿の上に別の皿を乗せるのがオーバーライド
0261デフォルトの名無しさん
2014/10/10(金) 19:33:06.62ID:LNVBxRDn> はいはい、言うだけなら誰でも言えるわな w
言うだけのやつも等しく糞っていってんだよ
0262デフォルトの名無しさん
2014/10/10(金) 19:38:58.22ID:InUbBFTKオーバー「ライド」: 「ライド = 乗っかってる」イメージ、何かに「乗っかってる」=「上書きしてる」イメージ
0263デフォルトの名無しさん
2014/10/10(金) 19:41:39.60ID:cGiw//Qiなら >>239 にもアンカーつけてやれよ、かわいそうだろ w
0264デフォルトの名無しさん
2014/10/10(金) 19:44:06.38ID:LNVBxRDnなんで?
0265デフォルトの名無しさん
2014/10/10(金) 19:48:47.41ID:2xykwDXZ区別がつかなくなってきた
0266デフォルトの名無しさん
2014/10/10(金) 20:37:22.03ID:PjwRa4Gsまた質問があります。
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+F4Dm0268デフォルトの名無しさん
2014/10/10(金) 20:53:25.75ID:cGiw//Qi口の前に手を動かせよ w
>>266
釣りか?
非ASCII文字なんてどこにもないし
取り敢えず、それ string 関係ない、p が指す文字列デバッガとかで確認してみな
ヒントとして "123\x25" とか、試してみ
0269デフォルトの名無しさん
2014/10/10(金) 21:08:37.82ID:5tgJonUn0270片山博文MZ次期CEO ◆T6xkBnTXz7B0
2014/10/10(金) 21:12:30.22ID:naOIlr8aヌル文字を入れたいなら
"123\0" "45"
とする。バックスラッシュを入れたいなら
"123\\045";
とする。
詳しくは「C言語 文字列 エスケープシーケンス」で検索。
0271デフォルトの名無しさん
2014/10/10(金) 21:26:38.21ID:S5S2nArMstring str(p, 6);
0272デフォルトの名無しさん
2014/10/10(金) 21:44:40.72ID:kwgAp7cQ0273266
2014/10/10(金) 22:06:10.61ID:PjwRa4Gsまだ完全には理解できていませんが、有る程度分ってきました。
0274デフォルトの名無しさん
2014/10/10(金) 23:15:20.22ID:E7H7wFtU0275デフォルトの名無しさん
2014/10/11(土) 14:48:43.23ID:BtCnKocW0276デフォルトの名無しさん
2014/10/11(土) 14:52:09.12ID:Cjm5vDPZ0277デフォルトの名無しさん
2014/10/11(土) 14:53:57.06ID:BtCnKocW0278デフォルトの名無しさん
2014/10/11(土) 14:54:34.25ID:BtCnKocW0279デフォルトの名無しさん
2014/10/11(土) 16:25:08.92ID:/1O2GRV20280デフォルトの名無しさん
2014/10/12(日) 20:19:06.81ID:5hTZCkoaC++11のstd::mt19937を一度だけ初期化して、複数のクラスで使いまわすというような使い方を
したいのですが、どうやれば出来るでしょうか?
メンバ変数にstd::mt19937を置いてしまうとデフォルト引数で初期化されてしまいます
複数のクラスから呼び出されても常にその時のメルセンヌ・ツイスタの状態をそのまま使いたいと
思っています
そうしないとあまりに終了時間が速いクラスだと例えばstd::time(nullptr)を使っても1秒単位だし
clock_t()を使ってももしかしたら同一になってしまうかも知れません
本当はstd::random_device()が使えれば良いのですが、これが常に同じ値を返す環境なのです
0281デフォルトの名無しさん
2014/10/12(日) 20:29:00.26ID:Pw6ew7gwそこから乱数返すようにすればいいじゃん
uniform_****_distributionはどうするのかわからんけど
0282デフォルトの名無しさん
2014/10/12(日) 20:35:58.92ID:sv4A2Uazシングルトンじゃダメなの?
0283デフォルトの名無しさん
2014/10/12(日) 21:20:31.34ID:mXx7tmN6具体的に短いプログラムでよろしいですからどんな感じになりますか?
クラスへのポインタか参照をシングルトンとして返せばいいでしょうか?
0284デフォルトの名無しさん
2014/10/12(日) 21:24:27.50ID:b9jCVfHEグローバルに置いて main() で初期化すればいいじゃない。
0285デフォルトの名無しさん
2014/10/12(日) 21:26:01.64ID:sv4A2Uazhttp://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グローバルに置くと多分デフォルト引数で初期化されてしまうと思うんです
そうなるとそのプログラムを起動する度に同じ結果の乱数になりませんか?
0287デフォルトの名無しさん
2014/10/12(日) 21:27:43.94ID:mXx7tmN6ありがとうございます
= delete を付けてやってみます
0288デフォルトの名無しさん
2014/10/12(日) 21:48:54.03ID:sv4A2Uazいや、それはシングルトンでも同じだよ?
0289デフォルトの名無しさん
2014/10/12(日) 21:50:40.92ID:b9jCVfHEseed 知らんのか?
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:XvaZQGyehttp://www.cplusplus.com/reference/random/mersenne_twister_engine/seed/
0292デフォルトの名無しさん
2014/10/12(日) 23:03:09.30ID:nsJ7qQZkごめんなさい
ヘッダファイルを探してみたらあったのでどこかにあるはずだと思って探していました
しかしrandomクラスはお世辞にも使いやすいとは言いがたい・・・
0293デフォルトの名無しさん
2014/10/13(月) 00:15:46.26ID:/XhokP7j何とか動きました
しかしメンバ変数がグローバルになってちゃシングルトンも怪しくなりますね
でも今のところこれしか方法を思いつかない
0294デフォルトの名無しさん
2014/10/13(月) 01:12:11.39ID:Rhz3F1Ts終了時間というのが実行単位の話なら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:/XhokP7jsetterを作ればいいですね
そしてgetterはシングルトンにすればよりカプセル化が進められていい形になると気づきました
どう考えてもstaticなpublic変数にmain()内で代入するというのは設計がおかしいです
0297デフォルトの名無しさん
2014/10/13(月) 02:23:31.23ID:8x6aEVrouniform_もmapにキャッシュすればいい
0298デフォルトの名無しさん
2014/10/13(月) 02:25:25.21ID:/XhokP7jいずれideoneにでも気が向いたら上げます
これでstd::randomの柔軟性が増して嬉しいです
0299デフォルトの名無しさん
2014/10/13(月) 02:28:30.71ID:/XhokP7jそれでもいいですね
uniform_の方は、Calc()という別のpublicメンバ関数を作ってその中でハードコードしました
std::bindを使えばuniform_の使い回しも出来るようになると思います
0300デフォルトの名無しさん
2014/10/13(月) 02:37:00.93ID:8x6aEVroそれを実装すればすむ話なんだけどね
0301デフォルトの名無しさん
2014/10/13(月) 05:25:09.46ID:GrLroV7Mboostにもあるけどそれでも無理なんか
0302デフォルトの名無しさん
2014/10/16(木) 16:56:02.61ID:NghbfOwWclass 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:J1KqAEmYconst char MyClass::array[] = "ahogehoge";
を書いて、それを複数のcppファイルでincludeするとエラー
書くならどれかひとつのcppファイルに書く
クラスはヘッダに、定義はcppに、それだけ
0307デフォルトの名無しさん
2014/10/16(木) 23:32:55.72ID:NghbfOwW解説ありがとうございました。理解できました。
とりあえず初期化もヘッダーの中に書きたいので、
私が最初に書いた方法でやってみます。ちょっとヘンテコな方法かも
しれませんが。
0308デフォルトの名無しさん
2014/10/16(木) 23:35:46.02ID:SBUE/h0X0309デフォルトの名無しさん
2014/10/17(金) 00:01:20.80ID:Hi4Jootuclass 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それとも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静的メンバーはクラス定義とはべつに実体定義しないといけないからそこでするもの
0314デフォルトの名無しさん
2014/10/17(金) 12:39:25.69ID:huHM4qB3プログラムはprogram
ではソースファイルのまま使うライブラリーは何ですか?
0315デフォルトの名無しさん
2014/10/17(金) 12:39:52.21ID:6TqJmkOF0316デフォルトの名無しさん
2014/10/17(金) 13:03:55.84ID:huHM4qB3テンプレートというんですか?
ありがとうございます。
0317デフォルトの名無しさん
2014/10/17(金) 22:39:43.98ID:2ADS1pFu0318デフォルトの名無しさん
2014/10/17(金) 23:38:21.23ID:Q4VSFD/U(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はい
>何でunsigned intと推論してくれないんでしょうか?
1uとすれば推論してくれます
0320318
2014/10/17(金) 23:57:04.02ID:Q4VSFD/Uおお、そんな記法があったとは!
おかげさまで、いちいちキャストしなくてもコンパイルできるようになりました。
ありがとうございました!
0321デフォルトの名無しさん
2014/10/18(土) 00:50:25.77ID:pBwE5r6C0322318
2014/10/18(土) 00:54:30.16ID:BkuevoKhたしかに、
x ? x : 1
って感じで、だいぶコンパクトに書けますね。
命令数もこっちのほうが減る可能性ありそうですけど、
max使うほうが、より明示的で可読性の面でイイかも・・・。
検討してみます。
ありがとうございました!
0323デフォルトの名無しさん
2014/10/18(土) 02:44:10.00ID:Whe7ZyB5std::max, std::minは引数の型が同じじゃないとダメだから
>>319
1の型はint, 1uの型はunsigned
詳しくはsuffixでggr
0324318
2014/10/18(土) 09:54:08.92ID:BkuevoKhsuffixっていうんですね。
float定数はfを付けるってのは知ってたんですけど、
他のは知りませんでした。
ありがとうございました!
0325デフォルトの名無しさん
2014/10/18(土) 10:40:11.51ID:Wgwlosqiありがとうございます。
調べてもわからないのですが
オブジェクトをスターティックライブラリーにしない利点はあるのでしょうか?
考えてみた結果、スターティックライブラリーにすればコンパイル時間が省ける
利点しか見つかりませんでした。
たぶん不必要な関数は取り除かれますよね?
ということはオブジェクトを持つ意味はないですね。
0326デフォルトの名無しさん
2014/10/18(土) 11:33:38.98ID:fZO/tonlお前が生きる意味もない。
0327デフォルトの名無しさん
2014/10/18(土) 11:47:38.28ID:nuGnKMLUなんの話をしてんの?
本気で言ってるならちょっと理解力ヤバい方だよ
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:2d9yKbqYunsigned は負を表せないから、
普通の四則演算用の数値として使わない方がいい
フラグ・ビット演算・リソースIDなどの特殊な用途に使う
組み込み・制御系で使うことが多い
C/C++の欠点は、intで表現できない範囲の数でも、
unsigned intで表現できるなら、キャストしてしまうこと
これにより正負のある数が、正だけの数になり、
符号ビットがなくなる
このキャスト規則があるおかげで、
プログラミングがかなり難しくなった
言語設計の誤り
0330デフォルトの名無しさん
2014/10/18(土) 14:38:35.78ID:2d9yKbqY一般的にライブラリは、
動的ライブラリ(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想定外の dll (バージョン違いも含む)を勝手にリンクされても困るのですが‥
0332330
2014/10/18(土) 15:27:34.08ID:2d9yKbqY例えば自分が、ver3のDLLを呼び出す際に、
そのバージョン固定で、バージョンを進めない
(ただし、セキュリティ修正は受け入れる)とか
ver3以降の新しいバージョン(ver4, 5, 6など)を受け入れるとか。
メジャー番号が上がるのは受け入れないが、
マイナー番号だけが上がるのは受け入れるとか
まあ通常、メジャー番号が上がったら、互換性はなくなるか、
Win7→8みたいに、システム自体が変わるだろうが
0333デフォルトの名無しさん
2014/10/18(土) 16:24:30.41ID:ldbOAwfE実行ファイルと同じフォルダにおいておけば
そっちを優先で読み込む。
ただし、VS2005からVS2008の場合WinSxSというやっかいなものがあるが。
0335デフォルトの名無しさん
2014/10/18(土) 17:10:02.33ID:RedYKMT6Linuxではバージョン番号付きの名前となしの名前でシンボリックリンクが張ってあったりするし、
Windowsでもある程度は同じ名前で互換性がなくなったりすると名前を変えるとかたまに見る。
WindowsでC++だと、COMみたいなのもあるが。
>>333
Windowsならその方法で依存関係地獄を脱出できるが、Linuxだと…
0336デフォルトの名無しさん
2014/10/18(土) 18:51:15.91ID:pBwE5r6Cそれぞれ相手の話を誤解したまま話を続けるから傍で見ている方は混沌としてしまうw
0337デフォルトの名無しさん
2014/10/18(土) 19:16:08.52ID:ldbOAwfE会話の中に.cppが出てくればWindowsだと思ってしまう。
0338デフォルトの名無しさん
2014/10/18(土) 19:34:51.57ID:RedYKMT60339デフォルトの名無しさん
2014/10/18(土) 22:19:34.55ID:Whe7ZyB50340デフォルトの名無しさん
2014/10/18(土) 23:38:36.60ID:pBwE5r6C0341デフォルトの名無しさん
2014/10/18(土) 23:54:10.59ID:rmwWJ1dQ0342デフォルトの名無しさん
2014/10/19(日) 00:41:58.23ID:1lbGX/cAc plus plus source
0343デフォルトの名無しさん
2014/10/19(日) 00:55:59.79ID:TD8KaiPQhttps://sourceware.org/binutils/docs/ld/VERSION.html
0344デフォルトの名無しさん
2014/10/19(日) 02:44:18.76ID:cw5JQu3z0345デフォルトの名無しさん
2014/10/19(日) 10:24:41.64ID:5d/1QuxNstatic libraliesはリンクのとき不必要なライブラリーを追加してもしなくても同じですか?
全体のライブラリーの中から必要な関数と変数をコピーするだけだから
関数を1個使うのと2個使うのではファイルサイズは違いますか?
0346デフォルトの名無しさん
2014/10/19(日) 13:31:39.36ID:PsSi0GjTpublic:
Class1 c1;
};
としたらエラーするのですが、理由を教えてください。
0347デフォルトの名無しさん
2014/10/19(日) 13:37:07.68ID:c/fNN/TFc1のサイズはClass1のサイズなのでClass1のサイズを決定しなければならないが
Class1のサイズを決定するには…
0348デフォルトの名無しさん
2014/10/19(日) 13:47:29.76ID:PsSi0GjTclass 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/TFpublic:
Class1* c2;
};
とすればメンバとして持てる
0350デフォルトの名無しさん
2014/10/19(日) 14:01:07.82ID:PsSi0GjT出来ました。
0351デフォルトの名無しさん
2014/10/19(日) 16:48:58.34ID:FiSSuAAUC言語、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:cPpgakZMCは行主順だなんてのは只の妄想だよ。
0356デフォルトの名無しさん
2014/10/19(日) 18:03:59.91ID:cPpgakZM0357デフォルトの名無しさん
2014/10/19(日) 18:06:11.23ID:1lbGX/cAgl泣いちゃったじゃーん
0358デフォルトの名無しさん
2014/10/19(日) 18:08:12.06ID:FiSSuAAUこれだから、こいつらはスズメの学校でチーチーぱっぱのアホなんよ
0359デフォルトの名無しさん
2014/10/19(日) 19:04:17.43ID:PsSi0GjT#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:cxtXDO92http://msdn.microsoft.com/en-us/library/fe72hft9.aspx
0361デフォルトの名無しさん
2014/10/19(日) 19:20:39.01ID:BmB5xxVyfindかatを使う
0362デフォルトの名無しさん
2014/10/19(日) 19:31:21.47ID:I8zMPvcx> auto j = my_map["two"];
my_map に "two" がなかったら、"two" のエントリー作るんじゃなかったっけ?
0363デフォルトの名無しさん
2014/10/19(日) 19:41:01.00ID:PsSi0GjTat でうまく行きました。
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その使い方なら普通にオーバーロードすればいいのに
0366デフォルトの名無しさん
2014/10/20(月) 00:13:30.48ID:KWC1n/5d0367デフォルトの名無しさん
2014/10/20(月) 00:19:54.15ID:Z/nnvF1Aboost::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引数を明示指定したいなら
特殊化する意味もあるんだろうが
0370デフォルトの名無しさん
2014/10/20(月) 01:03:27.00ID:ue6UcWSyfuncとは別の名前(ここではfunc1とする)の中身何もしないtemplate関数を作る
必要な型だけfunc1のオーバーロードを作成する。
funcから呼ぶ
0371デフォルトの名無しさん
2014/10/20(月) 04:00:30.17ID:jjiQL4kfリンカ(やそのオプション)によっては馬鹿正直に全部コピーするし、
デバッグ情報その他メタ情報として引数などを埋める実装ってのも有りだから同じとは断言できない。
使ってる奴だけリンクする状態なら参照する関数増やしたらサイズも普通は増えるけど、
ページサイズで切り上げされてたりしたら変わらない場合も普通にある。
0372デフォルトの名無しさん
2014/10/20(月) 06:37:20.07ID:cU31huaM忘れたころに回答ありがとうございます。
0373デフォルトの名無しさん
2014/10/20(月) 21:13:43.88ID:X9l2Mfw6virtual ~Hoge() final {
}
};
があるときHogeを継承したクラスを作ることはできますか?
0374デフォルトの名無しさん
2014/10/21(火) 00:07:23.57ID:mXM/35MR0375デフォルトの名無しさん
2014/10/21(火) 00:09:20.36ID:Qa1TKKho0376デフォルトの名無しさん
2014/10/21(火) 00:44:10.50ID:KrgwDc8dfinalは宣言自体できないのかね。
0377デフォルトの名無しさん
2014/10/21(火) 01:05:23.78ID:QVo453t/finalってのが最近のC++にはあるのか
C++のfinalは知らないけどJavaのfinalと同じなら出来ないだろ
0378デフォルトの名無しさん
2014/10/21(火) 01:30:24.30ID:xnLzWUl1class 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:BH8kXLH70380デフォルトの名無しさん
2014/10/21(火) 01:45:12.43ID:xnLzWUl1レスありがとうございました。
早速やってみたのですが、10でした。
0381デフォルトの名無しさん
2014/10/21(火) 01:47:52.42ID:TXfJYF3K0382デフォルトの名無しさん
2014/10/21(火) 01:54:23.45ID:BH8kXLH70383デフォルトの名無しさん
2014/10/21(火) 01:54:51.85ID:xnLzWUl1ありがとうございました。
無事にできました。virtual overrideとポインタが必要だったんですね。
勉強になりました。
0384383
2014/10/21(火) 21:35:24.11ID:xnLzWUl1using 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:tyo0JEbH0386デフォルトの名無しさん
2014/10/21(火) 21:44:54.89ID:M5Ku/KlJMyDerivedの生成時に呼ばれる
MyBase::MyBase()で
MyBase::pが初期化されていない。
0387デフォルトの名無しさん
2014/10/21(火) 21:50:37.67ID:CyXjalgJ0388デフォルトの名無しさん
2014/10/21(火) 22:04:05.63ID:luau+y4R0389デフォルトの名無しさん
2014/10/21(火) 22:12:21.90ID:M5Ku/KlJ0390383
2014/10/21(火) 22:18:54.96ID:xnLzWUl1無事解決しました。助かりました。
>>387
どのあたりが悪いかできればもう少し詳しく指摘お願いします。
>>388
お勧めの方法ありましたら、アドバイスお願いします。
ググりながら自己流で勉強しているので、分らないことだらけです。
0391デフォルトの名無しさん
2014/10/21(火) 22:28:40.60ID:luau+y4R0392デフォルトの名無しさん
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:hkgchR3YJava/C# からの人だったら、こう書いてしまうと思う‥
0395デフォルトの名無しさん
2014/10/22(水) 02:20:25.16ID:iE8blC7uさすがにないやろw
なんにしろこの手の人は数千円の入門書を何故読まないのか
金がないなら図書館だってあるだろう
方程式も教科書と教師に教えてもらって理解した経験があるだろうに、ネットに散らばるチラ裏で修得できるほど頭が良いと思っているんだろうか
0396デフォルトの名無しさん
2014/10/22(水) 07:18:57.00ID:VYFezLJeC++: 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最近はやりの move semantics を加味するとどうなるんだろうね‥
0398デフォルトの名無しさん
2014/10/22(水) 16:11:15.00ID:AcjAFVtk> this->p = new MyDerived(n);
言語を問わずこんなことはするものではないな。
Baseの中に自身と別のBaseがもう一つ居るとか
どんな糞設計だよ。
0399デフォルトの名無しさん
2014/10/22(水) 16:20:16.90ID:+lUzyECgその Providing は(emergency medical assistance を)「提供すること」でしょ。
0400片山博文MZ次期CEO ◆T6xkBnTXz7B0
2014/10/22(水) 16:31:57.12ID:T8R/UYV6MZC3_Blowfish (Blowfish暗号化・復号化)
https://github.com/katahiromz/MZC3_Blowfish
0401デフォルトの名無しさん
2014/10/22(水) 23:18:54.65ID:hkgchR3Yちっ、ただの動名詞だったか、素直に読めないようではもうだめだね‥
0402デフォルトの名無しさん
2014/10/23(木) 14:56:43.60ID:eDVkHXcG0403デフォルトの名無しさん
2014/10/23(木) 18:13:43.78ID:hSW+FkP+質問なのですが、一般論として、クラスが正しく設計されている場合には、
Baseクラスの中でDerivedクラスのインスタンスを変数で持つような状況は、
あり得ないのでしょうか?
0404デフォルトの名無しさん
2014/10/23(木) 18:22:05.38ID:YOPswA+s少なくとも今回みたいな
基底クラスのコンストラクタ内で
派生クラスのインスタンスを直接作るのは
設計が狂っている。
0405デフォルトの名無しさん
2014/10/23(木) 19:20:44.81ID:EQz9OYFC0406デフォルトの名無しさん
2014/10/23(木) 19:35:08.39ID:pHiXUqCq0407デフォルトの名無しさん
2014/10/23(木) 20:50:27.23ID:hSW+FkP+すいません、初心者なので良く分らないのですが、
ポインターを持つことは、インスタンスを持つことと同じじゃあ
ないんでしょうか?
0408デフォルトの名無しさん
2014/10/23(木) 22:55:51.63ID:V+SB6iWvあんたがやろうとしてるのは足し算わからないけど連立方程式解こうとしてるのと変わらん
基礎理論を理解してないのに応用が理解できるはずないだろ
というか初心者スレ行きだろいい加減
0409デフォルトの名無しさん
2014/10/23(木) 22:58:46.59ID:tX24EZ6L依存関係がループするような作りはしないよ。
0410デフォルトの名無しさん
2014/10/24(金) 03:04:10.76ID:DvSLv01W派生クラスの中の基底クラスが別の派生クラス作ったら無限ループだよ?
一般的なデザインパターンだって不適切に使えば非合理的なんだし、
何か理由があってそうなったのならその理由の方から事を考えないと断定は出来ないけど…
「派生クラスの中の基底クラスは基底クラス単体の時とは異なる挙動をする
(派生クラスを作らずNULLなり自分自身なりをその変数に代入するなど)」
ってのは委譲の方法にちょっと近いものの、それよりも分かり難く無駄な構造だと思う。
0411片山博文MZ次期CEO ◆T6xkBnTXz7B0
2014/10/25(土) 10:03:25.41ID:O1Q4q8RyMZC3_SHA-256
https://github.com/katahiromz/MZC3_SHA-256
0412デフォルトの名無しさん
2014/10/25(土) 10:25:16.26ID:8AZi4m8mスレ違いは去れ
0413デフォルトの名無しさん
2014/10/25(土) 10:37:57.97ID:GmtDWvI2たまにちゃんとした回答もするからまーほっとけ
0414デフォルトの名無しさん
2014/10/25(土) 10:39:54.47ID:N6/70Jtm0415デフォルトの名無しさん
2014/10/26(日) 01:28:22.44ID:4871dmM20416デフォルトの名無しさん
2014/10/29(水) 10:12:10.65ID:RfXOlH81それは仕様かと思いますが、例外を出したくないので事前に
整数に変換できるかどうか確認してからstd::stoiしたいのですが、
どういう方法でチェックするのが良いでしょうか?
それともstd::stoi使う時はtry catchで囲むんでしょうか?
0417デフォルトの名無しさん
2014/10/29(水) 10:21:10.90ID:n7T4qk3X0418デフォルトの名無しさん
2014/10/29(水) 14:51:03.47ID:xTSKNpvJ基本数字だけど空の場合があるならempty()で分岐だろ
0419デフォルトの名無しさん
2014/10/30(木) 01:30:33.01ID:2b2DRP+p0420デフォルトの名無しさん
2014/10/30(木) 01:34:30.66ID:YHBMm73x0421デフォルトの名無しさん
2014/10/30(木) 01:35:11.09ID:DI94Uq9B単なる整数変換にregexなんて使うかよバーカ
0422デフォルトの名無しさん
2014/10/30(木) 01:35:28.23ID:s/3Hn11s0423デフォルトの名無しさん
2014/10/30(木) 04:13:14.85ID:vgyl7cm20424デフォルトの名無しさん
2014/10/30(木) 05:44:57.13ID:2RRbr+Zvどっちも当然try...catch
それがC++
今更strolはないわ
0425デフォルトの名無しさん
2014/10/30(木) 06:06:20.94ID:QJEzbmXXC#のParseがstd::stoi的なものとしてTryParseが欲しいんだよ俺は
0426デフォルトの名無しさん
2014/10/30(木) 07:29:41.39ID:7fc6WtHXそもそも整数変換の話じゃなくてチェックの話だ、バーカ
0427デフォルトの名無しさん
2014/10/30(木) 08:05:54.49ID:bJcsLIv5プログラムの利用者の入力値の数値変換が
同じでいいと思ってる奴は素人
0428デフォルトの名無しさん
2014/10/31(金) 07:05:09.20ID:qzXnBU4c単なる整数かどうかのチェックに正規表現なんて使うかよ、バーカ
とでも返せばいいのか?w
0429デフォルトの名無しさん
2014/10/31(金) 07:18:20.71ID:H/kqMfAT変換とチェックの区別もついてませんでした、ごめんなさい
だろ、バーカ w
0430デフォルトの名無しさん
2014/10/31(金) 07:28:23.21ID:EAvtXQzcisdigit(static_cast<unsigned char>(s[s[0]=='-'?1:0]));
0431デフォルトの名無しさん
2014/10/31(金) 07:46:08.44ID:oaAdI0DZ0432デフォルトの名無しさん
2014/10/31(金) 08:29:46.59ID:qzXnBU4c「返す」って言葉を使ったのが悪かったよ
>>421は自分じゃないんです、ごめんなさい
今後は言葉に気をつけます(>_<)
0433デフォルトの名無しさん
2014/10/31(金) 10:59:32.96ID:NwqKHC4Istrtol()の方がいいよ。
0434デフォルトの名無しさん
2014/10/31(金) 12:21:53.12ID:9bxfywygstringstream 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:aPk8p0sK0436デフォルトの名無しさん
2014/10/31(金) 12:29:37.98ID:9bxfywygwhile中であれこれ調査したかったけど、2chのレスはインデントつけられないから・・。
0437デフォルトの名無しさん
2014/10/31(金) 15:23:11.59ID:zWE6Wm7Iそのためのコードパッド
http://codepad.org/
http://ideone.com/
0438デフォルトの名無しさん
2014/11/01(土) 00:17:22.85ID:fnbcpSuD【A】str += std::string("<") + bracedStr + ">";
【B】str += static_cast<std::string>("<") + bracedStr + ">";
そらコスト的にはこれ↓が一番だろうけど。
str += "<";
str += bracedStr;
str += ">";
0439デフォルトの名無しさん
2014/11/01(土) 00:22:31.39ID:jtBHZTX60440デフォルトの名無しさん
2014/11/01(土) 00:34:15.99ID:fnbcpSuDthx Aで書くわ。まあタイプ数少ないし直接的だものな
0441デフォルトの名無しさん
2014/11/01(土) 00:44:47.17ID:joQzlbVjstr += "<" + bracedStr + ">";
0442デフォルトの名無しさん
2014/11/01(土) 01:09:03.37ID:Wlerh3A3str += '<'; ってしちゃう
0443デフォルトの名無しさん
2014/11/01(土) 10:13:26.75ID:RYAQh7Zn"<"s + bracedStr + ">"
と書けるようになる日は近い
0444デフォルトの名無しさん
2014/11/01(土) 10:28:06.11ID:vyu/j3vj0445デフォルトの名無しさん
2014/11/01(土) 10:42:03.09ID:fnbcpSuDbracedStrはもちろんstd::stringのつもりなんだけど
どうあろうが>>441みたいに書くと左オペランド(const char*)の+演算子で解決しようとするから
なんとかしないとコンパイルできんよね、みたいな相談
0446デフォルトの名無しさん
2014/11/01(土) 10:48:42.05ID:vyu/j3vjえ?なんでコンパイル出来ないの?
0447デフォルトの名無しさん
2014/11/01(土) 11:35:09.50ID:1LKSyDzHbracedStrがstringならchar*をとるオーバーロードがあるから>>441で普通にコンパイルできますがな
0448デフォルトの名無しさん
2014/11/03(月) 02:40:35.50ID:gzxZLKcAclass 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:wj4A8VFW0450デフォルトの名無しさん
2014/11/03(月) 03:02:39.91ID:wj4A8VFW0451デフォルトの名無しさん
2014/11/03(月) 03:06:14.87ID:GHCh+c9h0452デフォルトの名無しさん
2014/11/03(月) 03:30:41.90ID:LskjCgED0453デフォルトの名無しさん
2014/11/03(月) 03:39:31.08ID:GHCh+c9hちゃんと質問のコード見なよ
誰がClass1とClass2生成すんだよ
0454デフォルトの名無しさん
2014/11/03(月) 03:44:12.06ID:LskjCgEDmainで生成して渡すくらいの設計変更はありなのかと。
func1とfunc2はコピペなんでしょ
0455デフォルトの名無しさん
2014/11/03(月) 03:55:22.22ID:N6prQvSh>100行くらいの処理があるんですが、中身は殆ど同じ
であれば、その100行くらいの同じ処理だけを記述したaaa関数を用意して
そのaaa関数とfunc1関数、aaa関数とfunc2関数と言う風に
それぞれの関数を組み合わせるように処理してはどうでしょうか
0456デフォルトの名無しさん
2014/11/03(月) 04:14:35.20ID:GHCh+c9hこんな風にしてその100行程度の処理をfuncに纏めるのが一番簡単でオーバーヘッドが無く今までと同じように動くはず
そもそもClass1とClass2は別のクラスにする必要があるん?そこは変更できない所?
0457デフォルトの名無しさん
2014/11/03(月) 06:31:39.40ID:fnGOptBY引数が違うだけで処理内容は同じようなものだし
0458デフォルトの名無しさん
2014/11/03(月) 08:18:02.22ID:N6prQvShつまりこういうことですね
#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#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:N0odnBwS0461デフォルトの名無しさん
2014/11/03(月) 11:43:38.94ID:C9Z/RfTthttp://codepad.org/HSIDTYFP
0462デフォルトの名無しさん
2014/11/03(月) 12:34:12.16ID:N6prQvSh#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#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こっちが正解だわ
#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);
}
0465461
2014/11/03(月) 13:14:08.22ID:C9Z/RfTt0466デフォルトの名無しさん
2014/11/03(月) 13:24:01.57ID:gzxZLKcAこれらのアイデアを元にして、改良してみます。なおclass1と2は、実際はもう少し複雑な処理をするのと、処理内容が若干異なるので一つにまとめるのは無理があるかなあと思っています。
0467デフォルトの名無しさん
2014/11/03(月) 14:01:47.26ID:N6prQvShがんばってね
0468デフォルトの名無しさん
2014/11/03(月) 14:17:40.61ID:PZ/xM7RRtemplateを使わない理由があるだろうか?いや、ない
>>456でFAでしょ
0469デフォルトの名無しさん
2014/11/03(月) 20:34:46.78ID:Cdjwvl/dでも、func1、2の引数が違うあたり、コードがにてるだけで別の方向へ拡張されることは無いのかな?
統合は、目的と役割を意識しないと突然破綻する。
0470デフォルトの名無しさん
2014/11/03(月) 23:08:19.80ID:hSdP9ipEint 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:hJid5R300472デフォルトの名無しさん
2014/11/03(月) 23:33:44.36ID:yTqbg0pj0473デフォルトの名無しさん
2014/11/03(月) 23:37:45.51ID:vLChkxGXconst int a = 123;
int b = a;
0474デフォルトの名無しさん
2014/11/03(月) 23:44:11.57ID:qti+b2VY0475デフォルトの名無しさん
2014/11/03(月) 23:55:15.98ID:IpGBffRx命題
int b = (const int)100;がコンパイルできるなら
「?」 b2 = (const int)100;の「?」はintである
は真か?
0476デフォルトの名無しさん
2014/11/04(火) 00:17:09.73ID:0eOV+naSconstが必要ならautoに付けておけばいい。
0477デフォルトの名無しさん
2014/11/04(火) 00:37:12.15ID:OIFhoe2e0478デフォルトの名無しさん
2014/11/04(火) 00:39:06.13ID:0eOV+naSシネマ
0479デフォルトの名無しさん
2014/11/04(火) 00:43:44.90ID:0eOV+naS0480デフォルトの名無しさん
2014/11/04(火) 23:38:42.83ID:Rug3DE9Lconst int a = 0;
auto b = a; // bはint型
>>476はウンコと喋るアスペ ヒキヲタDTニートのコミュ障
0481デフォルトの名無しさん
2014/11/05(水) 00:00:56.09ID:aCq1CxqU次はentryでも使い回すのか?
0482デフォルトの名無しさん
2014/11/05(水) 00:25:14.61ID:GT+3eS/XC++にentryなんて識別子ありませんけど
0483デフォルトの名無しさん
2014/11/05(水) 09:26:13.69ID:tYBGZQUICなんて名前を衝突しないようにした結果
勉強する気も失せるくらい汚いキーワードだらけ
0484デフォルトの名無しさん
2014/11/05(水) 11:56:09.66ID:bBYPRYMe0485デフォルトの名無しさん
2014/11/05(水) 18:53:16.58ID:pjOZNQFt文脈依存キーワードはfinalとoverrideだけじゃないの
あんま汚いとは思わないけど
class unko final : public unko_base {
public:
void f() override final {}
};
0486デフォルトの名無しさん
2014/11/05(水) 20:17:26.24ID:+x9XCqU/え?たとえば?
0487デフォルトの名無しさん
2014/11/05(水) 21:40:52.15ID:hovJhJ2c_Alignas
_Alignof
_Atomic
_Bool
_Complex
_Generic
_Imaginary
_Noreturn
_Static_assert
_Thread_local
_Noreturnと_Static_assertみたいな統一性の無さは何なのかと
0488デフォルトの名無しさん
2014/11/05(水) 21:47:49.87ID:CNahLZw/一体どこのCなんだか。
0489デフォルトの名無しさん
2014/11/05(水) 21:52:00.63ID:NzSYiW9O0490デフォルトの名無しさん
2014/11/05(水) 22:03:31.49ID:Q9wGrCYd0491デフォルトの名無しさん
2014/11/05(水) 22:17:15.38ID:/z/j+wh90492デフォルトの名無しさん
2014/11/05(水) 23:53:39.48ID:f4xTES2wC++のCって当然それらをサポートする気ないんだろ
もうCとC++のCって違う言語になってきたんだな
0493デフォルトの名無しさん
2014/11/06(木) 00:07:03.61ID:gP4K9KZXもうちょっとお互い歩み寄ろうぜ?
0494デフォルトの名無しさん
2014/11/06(木) 00:26:11.91ID:xTDp5Iuaマングリングは入れるべきだったな
0495デフォルトの名無しさん
2014/11/06(木) 00:54:59.47ID:ZDtXQLoJてか_Genericしか聞いたことない
0496デフォルトの名無しさん
2014/11/06(木) 00:58:42.38ID:gP4K9KZX0497デフォルトの名無しさん
2014/11/06(木) 01:06:01.78ID:ofOV7+3EC++: void f() { thread_local int n; }
Cの機能の範囲で書いたコードがC++で通らないなんて糞すぎる
0498デフォルトの名無しさん
2014/11/06(木) 01:13:01.32ID:PmjlTjUD> Cの機能の範囲で書いたコードがC++で通らないなんて糞すぎる
何を今更
0499デフォルトの名無しさん
2014/11/06(木) 01:26:13.80ID:vSFIErApC99で書いたコードはいまだにC++では駄目なんだろう
もうC++2014なのにC99は駄目って、何を今更だよな。
0500デフォルトの名無しさん
2014/11/06(木) 06:38:27.89ID:PmjlTjUDC++で通らないCのコード
0501デフォルトの名無しさん
2014/11/06(木) 06:46:01.73ID:noUJsPy00502デフォルトの名無しさん
2014/11/06(木) 21:02:25.11ID:ZGYm08Q20503デフォルトの名無しさん
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:9PbWBn7f0506デフォルトの名無しさん
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どうしてもコード通らなくて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/meta-predicate-or の特殊化のさせ方が変じゃない?
これでVC通ると思うが
http://ideone.com/7cKLN0
0510デフォルトの名無しさん
2014/11/08(土) 17:57:55.98ID:d2K/ITfxウォオォオオオありがとうございます、通りました!!
全然私が気にして弄り回してたところと違ったのでとても助かりました
ありがとうございました!
0511デフォルトの名無しさん
2014/11/08(土) 18:07:04.69ID:bEhJQBB/ちょっと聞きたいんだけど、anyof とか pred_or の用途というか、実際にどう使うのかを教えて。
動作サンプルじゃなくて、「こういうことがしたいとき、こいつらが役立つ」ってやつ。
0512デフォルトの名無しさん
2014/11/08(土) 18:38:05.49ID:d2K/ITfx実は趣味でC++を触り始めてまだ1年ほど(その前にCを1ヶ月くらい勉強しました)で、新しい概念を取り込んでは弄り回すばっかりなのです。
ここ最近はメタ関数に打ち込んでいて、type_traitsの実装を眺めてたらこんなこともできる! と色々作ってみていたところだったのです。
なのであまり実用は考えてなかったというのが正直なところだったのですが、使うならSFINAEやコンセプトの判定に使ったりでしょうか…
0513デフォルトの名無しさん
2014/11/09(日) 00:54:17.05ID:M361BJ1eいまの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:sCVwZIOxC++11, Alias template
0515デフォルトの名無しさん
2014/11/09(日) 01:35:19.71ID:M361BJ1e有難う
templateって糞長くなるときあるからtemplateのtypedef的なものあって良いよな
0516デフォルトの名無しさん
2014/11/09(日) 08:26:22.82ID:fRLoLeal昔から待ち望まれていたもので、やはり非常に便利だ。
ただ惜しいのは、書けるスコープが限定されてること。
関数の中でちょっと必要になったからってその場に書くことは出来ない。
0517デフォルトの名無しさん
2014/11/09(日) 08:43:42.94ID:KHhjW+e6おまえら知りたいか?
0518デフォルトの名無しさん
2014/11/09(日) 11:04:50.60ID:YGX/79Mq0519デフォルトの名無しさん
2014/11/09(日) 11:26:17.43ID:wpgGAMvu0520517
2014/11/09(日) 12:17:24.19ID:m2xsLIsqこのたわけめ
>>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;//プライベートをアクセス!!
}
相互にフレンドリするところが味噌だ
コンパイルできないんだが‥
ideone か codepad に貼ってくれ
0522デフォルトの名無しさん
2014/11/09(日) 16:04:24.76ID:SVRFGMXr0523デフォルトの名無しさん
2014/11/09(日) 16:20:55.78ID:bgXiTjDPhttp://ideone.com/PN7360
のサンプルなのですが
mainの前に値を覚えてmainで取り出しているつもりです。
しかし覚える値の型が「仮想継承したクラスのメンバへのポインタ」
の場合に限って異なる値が取り出せてしまいます。
GCCだと正しく動きます。
何かやり方がまずいのでしょうか
0524デフォルトの名無しさん
2014/11/09(日) 20:52:16.94ID:Vau5E+lSregister int n;
&n;
と同レベルで警告だけ。
既存のコードも影響ないはず。
0525デフォルトの名無しさん
2014/11/09(日) 23:24:53.35ID:f045qkg9{
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:ivFVAUXXhttp://ideone.com/xfhf81
0527デフォルトの名無しさん
2014/11/09(日) 23:45:32.42ID:fRLoLeal{
template< typename T > void sage(){}
template<> void sage< int >();
void age(){ sage< int >(); }
};
template<> void hoge::sage< int >() {}
0529デフォルトの名無しさん
2014/11/10(月) 01:14:05.00ID:JRzPNX3C0530デフォルトの名無しさん
2014/11/10(月) 12:19:36.69ID:5fw2t1kvstaticメンバ変数とグローバル変数の初期化タイミングの問題じゃないかな
関数とstaticローカル変数を使ったシングルトン的手法にしてみれば
ttp://ideone.com/YBKgQT
0531デフォルトの名無しさん
2014/11/10(月) 16:10:54.33ID:rxYrHuXJ0532デフォルトの名無しさん
2014/11/10(月) 17:20:06.80ID:H0dF1SvN0533523
2014/11/10(月) 18:31:03.02ID:X6HQT2Fj試してみます!ありがとうございます
グローバル変数のコンストラクタの後にゼロ初期化が走っているような
挙動だったので怪しいとは思っていましたが、やはりタイミングですか。。
0534デフォルトの名無しさん
2014/11/10(月) 18:34:49.67ID:PIy5tpssつ http://www.pro.or.jp/~fuji/mybooks/cdiag/cdiag.1.2.html
0535デフォルトの名無しさん
2014/11/10(月) 20:34:10.67ID:z0LTTBXIこれでうまくいきました
>>527
こっちはVCだといけたけどarmのなんちゃらではだめでした
0536デフォルトの名無しさん
2014/11/10(月) 22:46:12.62ID:p3rDMgdKprivateアクセスはテンプレートの特殊化使うやつが王道だろ。
何年か前に見たけどこんな感じ
http://ideone.com/0mjF1L
0537デフォルトの名無しさん
2014/11/11(火) 06:55:09.77ID:99v8OZfb0538デフォルトの名無しさん
2014/11/11(火) 07:08:37.14ID:bgJKYijO0539デフォルトの名無しさん
2014/11/11(火) 10:21:57.52ID:+zIxmZb50540デフォルトの名無しさん
2014/11/11(火) 22:10:10.38ID:P9zO5vlj何をプレインと言うのか
0541デフォルトの名無しさん
2014/11/11(火) 23:12:24.62ID:0yMQgPtMそんな個所に黒魔術なんかあったっけ?
0542デフォルトの名無しさん
2014/11/12(水) 00:30:47.64ID:yfOFknA+0543デフォルトの名無しさん
2014/11/18(火) 06:12:02.52ID:5SkfsGvC#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こうか?
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:4NAmYBh0std::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:nqmEmvVPint 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:5SkfsGvC547さんの方法で上手く行きました。
その後、良く分らないまま試行錯誤していたら、二か所の&が有っても無くても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:nqmEmvVPCLangではどうなるんかな?
0551デフォルトの名無しさん
2014/11/19(水) 16:06:51.72ID:aCVs5KcFtry {
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:aCVs5KcF0553デフォルトの名無しさん
2014/11/20(木) 05:56:16.37ID:scCp81fxvoid 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その前提なら一個目と二個目一緒じゃん。
三個目bはどこいったん?
0555デフォルトの名無しさん
2014/11/20(木) 06:27:50.92ID:scCp81fxbをcに置き換えよろしくお願いします。
0556デフォルトの名無しさん
2014/11/20(木) 06:30:58.89ID:scCp81fx0557デフォルトの名無しさん
2014/11/20(木) 07:01:00.62ID:NeVUFuiv0558デフォルトの名無しさん
2014/11/20(木) 07:02:08.64ID:hEWhG4fb0559デフォルトの名無しさん
2014/11/20(木) 07:07:37.71ID:Tjnke0pBそんなことならfastcallいいじゃんね
0560デフォルトの名無しさん
2014/11/20(木) 07:13:10.73ID:TrsJQyqJ普通にinline展開で良いと思うけど
何がしたいのかわからんけど本当にスタック消費の話であればバカの考える最適化ってほんと無駄でしかないって事の見本だな。
0561デフォルトの名無しさん
2014/11/20(木) 08:09:52.28ID:ETx3qczZテンプレート特殊化ってクラスの中ではできないと思ったけど
なんで通るんだ?
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:BgWocquLvc++の規格違反
…というより標準C++と直接の関係は無い独自のC++方言であるVC++という言語での仕様
ttp://stackoverflow.com/questions/3052579/explicit-specialization-in-non-namespace-scope
0563デフォルトの名無しさん
2014/11/20(木) 11:01:48.63ID:3nar01e/つかはよVS2015リリースしろ
0564デフォルトの名無しさん
2014/11/20(木) 14:26:03.16ID:uBJa9BCk二番目は一番目で事が足りるだろう。
三番目は、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:knj2VTr5VS2015っていつごろなんだろな
もうプレビュー出てるし来年の早いうちにはでるかな
めんどいから5の倍数年のリリースしか入れぬ
0566デフォルトの名無しさん
2014/11/20(木) 14:46:27.28ID:EwXerdR30567デフォルトの名無しさん
2014/11/20(木) 17:39:26.39ID:Md1N5omvtemplate<typename T>
void f() {
static_assert(false, "aaa");
}
int main(){}
というコードがVC++だと通るのですがg++だとエラーになります。
テンプレートインスタンス化の時点でエラー判定
するのが自然ではないかと思うのですが
どうしてg++だとエラーになるのでしょうか?
0568デフォルトの名無しさん
2014/11/20(木) 19:02:31.82ID:GbKt4AUc0569デフォルトの名無しさん
2014/11/20(木) 19:24:08.80ID:yLyj3wB/VCが正しいのでは
B「VCは糞
Bは会話のできないアスペ
0570デフォルトの名無しさん
2014/11/20(木) 19:47:34.23ID:Dot4vBSi0571デフォルトの名無しさん
2014/11/20(木) 20:44:18.59ID:0zaPf18Zhttp://stackoverflow.com/questions/14637356/static-assert-fails-compilation-even-though-template-function-is-called-nowhere
どちらでも文句は言えない
0572デフォルトの名無しさん
2014/11/20(木) 21:49:35.38ID:g8XTKwkF0573デフォルトの名無しさん
2014/11/20(木) 23:48:14.49ID:RQaSz/aQint *p;
p=a;
delete [] p;
がgcc4.7.2でビルド実行されるけど、この時、配列aは本当にdeleteされるの?
それとも無視されるの? まったく、アホなコードだけど。ちなみに、
delete [] a;
だと警告がでる。
0574デフォルトの名無しさん
2014/11/20(木) 23:51:05.91ID:OR5YYWfSこれで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>そのコードはundefind behavior
つまり、「何が起こっても知らないよ」という奴ですか?
0576デフォルトの名無しさん
2014/11/21(金) 00:08:26.45ID:gIUtG8Vlイエス、マダーム
0577デフォルトの名無しさん
2014/11/21(金) 00:09:46.96ID:gIUtG8Vl>>576=>>574
0578デフォルトの名無しさん
2014/11/21(金) 06:42:46.17ID:bT+kokintemplate<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:QcsmP8sQ0580デフォルトの名無しさん
2014/11/21(金) 07:22:05.12ID:hRQqxbacauto
authAndAccess(Container&& c, Index i)
-> decltype((std::forward<Container>(c)[i]))
{
}
0581デフォルトの名無しさん
2014/11/21(金) 11:37:50.43ID:PqjDKRiyauto s = ... の形では初期化子がなんであれsは参照にはならない
sを参照にしたければ decltype(auto) s = authAndAccess(makeStringDeque(), 5);
あるいはただのautoだけを使う場合は auto & s = authAndAccess(makeStringDeque(), 5); とか書く
0582デフォルトの名無しさん
2014/11/21(金) 11:38:26.70ID:xkc9s2op・エラー情報構造体
・エラー情報クラス
どちらが優位なんでしょう?_・」
0583デフォルトの名無しさん
2014/11/21(金) 11:48:08.68ID:qLCHZ6x8> ・エラー情報クラス
言語にもよるけど、こっちのが良い場合が多いと思う。
なぜなら、ベースクラスで一括でcatchすることもできるし、個別のクラスでcatchすることもできるから。
それに、インスタンスメソッドも使えるしね。
0584デフォルトの名無しさん
2014/11/21(金) 12:14:19.47ID:xkc9s2opなるほど、設計の綺麗さから言うと、100%クラスですね。
>インスタンスメソッド
って、要りますか?
0585デフォルトの名無しさん
2014/11/21(金) 12:34:49.08ID:bT+kokinありがとうございます。
authAndAccess(makeStringDeque(), 5)の型はstd::string&なのですが、
typeid((makeStringDeque(), 5))::name()はSsでsの型と同じだったのですが
なぜでしょうか。
0586デフォルトの名無しさん
2014/11/21(金) 12:52:58.06ID:qLCHZ6x8> >インスタンスメソッド
エラーメッセージやスタックトレース等を、クラスごとにいい感じで整形して表示するメソッドを提供するとか。
0587デフォルトの名無しさん
2014/11/21(金) 13:04:43.36ID:PqjDKRiytypeidは参照を取り除いた型の型情報を返すから
0588デフォルトの名無しさん
2014/11/21(金) 13:09:41.61ID:bT+kokinboost使ってもう一回調べてみます。
0589デフォルトの名無しさん
2014/11/21(金) 13:13:19.77ID:bT+kokinすみませんでした、二度とこのスレには書き込みません。
0590デフォルトの名無しさん
2014/11/21(金) 17:50:56.96ID:9qivY6oH>・エラー情報構造体
>・エラー情報クラス
C++に構造体はありません。
優位以前に用語を正しく使ってください。
0591デフォルトの名無しさん
2014/11/21(金) 18:25:11.23ID:xkc9s2op>C++に構造体はありません。
って言ってしまうと、
「C++では構造体を使えません」という文意になるよね。
C++で構造体は使えるよ???
C++に構造体はあるんじゃないの?
0593デフォルトの名無しさん
2014/11/21(金) 18:48:57.39ID:PTqBTGLu0594デフォルトの名無しさん
2014/11/21(金) 18:53:16.40ID:QZ7tZ7Fi0595デフォルトの名無しさん
2014/11/21(金) 19:00:56.64ID:2cbiUBRX無いとも有るともこじつけられる
0596デフォルトの名無しさん
2014/11/21(金) 19:02:21.66ID:PTqBTGLuで?
仮想関数もデストラクタも使える既定でpublicなだけのクラスを定義するstructが使えるから何?
0597デフォルトの名無しさん
2014/11/21(金) 19:05:27.18ID:O7gTtOKhまあ「クラス」並にふわふわした言い方であることは間違いない
0598デフォルトの名無しさん
2014/11/21(金) 19:06:01.84ID:QZ7tZ7FiCと共有できるPOD型構造体だって作れるだろうに
0599デフォルトの名無しさん
2014/11/21(金) 19:09:18.83ID:2cbiUBRX"構造体は,《クラスキー》structを付けて定義するクラスとする。"
0600デフォルトの名無しさん
2014/11/21(金) 19:12:35.60ID:QZ7tZ7Fi実用的にも定義的にも存在するってことだな
無論クラスのサブセットとして
0601デフォルトの名無しさん
2014/11/21(金) 19:21:38.52ID:XqCFqcOo0602デフォルトの名無しさん
2014/11/21(金) 20:17:30.33ID:VVhfey73なんかコンテナとアルゴリズムという用語が多いような。
0603デフォルトの名無しさん
2014/11/21(金) 20:27:07.80ID:phJWTXbIVS 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以前はそんな定義も有ったけど今の規格では定義が修正されて
構造体は無くなった筈
君が使ってるのは11年前の化石コンパイラーなの?
0605デフォルトの名無しさん
2014/11/21(金) 20:56:43.40ID:OZreIA4g0606デフォルトの名無しさん
2014/11/21(金) 20:58:24.19ID:OZreIA4g0607デフォルトの名無しさん
2014/11/21(金) 20:59:01.48ID:9WrlNOac具体的に
0608デフォルトの名無しさん
2014/11/21(金) 21:08:05.29ID:2cbiUBRX具体的にどの文書で打ち消された(or消滅した)のか言ってくれないと困る
わざわざ"構造体(structure)"という文言を文書から抹消しなくちゃいけなくなったのなら興味深い
0609デフォルトの名無しさん
2014/11/21(金) 21:51:37.84ID:hjbuKfth0610デフォルトの名無しさん
2014/11/21(金) 21:56:03.22ID:z6ESDxk5B「その定義は改訂された!
C「どの文書で改訂されたのか!?
ISO 14882:2003を訳したJISが改訂されていないんだから
ISO 14882:2011以外に有り得ないだろうに低脳は
0611デフォルトの名無しさん
2014/11/21(金) 22:08:27.14ID:gIUtG8VlISO/IEC 14882:1998と2003では
>>582-583で正しいので
叩かないでください。
ちょっと情報が古いだけです。
0612デフォルトの名無しさん
2014/11/21(金) 22:28:41.39ID:/FjHZOth最初からそんな用語は無い
有るというなら1998年規格のどのページに書いてあるのか言ってみろ
0613デフォルトの名無しさん
2014/11/21(金) 23:56:25.28ID:cDn/MZSK・C++に構造体はない(らしい)
・C++規格のコンテナやアルゴリズムはSTLとは言わない(らしい)
・処理系提供のヘッダー以外のincludeファイルを
「ヘッダー」と呼んではいけない(らしい)
・インスタンスと言ったらオブジェクトでなくテンプレートのこと(らしい)
0614デフォルトの名無しさん
2014/11/22(土) 05:52:44.28ID:ROyo8ZjH0615デフォルトの名無しさん
2014/11/22(土) 05:55:34.98ID:row4W7Ki同じことでしょ
0616デフォルトの名無しさん
2014/11/22(土) 06:15:25.58ID:18N8Upow配列の宣言: std::size_tに変換可能な型
配列のインデックスアクセス:整数
ポインターの加減算:integral type
「integral type」はchar,intなどの整数型に加えwchar_t,bool などを含む。
0617デフォルトの名無しさん
2014/11/22(土) 10:46:54.64ID:0WzJgSsgclass なんとか {
やむなくclassにするって感じ
0618デフォルトの名無しさん
2014/11/22(土) 10:50:29.95ID:0WzJgSsgprivateが無い方がムダがなくていい
0619デフォルトの名無しさん
2014/11/22(土) 10:57:53.34ID:SaKq1orW0620デフォルトの名無しさん
2014/11/22(土) 11:34:53.77ID:rrzuQBQt0621デフォルトの名無しさん
2014/11/22(土) 11:47:14.01ID:A5WZOELB逆
c++のクラス自体がcの構造体を拡張したものだから、cの構造体と互換性のあるものは、自動的にクラスでもあり構造体でもあることになる。
0622デフォルトの名無しさん
2014/11/22(土) 11:47:58.90ID:0WzJgSsg斬新な発想だ。使い途を考えてみよう。
0623デフォルトの名無しさん
2014/11/22(土) 11:52:32.92ID:4W6g/VMc0624デフォルトの名無しさん
2014/11/22(土) 12:01:24.97ID:A5WZOELBsizeofでサイズは取れる。
0625デフォルトの名無しさん
2014/11/22(土) 16:14:57.46ID:mfqPLINB0626デフォルトの名無しさん
2014/11/22(土) 19:08:35.46ID:0WzJgSsg0627デフォルトの名無しさん
2014/11/23(日) 00:34:23.40ID:USxuilQQ0628デフォルトの名無しさん
2014/11/23(日) 16:12:33.19ID:953N3eH5こんなふうに作った。
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テンプレートと非テンプレートが有ったら
非テンプレートが選ばれると思ってた
0631デフォルトの名無しさん
2014/11/23(日) 18:04:40.06ID:rJsYj8HKVisual C++の11/18版アルファビルドだとtrueになる模様
http://webcompiler.cloudapp.net/
clangもtrueになるのでVCのバグだろう
0632デフォルトの名無しさん
2014/11/23(日) 18:16:13.16ID:953N3eH5ありがとう
こいつのせいで土曜日を潰した
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:gLhfEvRo0635デフォルトの名無しさん
2014/11/23(日) 19:05:56.59ID:JoMNOld1this (ポインタ)経由のメンバアクセスなら this->value あるいは (*this).value で。
コンストラクタで初期化したいなら >634 で。
0636デフォルトの名無しさん
2014/11/23(日) 19:06:25.58ID:Rv8Citpb横だけどそんなんできたのか
0637デフォルトの名無しさん
2014/11/23(日) 19:08:35.56ID:cfDrJbxWありがとうございました
かっこつけたら通りました
本当にありがとうございましたあああ
0638デフォルトの名無しさん
2014/11/23(日) 19:23:46.85ID:Rv8Citpb0639デフォルトの名無しさん
2014/11/23(日) 19:28:55.37ID:vO8N+N370640デフォルトの名無しさん
2014/11/23(日) 19:36:42.77ID:Rv8Citpbしらなかった
一生懸命別名考えてたw
0641デフォルトの名無しさん
2014/11/23(日) 20:04:47.38ID:953N3eH5型変換なし非テンプレート > テンプレート > 暗黙の型変換非テンプレート > ...演算子(何でも受け取る, cdeclのみ)
だった気がするよ
0642デフォルトの名無しさん
2014/11/23(日) 22:20:28.56ID:amUFvmRpVisual 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限定的な情報しか与えられていない上に、最低限「どう動かないのか?」も書かれていないとなると、誰も答えられないと思うよ。
時々超エスパーがいるから、そういう人に頼っているのかもしれないけど。
0644デフォルトの名無しさん
2014/11/23(日) 22:39:32.08ID:4iH8sv6P環境依存スレで質問してくれ
this->UpdateData();
if (this->m_strFilePath == _T(""))
じゃないのか
>>632
↓こんな感じでどう?
http://ideone.com/sKXuJK
0645デフォルトの名無しさん
2014/11/23(日) 22:47:05.24ID:amUFvmRpVC側のエラーは「引数リスト '(CString, int)' を一致させようとしているとき」と出ています。
error C2593: 'operator ==' があいまいです。 と最初に出ています。
>644様の通りで通りました。
ありがとうございました。
NULL万能だと思ってたのに。。。。厳格すぎる。
0646デフォルトの名無しさん
2014/11/23(日) 22:51:02.11ID:QHZ/jO6T0647デフォルトの名無しさん
2014/11/23(日) 22:51:05.49ID:KUMpdGacそれ、厳格とかじゃなくて
C++がC#/Javaと考えが異なる所の根幹だから
0648デフォルトの名無しさん
2014/11/23(日) 22:52:42.51ID:x3sx5vaMnull万能とか勘弁してくれ
0649デフォルトの名無しさん
2014/11/24(月) 02:01:11.60ID:3jV5I9o7レスありがとう
だけど、それじゃあだめなんだ。
引数があるバージョンを定義した場合、引数を渡すとどうしても暗黙の変換が起こる
(ヘルパの定義で整数型同士の変換とかは防げてもconstやreferrenceは防げない、さらに戻り値も指定できない)
ので、引数を渡さない方法を考えたんだけど……
http://ideone.com/VJgAGz
実際にメタ関数を作ってみたら、GCCでも動かないんじゃ使い物にならん
アドレスの型も取れないとしたらどうしたらいいのやら…
0650デフォルトの名無しさん
2014/11/24(月) 10:10:45.95ID:sgGvWpbg0651デフォルトの名無しさん
2014/11/24(月) 11:27:15.51ID:fEDkGqiu0652デフォルトの名無しさん
2014/11/24(月) 11:32:35.20ID:oLVsuOehNULLと区別が付かない馬鹿に強調して覚えさせるにはいいだろう
0653デフォルトの名無しさん
2014/11/24(月) 20:53:46.48ID:2saiCoSEgcc 4.9.0 で両方ともtrue になるけどそれでOK?
0654デフォルトの名無しさん
2014/11/24(月) 21:19:59.70ID:2saiCoSEしようとすると面倒なことが起きないか?
0655デフォルトの名無しさん
2014/11/25(火) 01:10:02.80ID:mm5pAxIdhttp://ideone.com/Srs4gi
0656デフォルトの名無しさん
2014/11/25(火) 07:39:16.03ID:ljgVcsVa0657デフォルトの名無しさん
2014/11/25(火) 20:34:24.62ID:zeaofDXpまたQが荒らしにくるぞ
0658デフォルトの名無しさん
2014/11/25(火) 21:55:48.77ID:mm5pAxId元のコードにあったからうっかりそのまま残しちゃったじゃないかー!
0659デフォルトの名無しさん
2014/11/26(水) 02:10:02.14ID:0QLkzEdU強いて言えば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:s6v6wpOOmain.cpp
0662デフォルトの名無しさん
2014/11/27(木) 11:42:43.78ID:PqE1QkEI0663片山博文MZ次期CEO ◆T6xkBnTXz7B0
2014/11/27(木) 11:49:19.24ID:349+7nGh再利用する機能や単体試験するまとまりで分けるといいよ
0664デフォルトの名無しさん
2014/11/27(木) 13:32:27.35ID:h1qlAPx0基本はクラスごとじゃないかね。
0665デフォルトの名無しさん
2014/11/27(木) 13:51:52.05ID:r+bsdp9/> エディタの折り畳み機能が普及した今では強ち間違いでもない
ファイルの変更履歴が全部main.cppなんですが。
0666デフォルトの名無しさん
2014/11/27(木) 21:15:19.52ID:5nk9uWA60667デフォルトの名無しさん
2014/11/27(木) 21:35:28.79ID:mrCuQuxO0668デフォルトの名無しさん
2014/11/27(木) 22:19:08.72ID:5nk9uWA6この単位でファイル分割したら大変なことになってしまう。
0669デフォルトの名無しさん
2014/11/27(木) 22:54:53.47ID:cuJ5rv8l0670デフォルトの名無しさん
2014/11/27(木) 22:58:52.66ID:5nk9uWA6書き方によるけど、長くて30行くらい、短くて2行とかだから。
0671デフォルトの名無しさん
2014/11/27(木) 23:02:12.86ID:cuJ5rv8l> 短くて2行とかだから。
それ、中身あるんか? w
0672デフォルトの名無しさん
2014/11/27(木) 23:16:00.90ID:O0FTx3e82行目、閉じ括弧
以上
その部分抜かしても
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+BN4BA0675デフォルトの名無しさん
2014/11/28(金) 11:49:10.68ID:xopRmUVKこまいクラスごとに1ファイルなんて、いちいちファイル開くのがめんどい
0676デフォルトの名無しさん
2014/11/28(金) 14:55:53.33ID:NIWmc4eAarray、vector、memory、iostream、iomanipとか、そこそこの粒度の機能毎ってくらいか。
0677デフォルトの名無しさん
2014/11/28(金) 19:32:19.09ID:nrrhqrjPファンクションはfunction1.h function2.hの付け方してるから
class1.h class2.hにしようかな
と書き込んでみるテスト
0678デフォルトの名無しさん
2014/11/28(金) 21:03:58.12ID:qlxPjrnXひとつのクラスにメンバ関数は平均何個くらいあります?
0679デフォルトの名無しさん
2014/11/28(金) 22:43:25.15ID:n9kyNgts亀ゴメソ
まじありがとう!!!!
勉強になった
0680デフォルトの名無しさん
2014/11/28(金) 22:57:26.15ID:olZCGtlT尻の拭き方を質問してるみたいだな。
0681655
2014/11/28(金) 23:02:01.18ID:qlxPjrnX"method"という名前限定だから自分では満足してないんだけど、あれで何か役に立つの?
>>680
?
0682デフォルトの名無しさん
2014/11/29(土) 13:34:20.24ID:Ppi1W3oYconstexpr付けたらテンプレ引数のチェックに使える
0683デフォルトの名無しさん
2014/11/29(土) 16:23:17.79ID:1L1G4cU3動的言語っぽい事が出来るから好きな機能だ
0684デフォルトの名無しさん
2014/11/30(日) 02:25:48.01ID:b4+MGIqB動的言語−タイプセーフ=無名共用体
0685デフォルトの名無しさん
2014/11/30(日) 11:35:16.74ID:xgK7ePigstd::stack<int> st2;
が有る時に、forループなどを使わずに、二つのスタックを一つに積み上げる記述方法ありますか?
VS2013 C++です。
0686デフォルトの名無しさん
2014/11/30(日) 11:45:57.17ID:awyRf5UB0687デフォルトの名無しさん
2014/11/30(日) 11:45:59.54ID:p5vf56Ui「一つに積み上げる」の意味が分からないんだが……
0688デフォルトの名無しさん
2014/11/30(日) 11:51:22.60ID:DcwYkOUV0689デフォルトの名無しさん
2014/11/30(日) 12:00:03.93ID:lmH+eA8O0690デフォルトの名無しさん
2014/11/30(日) 12:11:25.42ID:xgK7ePigもう少しヒント下さい。
0691デフォルトの名無しさん
2014/11/30(日) 12:17:04.32ID:kOBZPODW0692デフォルトの名無しさん
2014/11/30(日) 15:35:00.05ID:2hiiWexa範囲を取るコンストラクターも無いし
イテレーターも取れないし
operator=も無いのでback_inserterも使えずどうしようもない。
0693デフォルトの名無しさん
2014/11/30(日) 15:55:15.32ID:b1aZbome0694デフォルトの名無しさん
2014/11/30(日) 16:22:48.28ID:CusdtlBf0695デフォルトの名無しさん
2014/11/30(日) 17:06:24.19ID:EfOCJfpfふたつのスタックを内部に抱えて、外部からはひとつのスタックのように見えればそれでいいのか、
あくまでstd::stack型でなければならないのか、など。
0696KUSO KOTE ◆unko./w.Osri
2014/11/30(日) 17:08:04.45ID:nlo0X8fTほい。
http://ideone.com/1jI0Bu
0697デフォルトの名無しさん
2014/11/30(日) 19:23:51.31ID:xgK7ePigありがとうこざいました。
こういうことをやりたかったのです。
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ラムダ式じゃね?
0699デフォルトの名無しさん
2014/11/30(日) 19:56:58.61ID:xgK7ePigレスありがとうございました。早速ググってみました。
//最小のラムダ式の呼び出し
int main(int argc, char *argv[]) {
[](){}();
return 0;
}
こんなの見つかりました。もう何が何だか分りません。
なんだか間違った方向に進化しているような気がするけれど、
前途有望な優秀な皆さんは違和感無く受け入れられるんでしょか?
まあ、とにかく理解しなくてはならない。頑張ります。
0700デフォルトの名無しさん
2014/11/30(日) 20:05:17.76ID:8nuRzneyまずはここからだ。
for (auto &itr = c2.begin();
itr != c2.end();
++itr) {
int v = *itr;
s1.push(v);
}
0701デフォルトの名無しさん
2014/11/30(日) 20:27:07.09ID:xgK7ePigコーチありがとうございます。
このあたりまでは、どうにか理解できます。
0702デフォルトの名無しさん
2014/11/30(日) 20:42:28.89ID:DcwYkOUVtemplate<typename =型名>
というのを見たんですけど
どいう意味ですか?
0703デフォルトの名無しさん
2014/11/30(日) 20:54:03.91ID:EfOCJfpf0704デフォルトの名無しさん
2014/11/30(日) 21:05:02.34ID:nlo0X8fTまあ文法が複雑で、覚えることが多いからねぇ。
参考までに
http://ideone.com/Xyuokf
このunko_functor2の定義と生成を簡潔に書いたのがラムダ。
0705デフォルトの名無しさん
2014/11/30(日) 21:16:41.33ID:qLRyV8Wkstring 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:DcwYkOUV0707デフォルトの名無しさん
2014/11/30(日) 21:17:29.16ID:A9gOCRkZtemplate<typename T=型名>
の省略かと
Tを本体で使用していないので省略したと思われ
0708デフォルトの名無しさん
2014/11/30(日) 21:18:10.69ID:DcwYkOUVありがとうございます。
どこにも乗ってないので助かりました。
0709デフォルトの名無しさん
2014/11/30(日) 21:23:06.93ID:qLRyV8Wkすみません.class Aに対する}; が抜けてました.
0710デフォルトの名無しさん
2014/11/30(日) 21:24:23.36ID:A9gOCRkZいいんじゃないの別に
((A&&)a).str ってstringのxvalueになるのか。
知らなかったけどconstと同じ考えなんだろうな
0711デフォルトの名無しさん
2014/11/30(日) 21:35:52.51ID:qLRyV8Wkありがとうございます。
str_=std::move(rhs.str_); だとrhsオブジェクトのstr_メンバのみが右辺値になるだけで、
rhsオブジェクト自体は右辺値にならないのではないか?オブジェクトrhsを右辺値にするには、
str_=std::move(rhs).str_;とすべきではないか?と思ったものですから。
まだ、std::moveに対する理解が足りないのかもしれません。
0712デフォルトの名無しさん
2014/11/30(日) 21:42:59.63ID:A9gOCRkZ0713デフォルトの名無しさん
2014/11/30(日) 21:58:51.00ID:qLRyV8Wk試していただいてありがとうございます。左辺値になってしまうのですか。
オブジェクトを右辺値参照で受け取っている時点でrhsオブジェクトは名前「rhs」
がついているにせよ、廃棄される運命にある。
ただし、str_=rhs.str_; とすると、データメンバrhs.str_が左辺値となってしまう
ので、rhsオブジェクトも廃棄されなくなってしまう。
の解釈でどうでしょうか? しかし、何か混乱してきました。
0714デフォルトの名無しさん
2014/11/30(日) 22:09:04.92ID:W7MDah/M最後だけ違う
× rhsオブジェクトも廃棄されなくなってしまう
○ 破棄寸前のrhsに含まれる(破棄寸前の)str_がコピー渡しになるので性能的にもったいない
あと細かいことだが
× 左辺値となってしまう
○ あたかも左辺値のようにオーバーロード解決されてしまう
0715デフォルトの名無しさん
2014/11/30(日) 22:14:59.74ID:EfOCJfpfstatic_castが左辺値を返すのは直ってる?
0716デフォルトの名無しさん
2014/11/30(日) 22:22:39.29ID:qLRyV8Wkありがとうございます。かなり理解できました。
ただ、まだ誤解をしている部分がありそうなので(頭の悪い初心者は
信じられない解釈を・・・)、言葉の意味をもう少し掘り下げてみます。
0717KUSO KOTE ◆unko./w.Osri
2014/11/30(日) 22:38:20.66ID:nlo0X8fT残念。
http://ideone.com/HcJZT8
0718デフォルトの名無しさん
2014/11/30(日) 23:00:41.70ID:GHd3kGftこの発想は無かった
しかしムーブ代入に
>if (this != &rhs) {
これは要るのか?
0719デフォルトの名無しさん
2014/11/30(日) 23:20:20.00ID:EfOCJfpfそうか。
これ結構まずいんだよね。
0720デフォルトの名無しさん
2014/11/30(日) 23:32:16.01ID:5aDdRTHG~baka() {}
int d = 0;
};
int main()
{
int && o = baka{}.d;
}
糞VCがfull-expression後にデストラクタ走るのはマジなの?どんだけクソなの
0721デフォルトの名無しさん
2014/11/30(日) 23:42:37.39ID:EfOCJfpf江添さんチーッス
そのあとに
int i = o;
と書いたとしても、その代入の前にデストラクタが走るようですYO!
0722デフォルトの名無しさん
2014/12/01(月) 00:27:01.59ID:XBtafqbVstruct 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:RgGkv1x90725デフォルトの名無しさん
2014/12/01(月) 15:10:01.18ID:0r4ekpEo0726デフォルトの名無しさん
2014/12/01(月) 15:19:36.86ID:0r4ekpEoされません。文が長いせいかな?
すみません、4回投稿を繰り返したので後で4回、長い質問文が現れる
かもしれません。そのときはごめんなさい。
0727デフォルトの名無しさん
2014/12/02(火) 08:41:23.75ID:yGw9j998struct 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に変換されているから
0729デフォルトの名無しさん
2014/12/02(火) 08:53:37.27ID:yGw9j998レスありがとうございます。
うーん、勝手に変換してくれるのは嬉しいような嬉しくないような。
(2)の場合には、型が違うみたいな警告とかエラーを出すことは
可能でしょうか?
0730デフォルトの名無しさん
2014/12/02(火) 08:58:31.08ID:f9s0ibqSとすればいい
0731デフォルトの名無しさん
2014/12/02(火) 09:02:07.77ID:yGw9j998ありがとうございます。出来ました!
詳しいですね。
0732デフォルトの名無しさん
2014/12/02(火) 10:32:45.66ID:P59XjAfcです.バグだと思うのですが,どこに言ったらいいんでしょうか?
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あ・・・,実行結果はforループで回した直後に出力したものです.
0734デフォルトの名無しさん
2014/12/02(火) 10:44:04.57ID:deKVkNPa0にならないプログラム全体をideone辺りに上げてくれ。
0735デフォルトの名無しさん
2014/12/02(火) 10:46:20.03ID:deKVkNPa0736デフォルトの名無しさん
2014/12/02(火) 11:11:06.10ID:VFkk3rE2プログラマなら想定どおりに動かない原因を特定してから騒げ
0737デフォルトの名無しさん
2014/12/02(火) 11:15:57.77ID:P59XjAfcしてみましたが,時間オーバーになってしまいました.
>>734
そうですか.正常に実行されましたか.
環境はWindows7,TDM gcc(MinGWのBinary,gcc.4.8.1)です.
ideoneで実行してみましたが,そちらから見れるかどうか
わかりませんので,下に問題のプログラム全体を貼り付けます.
0738デフォルトの名無しさん
2014/12/02(火) 11:17:33.11ID:P59XjAfc#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> してみましたが,時間オーバーになってしまいました.
バカなの? ループの意味ないじゃん。
> for(i=100000000 - 1; i<=100000000; ++i)
で充分だろ。
0740デフォルトの名無しさん
2014/12/02(火) 11:35:52.17ID:aFwNwwZT0741デフォルトの名無しさん
2014/12/02(火) 12:29:41.82ID:TEjDQr/pData1を受けとるコンストラクタをわざわざ作って、変換してくれるように指定されてるやん。
型が違う!ということでエラーにしたいならそれを外す。
Data1からData2への変換は必要だが、暗黙的にはされたくないということなら >>730 の方法だな。
※explicit指定は、暗黙的なコンストラクタの使用を制限する為の指定
0742デフォルトの名無しさん
2014/12/02(火) 12:32:19.89ID:P59XjAfcforループを取っ払って, 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:P59XjAfcxが100000000*0.01のままであることもok.
ならなぜfmod(x,2.0)が0にならない?わかりません.
0744デフォルトの名無しさん
2014/12/02(火) 12:42:17.87ID:P59XjAfc0745デフォルトの名無しさん
2014/12/02(火) 12:46:55.08ID:4lPIVtOywindows 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/FUl0747デフォルトの名無しさん
2014/12/02(火) 12:59:59.60ID:P59XjAfcfor(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:29qWGDZdgccだったら最適化オプションの違いでどうなるか知りたい。
つーか、アセンブリ出力を見てみたいがそこまではまぁいいや。
0749デフォルトの名無しさん
2014/12/02(火) 13:22:07.05ID:9Mv2XCFgclass 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:9KoaOWmbttps://sites.google.com/site/cpprefjp/reference/memory/enable_shared_from_this/shared_from_this
0751デフォルトの名無しさん
2014/12/02(火) 15:04:23.68ID:1t1KnUm2a.hでクラスを宣言して、a.cppにコードを書きますが、
b.cpp b.h と言った別のファイルに、 にa.hで宣言したクラスのコードを書くにはどうしたら良いんでしょうか。
a.cppが長くなるので他のファイルに書きたいのです。
0752デフォルトの名無しさん
2014/12/02(火) 15:06:30.16ID:9KoaOWmb0753デフォルトの名無しさん
2014/12/02(火) 15:06:34.74ID:pJIRapOB0754デフォルトの名無しさん
2014/12/02(火) 15:33:18.05ID:P59XjAfcこれが原因でした.話には聞いてましたが,経験するのは今回が初めてです.
それも最適化なしで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:eMZ01uNzVCだと/fp
0756デフォルトの名無しさん
2014/12/02(火) 18:00:37.71ID:LC+23/o80757デフォルトの名無しさん
2014/12/02(火) 20:34:54.69ID:/z1AotGwC からの仕様
C/C++ では関数は第一級のオブジェクトにならない、
したがって、たとえば関数ポインタ f: void (*f)(void) の指す関数を呼び出す方法として
(*f)(void)
のほかに
f(void)
も許容されている
たんなるシンタックスシュガーだね
0758デフォルトの名無しさん
2014/12/02(火) 20:46:25.92ID:yGw9j998そうなんですか。
意味が良く分らない void (*f)(void) という記述方法が関数ポインタだと必死で
覚えたのに、f(void) でも行けるなら、最初からそうして欲しかった。
0759デフォルトの名無しさん
2014/12/02(火) 20:47:03.95ID:oipIVQ1vvoid g();
(************g)(); // function call
つまり関数と関数ポインターの関係は出鱈目ってこった
0760デフォルトの名無しさん
2014/12/02(火) 20:48:39.99ID:S9717AJfなんかスゲー勢いがあるなw
0761デフォルトの名無しさん
2014/12/02(火) 20:51:06.09ID:HwzviBJKそれでも辞めないC++の良さって何よ
0762デフォルトの名無しさん
2014/12/02(火) 20:55:29.93ID:b9w37TQx不要な所は楽に書けて、必要ならば限界まで最適化出来るところ。
0763デフォルトの名無しさん
2014/12/02(火) 21:33:09.33ID:eCxnGLB/関数だとポインタを逆参照する必要がないなら、
普通のポインタも -> じゃなくて . でアクセスできても良かったような気もする。いまさらだが。
まぁ、そのおかげで C++ になって operator -> がカスタマイズできる利点もあったけど。
0764デフォルトの名無しさん
2014/12/02(火) 22:27:42.54ID:Ut8Zj3uq中島みゆきの歌に出てくる「悪女の深情け」みたいなものw
まあ、それは冗談として、C言語ではチマチマと書かなければならないことを、
あっさりとクールに記述できることがある。地獄に落ちることも多いけど。
あれだけいろんな機能を詰め込んでいるんだもの、複雑になるのは当たり前。
数値計算の分野に限ると、
javaは演算子のオーバーロードがないのが致命的。
C#は良いとこ取りだけど、genericsとか演算子のオーバーロードがもの足りない。
それにマイクロソフトがofficeやdirectxみたいに仕様をコロコロ変えないか不安。
matlabは遅い。a(1,:)みたいな記法が馴染めない。
最近のfortranは構造体、ポインタもサポートしている。しかし、fortranでそれを
究めるくらいなら、C++を究めた方が良い。ところで、fortran77はプログラムを全部
組まないと動かなくてバグとりが大変だったけど、今のfortranはどうですか?
0765デフォルトの名無しさん
2014/12/02(火) 22:40:12.59ID:9ZuIsk2jC++を使う人はC++をするために使います。
0766デフォルトの名無しさん
2014/12/02(火) 22:41:23.59ID:i0GjTWfH0767デフォルトの名無しさん
2014/12/02(火) 22:48:22.86ID:olNY9lUq0768デフォルトの名無しさん
2014/12/02(火) 22:55:07.67ID:2KIXoM7e0769デフォルトの名無しさん
2014/12/02(火) 23:04:38.22ID:p9/SP/jmstruct Example{
typedef TList::Next Next; //この行でエラーになる
};
テンプレートで引数型として受け取った型の内部型を参照するとき
どうすればいいんでしょうか?
0770デフォルトの名無しさん
2014/12/02(火) 23:06:12.75ID:2KIXoM7e0771デフォルトの名無しさん
2014/12/02(火) 23:06:51.63ID:4i/Pm7cC段階的詳細化で、メインプログラムを書き、
以下サブルーチンやサブプログラムを
一つ一つ作ってはデバッグしていくというので
だめですか。
0772デフォルトの名無しさん
2014/12/02(火) 23:07:09.34ID:2KIXoM7eの方がよいかも。(好みの問題か?)
0773デフォルトの名無しさん
2014/12/02(火) 23:09:31.07ID:p9/SP/jmキモい! でもコンパイル通りました!
まじかこれ
0774デフォルトの名無しさん
2014/12/02(火) 23:15:58.24ID:2KIXoM7eTList::Next が何を表しているのか不明だから。
例えば、
struct TList {
static int Next = 1;
};
なのかも知れん。
この場合は TList::Next は整数。
0775デフォルトの名無しさん
2014/12/02(火) 23:19:21.66ID:Ut8Zj3uqそうですね。fortran77でもそれはできたかもしれませんね。
若かったから、そういう発想がなかったのかも。
ただ、C++だと「ここの部分に関数はまだないけど、とりあえず宣言か、voidf(・・・){}と
しておいて」が簡単にできて、デバッグが楽だなと感じました。
とにかく、メインフレームコンピュータのfortranのバグ取りに苦い経験しかなくて。
数値計算上のバグにC++もfortranも関係ないでしょうけど。
0776デフォルトの名無しさん
2014/12/02(火) 23:23:25.19ID:2KIXoM7eメインフレームではC/C++等がどうして普通に使われないんでしょうか?
アーキテクチャ上の問題?
0777デフォルトの名無しさん
2014/12/02(火) 23:26:06.44ID:p9/SP/jmVC6時代までしかやってませんでしたが
typedef typename の時点でコンパイルエラーになるイメージだった
0778デフォルトの名無しさん
2014/12/02(火) 23:31:09.05ID:Ut8Zj3uqはあったけど、普及してなかった。
それに、生ポインタを扱うC言語(shared_ptrみたいなしゃれたものはなかった)をメイン
フレームに使うのは、専門家でない限り危なかったのでは?
0779デフォルトの名無しさん
2014/12/02(火) 23:36:34.28ID:Ut8Zj3uqあ、現在の話ですが。やはり、C/C++をメインフレームに使うのは実績がなくて信頼性がないからだと思います。
ATMのオンラインシステムでメモリやリソースのリークがあると「祭り」になりますから。
0780デフォルトの名無しさん
2014/12/02(火) 23:37:15.87ID:Ut8Zj3uq0781デフォルトの名無しさん
2014/12/02(火) 23:55:31.58ID:/t4MmAPUBCD演算できない言語をATMとかに使うのはちょっと……
後、科学技術計算的には自由度が高過ぎる言語は
最適化しにくいので嫌われるという面もある
(未だにFortranが生きている理由でもある)
0782デフォルトの名無しさん
2014/12/02(火) 23:55:42.34ID:vQAvR2Wb0783デフォルトの名無しさん
2014/12/03(水) 00:03:11.70ID:6lRqEEU90784デフォルトの名無しさん
2014/12/03(水) 00:09:26.63ID:O29A/gXKATMや銀行のシステムで問題起こすとニュースで大騒ぎになるだろうから
メモリやリソースのリークと共生するC・C++は嫌だろうな
0785デフォルトの名無しさん
2014/12/03(水) 00:15:04.77ID:GUgf5pKAそれに10進計算くらい正確にこなすライブラリくらい需要さえあればいくらでも標準化できるはず。
0786デフォルトの名無しさん
2014/12/03(水) 00:29:49.64ID:rw40JVQBそれよりもコボルという蓄積があるからだと思うが。
C++だとコンパイラのせいなら、コボルのコンパイラも何十年も更新しないということなるぞ。
0787デフォルトの名無しさん
2014/12/03(水) 00:42:07.51ID:y9iXgVRUPL/Iとかあったけど。結局、新しい言語に書き換えるのは勇気が要る。
0788デフォルトの名無しさん
2014/12/03(水) 01:05:05.15ID:sMoc/59c後の移植を難しくしてんだよな
0789デフォルトの名無しさん
2014/12/03(水) 01:05:15.36ID:GUgf5pKA0790デフォルトの名無しさん
2014/12/03(水) 01:23:09.43ID:GUgf5pKAいまどきの普通の言語を普通に使えばいいじゃん。
信頼性はすごく高いんでしょ?
現実がそうなってないのは、何かアーキテクチャ上の理由でC/C++等があまり適さず(これ想像)、
COBOLじゃ金融アプリにしか向かないうえ、技術者も限定されてしまったからなのかな?
銀行の件は、まず大規模な電算化を始めたのが銀行オンラインだから過去の蓄積も他業界に比べて多いし、
安全性にシビアだからってのは理解できる。
0791デフォルトの名無しさん
2014/12/03(水) 02:27:37.74ID:j3x4QC7i0792デフォルトの名無しさん
2014/12/03(水) 02:33:52.64ID:FQ894e1e0793デフォルトの名無しさん
2014/12/03(水) 02:46:56.27ID:/c7/jI5U0794デフォルトの名無しさん
2014/12/03(水) 02:49:25.48ID:/c7/jI5U0795デフォルトの名無しさん
2014/12/03(水) 07:03:08.38ID:GUgf5pKAメインフレームが高いからダウンサイズされたってだけ?
0796デフォルトの名無しさん
2014/12/03(水) 07:03:59.74ID:GUgf5pKA0797デフォルトの名無しさん
2014/12/03(水) 07:44:27.35ID:iJZhsnsVCOBOL 使ってる 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ダイクストラ大先生の構造化プログラミング
でも段階的詳細化が推奨されていたような……
なにしろFORTLAN IV からFORTRAN 77に
移行した時期に多少FORTRANをいじった程度
ですから、思い違いかもしれません。あしからず
0800デフォルトの名無しさん
2014/12/03(水) 09:04:47.50ID:PeV925EiC++やで?
0801デフォルトの名無しさん
2014/12/03(水) 09:34:20.91ID:X03avSaF0802デフォルトの名無しさん
2014/12/03(水) 15:58:51.61ID:nApiywvApublic:
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:GXUScfW30804デフォルトの名無しさん
2014/12/03(水) 16:08:30.36ID:nApiywvA0805デフォルトの名無しさん
2014/12/03(水) 16:13:10.36ID:VD9hCEh/0806デフォルトの名無しさん
2014/12/03(水) 16:45:21.75ID:jxdxvQyflistじゃだめなん?
0807デフォルトの名無しさん
2014/12/03(水) 17:23:42.14ID:L9LC7bkpこういう話?
0808デフォルトの名無しさん
2014/12/03(水) 17:40:39.19ID:8JkTKL6j『先頭キューから』と書かれているのだが
そこから「キューの先頭」の間違いと
脳内補完ぐらいしてやれないものか
0809デフォルトの名無しさん
2014/12/03(水) 17:48:49.38ID:3hK2TsBbc++を使う顧客が結構いるから、
トライグラフの削除にibmが反対している
という話しもあるが。
そもそもGCでどうにかできるのは、メモリリークだけで、リソースリークには何の効果もない。
0810デフォルトの名無しさん
2014/12/03(水) 18:43:23.05ID:iwjiwLd60811デフォルトの名無しさん
2014/12/03(水) 21:02:17.14ID:FV93VIEkint main(int argc, char *argv??(??)) ??<
return ??-0;
??>
こんな暗号に等しいコードを書いているキチガイのために
C++の言語仕様をクソにされてはたまらん
0812デフォルトの名無しさん
2014/12/03(水) 21:06:14.29ID:dAu5DHm90813デフォルトの名無しさん
2014/12/03(水) 21:53:40.23ID:S725Rch2EBCDICは基本文字集合すら扱えない環境なんでしょ?
ならC++コンパイラ作るのを諦めるべき。
もしくはディレクティブで切り替えるようにして
みんなに迷惑をかけないでほしい。
void f() {
cout << "???"; // ???
#ibm // 以降はトライグラフ有効
cout << "???"; // ?
??>
0814デフォルトの名無しさん
2014/12/04(木) 01:11:20.13ID:aDlePqdz名前も出せないような連中のためになぜ規格まで縛られなきゃならんのかと
0815デフォルトの名無しさん
2014/12/04(木) 15:45:16.97ID:WpEST6VTMyStruct m_st;
...
MyStruct tmp = {};
m_st = tmp;
0816デフォルトの名無しさん
2014/12/04(木) 15:54:21.08ID:kcelZJjW0817デフォルトの名無しさん
2014/12/04(木) 17:41:32.91ID:aeP/K1170818デフォルトの名無しさん
2014/12/04(木) 17:59:24.98ID:WpEST6VTその書き方って一時オブジェクトをクリアしてコピー、以上の最適化が十分に期待できるのかな?
代入演算になるからVROとはちょっと違うし。
0819デフォルトの名無しさん
2014/12/04(木) 18:05:26.81ID:WCx73E+2auto x=static_cast<int>(int{3});
こちらでよろしかったでしょうか?
0820デフォルトの名無しさん
2014/12/04(木) 18:11:59.10ID:dV1gB9nfttp://ideone.com/A2Ohli
vs2013の最適化バイナリの逆アセンブル見たけど
構造体すら作られるず即値がpushされてたから大丈夫なんじゃないの
0821デフォルトの名無しさん
2014/12/04(木) 18:19:49.70ID:WpEST6VTthx C++11環境では>>816でいくわ
なんにしろ未だvc2010だからそろそろ更新せんとなあ・・・
0822デフォルトの名無しさん
2014/12/04(木) 18:19:51.81ID:LnUCu0aqビットパターンのゼロがdoubleの0.0になる保証あったっけ?
0823デフォルトの名無しさん
2014/12/04(木) 19:00:47.05ID:EKldnoaY振り替えると
VSは五年周期で更新しているわ
前2005、今2010
2015は新しい機能が追加されているし、日本語版のSP1が出たらMSDN付きのを買うつもり
0824デフォルトの名無しさん
2014/12/04(木) 19:04:54.14ID:kcelZJjW0825デフォルトの名無しさん
2014/12/04(木) 19:20:21.73ID:EKldnoaY2010だとSP当てるとコンパイラを消される不具合があったし、待たずに買うかね
0826デフォルトの名無しさん
2014/12/04(木) 19:42:46.41ID:3VxMuzS2IEEEの規格上それだけはある。
逆はダーティー0とかあるけど
0827デフォルトの名無しさん
2014/12/04(木) 20:08:59.33ID:OR7LBgh+numeric_limits<double>::is_iec559がfalseの環境は?
0828デフォルトの名無しさん
2014/12/04(木) 22:23:44.40ID:ywZiE0/d0829デフォルトの名無しさん
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>auto x=static_cast<int>(int{3});
int{3}ならわかるがなんでキャストしてんだよ。
ちなみにコピー・ムーブコンストラクターが省略される保証は無いからな。
0832デフォルトの名無しさん
2014/12/05(金) 03:47:31.87ID:jZQvPIwzmemsetはしないけどfloatをIEE754のバイナリとしてファイルに出力したものをそのまま読み込むぐらいはするなー。
glTFみたいな3Dデータの頂点配列とかで。
0833デフォルトの名無しさん
2014/12/05(金) 07:25:26.85ID:RLAGUYZXそこだよなぁ
例えばデバッグモードだけでたまにスタック領域溢れるみたいな面倒くさいバグに見舞われそう
0834デフォルトの名無しさん
2014/12/05(金) 07:41:48.93ID:Hl6lKR2t0835デフォルトの名無しさん
2014/12/05(金) 07:46:51.03ID:F2ZjRsjm初期化でそれやってたら、単なるバカだろ
0836デフォルトの名無しさん
2014/12/05(金) 07:59:07.28ID:jZQvPIwzえ?なんで?
RAIIって言葉知らないの?
0837デフォルトの名無しさん
2014/12/05(金) 08:01:32.00ID:iYPJoG1EマイクロソフトのChannel9でハーブサッターがそう力説していたような
0838デフォルトの名無しさん
2014/12/05(金) 08:15:06.55ID:F2ZjRsjm>>815 > 既に生成してある構造体
RAII と関係ないことは猿でもわかるだろ
0839デフォルトの名無しさん
2014/12/05(金) 12:04:09.10ID:xbUCe08Ostd::string 同士で比較したら _ は大文字と小文字の間、 {} はアルファベットより後ろに来てしまいました。
記号類<数字<アルファベット で std::sort するには比較関数を自作しないといけないですか?
0840デフォルトの名無しさん
2014/12/05(金) 12:12:49.54ID:V1LIMZ+KStrCmpLogicalW
0841デフォルトの名無しさん
2014/12/05(金) 15:58:18.80ID:ZlsEazWIStrCmpLogicalW と結果が同じとは限らないけど、
このスレ的には std::locale (or strcoll) なのかね。
0842デフォルトの名無しさん
2014/12/05(金) 19:37:57.88ID:oen9HK+b0843デフォルトの名無しさん
2014/12/06(土) 01:46:34.86ID:m3qT2GXtどんだけ仕事遅いんだよ MS
0844デフォルトの名無しさん
2014/12/06(土) 02:50:12.36ID:Rv0+CLq9if文ならベルの
0845デフォルトの名無しさん
2014/12/06(土) 10:55:58.86ID:8e1EU+sDhttps://github.com/i-saint/DynamicPatcher
0846デフォルトの名無しさん
2014/12/06(土) 12:44:34.73ID:mUmYp1k7チキンな野郎はこうしとけ
new(&m_st) MyStruct{};
std::allocator<MyStruct>{}.construct(&m_pt);
0847デフォルトの名無しさん
2014/12/07(日) 09:34:34.50ID:UZuhwYExmemsetやplacement newは危険だよね?
0848デフォルトの名無しさん
2014/12/07(日) 09:37:16.94ID:Bzu/18gamemsetを一度も使った事がない。
0849デフォルトの名無しさん
2014/12/07(日) 09:39:27.57ID:O9ZKS+UT0850デフォルトの名無しさん
2014/12/07(日) 09:42:36.29ID:Bzu/18ga0851デフォルトの名無しさん
2014/12/07(日) 09:43:24.41ID:O9ZKS+UT0852デフォルトの名無しさん
2014/12/07(日) 09:43:36.11ID:7O3aLCEZ0853デフォルトの名無しさん
2014/12/07(日) 09:45:15.92ID:Bzu/18gagccやvc++
0854デフォルトの名無しさん
2014/12/07(日) 09:54:39.10ID:O9ZKS+UT0855デフォルトの名無しさん
2014/12/07(日) 10:37:09.90ID:LyR3T0H90856デフォルトの名無しさん
2014/12/07(日) 10:40:27.17ID:Y6g2DhD+今のVCじゃ結局memsetに置き換えられるんだけどね
0857デフォルトの名無しさん
2014/12/07(日) 11:36:27.66ID:d5J/JrDi0858デフォルトの名無しさん
2014/12/07(日) 11:48:01.53ID:MxitlF62そりゃZeroMemoryとmemsetはもともと使いどころが違ったからな
今は同じになったからとはいえ
0859デフォルトの名無しさん
2014/12/07(日) 12:08:43.68ID:tjSdQb8Q0860デフォルトの名無しさん
2014/12/07(日) 12:10:22.94ID:mrRmmrII0861デフォルトの名無しさん
2014/12/07(日) 15:48:06.05ID:Y58/hvmd0862デフォルトの名無しさん
2014/12/07(日) 18:46:16.92ID:hNd25+GQにちゃんなんて今時爺しかいないんだから、いちいちウザイわ
>>860
>>854
0863デフォルトの名無しさん
2014/12/07(日) 23:20:07.61ID:nGMF7SWqint&& a = 0;
int b = a;
の二つ目のa(式a)は
型が右辺値参照型、式の分類が左辺値でよかですか?
0864デフォルトの名無しさん
2014/12/07(日) 23:25:57.15ID:eO6Kzaov0865デフォルトの名無しさん
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>int&& a = 0;
この右辺値参照型と言うのが、いくらググって説明を読んでも良く分かりません。
これを使うメリットが分かる最もシンプルなサンプルコードを誰か書いてくれませんか?
0867片山博文MZ ◆T6xkBnTXz7B0
2014/12/08(月) 20:31:50.41ID:BjF8LS0Bstruct 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:BjF8LS0Bstruct 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:Po48fBTc3 目的の型が符号付きの型の場合,その値が目的の型 (及びビットフィールドの幅) で表現できる場合には,値は変化しない。そうでない場合,結果の値は,処理系定義とする。
0870デフォルトの名無しさん
2014/12/08(月) 21:23:41.40ID:U2G/o8q1せっかく教えていただいたのですが、分りません。
このAをどうすれば&&のメリットが分るのでしょうか?
0871デフォルトの名無しさん
2014/12/08(月) 21:30:25.92ID:UbHlR7lRそうか…処理系依存か
2の補数系では当たり前に見えるような変換も規格通りに書くのは大変なんだな
0872デフォルトの名無しさん
2014/12/08(月) 21:42:34.00ID:KFPTh4ct↓この&&を引数に取るコンストラクターが無かったら
生ポで渡すしかなくなっていろいろ困るだろ
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:dG3YdRcjclass 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:dG3YdRcjFoo( Foo const &val )はFoo( Foo const &rhs )で読み替えてくんなまし
0875デフォルトの名無しさん
2014/12/08(月) 22:09:48.76ID:8JWbfxme0876デフォルトの名無しさん
2014/12/08(月) 22:20:00.99ID:U2G/o8q1>>873
せっかく詳しく教えていただいたのですが、さっぱり分りません。
出来れば class Foo を呼び出すmain(){}の例を教えて頂けないでしょうか?
class unique_ptr のほうはmain(){}がありますが、
T と create() が見つからないのでエラーしました。VS2013です。
0877デフォルトの名無しさん
2014/12/09(火) 03:29:40.78ID:DWnEV/Hlなにこれ?
0878デフォルトの名無しさん
2014/12/09(火) 11:39:09.96ID:hZR3cOBJrvalueにならない場合となる場合がそれぞれどういう時かは分かるだろ?
分からないならまずそこからだ。
それは分かっているがclass Fooを用いる部分のコードが欲しいなんていうなら
自分で学ぶのに向いていなさすぎるぞ
0879デフォルトの名無しさん
2014/12/09(火) 11:51:50.54ID:z5bRXXBAコードを書く人が意識しなければいけない作法だという認識でよい?
後で x に触るようなコードを書いても、コンパイル自体は通っちゃうよね?
0880デフォルトの名無しさん
2014/12/09(火) 12:04:36.81ID:nPE1PwLA0881デフォルトの名無しさん
2014/12/09(火) 13:13:28.97ID:hZR3cOBJ明示的に「これ以降は自分はxを使わない。という意思表示がstd::move( x )なだけで
実際それ以降使ってもコンパイルは通る。
STLのコンテナがmove後の抜け殻を、再度代入等を行えば使えるようにすべきか否かって
論争があったような記憶が微レ存
0882デフォルトの名無しさん
2014/12/09(火) 18:26:29.72ID:jpM0TPrmこのサイトにある録音プログラムを少しいじって録音が終了するのと同時に再生する
というものにしたいのですがC++をあまり使ったことがないので良く分かりません。
知恵を貸してもらえると有り難いです。
0883デフォルトの名無しさん
2014/12/09(火) 18:30:34.13ID:nPE1PwLA0884デフォルトの名無しさん
2014/12/09(火) 18:35:29.99ID:er2zR8sqWin32 APIの使い方はよそでやってください。
0885デフォルトの名無しさん
2014/12/09(火) 22:14:20.67ID:Z26sHvLQVista は知らんが、7 は標準ではついてないよ
まあ、たいていのサウンドドライバについてるから困ることはあまりないけど
0886デフォルトの名無しさん
2014/12/09(火) 22:29:43.20ID:unK8ssu0まあまあ面白かった
0887デフォルトの名無しさん
2014/12/09(火) 23:08:59.96ID:nPE1PwLAttp://farm8.staticflickr.com/7526/15797728217_880407d69d_o.png
嘘言うなよついてるじゃないか
0888デフォルトの名無しさん
2014/12/09(火) 23:43:10.39ID:Z26sHvLQだからそれはサウンドドライバにその機能があるからだよ
ついてない奴だとミキサー自体がない
http://www.internal.co.jp/support/common/windows/stereomix.php
0889デフォルトの名無しさん
2014/12/10(水) 07:35:21.48ID:OFJKiOerむしろVista以降は使えないことの方が多い。
0890デフォルトの名無しさん
2014/12/10(水) 13:38:34.43ID:LfrFh5ytunsigned 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, &data, 0, NULL);
}
とかやってしまうと、_beginthreadex に渡した data については参照カウンタが増えてくれず、make_thread を出た時点で data が破棄されてしまいますよね?
やはり自前のスタックや変数を外部に用意するしかないのでしょうか?
ちなみに上記の例ではWin32APIを使っていますが、特別な理由があって使っているわけではないので、標準C++ライブラリだけで
完結できるならそちらの方がよいです。
0891デフォルトの名無しさん
2014/12/10(水) 13:41:23.72ID:Lk9vW6tq0892デフォルトの名無しさん
2014/12/10(水) 15:31:27.62ID:LfrFh5ytああ、そんなものがあったんですね。ありがとう!
0893デフォルトの名無しさん
2014/12/10(水) 17:53:09.33ID:SOWQYR2uthreadのコンストラクターに渡すクロージャが実行されるのは
make_thread抜けた後になることがあるので
threadのコンストラクターに渡すクロージャに
リソース保持させるようにしないといかんよね?
0894デフォルトの名無しさん
2014/12/10(水) 18:04:41.90ID:xrKn9Lbe0895デフォルトの名無しさん
2014/12/10(水) 18:19:17.10ID:Lk9vW6tq0896デフォルトの名無しさん
2014/12/10(水) 18:28:18.82ID:ICK0nNNistd::asyncの使用をお勧めする。
0897デフォルトの名無しさん
2014/12/10(水) 18:35:36.90ID:IBqu5Hq8joinしないと強制終了するとかって話か?
0898デフォルトの名無しさん
2014/12/10(水) 18:44:40.52ID:zcHVZHaY0899デフォルトの名無しさん
2014/12/10(水) 19:25:25.12ID:evuGnqnA0900デフォルトの名無しさん
2014/12/10(水) 19:56:57.45ID:N8F28/n0てかasyncとthreadは使い所が異なる
0901デフォルトの名無しさん
2014/12/10(水) 20:15:04.45ID:ICK0nNNistd::threadを使うとオーバーサブスクリプションが起こる。
std::asyncに将来スレッドプールが実装されてもstd::threadを使っていると
恩恵を得られない。
0902デフォルトの名無しさん
2014/12/10(水) 20:23:25.33ID:Lk9vW6tqttp://msdn.microsoft.com/ja-jp/library/dd492418.aspx
でいいじゃん将来じゃなくて今恩恵を得られるぞ
0903デフォルトの名無しさん
2014/12/10(水) 20:29:42.21ID:IBqu5Hq80904デフォルトの名無しさん
2014/12/10(水) 20:56:18.43ID:OOX1q/Uh何で例外がスローされるとメモリリークすんの?
0905デフォルトの名無しさん
2014/12/10(水) 21:36:44.75ID:OE3nWLD+>threadを使うとオーバーサブスクリプションが起こる
「関数を使うとスタックオーバーフローするから全部メイン関数に書く」
並のアホな理屈だな
0906デフォルトの名無しさん
2014/12/10(水) 21:44:31.48ID:PoGTwE5cすれば良いじゃない。by マリー
COBOLという前駆者もいるよ〜
0907デフォルトの名無しさん
2014/12/10(水) 21:45:36.79ID:CLJY23gyDataを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:Lk9vW6tq0910デフォルトの名無しさん
2014/12/11(木) 08:41:13.00ID:q7/3cWR7調べてみました。 "P" (Pointer?) は使ってませんが、確かにpimplで使われる書き方ですね。
これが許されるなら、いわゆる partial class のように、クラスの定義後も、
非仮想関数だけは後付けで追加できても良いような気がするんですが…
0911デフォルトの名無しさん
2014/12/11(木) 21:19:16.19ID:NmALJRhK>"P" (Pointer?) は使ってませんが
ポインター使わなかったらできねーぞ
0912片山博文MZ ◆T6xkBnTXz7B0
2014/12/11(木) 21:23:53.12ID:Knr7owVD人間様、御言葉ですが、参照でもできます。
0913デフォルトの名無しさん
2014/12/12(金) 01:52:53.02ID:g0bIf78o初心者すぎて申し訳ありません
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:d9CqU0jA0915デフォルトの名無しさん
2014/12/12(金) 02:21:27.39ID:+hKqCGtl//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おおお、こんなに簡単だったとはw
(Mat src_img)は出来ないし、ポインタ使えばいいのかとあれこれ悩んだですが、聞いてよかったw
とても助かりました。
0917デフォルトの名無しさん
2014/12/12(金) 07:54:48.48ID:xI0j+bo/0918デフォルトの名無しさん
2014/12/12(金) 08:18:24.16ID:bObcca+g>908 はメンバ変数の隠蔽までいってないからポインタがいらない
単にprivateメソッドを隠しただけ
0919デフォルトの名無しさん
2014/12/12(金) 11:25:13.54ID:TWt75Sw9かくしてるだろ
0920デフォルトの名無しさん
2014/12/12(金) 19:50:37.50ID:XX/G5P6qstatic変数を参照型のメンバに設定してドヤ顔とかアホなの?
Aごとに実体を持ってなきゃ使い物にならないでしょ
0921デフォルトの名無しさん
2014/12/12(金) 21:46:49.57ID:zSk1Cb1Mpimplではないな
singletonか?
0922名無しさん@そうだ選挙に行こう
2014/12/14(日) 11:28:15.55ID:pr1GnDgztypedef 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:3s9eDA200925デフォルトの名無しさん
2014/12/15(月) 18:17:49.05ID:WOi/F5O3アライメントもバイトオーダーもあるでよ
0926デフォルトの名無しさん
2014/12/15(月) 18:17:52.04ID:nc0SWf6B0927デフォルトの名無しさん
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でむりくり詰めるのは今でも常套手段だと思う
公開する訳じゃないならバイトオーダーまで考えなくてもいいし
0930デフォルトの名無しさん
2014/12/15(月) 19:34:05.85ID:WOi/F5O30931デフォルトの名無しさん
2014/12/15(月) 19:53:35.24ID:U6CA+1sN対偶をとると
「C++で書くのは公開するプログラムだ」
となるが、正しいか?
いろいろうるさいので、もういちいち要素を読むのが‥あ〜1byte ずつ読むのが結局は一番楽だとおもいますぅ
http://peace.2ch.net/test/read.cgi/tech/1313183984/34
0933デフォルトの名無しさん
2014/12/15(月) 20:19:33.68ID:zp/a3var違うだろ。
0934デフォルトの名無しさん
2014/12/15(月) 20:24:10.35ID:cHr+ai5R930にとっては正しいんでないの。
公開するならC++で書く可能性があると言ってるんだから。
0935デフォルトの名無しさん
2014/12/15(月) 20:27:40.50ID:l7adVrbr0936デフォルトの名無しさん
2014/12/15(月) 20:29:32.82ID:zp/a3var>公開するならC++で書く可能性があると言ってるんだから。
それも違うように思う。
0937デフォルトの名無しさん
2014/12/15(月) 20:40:14.88ID:/RjxNv/gもしそうなら、
> 公開しないプログラムをC++で書くことはなくなったなぁ
の、前半は冗長
プログラマー失格
0938デフォルトの名無しさん
2014/12/15(月) 20:42:22.03ID:iBkobFrRわざわざ公開しないプログラムをって言ってるくらいだからC++で何かは書くんだろ。
でも930によるとそれは公開しないプログラムではない。
0939デフォルトの名無しさん
2014/12/15(月) 20:45:41.68ID:l7adVrbrもしそうなら、というのは君の勝手な仮定で無駄と言われても困る。
つまり書かないとも言っていないわけで、情報として別に過不足はない。
0940デフォルトの名無しさん
2014/12/15(月) 20:46:33.92ID:zp/a3var930 の対偶は
C++以外で書いたプログラムなら公開することもある
だろ
0941デフォルトの名無しさん
2014/12/15(月) 20:48:22.38ID:l7adVrbrウッソだろお前wwww
0942デフォルトの名無しさん
2014/12/15(月) 21:00:22.83ID:pNwHOn6xだから
公開するかもしれないプログラムをC++以外で書くこともある
なんか騙されてる気がするなw
0943デフォルトの名無しさん
2014/12/15(月) 21:05:40.73ID:zp/a3var嘘でした。
焼酎飲んで酔っ払っていました。すみません。
0944デフォルトの名無しさん
2014/12/15(月) 21:09:14.27ID:pNwHOn6x間違えた…
公開するかもしれないプログラムをC++で書くこともある
だった
0945デフォルトの名無しさん
2014/12/15(月) 21:09:31.72ID:U6CA+1sNPがプログラムであるとき
公開しない → C++で書かない
と解釈できるから、その対偶は
Pがプログラムであるとき
C++で書く → 公開する
となる。もしPがプログラムではなく小説だとしたらC++で書かれていても公開する必要はない。
(C++で小説が書けるとは言っていない)
0946デフォルトの名無しさん
2014/12/15(月) 21:10:34.87ID:pNwHOn6xC++で書かない ⇔ 違う言語で書く
か
C++で書かない ⇔ C++で書くこともある
の違いか
0947デフォルトの名無しさん
2014/12/15(月) 21:12:17.54ID:zp/a3varプログラムは掛けないというこだ。
0948デフォルトの名無しさん
2014/12/15(月) 21:13:01.16ID:pNwHOn6x「しない」の反対は「することもある」だぞ
0949デフォルトの名無しさん
2014/12/15(月) 21:21:40.60ID:/RjxNv/g> もしそうなら、というのは君の勝手な仮定
違うよ
「その場合は」って言い換えれば理解できるかな?
0950デフォルトの名無しさん
2014/12/15(月) 21:25:02.44ID:U6CA+1sN>「しない」の反対は「することもある」だぞ
左側が命題論理で右側が述語論理か?それはおかしいだろ。
0951デフォルトの名無しさん
2014/12/15(月) 21:30:31.85ID:U6CA+1sNこの場合、「すべて(∀)」と「ある(∃)」の入れ替えとかは関係ない
Pをプログラムの集合としたとき、
∀p∈P ( pを公開しない → pはC++で書かない )
∀p∈P ( pはC++で書かれている → pを公開する )
の両者が同値だと言ってるので、書き換えは ( ) の中だけ。
0952デフォルトの名無しさん
2014/12/15(月) 21:39:46.02ID:l7adVrbrCppでプログラムを書くことがない
という命題と
>>930,>>931は別物だよな?
0953デフォルトの名無しさん
2014/12/15(月) 21:46:42.75ID:scyQtu+8C++でプログラムを書く → >>930 が真である とき、
(¬ C++でプログラムを書く) であってもまた >>930 は真であるから
0954デフォルトの名無しさん
2014/12/16(火) 12:41:16.47ID:GDEYR09Q0955デフォルトの名無しさん
2014/12/16(火) 13:37:28.76ID:YQHLhHBa0956デフォルトの名無しさん
2014/12/16(火) 21:06:06.57ID:GW6/SfZ/0957デフォルトの名無しさん
2014/12/17(水) 06:09:02.32ID:DdxdyuB4インターフェイスを継承しているクラスならば動的にダックタイピングができるとおもうんですけど
なぜできるようにしないんですか?
できないのなら代わりにどうしたらいいですか?
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+WD0961デフォルトの名無しさん
2014/12/17(水) 09:29:49.48ID:hluG9Z0Y”標準ライブラリに含まれてるのはSTLではない党”
の人達ですよ
0962デフォルトの名無しさん
2014/12/17(水) 09:42:28.31ID:q42MmlyA0963デフォルトの名無しさん
2014/12/17(水) 09:49:03.17ID:VSFyd8tTconst char*
new[]
ポインタ
各々注意してご使用ください(古典派)
0964デフォルトの名無しさん
2014/12/17(水) 10:05:00.39ID:hluG9Z0Y0965デフォルトの名無しさん
2014/12/17(水) 10:07:56.14ID:egX2f05O0966デフォルトの名無しさん
2014/12/17(水) 12:01:06.01ID:DdxdyuB4スタンダードポリモーフィズムライブラリーは
SPLが無いのはなぜですか?
0967デフォルトの名無しさん
2014/12/17(水) 12:34:49.95ID:LL4LS8IOC++の哲学的に、ポリモーフィズムのコストが望まれなかったからだと思うが。
たかがコンテナを走査するためだけに vtable + 仮想関数呼び出し は避けたかったんだろう。
Cの配列も同等に扱いたいというのもあったかもしれない。
配列や、配列のiterator(≒ただのポインタ)は、ポリモーフィズムできないしな。
0968デフォルトの名無しさん
2014/12/17(水) 18:53:40.73ID:oskgmNh2コンテナ・アルゴリズム・イテレータ・ファンクタが限界
0969デフォルトの名無しさん
2014/12/17(水) 18:55:33.07ID:cvokdp9c0970デフォルトの名無しさん
2014/12/17(水) 21:34:50.51ID:oqHNikZ2事実に対してわざわざ "派" を付けるのは変ですよ
>>969
その通り、テンプレートですよね
素人でも知ってます
STLじゃないだけ
0971デフォルトの名無しさん
2014/12/17(水) 21:48:11.66ID:KocJU1bl0972デフォルトの名無しさん
2014/12/17(水) 22:08:16.99ID:ogC9pRrQだけど国内海外を問わずSTLという呼び方がdeprecatedになったという実感はない。
つまりはそういうことだ。
0973デフォルトの名無しさん
2014/12/17(水) 22:21:52.32ID:NbvfeN3M0974デフォルトの名無しさん
2014/12/17(水) 22:24:22.95ID:VSFyd8tT設計的に"テンプレート"が主眼じゃないもんコレ。
0975デフォルトの名無しさん
2014/12/17(水) 22:25:56.74ID:G53RorvD(ステパノフのアレ、もしくはSGIのアレ)
・コンテナ、イテレーター、アルゴ、ファンクタ
のみSTL派(string含まず)
・stringもSTL派(iostream含まず)
・テンプレートは全てSTL派
・C++の標準ライブラリは全てSTL派
・なんとなくライブラリは全てSTL派
STLという用語の根拠があるのは最初のみで
他はコンセンサスの得られない脳内定義
0976デフォルトの名無しさん
2014/12/17(水) 22:25:59.72ID:cvokdp9c0977デフォルトの名無しさん
2014/12/17(水) 22:26:27.02ID:cvokdp9c0978デフォルトの名無しさん
2014/12/17(水) 22:26:51.32ID:G53RorvD話が理解できていない>>529が哀れ
「化石のSTLは標準ライブラリのコンテナの基礎となった」
が正しい。
標準ライブラリには「ここはSTL」という説明はなく
また化石STLと標準ライブラリの類似部分とは完全に一致でもない
0979デフォルトの名無しさん
2014/12/17(水) 22:32:02.66ID:VSFyd8tT日本政府がなんでコウノトリさんの保護に躍起になってるか推して知るべしだよなw
0980デフォルトの名無しさん
2014/12/17(水) 22:32:52.23ID:LL4LS8IOSTLと呼ばれていたものが、過去に取り込まれたと。
std::threadをboostと呼ぶのか、みたいな議論に聞こえる。
0981デフォルトの名無しさん
2014/12/17(水) 22:44:00.79ID:ogC9pRrQ0982デフォルトの名無しさん
2014/12/17(水) 23:10:34.23ID:z75DAbdw.h拡張子の付かないヘッダーファイルの物は全てSTL
0983デフォルトの名無しさん
2014/12/18(木) 00:39:29.24ID:fLZ4/WP5だいたいそうなると元の話がどこかにいって罵りあいになるのに飽きないことよなぁ
0984デフォルトの名無しさん
2014/12/18(木) 03:34:42.11ID:3DYbSfY0似てるようで少し違うな。Boostは実装の一つだけど、STLと呼ばれる物は複数の実装があった。
今の標準ライブラリとして各コンパイラ用に実装されている物も
0985デフォルトの名無しさん
2014/12/18(木) 03:46:43.93ID:3DYbSfY0なんか面倒くさくなったからもういいや。
0986デフォルトの名無しさん
2014/12/18(木) 05:39:46.73ID:mATKagVZ0987デフォルトの名無しさん
2014/12/18(木) 07:07:48.12ID:ZC5ElBjJ不思議と会話できてしまった気分にさせてしまう魔法の言葉STL。
意味もなく文頭に付けておくのがトレンド
0988デフォルトの名無しさん
2014/12/18(木) 07:29:09.97ID:Myc4f1K90989デフォルトの名無しさん
2014/12/18(木) 08:59:22.03ID:UJb2HcUvATL
WTL
テンプレートを巧みに利用したものはみんなナントカTLだな
0990デフォルトの名無しさん
2014/12/18(木) 09:12:07.85ID:lEIIG5qv0991デフォルトの名無しさん
2014/12/18(木) 11:29:27.40ID:7LvNfPgX0992デフォルトの名無しさん
2014/12/18(木) 13:47:32.19ID:Mboq20NAC++相談室 part115 [転載禁止]2ch.net
http://peace.2ch.net/test/read.cgi/tech/1418877984/
0993デフォルトの名無しさん
2014/12/18(木) 19:10:51.11ID:7Nj/hQDp0994デフォルトの名無しさん
2014/12/18(木) 19:44:59.09ID:ozqPNhmK0995デフォルトの名無しさん
2014/12/18(木) 19:49:03.26ID:6p59/Cj70996デフォルトの名無しさん
2014/12/19(金) 03:50:11.75ID:FE5qeIwb0997デフォルトの名無しさん
2014/12/19(金) 13:58:00.56ID:qsG/8pF50998デフォルトの名無しさん
2014/12/19(金) 16:13:53.01ID:jlzS90kf0999デフォルトの名無しさん
2014/12/19(金) 20:53:01.36ID:Wapt+wuq1000デフォルトの名無しさん
2014/12/19(金) 20:54:19.51ID:Wapt+wuq10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。