2 :
デフォルトの名無しさん :2013/05/12(日) 08:56:55.80
template <class T> T& operator >> (T&, int&&);
thx
>>1 ;
>>2 整数型に&&使うなんて、どうかと思うんです
そこはintにすべきじゃないかと
前スレ1000 >static castの一つ? ()キャスト,暗黙キャスト,static_cast,dynamic_cast で行われる普通の変換。 コンパイル時に調整量が決まる という点ではstaticだけどね
なるほど、で思ったんだがvirtual継承って2重継承時以外使うことないよな 結局2重継承関係の時に注意が必要か
>>5 >virtual継承って2重継承時以外使うことない
他の言語のinterfaceを移植するときに
使いまくりじゃないか
7 :
4 :2013/05/12(日) 09:33:34.45
ごめんウソを言った dynamic_castは具象クラスが不明なので コンパイル時には決まらない
> 985 名前:デフォルトの名無しさん[sage] 投稿日:2013/05/12(日) 00:30:05.86
> 横だけど
> type&へのキャストってどういう意味?
>
> 986 名前:デフォルトの名無しさん[sage] 投稿日:2013/05/12(日) 00:40:04.32
> 参照へのキャスト
>
> 987 名前:デフォルトの名無しさん[sage] 投稿日:2013/05/12(日) 00:48:17.29
> それってなんかありがたいことがあるんか?
参照へのキャストは参照のダウンキャストやクロスキャストをしたいときにも必要
ttp://ideone.com/MaYOhX
>クロスキャストをしたいときにも必要 あ、ポインターで間に合ってます
STLつかうと一気に実行ファイルサイズが10倍に?!
環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?
#include <stdafx.h>
後死ね。
言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。
>>1 乙
>#include <stdafx.h> これいつも思うんだけど本当は #include "stdafx.h" の間違いだよな
その地鎮祭レスはいつからあるんだっけ? 数年前からあるような
2006年の時点で既に新参が笑われる状態
質問 STLのiostreamを使うとき、自作クラスFooの入出力演算子を istream& operator>> (istream& istr, Foo& input)とか ostream& operator<< (ostream& ostr, const Foo& output)とかいった シグネチャで実装するシチュがたまにあると思いますが、 これってエラーを返す場合はどうすでば良いの? badビットでも立てる?立てて良い?その方法は?
STLって何ですか?
出力ぐらいでロジックエラーになるのかよ
NuttXの質問はこのスレで出来ますでしょうか?
納豆?
その納豆とやら固有の話なら
>>1 にある姉妹スレをオヌヌメするが
タヒネ
>>15 istr.setstateでストリームのフラグを立てる
このスレの納豆の臭いがする
25 :
デフォルトの名無しさん :2013/05/12(日) 19:02:53.85
俺の大好物
納豆が旨いのに理由もねえだろ!
先日会った外国人がterrible!と言っていたぞ
納豆ってほんとうまいよな。 プログラミングも捗る。
個人はともかく会社の職場で納豆 食べながら仕事してたら殺害だね。 っていうか19はどこ行った?
おれんとこの職場では個人デスクでカレーなんて日常茶飯事だぞ これがホントの食場か
このスレはbind1stについて語るスレとなりました
カリーか?
納豆カレー食べたことあるけど結構いけるぞ
納豆カレーはココイチで初めて知って、家で試してみたら美味しいと思った しかし家の他の人はドン引き 食べてみれば美味しいのに
とある格闘ゲームで納豆スパゲティなるものを知った。
納豆とスパゲティを混ぜるだけとか パンに挟むだけでも結構食える
37 :
15 :2013/05/12(日) 23:35:52.04
レス㌧クス、
>>17 おk
確かにストリーム以外のエラーをストリームのエラーであるかのように返すのは邪道であることは認識しています
>>23 ありが㌧
何で納豆スレになってんだw
isocketstream openSocket(); std::ifstream openFile(); std::istream readData(std::string datasource) { if (datasource == "net") { return openSocket(); } else { return openFile(); } } みたいなことをやりたいのですが、何か上手い手はないでしょうか? std::unique_ptr<std::istream>としても良いのですが、見栄えがあまりよろしくなくて、、、
見栄えってなんだよ
if文で分岐か・・・・ 禁じ手だけどstdの名前空間の中にiosocketstreamを入れて仮想関数で 呼び出すようにすればすっきりするんだが
リソース確保だけ違って後は
透過的に扱いたいなら
>>39 が一番素直だと思うけど。
ifstreamは意味的にコピー出来ないんだから
unique_ptrは適切だと思う。
抽象クラスのコンストラクタって呼ばれることある?
もろちん
いやむしろ呼ばれないことがない
純粋仮想関数すら呼ばれる事も 例えばコンストラクタ内で呼ぶとか
むしろコンストラクタ以外で 純粋仮想関数を呼び出す方法を知りたい
つ ですとらくたー
デストラクタだな
static関数ではstaticなデータしか扱えないって聞いたけど 普通に扱えるんだけどどうなってるの?
「(クラスの)staticな(メンバ)関数はstaticなデータ(メンバ)しか扱ない。非static(なメンバ)変数は(this経由では)扱えない」
>>50 普通に扱えたという例を晒してもらおうか
自動変数はもちろん扱えるよ thisが使えないだけ
53 :
デフォルトの名無しさん :2013/05/14(火) 19:57:04.46
s/自動変数/非staticメンバ/
sって何ですか? /って何ですか? 日本語でおながいします
在日うざ
viの文字列置換だっけ? C++スレでUnix固有の表現を使うなとは 思うけど、わかってて噛みつくかね ところでstatic関数でどうやって 非staticメンバを扱うのよ
普通の正規表現だろ perlとかsedとかviだけじゃないしUnix固有でも何でも無い
どうみてもUnix臭がぷんぷんですはい
馬鹿を生贄にstaticおじさんを召喚
perlも使った事無い男の人って……
むしろPerlでの実装を提案すると 「何でパールなの?」 ときかれて返答に困るでござる 俺の中では Perler=負け組 Perler=20世紀末に活躍したジジィ
perlは文法が相当キモいからね でもそんくらい基礎知識
64 :
デフォルトの名無しさん :2013/05/14(火) 21:00:33.52
PCREすらわからないようじゃ生きてるのもつらいだろうな
s/x/y/ という文法に組み込まれた正規表現による置換の話だから ライブラリの話とかどうでもいいです
C++の<regex>にも s/正規表現/置換後/ なんてのは無いな
ただいま64 がregex標準ヘッダを調べています
vector<T> vVal; ~ for( auto& Val : vVal ) { ・・・ } 上記の場合、順方向トラバースになりますが、 逆方向トラバースはrange-based forでは書けないのでしょうか??
はい
突っ込むべきは、置換パターンでレスする文化がスラドとかUnix寄りの文化で有ることの方だろう。 正規表現自体がUnixやPerlで発展してきた文化なのだから、 正規表現による置換パターンレスを受け入れた時点でUnixだからどうたらって言うこと自体が野暮。 そもそも53のツッコミ自体、50にも51にも52にも適用できないし変じゃねぇか?
既出も含めて基本のおさらい struct X { int var1; static int var2; static void f(X &); private: int var3; }; int X::var2; void X::f(X &x) { // staticメンバ関数では //var1 = 1; // error. 非staticメンバを直接は使えない //this; // error. thisも使えない //this->var1 = 1; // error. よってthis経由でも非staticメンバは使えない var2 = 20; // staticメンバなら使える x.var1 = 10; // もちろんインスタンス経由なら非staticメンバを使える x.var2 = 20; // インスタンス経由の形でもstaticメンバを使える x.var3 = 30; // そのクラスのインスタンスならprivateメンバにもアクセスできる } int main() { X x; X::f(x); }
73 :
50 :2013/05/15(水) 01:19:23.56
>>51 DXライブラリの関数がstatic関数の中で普通に使えるのだけど
static関数で使えないのはメンバ変数だけで
他の変数は制限なしで使えるってこと?
普通の関数が使えないと困るだろ常識的に考えて…
>>73 static 関数は this が使えない
従って this-> が省略されているものも使えない
それ以外は使える状態にあれば使える
76 :
68 :2013/05/15(水) 01:29:07.02
rbeginとrendをbeginとendとして返すアダプタくらい 標準で用意してくれって思う
逆にそんなUNKOなもの標準に入れるなって思う
>x.var2 = 20; // インスタンス経由の形でもstaticメンバを使える なんでC++ってこんな書き方が許されてるの? 教えてエロい人
>>79 単に struct X だから public プロパティ/メンバ変数ということだけなのでは?
static メンバかどうかはこの場合はどうでもいい話
他の言語は許されないの?
>>81 C#ではムリダナ
書ける理由は特にないんじゃない?
メンバだからなんとなく使えるようにしたんじゃね
C++=うんこ
>>83 >メンバだからなんとなく使えるように
C++、KUSO過ぎる
UNKOとかKUSOとかワロタw
朝鮮人は本当に糞が好きだなあ
だからC/C++大好き
トンスルトンスル!
C++のおかげでUNKOが好きになりました。
C++が糞まみれの言語仕様であることは間違いないよな
やっぱりJAVA >>>>>> C++だな
えっ?!
for( auto& pObj : vpObj ) { if( pObj->Func() ) { return true; } } これを括弧を省略して、 for( auto& pObj : vpObj ) if( pObj->Func() ) return true; というふうに書いたら、上記と同じような動作になってくれました。 ちょっと怖い気もする書き方ですが、 制御構文の括弧を省略できる条件の「1文のみ」というのは、最初の「;」が現れるまでという解釈でよいですか?
ifは、if (式) 文、または、if (式) 文 else 文、で全体で一つの文
文の定義をちゃんと理解すれば それで答えは出る ただ、{ } は省略しない方が無難
{}を省略したりしなかったり一貫性が無いのは駄目だ 一貫性を保て
∧_∧ (´・ω・) いやどす ハ∨/~ヽ ノ[三ノ | (L|く_ノ |* | ハ、__| ""~""""""~""~""~""
やっぱり朝鮮人
100 :
94 :2013/05/15(水) 23:22:34.84
参考になりました。 ありがとうございました。
なりすまし乙 だからIDは必要なんだよ
for( auto& pObj : vpObj ) { if( pObj->Func() ) でpObjってポン助ですよね。それをauto"&”で受ける意味あるんですか てか、ポン助をautoする時ってauto&が常識?
ばーか
104 :
デフォルトの名無しさん :2013/05/16(木) 00:27:49.43
ポン助って何だよ
日本語でおk
106 :
片山博文MZパンク ◆0lBZNi.Q7evd :2013/05/16(木) 01:47:33.65
>>102 ポインタを書き換えるときに参照にする。
ポン助じゃねーよ for ( auto & item : vec1 ) item.v = 100; その例だとshared_ptrなんだろうな
>>102 unko *ar[n];
for ( int i = 0; i < n; i++ )
{
auto &pObj ★
= ar[i];
{
pObj->Func();
}
}
★の部分をどう書くかは好きにしろ
スマポなら&にしておくのが無難
そこは規格を引用しなくてどうする for ( for-range-declaration : braced-init-list ) statement ↓ { auto && __range = range-init; for ( auto __begin = begin-expr,__end = end-expr; __begin != __end; ++__begin ) { for-range-declaration = *__begin; statement } } なのでポインターの配列でポインターを変更したい場合は 「for-range-declaration = *__begin;」を 「auto && pObj = *__begin;」にする必要がある。
template<typename T> struct aaa { template<typename U> void test(){} template<typename U> void moge(){ this->test<U>(); } // エラー: (10114) '(' expected }; aaa<int> a; というエラーが出ます。this->を消すとコンパイルが通ります。this->付けないのが正しいのでしょうか CodeWarrior5.9.0です。
>>110 gcc4.7.2でノーエラー
template <typename T>
struct aaa
{
template <typename U>
void test() {
std::cout << "test" << std::endl;
}
template <typename U>
void moge() { this->test<U>(); }
};
int main()
{
aaa<int> a;
a.moge<int>();
}
>CodeWarrior なんか15年位前にそんなのあったな
>>94 それ、boolの戻り値なんだよな?
ifのあとに「return false;」ないけど
あ、ごめん forか、fooに見えたわ、疲れてんな
俺はhogeに見えたけど
グラフを構造してるけど、どう構造していいか悩んでいるので教えてくれませんか? グラフの構造としては1つの頂点(ノード)に対して、そこから辺(エッジ)で結ばれる頂点全体を含む 配列を持つ構造を選びました。この配列の集合の構造をSと呼ぶことにします。 グラフの頂点はデータを持たしたいんですよ。でもデータの型は1つじゃないんですよね。 そこで考えたのがデータを整数としてもち、その整数にデータを対応させようと思っているんですよ。 また、辺の種類は1つではなく複数の種類の辺を持ちたいんですよ。それには二つのSを持たせるのか、 あるいはSではなく1つの頂点に対して、そこらから辺で結ばれている頂点とその辺の種類の組全体を含む 配列を持つ構造を選ぶのか分らないです。 また、辺に俗に言う重みというデータを持たせたいんですよ。 ということなのでよろしくお願いしますね。
(´・ω・`)
重み付きグラフでいいじゃん あと隣接行列を併用 有向か無向かでも違うし グラフ理論は基礎が出来てるかな?
一応グラフ理論は初歩的な書物一冊とディスティールを少々読んだくらいで基礎が出来ているとは分りません。 整数でデータを持たせるよりアドレスでもたせたほうが効率的なはずなんですけど データをアドレスと型二つの情報を持たせるなんてことC++で可能なんですか?
>>121 >データをアドレスと型二つの情報を持たせるなんてことC++で可能なんですか?
おい誰かこいつに構造体(クラス)を教えてやれ
いやいやいや、C++はアドレス自体に型情報が付属してるないですか? すなわち、データにはvoid型の型情報を持たないアドレスと 型情報だけの組み(ペア)を持たせなければならないことを意味しますよね。 しかし、型情報だけを持たせるなんてことはC++にはできないんじゃないですか。 解決策はありますか?
template・・・・
traitsを使ってもいいな conceptはまだだからお楽しみ decltypeとか
variant使えばいいじゃん
traits template variant この3つのどれかを使いでどうやってやるのか教えてくれませんか
それ書いたら一冊の本になるぞ
variantを使うとまさに「複数の型の値を持ち得る型」を宣言できる 取り得る型をT,U,...とするとvariant<T,U,...> data;のように宣言すればよい variantの実装はboostにあるから自分で調べて
>>130 一つの頂点に複数の型の値を持たせたいのなら、variantが良いよというだけ
グラフの方は知らない
Boost.Graph使えで済むならいいけど 「グラフを構造してるけど、どう構造していいか悩んでいる」 らしいからそれじゃダメっぽいし たぶんソース見ても理解できないよ
構造的には正に adjacency_list だと思うし、property 使えば幸せになれる気がするが。
134 :
デフォルトの名無しさん :2013/05/16(木) 22:36:21.74
Aという名前のクラスに Bという名前のクラスをメンバーでもって Aをnewでインスタンス生成した場合 AをdeleteすればBも問題なく解放される?
だからなぜ書籍なども見ようとせず自分で実験しようともせず質問をするのだ
実験してわかるのはその環境でそうであるという事だけだもん
ここで聞いたって、その環境とやらですらその通りである保証はない。
こうしてまた一人VC++信者が作り出された
>>136 どこまでがC++の規格かの判別は難しいかもしれないが
C++の規格どおりに動かないなら環境に文句言っていいだろ
>>134 Bを値で持ってればBのデストラクタは呼ばれる
問題なく解放されるかどうかはプログラム次第
>>140 >問題なく解放されるかどうかはプログラム次第
そんな糞な環境はお前だけ
デストラクタとoperator deleteが 自分の環境で呼ばれるかどうかを 確認した上ででなおせ!
>>141 デストラクタが呼ばれることと
プログラマの意図どおりの(=問題をおこさない)動作をするクラス設計・実装になっていることとは
等価じゃないですよ
LinusによるC++ dis
http://cpplover.blogspot.jp/2013/05/linus-torvalsc.html 一部引用
> C++を使うとめちゃめちゃクソな設計の選択に追いやられる。必ず、最初は「よさげ」な言語のライブラリ機能、
> たとえSTLたとえばとかBoostとか他の完全なクソを使い始める、それはプログラムに「役立つ」かもしれない。
> だがしかし、それによって引き起こされるのは:
>
> ・動かない場合の無限の苦痛(しかも、STLとか、特にBoostが安定していて移植性があるなんて言うやつは
> クソまみれだし全然面白くもなんともない)
>
> ・非効率的な隠匿プログラミングモデル、二年ほど開発を続けて、始めて一部の隠匿設計が非効率的な
> ことに気がつくが、その時点では、もうオマエのコードはよさげなオブジェクトモデルに依存しきっていて、
> 書きなおす以外に修正の方法がない。
基地外に嫌われたところで別になんとも
自分が苦労して最高の出来でやっていたことが普通の出来だけど誰でも簡単に出来るようになると不満を持つ人は珍しくない そして自分の不満の正当化のため全体的な質が悪くなったことを理由にすることもあるが そのいう元々の質が単なる自己満足レベルのものでしかないこともまた珍しくない
いつからこのスレは江添とその取り巻きスレになった?
>>96 文の定義を知ると ラベルステートメントという
C++の言語仕様の糞さに憤慨です
はいはいサイナラ ところでラベルステートメントって?何ソレ?
>>152 が何を問題視してるか知らないがラベルステートメントは
たぶんラベル付きステートメントのことでgotoの飛び先やcaseとかのこと
もちろんC++固有でなくCから持ってきたものだけど
クソがこの業界では流行ってるのか? それともC++がクソ文化なの?
C++はクソだと思っている人が関連スレを荒らしまわっているだけ
590 デフォルトの名無しさん sage 2013/04/30(火) 20:33:53.74 ウンコウンコいいながらこのスレに執着してる奴ってどんだけウンコ好きなんだよ 571 デフォルトの名無しさん sage 2013/04/30(火) 15:54:06.35 C++は本当にKUSOだな。 上級者でも(むしろ上級者ほど)規格片手にコード 書かなきゃいけない言語はおかしいだろ。 何のためのプログラミング言語だよ 628 デフォルトの名無しさん sage 2013/05/01(水) 19:41:52.32 やはりC++はブリブリUNKO おまえらパソコンの大先生が古文書片手に議論しても 意見がまとまらないなんて、国際標準が意味をなしてない
158 :
デフォルトの名無しさん :2013/05/17(金) 23:48:35.03
C#最高!C++は糞!
>>158 君が正しくプログラムを書いていればな
例えば解放が必要なリソースを持っているクラスのデストラクタに解放処理を書くのを忘れたりすれば
デストラクタが呼ばれてそのクラス自体は解放されたとしても問題なく解放されたとはいえない
>>158 >>135 コンストラクタとデストラクタにログ入れて
対になっているか確認してから出直せ
C++できる人はかっこいい。 C#やる人はダサい。
C++できるけど普段はしまっておいてC#やってる人はかっこいいw
ポインタのアドレスを指定バイトにアラインメントしたいのですが どうすればいいですが void* p = ...; void* p32 = alignment( p, 32 ); こんな感じでやりたいです。
c標準ライブラリの識別子をstd名前空間の外に置くのを止めさせる方法はありませんか?
グローバルネームスペースでのusing namespace std;も止めさせたいな。
>>167 #include "my.h" //using namespace std;
これでok
inline namespace unko { using namespace std; } これでok
よし今度から void fun(std::size_t) は void fun(decltype(sizeof(0))) でok
using namespace std;//←これをヘッダに移動した奴は死刑 これでいいだろ これ以上は自分のコーディングstyleの 押しつけでしかない
vector<CUnko> vpUnko; shared_ptr<CUnko> pUnko( new CUnko ); vpUnko.push_back( pUnko ); remove( vpUnko.begin(), vpUnko.end(), pUnko ); これでなぜかvpUnkoの要素数が1のまま変わらず、削除が行われません。 なぜpUnkoを見つけて削除することができないのでしょうか?
↑ すみません、最初は vector<shared_ptr<CUnko>> vpUnko; です。
176 :
174 :2013/05/18(土) 10:00:02.33
すみません、eraseで解決しました。 removeでは要素を詰めるだけでというのは覚えていたんですが、 要素数まで同じというのは把握していませんでした(汗)
よくあるまちがいだけど 本っっ当にC++はKUSOだな
>>172 俺にも
>>169-172 はイミフだ
167は文字通り読んでstdio.hとかが名前空間を汚染することについてか、
直前のコードから「using namespace std;」の話でc++標準ライブラリを脱字したかのどちらかだと思う。
(前者と仮定して168では後者の話を振った)
>>173 .cppにusing namespace std;書いてstd::minと衝突して学習者が爆死しかける教本書いた奴も死刑だと思うんだ。
最近、IUnknownがIUnkoに見えてきた・・・
>>56 えっthisポインタを引数で渡す
同じクラスのメンバであれば、渡されたthisポインタ経由で非publicなメンバに特にキャストもせずにアクセスし得る
>>178 >std::min
<algorithm>のアレか……(std::swap、std::max)
「グローバル名前空間空間にusing namespace std;」はホントに危険だよな……
>>180 は「privateなメンバには他クラスからアクセスできません」
にも「それは違うとか言いだしそうな奴だな」
>>182 ちょっ何を言っているのかわからない
class Foo {
int x;
public:
static int GetX(Foo* p) { return p->x; }
};
class Bar {
Foo obj;
public:
void ShowFooX() { std::cout << Foo::GetX(&obj) << std::endl; }
};
staticメンバ経由でprivateなメンバ(とか)にアクセスするというのは、 例えばスレッドをクラス化したりするときの基本テクニックなんやな
using namespace std;が破壊力高いのは ヘッダに入れた時に、意図していない他人に まで迷惑をかけるからだろ。 自分でわかっててcppに入れるのまで 文句を言われる筋合いはない。 それにstd::maxと被る問題なら グローバルでなく関数スコープでusingしても同じ。
>static関数ではstaticなデータしか扱えないって聞いたけど
>自動変数はもちろん扱える
>s/自動変数/非staticメンバ/
>どうやって非staticメンバを扱うのよ
>thisポインタを引数で渡す
static int GetX(Foo* p) { return p->x; }
>「privateなメンバには他クラスからアクセスできません」
にも「それは違うとか言いだしそうな奴だな」
>何を言っているのかわからない
どちらかというと
>>183 が
何を言っているのかわからない
内容はともかくfoo/barを使う
>>183 はウンコ確定。
ところでinline namespaceって何ソレうまいの?
189 :
デフォルトの名無しさん :2013/05/18(土) 15:49:53.75
あー、そーか staticが「他のクラス」だからprivateにアクセスできないと思っているんだな もう、どこから突っ込んでいいやらw
GUIで、コンポーネントを選択することを「フォーカス」と言いますが、 他のコンポーネントを選択するなどして、フォーカスが外れることを何て言うんでしょうか? 「デフォーカス」?「アウトフォーカス」?
スレチガイカス
static = うんこ
スレチがイカス?
すれ違いキス
195 :
167 :2013/05/18(土) 19:33:06.14
>>167 です
分かりにくくてすいません
ようするにこういうコードが書きたかったんです…
#include<cstdlib>
namespace command{
enum Command{
exit ='c'
};
};
void some(const char *s){
using namespace command;
switch(s[0]){
case exit: // 関数exit(int)と衝突する
std:exit(0);
}
}
>>195 なんなら
const int Exit = 'c';
といったように大文字で逃げたら?
>>196 逃げるならスコープenumがオヌヌメ。
だが質問者は逃げ方を訊いているわけではないぞよ。
>>195 衝突した所だけ command::exit にするのではいかんの?
絶対衝突させたくないならusingを使うこと
自体がおかしいと思う。
あとC++でexitはマジやめて。
using namespaceって使ったことないわ。禁止されてるところも多いし
>>197 >逃げ方を訊いているわけではない
ああそれもそうか
と言うかC的にはexitとreturnは(main関数内では)同義だから使ったこと無いや……
using云々以前に例外投げるとかすべきやね、C++なんだし
CだろうとC++だろうと exit使う奴は低脳
>>195 using command::exit; を足しちゃダメ?
>>185 「using namespace std;はおまじない」と教える/覚えるのはヘッダに入れるよりもヤバイだろ
分かっててusing namespace std;してるなら問題ないが、それを区別する手段が…
204 :
167 :2013/05/19(日) 00:29:51.57
>>196 とりあえず今までそれで逃げてました
>>198 command::exitだと見づらく感じてしまうんですよね…
あと、実際のコードはマイコンの制御プログラムで、開発中マイコンをぶら下げっ放しにするのがウザいのでPC上でもビルドして動かせるようにしたものです。本体には終了という概念がなく、そのためのロジックも存在しないので、手っ取り早くexitしとけという発想です。
>>202 おおー、衝突が無くなりました
ありがとうございます
using宣言にはこんな効果もあるのですね
結局、ライブラリ関数がグローバルスコープにぶち撒けられる問題はいかんともしがたいのでしょうか
>>202 の解法で問題は無くなりそうなんで、もういいのですが
ガラケーなんかでもC++で作られているものはあるよ。
>>205 Cで作れるものにC++が使えない理由が無いだろ。
「今時の」とか、何言ってんの?
ちなみにパフォーマンスで言うとCとC++の差はほとんどなくて、 じゃあ何が問題かっていうとROMサイズ。だから組み込み系は Cが長かったんだけど、ROM単価が劇的に下がった今はもう コードサイズの問題はほとんどなくなった。
>>207 C言語対応してる→C++対応している、にはならないと思うけど?
C++だとテンプレートとかコード量膨れやすいしオーバヘッドも増えやすいからねぇ…
>>209 マイコンメーカの提供するCコンパイラではどーにもならんけど、gcc使えるマイコンであればバックエンド流用でg++も通るんじゃね
標準ライブラリの移植状況がまんま制約になるし、可能であるかとやるかどうかは別だろうが
ROMサイズだの処理速度だのコンパイラの性能向上だのでやりやすくはなってきてる…のかな
>>208 ,210
C++使うことによって発生するコードサイズの問題って何のこと言ってるの?
同じコードコンパイルして差が出ることはないだろうし。
テンプレート使うようなコードをCでマクロやコピペで書けばコードサイズが減らせるわけでもないだろ。
同じコードコンパイルするならC++使う意味も無いだろ。 同等のロジックをクラス使って書くとオーバヘッドやバイナリコード量がちょっぴり増加する。 テンプレートは状況次第では一気に増える ・派生クラスを基底クラスにキャストして処理する ・同等のことをCでキャストやunion使って処理する ・同等のことをテンプレートで処理する 3つ目のケースで上2つと同等のバイナリコード量に潰せるコンパイラを期待するのは高望みじゃねぇかな?
自分に有利な前提条件を勝手にでっち上げるのが 2ちゃんの流行なのか。 世間一般ではそういうのを屁理屈って言うんだがな。
>>208 記憶容量の単価というよりは単にアドレス空間の絶対量の問題では?
>>213 「コードサイズが膨れるテンプレートの使い方をしない」って前提を置いてる211に対して言ってるんだよな?
>>214 空間だけあっても中身ないと駄目だし結局ROM/RAM容量の問題じゃないのかそれ
コードサイズ増やせない環境で不必要にサイズが増えるようなテンプレートの 使い方するような奴がバカだっていうだけだよなあ そんな奴はどんな言語を使ったってダメだろう
>>212 > 同じコードコンパイルするならC++使う意味も無いだろ。
同等のコードでも名前空間、型チェック、オーバーロードとか使って読みやすく、安全に
書けるようになるよ。
> 同等のロジックをクラス使って書くとオーバヘッドやバイナリコード量がちょっぴり増加する。
相当ひどいコンパイラ実装じゃないとそんなことにならないはずだけど・・・。
一般的に言えるってことならコード例を見せて欲しいな。
> テンプレートは状況次第では一気に増える
> ・派生クラスを基底クラスにキャストして処理する
> ・同等のことをCでキャストやunion使って処理する
> ・同等のことをテンプレートで処理する
> 3つ目のケースで上2つと同等のバイナリコード量に潰せるコンパイラを期待するのは高望みじゃねぇかな?
コードサイズを優先するならC++で書いても一番上のやつ選べばいいじゃん。
>>217 はClangかG++を持ってこないと
そんな糞は捨てろとか言い出しそうだな。
埋め込みコンパイラ舐めんなよ。
>>216 実際問題マイコンでのC++は放置されてたんだからその判断した当時の各種ベンダに言えよ。
「テンプレートによるコードサイズへの影響を正しく予測できない奴はCもダメなんで配慮の必要なし」て。
>>217 > 同等のコード
同等≠同じ、だから名前空間とかオーバーロード使ったコードはCでは通らんだろ。
その辺のみ使ってCと同等のコードを書く制約ならバイナリコード量にほぼ(名前修飾除く)影響は出ないが、
制約なく書いたら普通にそれ以外も使ってしまってサイズを膨らます要因にはなるわな。
> 一般的に言えるってことなら
thisポインタを渡す処理とか仮想関数テーブルとか名前修飾とか例外初期化とかが、ちょびっと。
そのちょびっとをケチりたいって要求は今でも8bitマイコンなら現役だと思うけど
> コードサイズを優先するならC++で書いても一番上のやつ選べばいいじゃん。
STL含め、それを全開発者に常に意識させない限りはコードが膨れるのが問題なんだよ。
一々「テンプレート(含むSTL)使用禁止」「仮想関数使用禁止」「クラス使用は最低限」
とかしないとC++採用でのバイナリコード量の増加を押さえられないのなら、
それを理由にC++自体を回避するのも十分有効な手段だろ。
C++の利点を活用できない状態でCに加えてC++ライブラリの移植の面倒まで見たいって企業は少ないだろうな。
まあ どっかの基地外さんじゃないけど 素人に使わせると糞になりがちで、 企業としてはそれをコントロールするコストを 加味するとCが無難。 名前空間、型チェック、オーバーロード の為だけにC++を導入するメリットは少ない。 C++は規格オナニーだけにしてください。
>>204 >結局、ライブラリ関数がグローバルスコープにぶち撒けられる問題はいかんともしがたいのでしょうか
如何ともしがたい。
規格は<cstdlib>がexitをグローバル名前空間に
導入されることを禁止していないし
それを抑制するための言語機能もない。
>>219 > 制約なく書いたら普通にそれ以外も使ってしまってサイズを膨らます要因にはなるわな。
> thisポインタを渡す処理とか仮想関数テーブルとか名前修飾とか例外初期化とかが、ちょびっと。
この「ちょびっと」って数%って感じだよね?それが致命的になるレベルのコードサイズ制約を
実際に相手にしたことはないんで感覚的にはわかんないけど、あると言われれば否定はで
きないな。
> STL含め、それを全開発者に常に意識させない限りはコードが膨れるのが問題なんだよ。
そんなに制約がキツイ環境なら開発者みんな気をつければいいだろうとは思うけど、それが
簡単な話じゃない場合(人数とか資質とか)もあるのは、まぁわかる。
両方が問題になる場合にはC縛りがちょうどいいケースがあり得ることは理解したよ。ありがとう。
2chに有益な情報なんてない
こんなところで他人を言い負かそうとか、持論を押しつけようとかしても時間の無駄。 お互い言いたいことしか言わずに、他人の話は基本的に否定がデフォルト設定だから。
ミンスとは政治色が強いですね
>>223 >有益な情報なんてない
え?結構このスレ勉強になるんですけど
質問です iostreamはSTLに入るのでしょうか?
STLというのは規格で定義されたものではなく 皆が適当に呼んでるだけの呼称なので どれが何に入ると決まっているわけではない
なるほど。ありがとうございます この前coutとauto_ptrはSTLじゃない と言われてえぇっと思ったので 質問させていただきました 定義は曖昧ということですね
iostreamはあまりSTLと呼ばれる事は少ないが テンプレート使ってるのでSTLと呼んでも悪い事も無い auto_ptrはC++11でdeprecatedなのでキニスンナ
>>232 横だけどthreadは?
処理の多くが環境依存だから
ヘッダーだけテンプレートで
本体は.cppになると思うのだけれど
これもテンプレートライブラリでいい?
テンプレートが含まれる奴は全部STLでいい
C++ Standard Library
STLは慣用的に使われてるだけだから あまり気にするとハゲるぞ
ストラウス先生はSTLにご執心だもんな
STLなかったら軽くしねる。
互換性気にしすぎてハゲちゃったかー
無能同士の会話ですからね
無毛同志だからしょうがない
用語としてではなくライブラリとしてのSTLは曖昧ではなくデファクトスタンダードとなってる規格が定義されてて実装も存在してる
用語としてではなくライブラリとしてのSTLは曖昧ではなくデファクトスタンダードとなってる規格が定義されてて実装も存在してる
同じ事2回言うな無毛
>>242 >規格が定義され
参考までにその規格の名前を教えてください
髪の毛を生やす能力が無いとか いじめるのも大概にして下さい!
毛を生やす力はC++に全振りしたのがハゲ
おまいらどんだけハゲの事好きなんだよ
そりゃC++なんてやってちゃハゲになるよな
で結局 STLを定義した規格は無いの?
ハゲにもヒゲはあるんだよな…
おまいら、毛が好きだなw
横?・・・ (つд⊂)ゴシゴシ 後ろしか無いじゃないか!
Java使ってる奴はフサフサだよ 俺が知ってる同僚はそう
C++使いは白髪が多いな。
ハゲの回答です
260 :
デフォルトの名無しさん :2013/05/19(日) 21:34:15.60
おまえら貶しすぎや
髪の毛晒せよ
262 :
デフォルトの名無しさん :2013/05/19(日) 22:27:39.05
ぬけぬけと・・
std::stringはコンテナに含まれますか?
ふくまれません
コンテナ要件満たしててコンテナの一種なのかと思ってたけど気のせいだったか
ハゲは信じる
>>265 コンテナの要件って何か知らないけど
stringって文字列以外を格納できたっけ?
>>268 0x00~0xffを格納できるし、\0ターミネーターも存在しない
string::c_str()はそうじゃないだろうけど
>>269 いやcharやwchar_t以外のクラスとか突っ込んで
ちゃんと動くようになってんのかなぁと
俺もコンテナの要件って知らないけど、 それを満たしているなら文字列専用コンテナ って言えるだろ
>>258 SGIという会社の「Standard Template Library Programmer's Guide」って文書で定義された「SGI Standard Template Library」がデファクトスタンダードなSTLの規格と申すか。
ま、お前の中ではそうなんだろうな。
charとwchar_t以外で突っ込めて嬉しいのって何だろう UTF-32とかUTF-9とか、charやshortのtypedef突っ込む用途あたりか?
むしろunsigned charを突っ込みたいところ。 なんでcharがsigned charと異なる処理系定義型 なのか理解に苦しむ。
>>258 そう言うの参照するまでもなく、ISO規格の中で一般にSTLと呼ばれるライブラリは定義されてる
ただそこでは全てひっくるめてC++ Standard Libraryとなっていて、Standard Template Libraryとは呼ばれて居ないとかだと思う
STLそのものがデファクトだ云々だってことではなく「STLは俗称、使う奴は死刑」って原理主義者が騒いでるだけ
探せば別の規格文書の中でSTLって呼び方してるかも知れんけど、探してまで相手する話じゃないよ
>>271 ISO/IEC 14882:1998/2003をググって出てくるPDFのなかの17.3.1だと
コンテナと文字列は別のカテゴリ扱いらしいから所謂コンテナではない
って事になると思う
ただそれとは別にキャラクタコンテナって単語も使われてるが、これはcharとかwchar_tの事っぽいw
ていうかこのPDF丸上げして大丈夫なのか?ニューヨーク大学さんよ
>>274 歴史的経緯とかそういうのじゃね
文字列扱わないなら「vectorでよくね?」ってなる
>>269 s[s.size()] で '\0' 出てくるよ。
>>275 >「STLは俗称、使う奴は死刑」って原理主義者が騒いでるだけ
そうかなあ
STLがISOで定義された規格であるかのように
説明してたら突っ込まれるのは仕方ないんでは
Wikipediaの説明とかおかしいし
それにSTLがISOに入る前の元の定義をこえて
>>15 のように拡大解釈する人が多くいるように
人によって範囲が違うわけで、
>>16 のようなレスを付けたくなるのも気持ちはわかる
>>277 うそつけ。
と思ったらその通りで、さらに2011で
data()の仕様が変わっていたでござる。
>>275 「一般にSTLと呼ばれる」が、ただの思い込み、勘違いだとは思わないのかね?
現状でも「STL」って言っただけじゃ「どこまでを指して言ってるの?」と疑問に思われる
ことがあるのが現実だし、その可能性は今後もどんどん高くなる一方だ。
「C++標準ライブラリ」あるいは単に「C++の」と呼ばずに敢えて「STLの」なんて呼ぶ
必要性もメリットも無いだろ。
>ISO/IEC 14882:1998/2003をググって出てくるPDFのなかの17.3.1だと >PDF丸上げして大丈夫なのか?ニューヨーク大学さんよ お巡りさんこいつです。
Effective STL読んでから言え
STLという言葉を用いる人のおつむが 弱く、キレやすいいことは このスレでよくわかりました Effective STL何ソレうまいの?
やっぱりモヒカン族やなぁ…
>>278 > STLがISOで定義された規格であるかのように
どこからどこまでSTLって定義が含まれてないだけで、そう呼ばれるものは一式含まれている。
定義が無い/定義が失われた言葉に一々そんな言葉は無いとか言って回るのは只の原理主義。
書いたの俺じゃないけど
>>236 のとおりだな。
>>280 > 「一般にSTLと呼ばれる」が、ただの思い込み、勘違いだとは思わないのかね?
STLの範囲がどこまででも結局C++ Standard Libraryの一部だって言ってるだけ。
そしてC++ Standard Libraryに内包されないライブラリをSTLと呼ぶとは思わない。
STLの定義がどこまで、は何の関係もない。
> 敢えて「STLの」なんて呼ぶ必要性もメリットも無い
言いたいことは判るが、便利な略語としては必要性もメリットも有る。
C++だと言語全体を含むし、C++SLとか書いてもハァ?だし、標準ライブラリとか一々書くのも長い。
良い言い方ではないにしても、より良くて普及してて便利な言い方が有るわけでもなし
>>281 これがドラフトかどうかは知らんけど、ドラフトとかは大丈夫なんじゃね?
>>283 弱いのはともかくキレてる奴いたか?
というか、俗語に「~って何?」って喧嘩売る奴も大概だって気づけ
弱い者いじめ同然でただただ下衆い
>>284 これはDIS(ドラフト)でなく正式版ですよ
>STLの範囲がどこまででも結局C++ Standard Libraryの一部だって言ってるだけ 長文乙。 君がそう考えているものをそう考えない人がいるから反発されるのであって、 自分の考えを根拠なく繰り返したところで会話は成立しないぞ。
古い規格は無償公開されてるのはよく見るからそういうやつじゃね
>>284 >必要性もメリットも有る
必要性?
・STLは標準ライブラリの一部をさす
・その範囲は明確出なくどうでもいい
この状況下で敢えてライブラリをSTLと言う
必要性が「長いから」なのか?
最近のレスでは逆に冗長なのだが
「stlのstd::equals」→ただのstd::equalsだろ?
「stlのstd::maxが」→ただのstd::maxだろ?
「stlに複素数あるけど」→標準の複素数クラスだろ
「stlのstring」→stringでわかるだろ
「VS2010のSTLだと」→VS2010だと、でいいだろ
「STLのiostreamを」→iostreamでいいだろ
「STLつかうと一気に実行ファイルサイズが10倍」→printfをiostreamにしたんだろiostreamと言え
「STLマンセ~」
なんかもう、STLが馬鹿の象徴に思えてならない
STL信者はおつむが弱いからね 都合のいいように訳してしまったんだね
>>284 > C++だと言語全体を含むし、
言語全体のことなのかライブラリのことなのかわからなくて困る場面がよくわからないな。
組み込み配列とstd::arrayとか?そういう場面で「STL」がなんの役に立つのかもわからん。
> 標準ライブラリとか一々書くのも長い。
> 良い言い方ではないにしても、より良くて普及してて便利な言い方が有るわけでもなし
短くしたいなら
>>289 の言うように何もつけなくていい場面が多いし曖昧な場面でもstd::を
つければ十分で正確。
逆に、C++標準ライブラリの話をしてるときに「STLの」と限定を付けて呼ぶことが役に立つ
具体的な例を何か挙げられる?少し考えたけど思いつかない。
アルゴリズムだけは別だな 「STLのアルゴリズム」と言わないとすっきりしない
C++プログラマ雑魚杉
ごめんね(´・ω・`)
std::arrayの使いどころがわかりません 何に使うのでしょうか?
逆に生配列を何のために使うのかがわからない
二次元配列とか std::array 使うとかなりうるさいよね 配列を std::array のシンタックスシュガーにすればいいのに
>>297 ・コンストラクタやoperator=で全体のコピーができる配列
・ムーブはできないけど要素数が固定のvector
が欲しいときに使う
コンテナ要件も満たしてんだよなarray
303 :
片山博文MZパンク ◆0lBZNi.Q7evd :2013/05/21(火) 01:16:23.66
仮想関数を関数ポインタみたいに使いたい。ナルかどうか確認したり、関数のアドレスに直接アクセスしたりしたい
>>287 「C++の規格範囲に含まれない物をSTLと呼ぶ奴が居る」とかならともかく、自分の発言の解釈は自分の考えるもので構わんだろ。
他人の発言を俺々解釈してから否定して、「お前の発言は俺による俺々解釈が正しいから間違い」とか言い出すとか訳わからんわ。
>>289 > 必要性が「長いから」なのか?
通りが良い場合もある。範囲が明確でなくても文脈で伝わることはあるし、現に使われている以上効用はあるんだろ。
メリットゼロだと思うならなぜ使われていると思ってるんだ。
> 最近のレスでは逆に冗長なのだが
STLという言葉を使うと必ず冗長性が減るとか、STLって言葉を使う馬鹿が居ないなんて誰も言ってないのに。
ってことで後は蛇足だが…
> VS2010だと、でいいだろ
大抵は良いにしても、(その発言の場合も違うのだろうけど)STLportとかと比較したい場合は良くない。
> printfをiostreamにしたんだろ
それ以外にも使ってないと10倍行くことは珍しい気がするが、原因を憶測で限定するより余程マシ。
iostreamにしてもC++ Standard LibraryのTemplateなLibrary使った結果なわけだからそのまんま。
>>292 > 言語全体のことなのかライブラリのことなのか
不勉強で生データ構造使って苦労してる奴に簡潔に助言するなら
「C++の標準ライブラリのコンテナ使え」
「C++のコンテナ使え」
「標準ライブラリのコンテナ使え」
「std::のコンテナ使え」
「コンテナ使え」
「STLコンテナ使え」
検索キーワードとしても使い勝手が良い。
> C++標準ライブラリの話をしてるときに
その前提だと俺も思いつかないな。その前提だと。
長髪でスタイルのいい人がorzしたらSTLになる
orzはどう見ても小学生の体型
>自分の発言の解釈は自分の考えるもので構わんだろ いや止めてくださいマジで
ウンコ出る…ファイナル
>>308 解釈した結果に異論が有るならちゃんとそこポイントして言えよ。
自身の発言への解釈・補足行為自体にケチ付けるとか意味わからんわ。
>>311 >自身の発言への解釈・補足行為自体にケチ付けるとか意味わからん
お前のオナニー用語で他人とのコミュニ
ケーションを試みないでください
あとSTLを連呼すると初心者が真似して
iostreamとかstringとかcomplexとか
元々のSTLの範囲を逸脱した誤用が
散乱するので不愉快です
>>309 プログラム読んでたら気のせいかバキュームカーの匂いがしてきた
C++キモすぎる
お前の親ほどじゃないさ
>>312 どの用語か具体的に書けよ…と思ったが別にいいや
原理主義者にとっては世の中オナニー用語塗れだったりしそうだしキリがねぇ
後半は分かるけど、なら最初からそれだけ言ってりゃいいんじゃねぇの?
変な煽りを入れるから斜め上の斜め下の斜め右みたいなアホなことになる。
>>310 マジレスすると
ウ○コが出るんじゃなくて
ウ○コのデリケートと思われ
間違えた。デリゲートね
下痢gate、下痢の門、と来ればanalか
1. Turn in: hw5.cpp This assignment uses functions to process arrays. In main, define an array called original with 20 integer values. Define two additional arrays of size 20 called positive and negative. Fill the original array by prompting the user to enter values until they either fill all 20 elements or enter an 999. Write a void function called split() that reads the array and puts all positive values (including zero) into an array called positive, and puts all negative values into an array called negative. split() will have three integer array parameters. Write a integer function called sortArr() which sorts the two arrays into ascending order. sortArr() will have one integer array parameter, and will return the count of the array. Write a void function called display() that will print the array out to the screen. display() will have one integer array parameter. In main, display a message telling the count value for each array in a meaningful message. だれか頼む
お前はプログラミングをやめたほうがいい
1. hw5.cppに寄ってみよう。この割り当て(代入)は、配列たちを処理するために関数を使う。 mainにおいて、20個の整数値を持つoriginalと呼ばれる配列を定義せよ。 positiveとnegativeと呼ばれる、サイズが20の追加的な2つの配列を定義せよ。 ユーザにすべての20要素か、999を入力するまで、original配列を埋めよ。 split()と呼ばれるvoidの関数(その配列を読み、全ての正の値(ゼロを含む)を、 positiveという配列に置き、すべての負の値をnegativeという配列に置く)を書け。 split()は、三つの整数配列の引数を持つものとする。 sortArrと呼ばれる整数関数(二つの配列を昇順に並べる)を書け。 sortArr()は、一つの整数配列を持ち、配列の和を返すものとする。 display()と呼ばれるvoid関数(スクリーンにその配列を出力する)を書け。 display()は、一つの配列引数をもつものとする。 mainでは、メッセージ(それぞれの配列について数えた値を、 意味のあるメッセージで伝える)を表示せよ。
いやいや、読めるのは当たり前でしょ・・・ 読んだ上でどうしたらいいかが質問の内容で・・・
327 :
167 :2013/05/22(水) 19:16:49.57
マジメに疑問なんだけど、 開発者全員にvirtual関数の不使用を徹底するの大変!ってプロジェクトは、どんな規約なら守らせられるんだろう それともそういうプロジェクトでは規約というものが有名無実化してるのか?
>>327 ソースコミットメントに、条件でvirtualがあったら不許可にすればOK
#define virtual
virtual void shukkin(void) = 0;
virtual不使用ってどんな拷問だよ
キーボード入力をフックして、virtualって入力しようとしたら部屋中に響き渡る警告音を鳴らせばいい。
全く苦にならんだろ
>>327 iostream(cin,cout,cerr)の使用禁止
>>327 >virtual関数の不使用を徹底するの大変!ってプロジェクトは、どんな規約なら守らせられるんだろう
マジレスすると質問内容が無毛。
不使用の目的が不明なので
答えようがない。
「そういうプロジェクト」も
どういうプロジェクトなのか不明。
336 :
167 :2013/05/22(水) 20:20:10.24
誰が得するのか分からない謎規約を 徹底させるノウハウのあるところなら、 virtualの不使用を徹底させるくらい 造作もないことではなかろうか
強制virtualなJavaを使ったら発狂するのかな
338 :
167 :2013/05/22(水) 20:24:17.87
エロいなちょっと
virtual不使用とか誰得規則だし
>>342 「実行時に呼ばれる関数が変わって
デバッグに苦労したので仮想関数と
C++は糞」
と暴れた奴が以前いたような
C#のようなoverride/newがないのが糞なのはまあ確かだが C++11のoverrideも糞いし
>>344 C#のoverrideが糞でなくて
C++のoverrideが糞な具体例を
教えてください
>>345 C++の派生クラスでのvirtualは必須ではないから
派生クラスにvirutalを書かなくても仮想関数になる
virtualを書いてなくても仮想関数かどうか気にしないといけないという糞仕様
C++11でもvirtualもoverrideも書かなくてもやはり仮想関数になる
あくまでoverrideが付いてるなら仮想関数でなければならないだけで、
仮想関数にoverrideを付けなくてはならないわけではない
強制されないoverrideとか糞にも程がある
ジャバてバーチュアル強制なんか プライベートメソッドはどうしてるんだろう 知らぬ間にオーバーライドしたら困るよ
C#のようにoverride/new強制なら 事故が一切起こらない 後発言語なだけに研究されている
事故ってなんだ
原発事故の事だよ あれもくだらない理由で発生するだろ
仮想関数だと思わなくて同名の関数定義してしまうとか
そこで、interfaceですよ! C#のそれは、C++のvirtual並に面倒なことよ
std::stringはなんで.c_str()でC文字列を返す仕様なの? キャスト演算子がオーバーロードされてれば楽なのにって思うんだけど・・・・・・
バカほど暗黙キャストしたがる
そこでC#のimplicit,explicit登場
>>354 キャストに頼ってちゃprintfに使えないからじゃない?
まあCStirngみたいにトリッキーな実装すればできるけど
>>356 explicit はc++でも普通に使うけどな
次はスマポはなんでget()が要るんだとか言い出しそう
なぜコンストラクタはexplictがデフォルトでなかったのか
vector<T> vVal; ~ for( auto& Val : vVal ) { ・・・ } 上記の場合、順方向トラバースになりますが、 逆方向トラバースはrange-based forでは書けないのでしょうか??
なぜ
>>68 のコピペを
コピペ荒らしスクリプトか?
>>361 >>109 の「begin-expr」はクラス型の場合
__range.begin()
と決まっているから、
begin()が逆のイテレーターを返す細工が必要。
つまりそのままではできない。
wcsncpy_sについて教えてください。 今、次のようなコードがあるとします。 wchar_t * src = L"aabbcc"; wchar_t dest[3]; size_t lenToCpy = 2; wcsncpy_s(dest, 3 * sizeof(wchar_t), src, lenToCpy); dest[6] = L'\0'; "aa"だけコピーしたいんですけど。 使い方はこれであってますか? なんか、wcsncpy_sでsrcの長さ(この場合6文字xsizeof(wchar_t) = 12バイト)だけdestが0xfeで埋められてから len文字分だけコピーされているように見えます。@VS2008 なのでdestでヒープが壊れるってデバッグ終了時に言われるんですが。。 (この例ではdestはローカルだけど、実際にやってるコードだとヒープです。)
コピペやめろクソ虫
>>365 >使い方はこれであってますか?
少なくとも「3 * sizeof(wchar_t)」は
APIの説明にあるnumberOfElements
ではないぞよ。
using namespace std; はできるだけ書かずにstd::cout, std::endlのように書いていったほうが良いと考えておkですか? スタティックなインポート?に恐怖を感じます
wchar_t dest[3]; dest[6] = L'\0'; なんだこのUNKOコードは…
>>369 少なくともヘッダには書くなよ?
スコープに気をつければ関数内で使うのはアリかと
>なんだこのUNKO おまえが言うな
>ヘッダには書くなよ ヘッダって何ですか?
すみません早速質問です。 class Test { public: Test getThis() { return this; } }; のように自身を帰したい場合C++ではどのようにかくのですか?
>>374 Test &getThis() { return *this; }
*thisを返すんじゃ むぎのように*thisを返すんじゃゲンよ
コピペやめろクソ虫
仮想関数を持ったスーパークラスのポインタに派生クラスを入れて、 仮想関数を呼び出したいんだけどどうすればいいでしょうか? class SuperC{ virtual bool func()=0; }; class SubC{ virtual bool func(){ 何らかの処理 } }; int main(){ SuperC* super=new SubC(); return 1; } インスタンス化する予定はないのにSuperCのポインタは宣言できませんって言われる
>378 SuperCは純粋仮想関数を持ってるから抽象クラス だからこれを継承してそれをポインタとして使わないとエラーになるよ
>>373 > >ヘッダには書くなよ
>ヘッダって何ですか?
恐らく「いわゆるヘッダーファイル」のこと。
C++のheaderとは関係ない。
C++だけの話じゃないんでここで聞いていいかわからないんですけど メンバ関数ってなんでわざわざ struct Obj { void Method(void); }; Obj obj; obj.Method(); っていうふうにドットつけて書くんですかね? struct Obj { void Method(Obj & obj); }; Obj obj; Method(obj); みたいな仕様ではダメな理由でもあったんでしょうか?
>>384 オブジェクト指向言語の記法のはやりだったから
早速のご回答ありがとうございます
コピペに答えんな死ね
shared_ptr<IHoge> make_hoge(int id) { switch(id) { case HOGE0: return shared_ptr<IHoge>(new Hoge0); case ~ } } 上のようにポリモーフィックな返り値を返す関数があるんだけどnewのコストを削りたい アロケーターを使う他になにかいい手はないですか? 標準で可変長のスタック領域を扱えたりすると便利なんですが…
>>391 >ポリモーフィックな返り値を返す関数があるんだけどnewのコストを削りたい
むりです
質問 OpenGLだけど const char* pVer = glGetString(GL_VERSION); printf("version is %s¥n",pVer); これだとOKで printf("version is %s¥n",glGetString(GL_VERSION)); これだとダメだったんだが、もしかして返り値の寿命が関係してるの? だとすると寿命はどう捉えるべき?
>>393 >返り値の寿命が関係してるの?
いいえ
>だとすると寿命はどう捉えるべき
リファレンスに static
とかいてありませんか?
マルチスレッド関連の問題ではなくて
> glGetString(GL_VERSION) 何て糞なシグネチャーなんだ 設計した奴はJavaに転職するか死んだ方がいい
むしろJavaっぽい
STLのmapで、Keyによる検索ではなく、並んでいる順のインデックスで値を取ってきたいのですが、 現状では、begin()で先頭イテレータを取得し、取りたいインデックス回だけ++しています。 もっと一発で取れるようなエレガントな書き方はないでしょうか?
std::advance(i,10);
400 :
398 :2013/05/23(木) 23:47:44.21
>>399 じつにエレガント!!
あざーす!!!!
402 :
デフォルトの名無しさん :2013/05/24(金) 03:07:42.11
プログラムで hoge-util.c というファイルがどんどん巨大化していくのだけど どんな名前つけてファイル分割すればいいですか? hoge-util-base.c hoge-util.c とか?
>>389 pure virtual destructor か、thx
>>401 そういう話だったの?
「STLって何」的な規格上の突っ込みと理解したけど。
>>403 super_unko d-tor
スーパーうんこ、出たーブリブリ
>>402 原則1クラス1ファイルが良いと思います。
クラス名をファイル名にするのが良いかと(^^)
あとutilityという名前のものは、
適切な概念または機能分類に
設計を見直した方がよいと思います。
>>404 だとしたらCの前に会話のお勉強だなって返すだけじゃね?
モヒカン族をモヒカンするみたいであれだけど、バカの一つ覚えにはこれで良い
数字を入力するプログラムで下のように書いたとき 「-1」と入力すると”数が正しくありません~”とでて次の”数を入力してください->”に戻るけど 「a」と入力すると”数が正しく~”と”数を入力~”がずっとでつづけます なぜなんでしょうか? while(1) { cout << "数を入力してください->"; cin >> num; state =cin.rdstate(); if (num <= 0 || state != std::ios_base::goodbit){ cout << "数が正しくありません。最初に戻ります。\n" << endl; continue; } … }
>>408 ストリームにはエラーフラグというものがあってな、一度入力(出力)エラーになると
clear() するまでその後の操作は全部即エラーになるんだよ。
エラー復帰してないから エラーを clear() してから a を読み捨てないと、 永遠に先まで読み進められない
>>412 AA荒らしだと荒らし報告されるので、一見質問を装って過去の質問をコピペする
荒らしに切り替えたと思われる
削除人も指摘してるけど、荒らしにレス付けちゃうと、削除依頼を出してもそこは
削除されない
まず過去ログを検索して、そのURLを貼って行くと削除依頼しやすい
知らん顔して回答してあげればいいんよ そうやって雰囲気を保ちつつ真の質問者がめざめるその日を待つべし
継承元のoperator=を使用したい時は、継承したoperator=の中でキャストして呼ぶしか無いでしょうか? CBaseAを継承し、CSpecとします。 CSpec CSpec::operator=(const CSpec &obj ){ CBaseA *p1 = dynamic_cast <CBaseA *> ( this ); CBaseA *p2 = dynamic_cast <const CBaseA *> ( &obj ); if( (p1 != nullptr) && (p2 != nullptr) ) *p1 = *p2; } 今はこのようにしています。
using
>>417 キャスト使うならこうだろ
static_cast<CBaseA &>(*this) = obj;
| / ノ} / |/  ̄ /\ \/ | 〉 } ---┬ ァ'⌒ヽ ̄ ̄ ̄ ̄ ̄` 、 ∨ i::::::::::::{ / __≧x │ | >x { . /⌒V ≪ ̄ f}j\ミト} ノ j xf斗≦^}7 . { i⌒ヽ ` __/ ィf´ fj ̄\ / | |/^{  ̄ | \__,ノ/⌒! ∨ ({ } n_ノ  ̄ /⌒リ \\ ` ̄} ̄l ̄l ̄l ̄`ヽ ハ} j/ ー| ∨ ̄ ̄ ̄ ̄ ` く У /// . |∧ V⌒ヽ._______j/ /ー' . | iヽ ∨| { / ′ . | | ‘, Vー‐ーー-∧/ / . | | , \____ / ィ __| | ‘,  ̄// _| ̄ ̄\ ー‐---く /\ ___/ / | \ / / __{__)、_ / / ` | / ̄ ̄ / | } . / / \_| / __| |\__ /┌┴─  ̄ ̄ ̄ ̄\ ̄ ̄ } \ \ . | (___) \__ \
422 :
デフォルトの名無しさん :2013/05/25(土) 16:51:38.56
コンストラクタ、デストラクタって 処理内でなにもしなくても書くべきなの? 何もしない場合、出来れば書きたくないんだけど
>>422 そう思うんなら書かなきゃいいだろ。
「書くべき」という理由が何かあってその妥当性がわからないということなら、
その理由を挙げて相談してくれ。
>>422 書かなくてもコンパイル時に自動で空のコンストラクタ&デストラクタが生成されて、
実行時にもそれらが自動で呼ばれると聞いたことがある。
趣味グラマの俺は必要ないときには書かない方針にしているが今まで問題が発生したことはない。
425 :
422 :2013/05/25(土) 17:14:28.61
>>424 自動で書かれるのは知ってる
仕事で書く場合、書いた方が良いのか聞きたい
ある程度規模が大きくなったら書く意味がある 「あれ? このクラスはコンストラクタ持ってるの? 持ってないの?」 という無駄を省ける つまりインデックスがあれば全検索の無駄を省けるのだ(キリッ
書く必要は全くない。
>インデックスがあれば全検索の無駄を省けるのだ(キリッ ソースコードがインデックスってのがウンコだな。
| / ノ} /
|/  ̄ /\ \/
| 〉
} ---┬ ァ'⌒ヽ ̄ ̄ ̄ ̄ ̄` 、 ∨
i::::::::::::{ / __≧x │ | >x {
. /⌒V ≪ ̄ f}j\ミト} ノ j xf斗≦^}7
. { i⌒ヽ ` __/ ィf´ fj ̄\ /
| |/^{  ̄ | \__,ノ/⌒!
∨ ({ } n_ノ  ̄ /⌒リ
>>428 は馬鹿
\\ ` ̄} ̄l ̄l ̄l ̄`ヽ ハ} j/
ー| ∨ ̄ ̄ ̄ ̄ ` く У ///
. |∧ V⌒ヽ._______j/ /ー'
. | iヽ ∨| { / ′
. | | ‘, Vー‐ーー-∧/ /
. | | , \____ / ィ
__| | ‘,  ̄//
_| ̄ ̄\ ー‐---く /\
___/ / | \ / / __{__)、_
/ / ` | / ̄ ̄ / | }
. / / \_| / __| |\__
/┌┴─  ̄ ̄ ̄ ̄\ ̄ ̄ } \ \
. | (___) \__ \
ウンコなのはインデックスじゃなくてマリア先生だろう。
>>426 ヘッダ1つ検索で引っかからなければデフォコンだけってことだから
別に全検索なんて
434 :
デフォルトの名無しさん :2013/05/25(土) 19:35:42.69
なんだアニメネタか こういう関係ないところでいきなりアニメネタ出すからアニヲタはキモがられるんだろ 普通の大人はそういう子供の観るものに慣れてないんだからやめろよ
>>422 なにかする必要があったけど書き忘れたというのではなく
最初からなにもしないということをソースコードレベルで明らかにしたいなら書いとけ
明示すべき事情があるなら明示しろってだけだし、ベテランじゃなくてもそういうだろ デストラクタにvirtual付ける付けないってのはそれとは別でやっとくべきだが
ソースに書く、仕様書も書く:普通の人 ソースは省略、仕様書に暗黙の定義を書かない:ゆとり ソースは省略、仕様書は暗黙の定義を書く:アスペ ソースに書く、仕様書書かない:普通の低脳 ソースは省略(暗黙)、仕様書何ソレ:困ったプログラマー
>>440 つまりお前は
世の中の人間は普通かそれより劣る人間しか居ない
と考えてる
>>442 全てのパターンを網羅して
その中で最も評価が高いのは「普通」になってるよな?
>>440 つまり世界はみんな俺より低能だと言いたいんだろ?ww
分かる分かる
お前も大変だよな
ソースも仕様書も書かない:俺
このスレの住人の分類 ・モヒカンアスペ 規格を愛し「stlって何ですか?」「そのヘッダとやらはC++のheaderと何の関係が?」というどうでもよい突っ込みを入れる上級者。 ISO/IEC 14882が好きでたまらない ・嵐 意味のないAAや過去の質問を貼り付ける初級者。 過去スレを保存していることから、C++が好きでたまらない ・糞コテ 匿名の2chで自己主張が激しく、BASICが最高と信じるなど宗教色が強い中級者。 ISO/IEC 14882が好きでたまらない ・江○添取り巻き ある個人のブログのネタを投下することに喜びを覚える中級者。 ISO/IEC 14882が好きでたまらない ・通りすがりのゆとり 質問をするが「自分で調べる」「自分の環境で試してみる」「問題を再現する最低限のコードを示す」という考えに乏しい初級者。 C++がカッコ良いと考え、C++が好きでたまらない ・マッチポンパー 規格上どうなのかを知るために、通りすがりのゆとりのふりをしつつ質問を投下するキチンな中級者。 ISO/IEC 14882が好きでたまらない(読んだことはない) ・クレーマー 長年の経験に基づき他人に重箱の角をつつく指摘をすることに快感を覚える上級者。 主にC++よりも日本語の指摘に執着する。 ISO/IEC 14882が好きでたまらない。 みんなC++が好きでたまらない
>>449 アニヲタのコピペだろう
忍法のレベル高けーな(ダメ人間)
・糞コテ 匿名の2chで自己主張が激しく、 ideoneを開いてこのスレをF5連打する。 ISO/IEC 14882:2011が好きでたまらない。 最初と最後が同じだろ。
ちょっとしたGUIツールを作るのにC#なるものが便利だというので触ってみたが、吐き気がした。 あんなの書くぐらいならリソースエディタとC++でWinAPI叩いてるほうがよっぽどええわ。
>>454 GUIツールをVisual C++で作るのは
他人の迷惑です
C#にしといてください
>>455 今でこそ.NETのフレームワークは大半のユーザPCに入ってるけど、そういうの要求されるのも迷惑だからVC安定だろ
MSVCRTとかは最悪添付すりゃいいし、何が迷惑なのかさっぱり分からん
C#というか.NETは文化がちょっと違うから、受け入れられない奴が居るのは仕方ない
ツールでC++がC#に勝てるとこなんて 微塵も無いと思うけどな Windows限定なら、携帯でメール使わずに 直筆のハガキで文通するレベル
459 :
デフォルトの名無しさん :2013/05/26(日) 00:31:56.98
>>454 使い捨てのツールなら処理速度は重要でないし
メモリ破壊や不正メモリアクセスのない言語は
メリットあると思うけど。
C++スレで他言語の悪口を遠吠えするのは構わないけど
どの辺がC++と比べて悪いかぐらい書けよカス。
普段C++で仕事してるから、ツール作るときもC++に C#のフロントエンドって組み合わせで作ってるな
>>458 .NET入ってなくても動くのは利点だろ。
初回起動時のアセンブリ生成動作が不要なのも一応利点だし、
生成されたキャッシュが残る気持ち悪さが存在しないのも利点。
あと、逆汗の品質がC++の方が低いからイジられにくさが誤差レベルで上昇する。
実行速度は普通に書く範囲では最適化かかるから大差ないだろうし
640の言う利点もC++には無いから、双方それなりのメリットとデメリットが有る。
ユーザ側の迷惑で見るなら….NETのランタイム要求は回避不能な迷惑。
バグによるトラブルはC++でも実装次第だし、実装次第では.NETでも迷惑。
>>460 文化が肌に合わないって言ってるだけにしか見えないし、聞き流せば良いだろ。
むしろ、どの辺がC#と比べて悪いかも書かない455や458にも突っ込め。
最新じゃないけど、vista以降なら標準で入ってるな
>>422 たしかcppの新規格だと空のデフォコン書かないのは危険と聞いた
詳しくはしらないが
>>464 >新規格だと空のデフォコン書かないのは危険と聞いた
いえ、そんなことないです
ランタイムってなんですか? 実行時?
>>467 実行時ライブラリを低脳が略した言葉。
だったはずだけど.NETの場合その意味を逸脱してるね。
だからもうDLL=ランタイム()でいい。
中身よりファイル形式。君の周りにもXMLガーとか
CSVガーとかよくいるだろ。OSもランタイム
>>466 別途ダウンロードする必要があるし
インスコの手間とがかかるだろ
このスレの住人の分類 ・モヒカンアスペ 長年の経験に基づき他人に重箱の角をつつく指摘をすることに快感を覚える上級者。 主にC++よりも日本語の指摘に執着する。 ISO/IEC 14882が好きでたまらない ・嵐(あらし) 意味のないAAや過去の質問を貼り付ける初級者。 過去スレを保存していることから、C++が好きでたまらない ・糞コテ 匿名の2chで自己主張が激しく、 ideoneを開いてこのスレをF5連打する。 ISO/IEC 14882とKUSOが好きでたまらない。 ・江○添取り巻き ある個人のブログのネタを投下することに喜びを覚える中級者。 ISO/IEC 14882が好きでたまらない ・通りすがりのゆとり 質問をするが「自分で調べる」「自分の環境で試してみる」「問題を再現する最低限のコードを示す」という考えに乏しい初級者。 C++がカッコ良いと考え、C++が好きでたまらない みんなC++が好きでたまらない
C++=キチガイ
最高の褒め言葉だケ。
474 :
472 :2013/05/26(日) 11:27:47.44
そういや、外人プログラマは毛むくじゃらな印象が強いなw
C++プログラマ=メモリ支配キチガイ
C++使いは「やりたいことを実現するために コンピューターとプログラミング言語が 存在する」 ということを忘れて メモリ操作と天ぷらオナニーばかりしているから どうしようもない
ぶっとい天ぷらんぎもっぢいい~
ランタイムという単語だけではラインタイムライブラリと文字通りの ランタイム(実行時)の2つを文脈次第で読み替えるケースがある。 個人的にはライブラリは明確に「ランタイムライブラリ」と言うように している。単にライブラリと言うことのほうが多い。 コンパイルタイムとランタイムの意味の違いは多くの人がわかって いるようでわかっていないので一度は考えてみるべきこと。
プログラム始めたばかりのとき、ランタイムライブラリのことを単にランタイムと呼ばれることにとても困惑した。
>>476 意味わからん
C++よりもC(もしくはその範囲内)で書く方がはるかにメモリを意識せねばならない
C++専門プログラマなど、メモリ管理に関しては大概RAII手段に丸投げの素人
C++=MSシンパ
484 :
422 :2013/05/26(日) 18:47:24.77
結局、書いた方がいいの?
ゆとり言語のC++と漢の言語Cは全然違う言語 C++はゆとり化しすぎでキチでゆとり・へたれな奴用になった
C++はゆとりではないだろう。
他の言語が得意とする領域をCの古いやり方で
言語拡張して誰特な感じではあるけど、
ヘタレでもゆとりでもない。
>>484 書くことで不要な争いを避けることができるから
暇なら書いておくのが吉。
なにもしないコンストラクタってなんだろ メンバ変数ある場合でも何もしないの?
>>487 親クラスと自分のメンバーについて
デフォルトコンストラクターを持つものを初期化します
他(intなど)は何もしません
>>488 嘘をついてはいけない
intなどのPOD型も0初期化される場合とされない場合がある
A a; ← 0初期化されない
A(); ← 0初期化される
A* p;
p = new A; ← 0初期化されない
p = new A(); ← 0初期化される
>>488 >デフォルトコンストラクターを持つもの
の明示的な初期化を記述してかつ
>他(intなど)は何もしません
を明示するためにコンストラクタは書いてちょーだい
>>489 みたいな中途半端な知識がスレを荒らしてる
とPODも初期化されることを知らない488でした
struct A{ int i; A(){}; }; 空コンストラクタのせいでPODじゃなくなるだろ 無条件に書くとか余計なことするな
>>493 何言ってんの?
テンポラリオブジェクトの作成だぞ
デフォルトコンストラクタだけ持つのはPOD型だが何ほざいてんだ
ほらね 知識を自慢したいだけの自己顕示欲馬鹿が参入
なんであなた達はプラプラを使うの? 罰ゲームなんですか?
デフォルトのデフォルトコンストラクタだけ持つのはPOD型だが 自分で定義したデフォルトコンストラクタを持つのはPOD型ではない
またseikyouが暴れてんの?
>>499 ↑荒らしにかまってスレを荒らす馬鹿登場
501 :
488 :2013/05/26(日) 20:44:40.36
>>489 知らんかったです
value-initializeって仕様ですかね?
つまりこういうことですね 何が何でもキレイで明確にしたい派 struct A{ int i, j; A() : i(), j() {} }; ゼロ初期化しなくても良いけどコンストラクターだけ明確にしたい派 struct A{ int i, j;//不定 A() {} }; POD最高! ()でゼロに初期化する自由があるぜ派 struct A{ int i, j; }; A a1; new(&a1) A(); A a2=A(); A a3;//不定
どうでもいい派
A a1; new(&a1) A(); はこの場合はデストラクタが空だからいいけど、 意味のあるデストラクタが存在したら危険だかんね
まだ実用性のない議論をしているのでありました
>>504 2回もコンストラクトしてる時点でネタだろ
POD限定でも引くわ
全く初期化されないという意味では 最初のはコンストラクトされているとは言えないな
POD型はtrivially destructibleだから別にデストラクタ呼ばなくても再構築していい
>>507 default-initialize(8.5p7)が完了して
オブジェクトが生成されてるというのに?
>>485 C++でゆとりなのは、こんなコードCでいーじゃんってのしか書けない奴でしょ?
使いこなせばコードの見通しが非常に良くなる。メモリ管理もC++はCと大差ない。
そこで A a4{}; の登場です。 ただしVisual C++では使えない。
>>509 初期化に1バイトのマシン語も生成されないという意味だ
>>512 ↓ 初期化でなく破棄の例ですが
途中の3行はマシン語生成されないので
気にならない人なんですね
struct A {double v;} a1;
a1.~A();
a1.~A();
a1.~A();
new(&a1) A();
イエスマム。 マシン語生成されないでので、 複数回デストラクトではありません。
キモいけど別に合法だよね
割とマジで俺の知らないことばかりw 俺みたいのがプロジェクトに一人いるだけできっと酷い事故に繋がるんだろうな。 まあ、お前らは俺がいないことに感謝するんだな!感謝が足りないと参加しちゃうぞ!
>>513 みたいに
きもいコード書く奴がみんなの迷惑いだから
518 :
デフォルトの名無しさん :2013/05/26(日) 23:54:46.35
>>510 >メモリ管理もC++はCと大差ない。
ちょっC流のメモリ管理とはスタック上やデータセクションに固定長のデータ領域をとって
溢れないように設計しとくというのがメインなのに対して、
C++流のはヒープ上に動的にとって、データサイズに合わせて伸縮させるとかのがメインなので
差がありまくりなのではありませんか
あと個人的には、C++のどこでも新たに自動変数を宣言できるというのは
当初は理にかなっており便利だと思ったが、
ソースとスタックフレーム内の配置との対応が失われがちで、
いざローレベルなデバッグを開始したときに、
スタックのダンプから変数を大変追い難くしており悪だと思えるようになった
ローレベルプログラミングにはやっぱりメモリとアセンブラが透けて見えるCかアセンブラでないと厳しい 今後ストラウスとラップの吹く笛に訳もわからず踊らされる人間が増えすぎて OSのカーネルがC++で書かれるようになったら漏れは隠居する
この調子じゃC11の普及なんて無理だろうなあ
C++だって透けてみえるよ 抽象化はされてるけど大して変わらん むしろCよりも内部がどう動いているのか把握する事が大事なように思う VM言語(Java、C#等)はさすがにアレレ?と思う事が多いけど便利は便利 しかしこれでOSを書かれたらさすがに遠慮する
522 :
デフォルトの名無しさん :2013/05/27(月) 00:11:07.68
>>516 がせっかく頑張って何か書いてるんだからもうちょっと構ってやれよ
かわいそうだろ
java,C#はドカタ用言語 でも、日本でプログラムやっている奴ってほとんど全てドカタなのに エンジニア用言語のC/C++を使うってどうかしている。 ドカタはドカタ用言語使ったほうが良いのに お前らはC/C++でどのOSの開発やっているの?
FreeBSD系列になんのかなぁ、カスタムされてっから詳しくはシラネ
>
>>524 ドカタって言うか主婦のオバチャンがアルバイトでプログラムしてるもんなーJavaは
C++プログラマーはF1ドライバー。 Javaは大衆車。
>FreeBSD系列になんのかなぁ、カスタムされてっから詳しくはシラネ なんかドカタしてますって感じ
>>466 スタティックリンク版使えば再配布可能ライブラリには依存しなくできるし、
そもそも再配布可能ライブラリは同じフォルダにDLLぶち込んどけばインストールしなくてもだいたいなんとかなる
>>518 >ソースとスタックフレーム内の配置との対応が失われがちで、
最適化掛かってりゃ一緒くたな気が…
>>529 スタティックリンクされようがなんだろうが、ランタイムライブラリはランタイムライブラリじゃねえ?
ランタイムライブラリとは、ある言語をフルセットで使えるようにするために必須のライブラリで、
かつ、その言語自身では書くことが困難な低水準機能を実装してあるライブラリのことを指す、
いや個人的には疑問を感じないではないが、世間一般の慣習的に、、
少なくともスタティックリンクだからランタイムライブラリではない、という議論はあまり聞かない希ガス
>>531 スタティックリンクでもラインタイムはランタイムってのは当然の話だわな。
話の出発点な462はC#他.NETだとランタイム(と言うより.Net Framework)のインストールが必要だが
C++等はDLLを同梱するなりスタティックリンクしておくことでインストール不要に出来る(利点となる)って話だろ。
スタティックリンクだろうがランタイムはランタイムだが、それの導入をユーザに要求されるかどうかは結構重要。
今時.NETが古いの含めて1個も入ってない環境ってのは珍しいだろうし、
最新版要求しなけりゃ大体大丈夫ってな話では有るんだが。
実行時の動的リンク(DLL) と 実行時ライブラリ(ライセンス)
つまり「ランタイム」って言葉を使う人は 皆、キチガイってことで
536 使った
なんか五月蠅いハエみたいのが湧いてるな
>スタティックリンクでもラインタイムはランタイムってのは当然の話だわな。
いえ全然。
>>534 はお疲れですか ?
>>540 C++知らないならレスしないでください
>>531 「ランタイムライブラリとは、ある言語をフルセットで使えるようにするために必須のライブラリで、
かつ、その言語自身では書くことが困難な低水準機能を実装してあるライブラリのことを指す」
長文オナニー乙。妄想は独りでやれよ。
>>529 「再配布可能ライブラリは同じフォルダにDLLぶち込んどけば」
それはやめてくれとマイクロソフトが10年以上言い続けているのにお前と来たら…
C++を叩く奴はMSとかググるとかじゃない?2chの運営とは同志だし アメリカ人以外がネイティブ言語に強くなられると彼らの破産が早まるし
2chサーバーはアメリカ国家機関の中!CIAじゃんww
MSはC++マンセー派
>>545 それは聞いた事がある
2chを読む事によって日本の国内事情はアメリカに完全に把握されているとか何とか
まあ属国だしなあ
>>546 C++をインタープリタにすり替えようとしてるんだろ?
>>548 C++/CLI < .netと融合しようとした
C++/CX < けど、諦めた
早い話がC++をOSプログラマ以外から取り上げようとして失敗しただけだから 可能ならC++を使えるのはMSの社員だけにしたいんだろう
>>547 もっと能動的に利用してるよ。忍法帖とかレベルとか言ってアクセス者を識別し
思想調査、あらゆる嗜好を調べて、自ら煽った極東の緊張で警察国家に出来た暁には
「危険思想の持ち主」は尽く処刑する腹だろ
>>528 ゲーム機だから用意された機材で粛々と作るだけですよ。まぁドカタだね
今はもうアセンブラとか使わないし。そういうところもCモドキで書ける
>>542 crt=C RunTime library
vcはmsvcrt.dll(動的リンク)と Iibcmt.lib(静的リンク)がもともとあって 前者だけOSに取り込まれたから Cライブラリ=ランタイムライブラリ というややこしい図式ができた
そろそろC++の話に戻ろうか
真に受けるなよ
20世紀末に世界の底辺であるブイビープログラマーが Visual Basicランタイムライブラリをランタイムと 連呼し始めてから用語がデタラメな使われ方をする ようになった。 アプリケーションプログラマーが直接 書いてない基本的モジュール全般をさす。
リアルタイム処理のことをオンラインと呼ぶ上司がいてすごく違和感だったんだけど、 オンラインリアルタイム処理という言葉はあるんだね。 オンラインというと、ネトゲみたいなのを思い浮かべちゃうw
560 :
デフォルトの名無しさん :2013/05/28(火) 20:46:50.75
リアルタイムの逆を行くのがバッチ処理、という意味では、当たらずも遠からず 伝送路が膨大なヒューマンエラーに晒されることを意識するという点ではおかしいが
バッチを走らせるときにはフロント系を落として オフラインにするイメージなのかな
>>559 てか、オンライン処理(⇔バッチ処理)で完結した言葉だと思ってた。
オンライン処理って省略せず正確にいうとオンラインリアルタイム処理っていうのか
そっちの方にヘェーっと思ったわw
またwinbase.hでマクロが被った(´・ω・`)
検索してみるとGetCurrentTimeで引っかかってる人結構いるのね しかもこれ無駄に単なる関数の再定義だったりでな ほんとに・・・もう・・・無駄に血圧上がって寿命縮みそう(´・ω・`)
そんな時の#undefですよ……それすら通じないなら名前空間とかで逃げればよくね?
いやいや、普通に名前空間に逃げてるけど#defineさまが相手じゃかなわない 糞カッコ悪いifdef undef endifを書いてwinbaseがうんこなので仕方なくundefしますって注釈も書きました ああ^~はげる^~
bohem gcがnew operatorを上書きしてしまうのだけど 手動deleteできるnewとbohem_newを使い分けできないものなのでしょうか
568 :
デフォルトの名無しさん :2013/05/29(水) 02:30:23.49
「オンライン」「バッチ」 どちらかに○を付けてください。 はぁ?って事はよくある
>>566 貴様のレベルも禿も
ストラウストラップ先生に
まだまだ遠く及ばない
バッチの対義語はリアルタイムだね まあバッチは一括処理である以上、貯めたデータを使ってオフラインで行うことが多いし リアルタイム処理はオンライン上の対象と通信しながらやることが多いから解らんでもないけど
>>571 ダム端末のオンライン的な「オンライン」とかオンラインマニュアルみたいな「オンライン」から来てるんじゃねぇかなあのへんで言うオンラインって
RTOSを知ってると、リアルタイム処理とか言われると、ちょっとピキッとなるな。 やっぱオンライン処理が妥当な気がする。
処理によると思うんだよね。 動画を撮影してる端からエンコーディングしてるのはリアルタイムエンコーディングって言ったほうがしっくりくるね。 逆に銀行のATMでの送金処理なんかはまさにオンライン処理、って感じだし。 他のコンピュータと連携しながら行う処理は、オンライン、オフラインがリアルタイム(?)、バッチ、とかなりの関連性を持ってるよね。 だけどもローカルだけで済む処理だけれど計算量が膨大になって時間と品質のトレードオフになるようなものはリアルタイムかノンリアルタイムかは重要な問題だし。 RTOSで言うリアルタイム、と、これらのリアルタイムがぜんぜん違うものを指してるのはわかるけど。 遅延のことを指してるのか、スループットのことを指してるのか、って感じなのかな。
リアルタイム処理って言ったら組み込み系OSでリクエストしてから 何ms以内にレスポンスが返ってくるみたいなやつのこと。
リアルタイムといったら迅速に応答する必要のある処理全般を指す言葉、を指すもんだと 俺は思ってるから、だいたいみんなの書く内容は当てはまる
処理が投入されてから処理が完了されるまでの時間に「最悪いくらまでには」完了、というお尻が決まっておりかならずそれまでには完了するもののことだろう?確率的な要素がなくて
リアルタイムは一定時間(たとえば0.5秒)毎に何が何でも配下全てのAtomicを確定させるシステム。 オンラインは低レベルなAtomicを(低レベルな外部処理に任せ)除いた残り(DB間の等)部分の同期手法。
たとえば「リアルタイムでエンコ」 と言ったら平均処理速度が 入力のペースより速いこと レスポンスが厳密に規定されるかは関係ないな
リアルタイムを使うソースがごっちゃになっとるがな
だから「ハードリアルタイム処理」っていう用語があるんだけどね これはバッチ処理の対義語としてのリアルタイム処理(=対話型処理)とは区別される
584 :
デフォルトの名無しさん :2013/06/02(日) 18:52:45.88
movl $0xaea4a4af,-0x13(%ebp) これってどういう意味になるんでしょうか?
貴様、ここを何スレだと思っている?
アセンブラスレやろ?
MOV [EBP-0x13], 0xAEA4A4AF gasは転送の向きが逆になる
>>586 Cは高級アセンブラ、とはよく言うけど、C++はどうなんだろう
低級高級言語
プラプラって中途半端だよな
はい次の人
GCCでint64_tが使えないのですけど、インクルードとか必要なんですか?
stdint.h
cstdintですね。 有難うございます。
テキストファイルの全文をゼロ終端文字列としてバッファに読み込みたいんですが 取得したファイルサイズと実際の終端までの長さが異なるのか、ゴミがくっ付いてきます。 ついてはこの原因が何なのかご教示いただきたいです。 バッファをmemsetでクリアしておけば解決するんですが、なるべくなら終端文字の代入で事を済ませたいです。 using namespace std; ifstream ifs; ifs.open("input.txt", ios::in); size_t fsize = (size_t)ifs.seekg(0, ios::end).tellg(); ifs.clear(); ifs.seekg(0, ios::beg); char *buff = (char*)malloc(fsize + 1); ifs.read(buff, fsize); ifs.close(); buff[fsize] = '\0';
環境何なん? Windowsなら終端に0x0aがくっついて来るから削らないといけないよ
テキストエディタによる 律儀にくっつけてくれちゃうのがあるよ
・c++でnew使わずにmalloc? ・readってバイナリ読み込み用だから\0デリミタはつかないのが普通 ・get(buff, fsize+1);じゃだめだっけ?
>>596 問題が再現する環境とファイルを絞って、それでわからなければ、それ全部晒すと何かわかるかもね。
602 :
596 :2013/06/04(火) 00:59:48.19
>>597 環境はWindows7 32bit版 + VC++でテキストファイルはSJISです。
標準出力にはファイル内容以外にヘヘヘヘヘヘヘヘなどのゴミが付加されます。
念のためファイル内容は「a」のみにしメモ帳で保存し直しました。
その場合のfsizeは1,全角の「あ」だと2です。
>>600 コンストラクタ等の存在しない単純な領域確保にはmallocを使用しています。
バイナリで読み込んだのは速度が欲しい(改行コードの統一処理が不要)だからです。
バイナリで読む(改行の処理不要)なら ios::in | ios::binary じゃね?
>>602 読み込もうとしているファイルのサイズは
あなたの意図してるのと一致してる?
ファイルを一旦メモ帳で開き、
別名で保存してそれを処理してみたら?
>>602 改行コードの制御に関わるのはファイルオープン時のbinary指定の方で、
開いた後のread/getはデリミタ周りに関係する…と思うのだけどそれ以前の話として
Windowsで速度がほしいなら、CreateFileWとReadFileやファイルマッピングで読んだほうがオーバヘッド少なくて済む。
これはまんま固定長バイナリリードなので、デリミタの付与は自前でやる事になるが、
デリミタ付与のようなオーバヘッドすらないって意味ではシンプルでわかりやすいかと。
FastIO系のAPIとかもあるみたいだけどあんまメジャーじゃないしこっちはパスしても良いと思う。
>>604 改行コード変換無し(バイナリオープン)でデリミタ付与読み込み(テキスト読み込み)したいってだけの話。
ゴミの件はデリミタ不足で未初期化領域に突入してるだけだからそこ気にしても何の意味もないと思うよ。
ファイルの中身が、 "abcde\0ヘヘヘヘヘヘヘヘ" だったりしてない?
>>605 「デリミタ」って何のこと言ってんの?終端 '\0' のこと?
buff[fsize] = '\0' してあるんだから「未初期化領域に突入」は無いんじゃないの?
>>602 今同じような環境で試したけど、再現しない・・
609 :
596 :2013/06/04(火) 01:35:30.06
皆さん解決にご協力頂きありがとうございます。
>>603 >>605 ご指摘通りに指定したら解決しました。
ということは、ios::binaryを指定しないと\r\nが\nに短縮されてファイルサイズが縮むんですね。
今までgetメソッドがその処理を受け持つものだと思っていました。
でもios::endがその差を吸収してくれないならテキストモードで全内容を読みたいとき
readメソッドは使えずgetメソッドで一行ずつ読み込むしかないんですね。
ファイルマッピングは使ったことがありますが今回はクロスプラットフォームを実現したくて見送りました。
まあプリプロセッサで振り分ければいいので単なる無精ですが。
>>607 「終端文字の代入を省略したい」と勘違いしてたわ…すまん
>>596 単にios::binary付ければ解決する気がする。
tellgで得られるのは改行変換前のバイト位置で、readで読むのは改行変換後のバイト数って事だと思う。
ファイルの中身が"フフフノフフフ"だったりして
WndowsのようなCooked Modeを持っているOSだとテキストモードで tellg()やseekg()がうまく動かないでしょ
そういえば「あるテキストを読み込み、行を逆順に出力せよ。行数に制限は ないものとする」という問題があって、tellg()やseekg()を使うと動作がおかしく なるので悩んだ事がある 結局トランザクションファイルを作ってテキスト→バイナリに一度変換してから tellg()、seekg()で逆順に読んだ そのファイル位置はもう一つのファイルに記録した そうしないと「行数に制限がない」という条件を満たせない
バイナリモードでオープンすりゃ良かったんじゃね? テキストモードでもtellとseekの対応自体は取れてるらしいから読めんこともないんじゃ… …テキストモードでCRLFのLFんとこにシークした場合の動作が未定義とかだったりすると非常に時間掛かって実用的じゃない事になるかもだけど。
デフォルトのスタンダードライブラリーってフォルダーのファイル名を列挙したりする、いわゆるフォルダ操作は できないんですよね?
§27.6.1.1 pos_type tellg(); basic_istream<charT,traits>& seekg(pos_type); basic_istream<charT,traits>& seekg(off_type, ios_base::seekdir); だから size_t はまずいんじゃ・・・
もしかしてファイル長がunsigned longだと32bitの恐れがあるから、C++で 定義を変更したのかもな だとしたらnewする時はどうやってpos_typeからサイズを得ればいいんだ?
>>618 C++11の規格票を見てもそれらしい対策はないね
今の所これを使うしかないのか
http://d.hatena.ne.jp/y-hamigaki/20061013 >多くの32ビット環境ではstd::streamoffが32ビットですが、std::streamposはそれ以上の精度を持っていることがあります。
>そのため、Boost.Iostreamsでは(処理系依存の方法で)可能な限りstd::streamposからオフセットを64ビットの精度で取り出す関数position_to_offset()が用意されています。
>このオフセットを表現するのにstd::streamoffでは足りないので、代わりにboost::iostreams::stream_offsetを使います。
>使っていて気が付いたんですが、(少なくともVC8付属のものでは)std::streampos同士の引き算などで意図せずオフセットの精度が落ちることがありました。
>なので、std::streamposに演算を施す場合は、一旦stream_offsetに変換しないといけません。
>これに関してコンパイラは警告を出してくれない(std::streamposの中でキャストしている)ので、注意深くコーディングする必要があります。
>どうせならstd::streamposも別クラスで置き換えてくれれば楽だったんですけどね。
勘弁してくださいorz
ストリーム長に関しては本当にうんこライブラリだからな 処理系依存の方法を使った方がましだよ
621 :
デフォルトの名無しさん :2013/06/04(火) 20:26:54.03
禿様も、そのときは一生懸命だったんだよ 批判するより次いこーぜ
名前: E-mail: sage 内容: 全然勉強しないままとにかく手を動かして書いてた初心者なんだけど typedef struct tagABC { int a; int b; int c; float d; float e; float f; float g; : : } ABC ; ABC abc[ NUMBER ]; みたいな感じで20~30個程度の要素数の構造体を #define NUMBER 10万ぐらい確保して 出来るだけ高速に代入したいんだが 5万ぐらいまでは60fps確保できても8万とかなると格段に遅くなる 代入をやめれば途端に負荷はほとんどなくなってCPU使用率5%以下 毎フレームの代入する数は変わらない なんかよくわからないけどSTLコンテナとか勉強して導入した方がいいのかな なんか使い方がまずいんだとは思うけど
>>622 >STLコンテナ
今の状態で使うのはよした方がいい(だって遅いし)
だいたい何故にゲーム(多分)で10万もの構造体を毎フレーム初期化する必要がある? どんな処理だよ?
あ、あと代入はabc構造体の全要素に同時に代入する使い方しかしないです ポインタのほうがいいのかな
大量のパーティクルを扱いたいんです PCならマシンスペック振りかざして数を稼げるから 今のところボトルネックは描画でも運動計算でも無く代入の生成の部分みたいなので 今ちょうど仕様を大きく書き直してるから一緒に解決してしまいたい
補足ばっかりすまん 代入処理は毎フレーム多くても多分数千程度で 10万一挙にってことはまずありえないと思う
お前の言う代入って初期化なのかコピーなのかどっちだよ 代入してるところのコードは現状どんなかんじになってんだ
……今気づいたけど、
>>622 ,624-626が同一人物なのか
トリップ付けるかageてくれれば質問者が誰か分かりやすいと思う
629 :
622 :2013/06/04(火) 22:39:37.48
すまん
>>622 ,624-626です
初期化だね
速く出来るのならコピーの形に作り変えてもいい
現状はトリップしかないね
631 :
デフォルトの名無しさん :2013/06/04(火) 23:02:41.98
あれ、ID表示しない系の板ってageたら表示するもんじゃなかったか
どうやら俺の勘違いだったようだ…… まあCPUに限らずリソースは余るなら余らせとくが吉
たかだか250マンコ程度のfloatを60回代入するのに 1秒もかかるとは思えんのだが。 普通のWindowsパソコンの話なら。
634 :
622 :2013/06/04(火) 23:40:43.70
やっぱり普通に考えたら負荷にはならないのかな かなり最初に書いた部分で、間違いなくまずい書き方として初期化の値求めるために宣言とか入ってるから メモリの確保と開放を10万回以上やってるっぽいがこれが大きいのか? でも10万個目周辺で1000個程度の代入で10fpsとかになるんだよなあ ちなみに2500Kのwin7_64bit
>メモリの確保と開放を10万回 ふむふむなるほど
memcpyで済むならその方が
って、おい! ふざけんなwww >メモリの確保と開放を10万回
>>634 >メモリの確保と開放を10万回
|∧∧| (( ) ) (( ) ) ((⌒ )
__(;゚Д゚)___ (( ) ) (( ⌒ ) (( ) )
| ⊂l
>>622 l⊃| ノ火.,、 ノ人., 、 ノ人.,、
 ̄ ̄|.|. .|| ̄ ̄ γノ)::) γノ)::) γノ)::)
|.|=.=.|| ゝ人ノ ゝ火ノ ゝ人ノ
|∪∪| ||∧,,∧ ||∧,,∧ || ボォオ
| | ∧ (´・ω・) (・ω・`) ∧∧
| | ( ´・ω) U) ( つと ノ(ω・` )
~~~~~~~~ | U ( ´・) (・` ). .と ノ
u-u ( ) ( ノ u-u
`u-u'. `u-u'
639 :
622 :2013/06/04(火) 23:55:40.30
やっぱりこれ? でも最近のコンパイラだと for内に変数宣言してもこんな事にはならないとも聞いたことがある まあちょっとここんとこ何とかしてみるよ
ばかには無理 再現させる最低限のコードになるまで削る という脳筋作業すらできない低脳には
642 :
622 :2013/06/05(水) 01:17:29.79
643 :
622 :2013/06/05(水) 01:37:31.92
あ、あとよく考えたら10万回のメモリの確保と開放は無かった 毎フレームせいぜい数十~百回程度だった そして単純に代入するだけでも再現性はあって 毎フレーム代入するパーティクルの数が多いほど負荷も増えてる模様 毎フレーム30ぐらいなら50fpsぐらい維持できるけど毎フレーム3000とかだと一瞬で1~2fpsとかになる
使われていないパーティクルデータを探す ってところで線形探索してるから重い。コレだと毎フレーム最悪80000*100要素探索することになる。
645 :
622 :2013/06/05(水) 02:11:42.02
単純にforループの数の大きさのせいか でもそれだったら1押すの止めてパーティクル生成してなくても重くなると思うんだよね 昔forループだけで重くなるライン探したけど確か100万ぐらいまではいけた気がする
>>645 書き込み数が同じにも関わらず、どんどん時間がかかるようになるのは、未使用領域の探索に時間が掛かっているからだ。
しかも一個未使用領域を見つける度に、配列の最初から探索をやり直している。非効率すぎ。
この方法だと、例えば配列の先頭6万個が使用済みの場合、
createSplash()を呼ぶ度に(6万 * 作りたいsplash数)以上の
ループと変数読み出しが(未使用領域の探索のために)発生する。
3000個のsplashを作りたいなら1億8000万以上だな。
647 :
622 :2013/06/05(水) 02:47:49.73
なるほど。 確かにこれは大問題だった これの改善案って 未使用領域を見つけても探索をやり直さないようにする以外にあるかな もっと根本的に仕組みを変えてもいいし案があれば教えて欲しい
648 :
デフォルトの名無しさん :2013/06/05(水) 03:46:17.10
c使いじゃないので何ができるのかわかんないんだけど 前回の状態を別変数に持たせるとか 例えば未使用のsplashIDだけ必要なら 例えば変数pにsplashID1000ずつまとめて未使用のsplashIDだけ格納していく p[0]に0-999 p[1]に1000-1999 ... なら たとえばsplashID987654が未使用ならp[987]に入ってる
順序無しリストで管理すればいいのでは? 追加は常に最後尾で++個数 削除は削除位置に最後尾のデータをコピーして--個数
ゲームとかプログラム始める前に基本情報ぐらいとれよ 基礎がなってないのにコード書き始めるから大惨事になるんだよ 趣味ならまだいいが基本情報すら持たないカスに仕事でコンピュータ触らせたく無い
>>647 >未使用領域を見つけても探索をやり直さないようにする以外
静的にとった領域に対して使用中要素のリンクリストと未使用要素のリンクリストを持つのがこの手のげむのセオリーじゃねーの?
>>649 パーティクルが有効になる順番と死ぬ順番が一致してれば、そうだね。
一致してないとリストの中間の要素を削除するはめになって、削除コストがマッハ。
一致してない場合は双方向リンクリストをつかえば探索と破棄が低コストでできる。実装はググって。
std::listは削除が低コストでできないから、この用途には役にたたないよ。
>> 650
学校や会社で課題出されたならともかく、自分の意思でプログラム始めるにあたって
基本情報から入る人なんているの?
>>652 いきなり最初からはなくても
一週間もすれば、あ、これプログラム言語だけじゃなんも出来んわ、って気が付く
そこからネットで情報調べれば基本情報にたどり着くよ
普通だと思うが?
基本情報とか爆笑したwwwwwwwwwwいらないよ。
基本情報処理技術者試験はまあいいけど 英語で英検 的な残念さがある
>>631 ID無効と、任意IDと、強制IDの3つがある。
ageでIDが出るのは任意IDのやつで、元々はメールアドレス書いてるならID要らんという思想によるもの・・・
・・・だったと思うんだが、sageとかの機能にメール欄流用した結果sage進行中心の板ではID無効同然になった。
基本情報とか時代遅れ過ぎるわ
基本情報w
取れたからどうだって訳じゃないが、それすら取れん馬鹿を篩に掛ける程度には役に立つんじゃね。
・要素に次要素へのポインタないしインデックスを持たせて、使用中要素のリンクリストと未使用要素のリンクリストで管理する ・パーティクルの寿命が大体同じなら、リングバッファ状にして管理する(最大数突破時の強制再利用にも有効) ・使用状況フラグをビットマップに落とすとかで単純に探索速度を稼ぐ あと種類ごとに共通なデータは種類番号とか共通データへのポインタにしてしまえば色々節約できる。 メモリアクセスのコストも馬鹿にはできんから、場合によっては参照時に計算したほうが良いことも有る。
今の人は時間やメモリ節約するコード知らんみたいだ。
足並み揃わなくなったかな?
基本情報でドヤ顔するやつは解雇して良いが 基本情報を足切りに使わない会社は信頼できない仕事任せたくない
>>656 コーディング以外のところが空っぽだから基本情報とるんだよ
670 :
デフォルトの名無しさん :2013/06/05(水) 20:01:56.64
>>668 おまえ税金で食わせて貰ってる連中か
その足きりとやらを通ったからって何だ? 根本的におかしいぜ
コピー機が使えるバカや、英語を話すバカを、何に使えって言うんだよ
金取るに値する仕事しろ!
マ板でやれ
基本情報とか持ってなくてもそれくらいの知識マならあって当然だろ せめて応用情報とかオラクルマスターとかにしとけ 基本情報なんて受験費用の無駄だ
>>670 コピー機すら使えないバカには用はないよ (w
まあ、このてのアホを選別するぐらいの役にはたつようだな。
基本情報の内容は勉強になったと思うけど、 仕事に必須かというとそうでもないと思うw
>>674 仕事に必須?
んなわけないじゃん。
それすら取れないアホを足切りするだけでしょ
676 :
デフォルトの名無しさん :2013/06/05(水) 20:55:16.46
>>673 退職願はここで書くんじゃなく、上司に提出しろw
実力があれば資格なんぞ全くの不要 資格は実力が無い人が自分を凄そうに見せるために取るもの
>>676 就職もできないやつが退職願いとか、笑える
基本情報ごときで凄そうとか言うやつ、 はじめてみた (w
コード書く連中で取ってる奴らに言わせれば基本情報「ごとき」なんだよな。 実力云々以前にコード数行書けるかどうかってレベルのやつと高校生だけだろ、基本情報を誇ることが出来るのは。 その程度でも無いよりかはマシだし、基本情報不合格して基本情報不要って叫んでる馬鹿を弾く程度の事はできる。
「基本情報合格していない馬鹿」じゃなくて 「基本情報不合格して基本情報不要って叫んでる馬鹿」へ限定した理由って何? 条件は正確にしないとバグのもとだよ
受けるまでもない人も合格していないに含まれるわけだが
マ板でやれ
C++のコンストラクタとデストラクタでは、なぜクラス名を書くのですか? 例えば単純にconstructorとかdestructorと書くようにすればいいと思うんですが。 クラス名が変わった時のリファクタリングも楽だし。
キーワードの追加による互換性の低下を嫌ったんじゃないかな。
class Aがあったとして Aの一時オブジェクトが欲しい時 A::constructor()とかくより A()とか書いたほうが簡単だから? 識別名には予約語を使わないというポリシー? A a();という文法がAコンストラクターがオペレータっぽく見えるから? (constructorだとA a.constructor();とかく必要がある?) なんとなくそのクラスを使うときに楽だから、というのが理由っぽい
>>686 コンストラクタの名前と一時オブジェクトの生成方法は関係ないだろ。
>>684 まったくそうだよな。C++だけならまだしも
JavaやC#もクラス名を書かされるのはイライラする。
>>672 ないやつが我が物顔でIT業界に入ってくるから言ってるんだよ
一度新人研修で教えればわかる
未経験OKを業界規模で禁則事項にして基本情報を就職の必須資格にすべきだ
>>647 少なくともこいつは基本情報レベル以下のカスだから永遠に趣味グラマでいて欲しい
しかしこいつよりカスなやつが平気で面接受けにくるのが今のIT業界なんだよな
>>682 自称『受けるまでもない人』は、お帰りください
かなしいけどウチの中堅~老害層は基本情報受けても落ちるだろうなってやつかなり居るよ
でも基本である以上必須w
this() ~this() すごい違和感がある気がする
どのみちコピーコンストラクタの宣言ではクラス名を書かされる・・・ かと思ったけど this(decltype(*this) const&) でいいのか。いや、良くないような・・・キモイ。
そこはselfだろう
class GNuuuu { ... virtual ~self() throw(); self(self const&); self& operator=(self const&); };
label_place_collection::XXX みたいな記述箇所依存の置換えマクロみたいなもんが有ればしやわせなのかな class A{label_place_collection::constructor(label_place_collection::this_type&);};
class GNuuuu { this(GNuuuu const&);. virtual ~this() throw(); GNuuuu& operator=(GNuuuu const&); };
$にしよう class GNuuuu { $(GNuuuu const&);. virtual ~$() throw(); $& operator=($ const&); };
スクリプトみたいだな
私 = I なんだから、大文字の I にしよう class GNuuuu { I(GNuuu const&); virtual ~I() throw(); I& operator=(I const&); };
705 :
デフォルトの名無しさん :2013/06/06(木) 10:39:26.20
ちゃんと関数が成功したか戻り値を毎回確認しろ あとスレチなので環境依存スレに移動しろ
707 :
デフォルトの名無しさん :2013/06/06(木) 13:43:03.82
>>706 返戻値は確認しました。が、それでもだめです。。。
すみません、環境依存スレに移動します。
デストラクターはtypedefの型名使えるけど コンストラクターは使えないよね? 何でなんだぜ?
使えるでしょ
そうだったのか 勘違いスマソ
どちらも使えない
classとstructはほとんど同じ意味なんでしょ?じゃあclassという予約語が導入された理由はなんなの?
悪魔がそうしろと囁いたから
むしろstructの方がC++には要らんだろ 互換性を考慮した結果ほぼ一緒になっちまっただけで
やってる事は同じに見えるが、デフォルトがpublicなのが構造体でprivateなのがクラスって くらいで、クラスは構造体を継承できるし。(逆は見た事無いので分からん) だが、コンパイラは厳密に区別してプログラマに決して混同を許さないww
互換を引きずって、いやな仕様になったところはあるよな。 Cのことを見捨てて、何もないところから綺麗に仕様を作っていれば、きっと…
モノは同じだが、背景にある理論は全く違う…使う側が気を遣うべき物じゃない?
あれは素人が作ったものだから…
>>716 誰にも使われずにきれいなまま朽ち果てるだけでしょ。
>デフォルトがpublicなのが構造体でprivateなのがクラスってくらい こう説明する人は多数見るけど「何」がpublicなのかを正しく説明する人を見たことがない
>>712 クラスはデフォルトでprivateにしたかったが
structはデフォルトでpublicにしないと
Cとの互換性が保てない
だからclassを導入したと考えると良い
性癖
>>720 C#が割と普及してきたし、
結局言語やライブラリが便利かどうかで決まると思う
デフォルトがパブリックのがよくないか? 継承はプライベートにするくらいならHas aで実装するし プライベートなメンバやメソッドは後ろに追いやった方がヘッダがみやすい TMPやるときもパブリックが非常に多い 最近classを使って書いたことほとんどないよ
継承はpublicがデフォルトでいいと思うが メンバはprivateがデフォルトの方がいい
>>721 > 「何」がpublicなのかを正しく説明する人を見たことがない
説明するまでもないから...
PODだけstructにしてるわ 気持ち悪いからほとんど使わないけど
729 :
デフォルトの名無しさん :2013/06/07(金) 10:20:14.71
インターフェイスも class で書かれます?
インターフェースもクラスで書いてるな
731 :
デフォルトの名無しさん :2013/06/07(金) 10:37:29.39
悪いとは言わんが、ご苦労さま
もうやだ、テンプレートのデバッグほんとやだ。どんな無理ゲーだよ?そらリナスさんもキレるっつーねん!
バグの入り込むような所でてんぷれーとを使うのがあかん その時点で負けは決まっている
namespaceをテンプレートに出来るようにしてくれ
>>732 エラーメッセージが分かりやすい最新の環境を使え
736 :
デフォルトの名無しさん :2013/06/07(金) 16:25:14.63
そういう問題やなかろうが 「未知の型T」で起きる不具合は対策が難しいんだよ Tに入りうる型がすべて解っていてもテスト工数が絶望的だったり
737 :
デフォルトの名無しさん :2013/06/07(金) 20:08:44.68
#include <stdio.h> int main(){ char a[50][50]; int i; int j; for(i=0;i<50;i++){ for(j=0;j<50;i++) a[i][j]='a'; } } ビルドは成功するのにコマンドプロンプトで起動すると動作を停止しましたって表示されます for文が問題だと思うのですがどう悪いのでしょうか
> for(j=0;j<50;i++) 無限ループだからな
>#include <stdio.h> C++にこんなヘッダーは無い。スレ違い。
>>736 いちいちTにはいるすべてを網羅してテストするのですか‥‥アマチュアには想像できない世界だと痛感します。
742 :
デフォルトの名無しさん :2013/06/07(金) 20:24:07.71
>>738 さんありがとうございます。糞みたいな見落としでした
ほかの方々も厳しいお言葉ありがとうございます
そのヘッダーはC++のものではないのですね...
勉強しなおしてきます
>>742 事象が再現する最小限のコードに削ってから出直せ
まず a[i][j]='a' を削る→再現する
次に for(j=0;j<50;i++);を削る→再現しない
→こんな糞スレで質問するまでなく原因が判明
今日もエクセル方眼紙をたくさん書いた いつになったらプログラムや設計ができるのか 就職活動で必死にc++アピールしたのは何だったのか
テンプレート絡みのは全てコンパイル時エラーなんだから、 別に網羅的なテストをする必要なんかまったくなくて、 エラーが出た時に必要に応じてすればいいだけだと思う テンプレートなんだからテストコードは共通化できるはずだし、 自分たちで造ったテンプレートであれば要件も最初から分かってるはずだし っていうかダミーのプレーンな型を一つ定義してテストすれば、テスト通った時点で テンプレートパラメータに何が要求されるか網羅できるはずだよね
>>744 お疲れ様・・・。
仕事って常に自分のやりたいことができるわけではないからね・・・。
>>745 それでもお偉いさんは全部網羅しろ、っていうんですよ
>>744 その仕事プロジェクトにC++使われているのか?
C++を使うプロジェクト自体がそんなに多くないし
>>745 >テンプレート絡みのは全てコンパイル時エラー
んなこたーない
template<typename T>
void fuck(T v)
{
printf("%d, %d", v, 100);
}
>>750 言いたいことは分からないでもないけど、それはテンプレートのせいじゃないんじゃないかな…
テンプレートを使わなければ、そういう間違いをしなくて済むというわけじゃないし、
対策としてはintにstatic_castしてみればいいんじゃないかな
>>750 ついでに言えば、そのパターンも intじゃない空の型一つでテストすればエラーを検出できるから、やっぱり網羅的なテストは必要ない
あれをテンプレート絡みを言っちゃう750の頭がかわいそう
>>751 ある環境でTがshortやintやlongだとOKで
floatやlong longだと正しく動かないのに
テンプレートが関係ないとはお前アホか
template<typename T>
void fuck(T v) {
printf("%d", static_cast<int>(v));
}
これだって何の解決にもなってない
>>745 二種類のテストがいる。
テンプレート関数の方とテンプレートパラメータに成りうる型が
そのテンプレートのコンセプトに従っているか、と。
後者のテストは当然テンプレートで書けるので、仰るとおり一回
書けば終わる。
>>748 745がいうように、お偉いさんの言う網羅テストはちゃんと省力的
に処理できる。
ただまあ、もしExpression Templateを使っているとか、
汎用的なテンプレートライブラリとして納品しなきゃならんのなら
ご愁傷様。無理。
X<T>のTの取り得る型は int,X<int>,X<X<int>>など可能性は無限大
コンパイル時にテンプレートパラメータに成り得ない型のときは 型エラーって出来ないの?
ふつう一個のプロジェクトの中で特定のテンプレートが インスタンス化される型の種類は有限だと思うが
>>759 >インスタンス化される型の種類は有限
ではその有限の種類を列挙する方法を教えて下さい。
自分の書いたX<T>を含むプログラム内に含まれる、
Tの取り得る型の見つけ方を。
テンプレートはダックタイピング的な 文法エラーしか検出できないのに コンパイルエラーが無かったら問題ない とか酷すぎる
>>760 ものによるんでない?
例えば特殊な文字列テンプレートクラスでエンコード情報あたりを
テンプレートパラメータにしてるならそれで列挙できるだろうし
一種のコンテナでアロケータをテンプレートパラメータにするんなら
用意したアロケータを列挙すればいい
テンプレートパラメータがイテレータとかで本当に汎用的な場合で、
かつそのテンプレートがやたらそこら中から呼ばれているような場合
は厄介なのは分かるしご愁傷様だけど、
どうしてもっていうならシンボルからデマングルで取れるかもね
X<をgrep検索
>>755 例えばstd::sortの結果は
要素のoperator<の実装に依存するので、そういう意味では任意の型についてソート結果を保証することはそもそも論理的に不可能。
std::sortのテストでできることはoperator<で規定される大小関係通りにソートされることのみ
で、ある型が正しくソートされることを保証する義務は呼び出し側にある
君が提示したprintfコードも同じ
つまり未知の型をすべて網羅したテストを行うというのは初めから要求が破綻している
>>763 は
kuso<typename unko<string>::X, 0721>
とかいうコードをどうやって網羅テストすんのよ
数字にナニカ意味があるのかとググってみたら なるほどね
コーディング規約で 「テンプレートパラメーター依存の型をテンプレート引数に使用禁止」 「テンプレートクラスをテンプレート引数に使用禁止」 「非タイプなテンプレート引数禁止」 にしたらTは有限になる。 つまりvector<string>的なのは禁止な。
vector<string>って使っている奴多いような気がするが
てか言葉尻だけでいえばどうやっても有限なはず じゃないとビルド終わらん
>>769 有限かどうかじゃなくて
その有限の種類を列挙することが
困難だから問題なんだろ?
マングリ返しするしかない
>>769 template<int n>
fib {
static int k(){return fib<n-1>::k();}
}
この手のは有限でも無理だろ?
メタプログラミングでの網羅確認は
机上のコードレビューと同じレベル。
>>771 コンパイル時にnは決まるんだからそれテストすれば十分じゃない?
そのnを探すのはコードレビューするしかないという意味だとすると
そりゃまあそこは頑張るしかないが、それでも例えば
template <int n> class checked_fib;
template <> class checked_fib<256>{}; // レビューで見つけたnその1
template <> class checked_fib<16>{}; // その2
template <int n> class fib : checked_fib<n> {};
とかガード書けておけば抜けはビルド時に見つけられるわけだし。
別の切り口としては、どこまで用意すべきかは仕様から明らか だったりすることもあると思うので そのfibくらいなら、上限決めて全数検査しちゃう手もある
チェックコードをいちいち生成するしかないな 全パターンは無理だろうけど、n = 0~1000で合ってりゃ大丈夫だろ
ふむふむ。 100キロ行のうんこテンプレライブラリを使用した 1行のプログラムを書く度に、 100キロ行のコードを試験するのですね。
おいおいおまえら、 fibの意味が理解できなかったのか?
ごめん、772で答えになってないなら分からない 解説お願いします
X<n-1>::k()+X<条件分岐<(n%2)==0,X<n-2>,Y<n-2>>>>::k()+X<n+2>::k() みたいなメタプログラミングうんこ盛りなコードは、 特定のnで確認してもそれが意図した通りなのか どうかが自明でないってことでは。
それは単にうんこちゃんなそのコードがアレってだけでは…
>>773 仕様的にはホワイトリスト方式にして、試して動いたら使用可能な型が増えていくようにすれば楽かもな。
動かない時は悪足掻かない。直ぐ諦めて別に一から書き起こそうぜw
実際どうなんだろうな?アッチはアッチで動く状態を維持したまま、コッチでも動くようにする努力と、もう
それはコッチでは動かないんだと割り切って一から書き起こす努力。
経験的に後者の方が低コストなんじゃねーか?って気がする。
ありがちなのは、作ってみたらコッチの仕様はアッチの振る舞い と違うことが後から判明して、かつコッチはコッチでその動作から もはや変えられない場合で、 それって要はテンプレートで置換できないものをテンプレート パラメータにしてたってことだから、 素直に特殊化しちゃった方が賢明だと思う。工数的にも。 後でリファクタリングできる場合は、アッチとコッチの共通I/Fを 改めて切り直した方が上手くいくことが多い気がする どっちか保持したままやると、もう一方が無理しがちなので
結論:
型をパラメータにとるテンプレートに関しては:
a-1: 任意の型については必要なメンバーやtypedefを備えているかどうかの話なので、ダミーの型一つに対してテストすればおけ
a-2: 特定の型について特別な要求があるのなら、その型については個別にテストする。
a-3: 任意の型について「あらゆる意味で正しい結果」を保証したい(
>>755 みたいなの)というのは、要求そのものが論理的に破綻しているので却下。そういうのは個々の呼び出し側でテストすべきで、テンプレート側で考慮すべきことではない
値をパラメータにとるテンプレートに関しては:
b-1: 非テンプレートなプログラムと同じ事なので、あえてテンプレートの文脈で語る意味がない
b-2: そもそもの話の発端はテンプレートのデバッグが困難でクソという話なので、fibとかみたいに積極的にテンプレートを活用しにいっているケースは微妙に話がずれてる
783 :
デフォルトの名無しさん :2013/06/08(土) 00:38:39.01
>>764 テストを実際に行うかどうかはともかく
結果的に不具合が起きたとき、どっちが悪いのか
君は自分のコードを神のコードか何かのつもりにでもなっているのか
数学的な証明を、実務としてちゃんとやっているのか
やっていないとは言わない、本当にやっているのか
>>782 に補足しつつ思うところを書かせてもらうと
・試験の対象は最終的にはテンプレート(例:X<T>)ではなくあくまで
そのインスタンス(例:X<int>, X<long>)
・これをテンプレートとパラメータの二つに分けて試験する
・テンプレートについてはパラメータの共通の振る舞いを決めて、それ
だけを実装したモックを用意したテストを書く
・余裕があれば正しく振る舞わないモックも用意して異常系での動きも
試験する、境界条件での動作も同様
・テンプレートパラメータに成りうる型については、上記の共通の振る
舞いに従っているかどうかテストすれば十分
・上記で十分なはずだが、どうしても上司が五月蠅ければ、モック用の
試験にも突っ込んでおく(案外バグが見つかる…)
・何がテンプレートパラメータに成りうる型かはいろいろ頑張って探す
・探しきれないほど汎用なテンプレートの場合、完全網羅は諦めて、
仕様と睨めっこして現実的なおとしどころを決める
とかかなあ。「あらゆる型」とか「可能性のある型すべて」ではなくて
一定のタガにはめるのがコツ。C++14だとそこでconcept liteを使う。
ゴミほど忍法レベル高いな。 でそのconcept liteとやらは 先日のドラフトの何章に書いてあんの?
C++17じゃなくてC++14にコンセプト入るのか?
あと
>>750 は良い指摘だと思う
確かにそれはテンプレート周りでよくあるタイプのバグで、
コンパイル時にはエラーにならないからテスト書かないと
発見できない
(この例そのものについては警告くらい出そうだが)
この例の場合は、暗黙にsizeof(T) < sizeof(int) && is_integral<T>
という振る舞いを仮定しているので、Tとして渡されうる型に
対してこの条件を満たすかテストすればよい
もっとも、そこまで分かっているならmplとenable_if使えば
コンパイルエラーにすることもできるけど
>>786 あれ、17だっけ?まあ当面使えないからどっちでもいいよ
>>783 そもそも任意の型に対して「あなたの期待する結果」を要求することは
論理的に不可能だといっている。
>>782 でも言ったが、個別の型に対して特別な要求があるのなら、
それについてはテストすればいい。
floatやlong longについて、それに応じた「正しい」結果を出力するという
要件があるならそうすればいいだろう
現実的に考えれば、
>>755 みたいなののに関しては
1. 特定のメンバー関数を備えたオブジェクトであれば、そのメンバーを呼んで文字列化する
2. プリミティブ型については個別の実装を用意する
というのが落とし所だろう。
その場合、プリミティブ型については網羅テストを行うべきだが、任意の型に関しては、単に必要なメソッドを備えたダミーの型を一つ用意して、それに対するテストを行えば用は済む。
そういうことを踏まえた上で、
>テンプレート絡みのは全てコンパイル時エラー
>ダミーのプレーンな型を一つ定義してテストすれば、テスト通った時点でテンプレートパラメータに何が要求されるか網羅できるはずだよね
??
と言ったんだ
クソはKUSOらしくコテハンにしろよ NG指定しづらいじゃないか
assertとかで引数チェックしてるならテンプレート引数もチェックするように書くべきだとは思う
structとclassには思想的な違いがある structは単にデータを集約するしくみであって、どこまでいってもメンバの詳細に興味がある場面で使う この場合の設計は、structを食わす手続きが簡明になるとか、実行効率が上がるとかいった基準で まずstruct内部の詳細から始まる 伝統的な手続き型プログラミングとはそーいうものだし、 classはむしろ詳細を隠蔽して抽象化を果たすためのしくみであって、 classの設計は、他のクラスに対してどうみせかければシステム全体として無矛盾性とか一貫性を保てるか、という観点で まず公開インターフェースの設計から始まる 臭いものをしばしば臭いまま放置して蓋だけをする
そもそもC++はストロストラウップ先生の、 Simuraで書いた俺様の完璧なプログラムをまともな速度で動かせんのかヴォケ>計算機業界全体に対して: という不純な雄叫びから始まり、 Simuraの特性と当時の計算機の中途半端なリソースとを整合させて便利かつ高速なオブジェクトコードを吐く言語を実現する という中途半端な2目標同時追求を行った果てに生まれたものなので いろいろ不純で中途半端なのは仕方が無い
>>792 > structは単にデータを集約するしくみであって
その理論だと、 struct にメソッドとか作れなくていいはずだが?
>>794 いやとにかくストロストルウップ先生はSimula(←>793のを訂正)で書いた
ご自身の完璧なプログラムを高速に動かすこと以外はわりとどうでもよかったので
C++の言語仕様は実装が出来る限り手を抜ける形で進めたとかそういうオチ
structはclassと共通化され、純粋なstructを残す手間を惜しんだ
ほかには、クラス内での定数の定義をenumハックで解決してるじゃん何か問題でも!?
と強硬に主張し、static const intの導入に抵抗したりもした
非推奨だけどstdio.hもあるよ
ISO/IEC 14882:2011 D ¶2 These are deprecated features, where deprecated is defined as: Normative for the current edition of the Standard, but not guaranteed to be part of the Standard in future revisions. D.5 ¶1 For compatibility with the C standard library and the C Unicode TR, the C++ standard library provides the 25 C headers, as shown in Table 154. Table 154 - C headers 抜粋 <stdio.h>
deprecatedの定義を噛みつかれてんだろ
>>795 ハゲはもうC++から身を引いた方がいい
ウザすぎ
そろそろハゲの呼び方を統一しようぜ ビルヨネ/ビャーネ ストラウス/ストロス/ストロヴス トラップ/トルップ
Wikipediaはこの世で最も信用してはならないもの まあハゲはハゲだ
>>804 ググって出てきやすい、って意味で言ってるんじゃね?
「ストロストルウップ」でググっても全然引っかかってこないし
(引用符付きだと「"ストロストルウップ"との一致はありません。」、無しだと全然関係ないページが出てくる)
C++14ではその読み方も正式に定義されるらしい
「びよーん・すっぽすっぽ」と呼んでも怒られないどころか、 発音がうまいと褒められたとか何とか。
じゃあビヨ~ンでいいんじゃないかな
o< ´・ω・` >oビローン
びろーん すっぽんぽん ぷらぷら これらが全てつながっているとしたら…
>>810 頭皮を隠さないことも加えてあげてください
ワロタw
813 :
デフォルトの名無しさん :2013/06/08(土) 16:37:35.37
struct unko { virtual ~unko() = 0; }; struct X :unko{ ~X(){} }; int main(){X i;} このプログラムがエラーになるんですが 何故なんでしょうか?
純粋仮想デストラクタは定義も必要
>>815 典型例なアスペ回答乙
エラーメッセージ見りゃわかるだろ
まるで糞
struct unko { virtual ~unko() = 0; }; unko::~unko(){} 問題1 純粋仮想関数なのに実体を持つのは変だろ 問題2 実体が必要ならそもそも=0禁止にするのが筋じゃね? 問題3 virtual ~unko()=0{}がダメなのは何故? 問題4 何で実体が必要なの? これらの疑問を816が解決します↓
規格にはルールが書いてあるが その理由までは書かれていない 規格に書いてないことは 憶測でしかないので答えられませぬ
↑こいつアスペ
では代わりに815が答えます↓
1 コンストラクタ・デストラクタは継承関係に於いて特別な振る舞いをする 通常の関数と違い継承関係を舐めるように呼ぶので純粋仮想でも実体が必要 2 さあ? 3 文法的にアカンからじゃね?わからん 4 1の答えにがこれだったかもしれぬ ちなみに、(デストラクタでない)純粋仮想関数でも実体を持つことは可能
2 他に純粋仮想関数がないインターフェイスでもインターフェイスを明示できるから使ったらいいんじゃね? 3 オーバーライドの文法的にNG か?
結論 C++はクソ言語
C++以上に強力な言語って考えられないが
>他に純粋仮想関数がないインターフェイスでもインターフェイスを明示できるから使ったらいいんじゃね? 意味的におかしいって指摘に対して使ったらいいんじゃねとは 何言ってんだこのばかは >オーバーライドの文法的にNG オーバーライド? function-definitionとmember-declaratorが排他的だからだろ 何言ってんだこのばかは
つまり言い方的には 2 他に純粋仮想関数がないインターフェイスでもインターフェイスを明示したいとうC++ユーザーの要望に答えたんじゃね? か
インターフェースという概念が無い言語で インターフェースであることを明示 という発想がおかしい さてはJAVAドカタだな
>問題1 純粋仮想関数なのに実体を持つのは変だろ
そうですね。規格策定の委員会メンバーはお疲れだったのでしょう。
>問題2 実体が必要ならそもそも=0禁止にするのが筋じゃね?
そうねすね。それが一番いいと思います。
>問題3 virtual ~unko()=0{}がダメなのは何故?
=0という珍妙な文法を考えた委員会のレベルを察して下さい。
>問題4 何で実体が必要なの?
>>822 の通りです。
>>830 珍妙ではあるけど関数のアドレスがNULL(0)であるって理由づけするとそこまで変でも…いや変か?
意味的には純粋でも実装がそうでない
のなら virtual ~unko()=0{}
これを認めるよう構文を見直すか
デストラクタに限り=0は{}と同等
とすべきだと思うのだけれど
>>831 関数ポインターじゃなくて関数が
ゼロとはこれ如何に
デストラクタを純粋仮想関数にすればインスタンスが作れなくなる 無意味って訳じゃない
ただの一メンバーの=0が「関数定義が無い」 だけでなく、 「このクラスはインスタンスを作れない」って 別の意味でも使われているからこうなる。 class D = 0 : public B {}; こうすればよかった。
クソ言語はどうしようもないなまったく
abstract が予約語にあればこんなキモい文法には・・・
837 :
デフォルトの名無しさん :2013/06/10(月) 09:55:56.12
予約語どんどん作れって禿に言ってみな
言う先はハゲじゃなくてWG21だから ハゲはもうすっこんでろ
839 :
デフォルトの名無しさん :2013/06/10(月) 14:37:23.96
=0 つってんのに virtual が必要とか、もうやめれ virtual でない = 0 とか、デフォで virtual になるクラスでも計画しているならともかく
C++11でfinalとoverrideのキーワードを 追加したんだから同時にabstractも 追加すべきだった
ひらめいた! 属性なら互換性も問題なくね? [[abstract]] ←これ★ struct ConcreteUnko final : BaseUnko { [[abstract]] ←これ★ [[noreturn]] inline virtual auto mf() const volatile && throw() -> void final override { } };
842 :
デフォルトの名無しさん :2013/06/10(月) 19:57:16.79
>>834 いいかもね
ついでにデフォがprivate継承ってのも廃止で
//private継承マジ死ねアホカス
private継承はnoncopyableで使うから要る
>>841 そこでJAVAのアノテーション地獄の再来です
>>842 メンバーをprivateってのは普通だけど、
親クラスをprivateってのは普通の使い方
じゃないよね まったく
>>843 デフォルトをpublicって話でしょ
それ以上の怨念を感じた
互換性を考えるとenum classのように 新しい宣言にするしかないだろうね。 キーワードの追加は難しいだろうから 使い回しでこんな感じ。 explicit class D : B, private noncopyable { int private_mem; public: D() : private_mem() {} };
>>843 void operator=(kuso const &) = delete;
でいいじゃない
オブジェクト指向原理主義者(≒Java厨)はよっぽどprivate継承が気に入らないみたいだな 使いまくってやるわw 超便利なんだなこれがw
D言語ではpublic継承しかできなくなった
>よっぽどprivate継承が気に入らない 意味的に最悪だね。 private継承を使う人は正直 頭からウジが湧いてるんじゃないかと思う
>>848 細かいことだけどJAVA厨のオブジェクト指向は
一般のオブジェクト指向と意味が違うよ
教義は
・インターフェースこそオブジェクト指向
・つまりJavaが最高のオブジェクト指向
・デザパタ名の連呼で会話しようぜ
・C++とかスモールトークは
インターフェースが無いから偽物
多重継承があるから必要なのか
>>850 仮想デストラクタでないクラスを拡張したい時に
private継承してpublicでusingしまくるという手は使える
例えばSTLのクラステンプレートを拡張するとか
まさに糞コード量産機の発想!
C++は型そのものをメタプログラミングで操作するようになって、純粋なC++コード(って言い方も違和感あるが) は型なしに近い使用感を目指してるというか、上手く言えてないがそんな感じな感じがする感じ。 っていうか、テンプレート書く側の人と使う側の人の間に隔たりが出来てるというか出来つつあるというか・・・・・・
今時天ぷらもあげられないカスグラマがいんのか?
大量のKUSOが排泄されるのもC++の魅力のうち。
javaならKUSOが生まれないとか都市伝説だろう sacalaなら、Dならと色々出てくるがKUSOは生まれ続ける 言語の数だけ生まれてくる
質問です void operator delete(void*, size_t)って 何のためにあるのでしょうか? operator new(size_t)に対応するのが void operator delete(void*) void operator delete(void*, size_t) の両方っていうのがさっぱりわからんとです
>>855 C++はオナニー専用言語
実務につかっちゃダメ
他人のオナニーなんか
見たくないだろう?
>>859 アロケータを自分でマネージするための大人の都合ですQZがよくやってるね
Qt使ってるぅ~?
operator new(size_t) void operator delete(void*) →OK operator new(size_t, X, Y) void operator delete(void*, X, Y) →OK operator new(size_t) void operator delete(void*, size_t) →OK ??? operator new(size_t, size_t) void operator delete(void*, size_t) →oops! こんな糞言語仕様考えた奴は死んだ方がいい
864 :
859 :2013/06/10(月) 22:05:37.35
>>861 大人の都合ですか…
とりあえずおまじない程度に理解しておきます
>void operator delete(void*, size_t) 二番目の引数は、何が渡されるん?
>>830 =0文法を最初に考え付いて実装した上に
あまつさえ販売したのばボーランドの連中だったはず
中○正○郎は気の利いた文法じゃーんみたいなことを確か言っていたが
867 :
デフォルトの名無しさん :2013/06/10(月) 22:46:02.89
蓬乱の連中も当時は優秀だったんだよ =fuck みたいのも考えていたようで auto配列の初期化みたいなKuSo600tツァーリボンバはともかく
国際標準を定める委員会は自分たちの瑕疵を
ボーランドのせいにするようです
>>863 もどこぞのベンダーの糞仕様なのでしょう
hackだぜ と fuckだぜ は雲泥の差がある
皆が明らかにこれは変だろってところを修正した新しい言語はよ作れや Dは失敗事例として諦めよう
C#からガベコレ抜いたような言語になりそうだ
それが正解な気がする
873 :
デフォルトの名無しさん :2013/06/12(水) 20:40:29.34
例外さえ白紙撤回からやり直してくれれば俺は何も言うまい 生newは目をつぶってもいい 多重継承は諸説あるが俺は現状でよいと思う
C++ほど見方次第でどうにでも化ける言語って無いみたいだな
>>872 パフォーマンスという言葉を知らないのか?それとも処理が終わるまで何時間でも待てる
時間的余裕があるのか?
>>875 時間あるよ
土地、家、十分な金が遺産で手に入ったから暇なんだ
今時C#のパフォーマンスが遅いという老害
C++使いが目障りな人が何故かこのスレに来て不快な思いをしてるようです。好んで
マゾだね
嫌いの度が過ぎると目が離せなくなるんだよ。 それはもう限りなく愛に近い憎しみというかw
目障りなんて一言も言ってないのにせん妄まで始めたか
>>881 お前、ちゃんと外出てるか?人間と会話してるのか?
rubyのようにメンバ変数の先頭に@付けたい あれすごいいいと思うのに、後発の言語も取り入れないな
884 :
デフォルトの名無しさん :2013/06/12(水) 23:43:11.43
>>882 おまえ、ちゃんと C++ で発話しているか? マシンと話しているか?
人語には幻想修飾あるいは期待値参照とでも言うべき面倒なものが多くて混乱するのはわかるが
885 :
デフォルトの名無しさん :2013/06/13(木) 00:29:18.26
ふむ
ここでアスペという言葉を多用するコミュ障が出現する予感
>>873 例外の何が気に入らないのか聞かせてもらおうか。
テンプレートと格闘すること数週間、メタプログラミング楽しい。 なんだこれ?変に気持ちいいぞw まあ他人の書いたテンプレートバリバリなコードは相変わらず読めないけどw
coccinelle.lip6.fr/docs/main_grammar013.html これあったらC++別にいらないし Cで十分だな
メタプロは頭のトレーニングにはなるが 自作ライブラリを活用する機会がそんなにあるかと言われるとそうでもない
テンプレートは手抜きのための仕組み。型を明示せず機械任せにする。 JavascriptとかPHPとか動的プログラムでは標準的。
マクロとかテンプレートとか、麻疹みたいなもんで、一度ははまる。 PL/1 は、プリプロセッサで if 文どころか for 文やサブルーチンまで使えたので、無茶苦茶凝れたのもいい思い出だ (w
それいいな 構造化マクロを次の仕様に入れようぜ void f() { #define N 100 #begin #define N 200 myputint(N); // 200 #end myputint(N); // 100 }
delete [] は配列のサイズが分らなくても開放できるのに なぜ我々は配列の長さを整数型に保存して使用しなければならないのですか?
vector使えハゲ
896 :
デフォルトの名無しさん :2013/06/13(木) 11:56:26.70
>>887 嫌いなところが多すぎるから、ああ言ったんだが
たとえばRTTIがもれなく付いてくることとか
>>895 vectorはクラス内部にsizeを保存して無いとでも?
馬鹿か?
配列newしたときコンパイラーはどっかにサイズを保存しているから delete[]が出来るとおもうのがごく普通の考え方とおもうんですけど、 我々がそのサイズにアクセスできれば各自でサイズを保存するような 二度手間は必要なくなるとおもうんですけど・・・
900 :
デフォルトの名無しさん :2013/06/13(木) 13:45:16.47
>>894 delete[]が必要とし、どこかから取得している情報は「配列のサイズ」じゃないからだよ
もっとも、デストラクタを実行する回数とか見てるとアホかと思うことはあるけどね
>>899 ヒープのサイズを記憶してるのはOS
ヒープブロック全体のサイズを知りたいならOSに問い合わせればいい
なるほど、C++言語のsize_ofがOSに問い合わせる機能を持ってないのがいけないのか。 なぜ実装しないのか、そこが知りたいと思うのは私だけだろうか・・・
>>899 ある領域を解放したり、サイズを取得したりする方法は、アロケータの実装次第なわけで、
でもポインタからは、その領域を確保したのがnewなのか、mallocなのか、OSのネイティブAPIなのか、ユーザー定義のアロケータか、はたまたスタック領域のポインタなのか区別できない。
確保と解放については常に1セットで使え(mallocとfree、newとdelete)という運用で
この問題を解決しているわけだけど、サイズ取得関数にそれと同じことを要求するのは難しい。
それとも何とかしてポインタからアロケータを判別して、よきに計らえるようにするか?
ポインタは領域の「先頭」以外の任意の場所を指すことができるから、前後のデータからアロケータを判別することはできない。あくまでアドレスしか手がかりはない。
方法としては、アロケータが管理している領域をアドレスで検索かけて、ヒットしたらそのポインタはそのアロケータで確保されたものとみなして適切なサイズ取得関数を呼ぶということになるんじゃないだろうか。
コストが鬼のようにかかると思うけどな。
まぁ、今書いたことは全部オレの妄想だけどね
malloc/freeに対応するサイズ取得関数、new/deleteに対応するサイズ取得関数、new[]/delete[]に対応するサイズ取得関数 をそれぞれ用意し、適切に使い分けるのはプログラマの責任、でいいんじゃね
ヒープブロックの先頭かどうかの判断を言語機能としてどう実現するのか アホ過ぎてヨダレ垂れたわ
906 :
デフォルトの名無しさん :2013/06/13(木) 15:44:41.30
実装するならするで、そう難しくはないんだけどね そんなアホなもん作って誰か喜ぶとは思えないし
operator newの返す領域がどこから確保されたかは コンパイラーは知らないんだから ヒープサイズをOSに訊くとかあり得ん。 operator [] deleteの前に適切な回数だけ デストラクターを呼ぶのを実現するには newの返したアドレスを一覧管理してるか、 必用より多めなサイズをoperator newに要求 して管理情報を隠し持たせるしかないんじゃないの
つまり一言で言うと D を使えってことだな
>>903 >アロケータが管理している領域をアドレスで検索かけて
取得したメモリを分割して提供するアロケータとかあるから入れ子も考慮せにゃならんし、
あらかじめすべてのアロケータをサイズ取得関数に教えて置く必要もある。
…ダルいなぁ、これ。
ここまで、delete[] operatorとoperator delete[]の
区別がついているのが
>>899 と
>>907 だけ
911 :
デフォルトの名無しさん :2013/06/13(木) 16:58:48.29
parse error と well-formed の区別がついてない人、そんなに多いか?
>>894 delete[]式がoperator delete[]を呼ぶ前に
適切な個数のデストラクターを呼び出すのは、
先頭要素の直前で配列要素数を覚えているから。
5.3.4p12
new T[5] results in a call of operator new[](sizeof(T)*5+x), and
Here, x and y are non-negative unspecified values representing array allocation overhead; the result of the
new-expression will be offset by this amount from the value returned by operator new[]
それを取得する機能が言語仕様に無いのが
何故かと訊かれると、それはわりませぬ。。
適当ぶっこいてる奴らばっかだな! 配列 new の普通の実装では 配列の要素数を格納する領域を余分に確保して その次の領域を返すんだよ。 ただし、デストラクタを呼ぶ必要のある型だけだけどな。 そういう実装である場合の動作例を挙げるとだな、 例えばデストラクタを持つクラス A の配列を new する事を考える sizeof(A) が 8 とすると、new A[10] とすると 一見 80 バイトの領域を確保すると思われるんだが、 実は 88 バイトの領域が確保される。 その先頭 8 バイトに要素数である 10 を入れて、 残り 80 バイトの先頭のアドレスを new A[10] は返す。 delete[] では渡されたポインタの前にある要素数を取得して、 その数だけ逆順ループしてデストラクタを呼ぶ。 C++ の規格ではこの実装を行えるように、 配列 new を行った際に new の引数に渡される確保するメモリサイズは sizeof(A) * 要素数でなく、更に +α があっても良いとしている。 operator new/delete をオーバーロードしてみると こういう動きになっているのが分かるはずだ。 operator new に渡されるサイズは +α されてるし、 operator new が返すアドレスと new A[10] が返すアドレスにはズレがあるし、 operator delete に渡されるアドレスは operator new が返すアドレスに一致し、 delete[] に渡したアドレスとはズレがある。 要するに要素数を云々する部分は operator new/delete の外で行われ、 operator new/delete はただ言われたサイズでメモリを確保し、 渡されてきたメモリを開放すれば良い。
ひとつ前のレスも読めない奴が 偉そうに
デストラクタの有無で扱いが変わるのもやってみれば分かるはずだ デストラクタが無い場合は、通常要素数は保存されない 保存しても意味が無いから。 new[] は確実に要素数を保存するわけじゃないから、 要素数を確実に取得する手段は存在しない。 だから自分で覚えておく必要がある。
ひとつ前のレスも読めない奴が 偉そうに
ひとつ前のレスも読めない奴が 偉そうに
>new[] は確実に要素数を保存するわけじゃないから、 >要素数を確実に取得する手段は存在しない なるほど勉強になった。ご苦労。
>それを取得する機能が言語仕様に無いのが >何故かと訊かれると、それはわりませぬ。。 なんてクソな事言ってるレスなんざ知らねえよ!
クソクソ言う奴が糞の法則
自己紹介乙
923 :
デフォルトの名無しさん :2013/06/13(木) 20:08:05.58
わずか1レス、しかも空行を数えても4行の中で自己矛盾とはねえw
おまえらよくそんなに勉強してるな 暇人とよんでやろう
> ひとつ前のレスも読めない奴が偉そうに 時差レスの可能性も考慮できない脳味噌ならプログラミングなんてすべきじゃねーな、と横で見てて思った。
レスの分量を見れば時差レスは明白なんだがね
時差で自己フォロー乙
>>914 おまえ何とか餃子の糞コテだろ?
1yスレから出てこないでください
いつも長文がうっとおしいです
929 :
デフォルトの名無しさん :2013/06/14(金) 00:31:06.71
餃子食いたいな 今日の晩飯は餃子食うか おすすめの餃子屋ある? できればテイクアウトできるところがいいがイートインオンリーの店でも可能
>>928 何で QZ でなく敢えて餃子と言ったのかは
知らんが、スルーしろやカス。
>sizeof(A) が 8 とすると、new A[10] とすると 一見 80 バイトの領域を確保すると思われるんだが、 どうみてもQZの文体でした
>>913 達人プログラマが無駄を削ぎ落としたコードでメモリを直接見たり触ったり管理するというのがCの文化やがな
配列長を管理してくれるしくみが固定長/可変長をとわずのべつまくなく配列につくとか
そーいうセンスからすると余計な機能やがな
935 :
デフォルトの名無しさん :2013/06/15(土) 02:03:31.27
つまらん・・
>>934 D&E読めや
最初はC++でも個数を言語側で覚えておかずに delete[10] p; という風に
解放時にプログラマが個数を指定するようになっていた
しかしあまりにもエラーが多すぎるのであんたの言葉で言うと「Cの精神に反する」
かも知れないが個数を覚えておく形式に変わった
歴史を見て物を言えや
削除にも個数書いた方がクールだよな
>>936 それであんな文法なのか。
にしても、サイズを覚える仕様を配列時のみに限定する辺り、
Cの精神が完全に無視されたというわけでもなかったりするんかな。
…ってCのfreeも(配列長ではないがメモリサイズを)覚えとるやん!
Cの精神云々関係なく実装コストとミス対策がせめぎ合ってきた歴史、
と解釈することもできちゃうかもなぁ…
何がCの精神なのかよく分からん 自前で覚えるのと比べりゃゼロオーバーヘッドだから問題ないだろ
>>936 うぜー言語にデストラクタを導入したから自滅した、というだけであって
そのエピソードはCの文化云々とは関係ないだろ;
>>938 典型的なmalloc()/free()の実装ならメモリブロックのサイズ/sizeof(T)でTの配列の要素数がわかる
が、malloc()の実装方法の詳細まで規格で決まっているわけではないから
環境によってはdelete[]の導入のせいで空間的コストを追加で支払わされるケースがあるのかも試練、
システム記述言語を、業務アプリに使うのが間違ってるだけ。 適材適所でやればいいよ。
>>940 mallocって指定した以上のメモリを確保する実装でも別にいいんじゃねーの
メモリブロックのサイズから要素数求められんの?
>>942 知らん普通はメモリ使用効率をとり、
malloc()で指定したサイズ=確保されたメモリブロックのサイズ(管理用のヘッダは除く)
のはず
マルチコアのシステムだとメモリブロックがキャッシュラインサイズ(128 Byteとか)の境界に整列していた方が
良いかもしれん(実際_aligned_malloc()みたいなものもある)んおでそう単純にも遺憾かも試練、
>>943 特定の境界にアラインされてないと char 配列以外で
パフォーマンス落ちたりCPUによっては例外出たりするから
メモリブロックを特定のバイト数単位で管理しているはずだと思う
アロケーションの都合で大きめにとることがあるんだから 実際に必用なサイズを記憶する必用は発生することがある。 長さを覚えるための領域のサイズは 先頭要素の前になるだろうから、 そのために必用な最小のサイズの計算は 要素のアライメントの情報を持ってる コンパイラでないと難しんでは。
946 :
デフォルトの名無しさん :2013/06/15(土) 12:13:18.01
で alignof と alignas ができたわけだ
>>944 ああ忘れてたわスマン
>>945 別に
そのシステムで整列に関して最も制限の強い型のサイズ(sizeof(double) == 8 Byte)とか)
の境界に整列させときさえすれば、整列に関しては無問題、
これはmalloc()を使うユーザープログラムのコンパイル時ではなくて、
malloc()のコンパイル時に決定できる
詳しくはK&R参照
キャッシュラインサイズで整列させないとまずいというのはパフォーマンスに関わる話
そのシステムで最も制限がキツイ型を得るマクロは?
>>947 >8 Byte)とか)の境界に整列させときさえすれば、整列に関しては無問題
4バイトですむ所も一律に8バイトに
すればokとかバカですか?
何言ってんの? mallocは何の型として使われるか分からないから 最大に合わせないとだめなんだぞ operator new も同じ
>>949 藻前は話を理解していない
>>950 だから、(環境によるが、典型的には)doubleで整列させとけばでおk
どんなサイズの構造体を作っても、開始アドレスを(環境によるが、例えば)8の倍数にしておけば
整列に関する問題は生じない
__m128や__m256を考えると
953 :
デフォルトの名無しさん :2013/06/15(土) 14:06:28.53
>>952 そういうレアケース(SIMD絡み)には_aligned_malloc()を使う
8バイトで済むところを毎回128バイト使っていると、>949に刺されっぞ
まあねw
そしてハブられる long double
そう言えばそんな型あったね
CPUの不動少数演算を使う限り、floatで事足りるんじゃ?
×不動 ○浮動
GPUの、なら分かるが
情報量が多くても誤差が小さくなるだけで無くならないからなあ
アナログで精度の高い計算が出来れば良いのだが アナログの方が精度が悪そうというのも
962 :
デフォルトの名無しさん :2013/06/15(土) 19:15:04.74
高精度が欲しければ拡張ライブラリがあるし アナログならオペアンプが腐るほど存在する
オペアンプって計算に使えるもんなの
>floatで事足りるんじゃ? やりたいことにも依るけど 8バイト無いと精度が足りなくて 困ることは希によくある
稀にっていうか、数値計算じゃざらだよ
>>957 あんなに有効精度が小さい型なんてマジ勘弁w
物理やると128bit欲しくなる事だってザラ
単精度でことたりるなら、SIMDの並列度が倍になる
>>963 電子式アナログコンピュータというものがあってだな…
現在でもアナログとデジタルの境界部分ではアナログコンピュータ的な処理も無いこたない
精度についてだがPCMオーディオで知っての通り、
民生品で固定桁24bit超えてくるからIEEE754の32bit floatでは有効桁が余裕で足りない。
アナログでデジタル計算するわけじゃなくて、 数値をアナログで表現して、アナログのまま計算するって事だよ アナログなら無理数も表せるという、そういう意味
971 :
デフォルトの名無しさん :2013/06/15(土) 20:45:51.77
だんだん意味わかんなくなってきた 円周率や自然対数の底をアナログで欲しいのか? それで1兆桁だか340澗桁だかの精度が欲しいのか? ちなみに観測可能な宇宙に素粒子はおよそ何個有るか知ってるか? たとえば 0.1 なら ratio<1,10> のような分数表現で誤差は避けられるが
技術が進歩しすぎて、計測器が精度20桁になったりするから困る ピコメートルとかフェムト秒とか、ほんと勘弁してください
まあそういうこと でも、アナログでやろうが誤差は入るんだろうし そうなるとあまり意味は無いのかな
アナログ2ちゃんねるにすれば複素数も計算できるね
しかしアナログ値同士の計算は可能なのかが問題だ 足し算引き算はともかく、他は難しそう
>>975 乗算回路とか積分回路とかとかいうのがあってだな……
あ、そういうの要らないです
>>976 おもしろいな
ハードの話はよく知らないから興味深い
まあオペアンプがスレ違いなのは確かだから何も言えないw
一番の感心所は 物理シミュレーションをオペアンプで実行できるかどうか、だ 特に、多体問題を解決してくれるとなお良い
もう埋めに入ってんだからどうでもいいじゃん
>>983 出来るよ
多粒子系を利用した多粒子系計算システムを組めばよい
>>985 あ、そういうのも要らないです
スレ違いの分際で開き直るとか
サイテーですね
産めましておめでとうございます
せめて次スレ立てて
994 :
デフォルトの名無しさん :2013/06/15(土) 23:18:58.61
アナログコンピュータノOSヲカイハツシタイ
次スレでは知られざるC++11の深層が 明らかになります
to be continued...
アナログマー
東大のパソコンオタクといっしょにアナログパソコンを作りましょう
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。