【初心者歓迎】C/C++室 Ver.82【環境依存OK】
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。
【前スレ】
【初心者歓迎】C/C++室 Ver.81【環境依存OK】
http://toro.2ch.net/test/read.cgi/tech/1354116880/ ◆ソースのインデントについて
半角空白やTABでのインデントはスレに貼ると無くなります。
そのため、アップローダーに上げるのも手ですが直接貼る場合は、
全角空白に置換すると見栄えだけはよくなります。
【アップローダー】(質問が長い時はココ使うと便利)
http://codepad.org/ (コンパイルもできるし出力結果も得られる[]privateをチェック)
http://ideone.com/ (時間帯によってはcodepadが重い事があるのでここも利用)
NG推奨:半角にして登録してくだい
◆QZaw55cn4c
/tech/1313183984/
>>1 80代からテンプレートが変、次代にはちゃんともとどおりにしておくように。
4 :
デフォルトの名無しさん :2013/02/04(月) 17:51:35.52
モルピグの開発とかやろうと思ったらCとかC++をやったほうがいいですか?
まずモルピグとは何かの定義からどうぞ。
>>4 仕様が分からんから何とも言えんが、蔵ならまだしも鯖側の処理は莫大になる可能性があるからCで作ったほうがいいだろうね
全プレイヤーの処理が集中するわけだからね
まずは作ろうと思ってるモルピグの設計からやれ
C必須だろ。 サーバ処理をPerlとかRubyでやってたら遅すぎて話にならない。 CGIと違って常時接続なうえに、恐らくマルチスレッドも必須。
Win32API質問箱はなんでキチガイの巣窟(スクツ)なんですか? なんかwinでC/C++を使うとキチになるじゃと心配です あとC/C++使っている人にはキチが多いんですか?
このスレでんなこと書いてるお前もキチ こんな風に反応してる俺もキチ
10 :
デフォルトの名無しさん :2013/02/04(月) 20:27:11.01
便乗質問 今動いてるモルピグ鯖はCで書いたんだけど、これC++にしたら遅くなる? クラス使いたいからC++に少しずつ書き換えていきたいんだけども、C++にすると遅くなるともかいた モルピグ鯖として致命的なほど遅くならないならC++にしたい
ゲーム系やろうとしてる割にはガキみたいな質問してるな
「C++にしたら遅くなる」とか言ってるのは 殆どの場合お前みたいな伝聞での思い込みか設計が糞 まともなコード書ける自信があるならC++でいい
>>8 あのスレに対して強烈な悪意を持って執着している変質者が
継続的に荒らしているからスレが機能していない。
たまにAPIスレに限らずこの板全体でたまにレス改変があるけど あれはどうやってるんですか?
>>10 アホみたいな質問だなおい
C++にしたら遅くなる?とか、例えばCのソースをまんまC++のコンパイラでコンパイルしただけじゃ何も変わらないし
少しずつ書き換えていきたいって思ってるのなら、書き換えないと実際に速度は変わらないからそれで実践しろよ
ま、俺の勘と経験と、あとどこかの記事の情報によると、継承を用いた多態をほぼすべての個所でガンガンに使ったり
した上で、遅くなるとして(Cが100%として)96%くらいだがな
この言葉を信じるも信じないも自由だが、たった4%の為にびくびくするくらいなら、自分で実際に元のコードを残しつつ試してみたらいいと思うよ
ちなみに一番重要なのは「CのコードをC++のコンパイラでコンパイルしたところで速度は変わらない」ってとこな。ベンダによっては違うかもしれないがw
16 :
10 :2013/02/04(月) 22:50:05.80
サンクス ちょっと書き換える方向でチャレンジしてみるわ
もるぴぐ作ってる奴ってサーバはやっぱリナックスなのかな。 ウィンドウズは確か同時接続数に限界があったはず。
#include <stdio.h> int main(){ int a; a = 3 + 5; printf( "3+5は%dです" , a ); return 0; } >bcc test.c >test.exe >3+5は8です なにこれ、8って表示したいだけなのに随分面倒だな。 真っ暗な画面に8ですとか出ても退屈で面白くないし。 つーかこんなことやっててゲームなんか作れるの? 数当てゲームとかじゃなくてファイナルファンタジーみたいなやつ作りたいんだよ。 こんなことやってて作れるようになるの? って最初思ってたけど作れるようになったわw 基礎は重要。 ゲーム作ろうと思い立ってまず書店にC言語の入門書を買いに行ったのは正解だった。
>>17 俺は鯖はLinuxだよ
Linuxはなぜかwinsock使えないし
Segmentation Faultとか出て落ちまくるから
かなりきつい
>>13 片山とかいうゴミコテだろ?
あいつ荒らししかしてないだろw
>>19 >Linuxはなぜかwinsock使えないし
普通にBerkeley/POSIX socketが使えるでしょう、というか、winsock は erkeley/POSIX socket を windows に移植したもの
>Segmentation Faultとか出て落ちまくるから
そりゃプログラムのバグでしょう
でもWindows環境(BCC)で問題ないコードをLinux環境(GCC)でコンパイルするとセグメンテーションなんたらよく出るよな
はあ?
それはwindowsで顕在化しなかったバグが出ただけだろ
逆にコードに興味が出てきた
変数のサイズを覚えるコツってありますか? longって何バイトだっけ?8バイト? shortが2バイトだから4バイトくらいか? いや、そもそもshortって2バイトだっけ?4バイト? booleanは1バイトだよな?1バイトか?1ビットあれば十分なのに1バイトか? intって環境によって変わるんだっけ? という状況に頻繁に陥ります 以前はポストイットに書いてディスプレイの端に貼っていたのですが ヲタっぽさに耐えきれず剥がしました そんな今では分からなくなるたびに検索している始末です 覚えるコツがあればお願いします 化学の元素記号を覚えるために「すいへーりーべ・・・」というのがありますが ああいう語呂合わせみたいなのがあると最高です
サイズなんて覚えねーよアホか 覚えるにしてもこれくらいだろ short≦int≦long
#include <stdint.h>
booleanとか規格に無いもん持ってくんなよ
31 :
27 :2013/02/05(火) 02:12:09.86
>>28 コーディングしながらざっくり計算したいときとか困らないですか?
malloc( sizeof( long ) * 100 * 100 )
だと、
ああ、だいたい40キロバイトか・・・
ちょっと多いような気がするな、
半分くらいにしとくか
ってな具合にコーディングしながらだいたい見当をつけられるじゃないですか
必要な時に必要な量しか取らないので気にしない そんなメモリの確保の仕方はしない
サイズは環境に依るし、本当に頻繁に陥るなら勝手に覚えてしまうものだと思うが。 いっそのこと毎回毎回 sizeof 表示するプログラムでも書きゃ覚えるんじゃね?
茶碗 (char 1) と ショーツ (short 2) は 長いよん (long 4) 、 不老死 (float 4) ダブルへ伊藤 (double 8)。
茶碗とショーツは長いよ〜ん♪ 不老死のダブルへ伊藤〜♪
>>32 アプリケーションによっては新規作成するとき等にとりあえず適当な量を確保するだろ
他にはストリーミングのときのバッファサイズとか
多いような気がする、なんて決め方はしねえよ 値を決めるんなら根拠を持て
そのうち嫌でも覚えてしまうわ
バイト数を決めて確保するなら要素数は不定 要素数を決めて確保するならバイト数は不定
>>27 依存するのなら面倒がらずに sizeof で記述する、でも
書き捨てならとりあえずほとんどの環境で
32bit: sizeof(int)=sizeof(long)=32 と覚えておくとよい
ほとんどの環境で 64bit: sizeof(int)=32, sizeof(long)=64 なのには違和観を覚えてしまうが、なぜこうなってしまったのだろう?
boolean が 1bit なのは自明、short はそのつど sizeof している
釣りはよそでやってね
だいたいで量を決めるって根拠が薄いんだけどな。演習だからとかそういうことではなく、自分が決めなくちゃ いかんことを決められないって話。
booleanとか無いし、boolのことなら「最低限真偽値を表現できるサイズ以上」でしかない VC++でもバージョンによって4Byteだったり1Byteだったりするし、そんな○型だから○Byteとか覚えるものではない どうしてもサイズを完全に指定したいなら、処理系に依存したビットサイズ指定の型でも使えば楽なんじゃないか?
typedef して word, dword, とかね。
WORDとかDWORDとか使うぐらいならshortとかlongとか使うわ
まず何の機種のものなのかを書かないとね〜 機種関係なく、コードの流れとして結果何をやっているかだったら応えられるが
>>47 ありがとうございます。
ひょっとして、スレチでしょうか?
ソースコードがないので逆アセンブルした物を元にCで書き直しました。
http://codepad.org/Mwek5qUR 出力が110C8531C00・・・となっています。
110C8531D00 = 123456780 (32進数)に近いので、32進数的な何かだと思うのですが。
ただ、逆汗しても、何もわからないでしょう それが、何するものなのか、わからないと...
>>46 いや、その short とか long が環境によって違うので、ラップして好きにかえられるように、と。
>>51 手抜きのつもりが#ifのネストですごいことになるんだよな
>>53 し、しまった、8で割るのをわすれてしまった‥‥
>>54 そういうレベルの問題ではないんだが・・・
そうそう、もっと根本的な日本語のレベルの問題 >違和観 なんだこれ
そういう低レベルな話じゃないから
64-bit 環境では VCは sizeof(long) == 4 で gccは sizeof(long) == 8 ほとんどの環境でlongが64-bitとか噴飯もの
60 :
デフォルトの名無しさん :2013/02/05(火) 23:13:46.65
longでも環境によって違うってマジかよwwwww 俺のソフトがやばい あ、それってコンパイル環境のこと?実行環境のこと?
実行環境で変わるわけないだろ
だからbit数保証したいならtypedef使えと・・・ stdint.h があるならそれ使うといいが ない環境を考えるなら自前で定義だな
C言語でintが64bitでないのは64bit環境ではない
マヌケはレスする資格無し
long long と勘違いしているのに 100 ペリカ
solarisだよ。ううん知らないけど
unsigned int 同士の足し算で桁あふれ検知したいんだけど キャストなしで先に検知する方法あるかな
レジスタ見ればいいんじゃね
unsigned x,y; unsigned msk=0xffff; // 32bit unsigned w=(x&msk)+(y&msk); unsigned u=(x>> 16)+(y>> 16)+(w>> 16); if (u>> 16){ ・・・// OF やっぱフラグレジスタ見れ
int8_t, int16_t, int32_t, int_32_t とか使えばいいんじゃ
>>67 x86でVC++ならこんな風にできるけど、ちょっとなあ・・・
unsigned int a = 0x80000001;
unsigned int b = 0x80000002;
unsigned int sum;
bool overflow;
sum = a + b;
__asm
{
jc OF
mov [overflow], 0
jmp END_OF
OF:
mov [overflow], 1
END_OF:
}
// sum == 3, overflow = true
2で割って足して、先頭bitを確認するとか? 余った分を足すのを忘れないように
#define isOverflow(x, y) (((x) + (y)) < (x) || ((x) + (y)) < (x))
>>75 間違った
×> #define isOverflow(x, y) (((x) + (y)) < (x) || ((x) + (y)) < (x))
○> #define isOverflow(x, y) (((x) + (y)) < (x) || ((x) + (y)) < (y))
#define isOverflow(x, y) (~(x) < (y) ) これでいいか
>>77 #define isOverflow(x, y) (((x) + (y)) < (x))
だけでいいね
>>74 は
#define isOverflow(x, y) (((x) >> 1) + ((y) >> 1) + ((((x) & 1) + ((y) & 1)) >> 1) >= (1 << (sizeof(unsigned int) * 8 - 1)))
かな
uint32_t isOverfloow(uint32_t x,uint32_t y) { uint32_t z; uint32_t a; a=x%2+y%2; a/=2; z=x/2+y/2; z+=a; return z&0x80000000; }
81 :
79 :2013/02/06(水) 15:52:30.85
>>80 ああ、そうだった。
ということで
>>79 は
×> #define isOverflow(x, y) (((x) >> 1) + ((y) >> 1) + ((((x) & 1) + ((y) & 1)) >> 1) >= (1 << (sizeof(unsigned int) * 8 - 1)))
○> #define isOverflow(x, y) (((x) >> 1) + ((y) >> 1) + ((((x) & 1) + ((y) & 1)) >> 1)) & (1 << (sizeof(unsigned int) * 8 - 1))
いっそのこと64bitで計算して判定すれば?
今日もWinAPIスレは楽しいな。ここもapiスレ同様に楽しいスレになると良いね
お断りします
hogeを禁止しない限りいずれそうなるだろ 今のWin32APIスレと同じで一回糞スレ化してしまったら元に戻すのは容易ではない
お前が死ねば平和になるよ
他人に向かってそういう風に言うように教育さるたんだね。 素晴らしいご両親だ。 あなたのご両親はまさに社会の財産。
他人に向かってそういう風に言うように教育さるたんだね。 素晴らしいご両親だ。 あなたのご両親はまさに社会の財産。
89 :
デフォルトの名無しさん :2013/02/08(金) 00:33:57.47
他人に向かってそういう風に言うように教育さるたんだね。 素晴らしいご両親だ。 あなたのご両親はまさに社会の財産。
Sultanだね。
hogeの話が出るとすぐ荒れるな
過剰反応する荒らしがいるからな しょうがない
ホゲはホゲサイトへ
C++でshared_ptr常用するようになってしまったんだけど もうこれJavaに移行したほうがいいのかな
shared_ptrとjavaに一体何の関係があるんだろう…
hogeと片山がこないとスレに活気がでないね
>>94 生ポ使わなくなったらもうC/C++は止めれ。Javaに移行せよ
C/C++はhogeと生ポが命
んなわけねーが、 C/C++ を使うべき所と そうでもない所は見極めるべきではある
言語の区別じゃなくてランタイムで区別すべき。 .NETフレームワークはパフォーマンスの点でどうしても ネイティブバイナリに劣る。そこがわかってれば、何を 使うべきかはおのずと判断がつくはず。 .NETが悪いわけでもネイティブがいいわけでもなく、 適材適所。
.NETはJITがうまく決まったり、 C++版だとサポートの弱いライブラリだと良いこともある。 スレッド周りの便利さは.NETならではだよな。
スレッドの Abort が便利すぎるな C/C++ でスレッド強制終了したら リソースリークが怖いし
いやでももう生ポインタほとんど使いどころないし ポインタのtypedef時の命名規則と、扱い(*を付けるか付けないか)が面倒臭くなってきたんだ テンプレートクラスでラップしてポインタとして扱わなくても機能するように 工夫し始めてたら、もうJavaもしくはC#で良いかなと・・・
そんなの遺産が無けりゃ好きにすりゃいいがな
配列を受け取る関数は 引数をナマポ+サイズにしておくと 配列でも配列クラスでも受け取れるので
組み込み系だとCくらいしか選択肢ないよな… 特に省メモリ環境だとアセンブラがメインに…
>>104 いやC++でいいだろ。
・・・あ、コンパイラが無いとかか。
組み込みでも10年以上前からC++コンパイラはある。 ただ開発をCにするかC++にするかはプロジェクトの 方針による。ヒューマンな理由から物理的な理由まで その理由は様々。
今Cが一番使われいる分野は組み込みなんだろ それ以外の分野でCが1番使われているってあるのか
言語の開発(コンパイラ、インタプリタの開発) OSの開発
どんなコンパイラやOS開発しているの?
gccもC++に移行したし、VCは元からだし
C++コンパイラがあっても規格準拠率がボロボロだったり
C++のOS、というのはきかないなあ、WindowsNT系の基幹系はどうなっているのだろう?
109だけど、ごめん聞き方悪かったみたい ここスレ住人は実際にCでどんなコンパイラやOS開発しているの? って聞きたかった
>>105 PICってマイコンだとマジでないね。
古い16F系統はともかく最近のアーキテクチャを高級言語に合わせたりMIPSのIPを使った製品でも
コンパイラがgccベースだってのに無い。
コンパイラがGCCって一点だけでPICをやめてAVRにしたわ。 ハード的な利点も多いんだけど。
>>115 えっと…言いにくいんだけどwinAVRもgccベースだよ?
って、すまん。 gccだからavrに乗り換えたって意味か。
ちょっと↑で出てたけどスマートポインタ類をtypedefするときの命名規則ってどうしてる? shared_ptr<Type const> の時も相まってすごく悩むんだけど
typedef std::shared_ptr<Type> Type_p; typedef std::shared_ptr<Type const> Type_const_p;
>>118 typedef の用途による。中身に応じた名前付けするぐらいならそんな typedef 要らないんじゃないの?
template<typename T>using S=shared_ptr<T>;
それよりmake_sharedに別名付けたい
それより unique_ptr<auto> p=f(); 出来て欲しい
むしろunique_ptrの使いどころ
>>124 ファンクタを定義せずにカスタムデリータを使えれば、ぐっと用途が広がるんだけどな。
unique_ptrあるならラムダ使えるんでないの
default_deleteの特殊化でいいんじゃね
インテリセンスの発音ってインテリジェンスと同じでええのん?
なんでやねん
インテリメガネみたいなアクセントじゃダメやろ?
長文ですが質問させてください。 インタフェースクラスはポリモルフィズムが行われる上で重要で 主に、概念(会社には社員がいるが部署ごとに仕事が違う)や 可能な操作(飛べる・描画できる)などをクラスに付加するために継承を行うようですが、 単純な差分プログラミングを行いたい場合に、 インタフェースクラスを継承してあらたなインタフェースクラスを作るというのは オブジェクト指向の考えとして間違っているのでしょうか? 例を挙げます。 ゲームを作る場合、プレイヤーの入力操作を扱えるクラスが欲しいとします。 操作にはキーボード操作、マウス操作、ゲームパッド操作などがあると思いますが、 環境に依存したくないので、それぞれのインタフェースクラスを作成しようと思います。 そこでまず、キーボード用に「あるキーが押されているかどうかを判定するメソッド」を考えました。 しかしこのメソッドは、キーボード用に作ったつもりでも見方によっては、 マウスは「左右クリック」が、ゲームパッドは「ボタン」が、それぞれキーに相当できると考えると 上記の用意したい3つのインタフェース全てに共通する操作なのでは?と思い至りました。 しかしながらマウスにはマウスホイールやマウスポインタが、 ゲームパッドには左右スティックが存在します。 つまりマウスとゲームパッドは、キーボードと同様に「キー入力を判定できる」クラスとして扱うことはできるが、 加えて、それぞれに必要なメソッドを追加しなければなりません。 このとき、「インタフェースを継承してあらたなインタフェースを作っても良いのでしょうか?」という疑問なのです。 長文失礼しました。
133 :
132 :2013/02/11(月) 21:53:30.33
すみません、長文で質問しておいて申し訳ないですが
質問用の長文を推敲する上でなんとなく答えのようなものが見えてきたかもしれません。
>>132 の例の場合だと
「ある識別子に対応したON/OFF的な情報を扱えるクラス」
「ある識別子に対応した1次元(正方向と負方向)の尺度を扱えるクラス」
「ある識別子に対応した2次元(x軸とy軸)の尺度を扱えるクラス」
でインターフェースを分ければ良さそうですね
全く別のデバイスを同じインタフェースで扱える利点はあるのか? キーとパッドくらいなら割と共通の感覚で操作すると思うけど マウスは完全に別判定なのだから共通化する必要性は無いと思うぞ
>>134 私の説明が下手ですみません。
>>132 の例は
もともと3つは同じインタフェースにするつもりはなく、別々のインタフェースを作るつもりだったが、
それぞれのインターフェースを作る過程で共通の操作が浮かび上がってきました。
インターフェースなのに共通する操作を抽出して差分プログラミングをしちゃってもいいのでしょうか?
ということ言いたかったのです。
実際は私の中でインタフェースと、差分プログラミング用の基底クラスが
ごちゃ混ぜになってるのが原因のようですね
まあ共通化するメリットがあればすればいいんじゃない?
>環境に依存したくないので、それぞれのインタフェースクラスを作成しようと思います
これは実装を隠蔽するためのインターフェイスだが
>>133 では機能を持たせるためのインターフェイスに摩り替わってるのが混乱の元じゃね
ゲームでは往々にしてキーコンフィグがあるので、 キーやパッドのボタンをダイレクトには扱わない方がいい ゲーム内で使用する仮想キーコードを用意して それに対してマウスのボタンやキーやパッドのボタンを割り当てる そして、入力に対する処理はこの仮想キーコードを使って行う マウスとかキーボードとかパッドとか そういうのは設定画面以外では隠蔽してしまうべきだな
>>136 >>137 確かに、理論よりもメリットを優先すべきですね
>>138 参考になります。
特に多数のボタンを1つに割り当てたりする場合も考慮して
アプリ側の仮想コードと対応テーブルは重要そうですね
決定はマウス左クリックとEnterキーとZキーとAボタンとスタートボタンで行える、とかね キー・ボタン系は仮想キーコードを使用した入力で統一 十字キーとアナログスティックも共通化できると思う マウス移動は移動量でなく絶対位置で扱う事が多いので 十字キー/スティック操作は別個に扱った方がいいと思う
タイトル画面ではキーマッピング固定、キーコンフィグでの指定は実際のプレイ中のみ反映、ってパターンもあったね。
だんだんスレ違いになってきたな
144 :
デフォルトの名無しさん :2013/02/13(水) 10:52:06.22
すいません、Objective-cからc++をやり始めたのですが、メモリ管理で若干つまづきました… std::shared_ptrを使ってインスタンス変数を宣言していたのですが、 その変数に代入して{}を抜けると、代入したものがdelateされてしまいました。 Objective-Cのretain/releaseのように参照カウントの上げ下げ?を自分でしたいのですが、どうすればいいですか?
>>144 外のスコープにある shared_ptr 変数にコピーすればいい。
あるBaseクラスを継承したSubクラスがある場合 Base* base_p = new Sub; base_p->DoVirtualMethod(); DoVirtualMethodがオーバーライドされていればSub側の処理が行われますが、 void Test(Base* pt) { pt->DoVirtualMethod(); } このような関数に上記のbase_ptを渡した場合でも Sub側の処理が行われることが保証されるのでしょうか? また、std::iostream郡で試したところ void Test(const Base &ref) { ref.DoVirtualMethod(); } このような関数にSubの変数を渡しても正常に動作することがわかったのですが これは上記でいう*base_ptを渡した場合でも同じことになるのでしょうか?
当たり前だろ
virtualならそうかな?
派生クラスと呼ばずに子クラスやサブクラスって呼ぶの日本だけ?
151 :
デフォルトの名無しさん :2013/02/14(木) 21:20:07.88
vector<int> a = {1,2,3,5,9,1000}; みたいな感じで整数のベクタを配列みたいに初期化したいのですが、できますか? push_back()とか使って1個ずつやらないとダメですか?
C++11対応コンパイラ、STLを使えば可能
VC2010でもarrayなら初期化子リストつかえるよん
154 :
デフォルトの名無しさん :2013/02/14(木) 22:26:10.13
GCC 4.6.3で-std=c++0xオプションでコンパイル通りました。
C++11が使えないなら 一旦配列を用意してからそれで初期化だな const int a_init[] = {1,2,3,5,9,1000}; vector<int> a(a_init, a_init + _countof(a_init));
initializer_listは確かに地味に便利
地味にというかあって当たり前というかなんで今までなかったのかという Vector(コンテナではない)を複数渡したい時にいちいちVector(a,b,c)ってするのめんどくさすぎだった
>>151 それは何でか知らんが駄目なんだよ
普通はvector<int> a({1,2,3,5,9,1000});
コンパイラによる
scanfをC++のiostreamに移行してるんですが、 例えば scanf("%[^abc]", str); は、std::cin で書くとどうなりますか?
書式指定じゃできない peekで読んでチェックしてマッチしてたらignoreで進めるとかする
fgets()+sscanf()ならsscanf()をそのまま使えばいいと思うのだけどね。
clibを組み込まないC++コンパイラってあるのかね?
↓みたいな感じでラムダ引数の関数を持ったクラスを定義したいのですが、 jni/Hoge.h:3:30: error: 'void Hoge::test(Func) [with Func = main()::<lambda()>]', declared using local type 'main()::<lambda()>', is used but never defined [-fpermissive] というエラーでコンパイルが通りません。 どのように書けばよいのでしょうか? //Hoge.h class Hoge { public: template<typename Func> void test(Func func); }; //Hoge.cpp #include "Hoge.h" template<typename Func> void Hoge::test(Func func) { func(); } //main.cpp #include <stdio.h> #include "Hoge.h" int main(void) { Hoge *hoge = new Hoge(); const char* str = "hogegohe"; hoge->test([&]{ printf(str); }); return 0; }
×hoge->test([&]{ ○hoge->test([&](){
167 :
デフォルトの名無しさん :2013/02/16(土) 16:34:09.41
将来3DCGを使ったインタラクティブな体験型アート(インスタレーション)を 制作したいと思って、プログラムの勉強でもしようかと思っているものです。 この場合、CかC++のどちらを勉強するのが良いですかね? 普段は仕事で科学計算とかしたりするんでFortran使いですが、 その点Cも勉強すれば一石二鳥な感じはするのだけど、ググってみると C++を使ってる人が多いみたいで。CでできなくないならCがいいのだけど、 何分初心者なもんで、さっぱりわかりません
>>164 荒らすためにネタ質問を投下するのはやめてもらえませんか?
結構本気で迷惑です。
>>167 C++はCを内包しているし、取り敢えずCからはじめればいいんでない?
つーか、最終的には使いたいライブラリ次第だと思う。
Cしか勉強しないと決めてしまうと、C++で使うライブラリを使えないことになってしまう。
3DCGとか、C系でゼロから作るのはかなり大変じゃね? 結局ライブラリ使うならC#とかJavaとかの方が、全然楽な気が。 以外とHTML5 + JavaScriptってのもありかも。
>>164 ヘッダとソースに別けずにHoge::testの定義もヘッダ(Hoge.h)に書く
>>164 Hoge.cpp の内容を Hoge.h に持っていけば?
174 :
デフォルトの名無しさん :2013/02/16(土) 19:21:46.21
プログラミングスキルは身に付いてないけどHogeは記憶してる
>>164 がクズすぎるw
人生諦めればいいのにw
まぁいいんじゃない? >164は歩く恥さらしとして我々を楽しませてくれている。 楽しませるといっても嘲笑の対象になってるだけだがwww
hogeが出ると基地が集まって来て楽しくなるよな
ここもapiスレみたいになると楽しくて良いよな
>>171 3D関連ならC/C++が一番情報が多いから、結局C/C++でやった方が楽だと思うよ
unityみたいなゲームエンジンを利用するのもアリかもしれないけど
GCで一瞬画面が固まるのが問題なんだよな JavaではパラレルGCで止まらなくなったけど
いるよね、どうでもいいことばかり覚えて仕事は覚えられない池沼
マジで迷惑だから社会に出てこないで欲しい
お前のことだよ
>>164
hogew 大学の先輩で使ってる人いたけど卒業してから速攻縁切ったわw メールも電話も着拒したw関わりたくないもんw
今日はwin32apiがさびしいから、ここなのか Hoge降臨だからしょうがないか
hogeとか使う人って困った人が多いよね。 プログラムが楽しくて何か発散せずにはいられない、 なんていうのかな、、奇をてらっているというか、 ノリが不自然というか、キョロ充というか、 白々しいというか、、要するにくだらない人が多い気がする。
hogeごときで騒ぎ立ててるのもどうかとおもう
縁を切ったと思っているが、 それ向こうから縁を切られてるよ
何もしらないヴァカが妄想したかw哀れw 自分がhoge使ってるからそういうことにしとかないと耐えられないんだねw 縁を切られたトラウマでもあるのかねwかわいそうw 飲みに誘うメールが来たからその場で着拒してるのに向こうから切られてるとかwウケルw
>>185 は縁を切られるたび、振られるたびに、「俺のほうから切った」「俺のほうが振った」って思い込むことで自己を保ってる可哀想な人間なんだよ。それじゃあ何も解決しないのにね。
188 :
デフォルトの名無しさん :2013/02/16(土) 21:03:46.85
ホゲ ← 馬鹿じゃねえの
189 :
デフォルトの名無しさん :2013/02/16(土) 21:42:28.18
ho守あge
>>170 ありがとです。
ここに書き込む前に少しググってみましたが、OpenGLやDirectXといった
ライブラリを利用する、というページをいくつも見ました。
特に、CよりもC++の方が圧倒的にネットの遺産はあるようで、
観念してC++から勉強始めたいと思います。
>>171 0からというわけじゃなく、たぶんライブラリーを使うのかと。
調べたらC++とかでもありそうです。自分はCはどうなのか、というのが
凄く気になっていて。
>>178 仰る通り。特にC++の情報が多いみたいですね。
hodgepodge ごたまぜ,寄せ集め
193 :
デフォルトの名無しさん :2013/02/17(日) 02:16:08.96
純粋に気になったんですが、なんでhogeが嫌われてるんですか?
hogeというキーワードに対して強烈に反応する人がいるから。 幼年期の生育環境や親のしつけに強い問題があったと推測される。
195 :
デフォルトの名無しさん :2013/02/17(日) 02:36:48.11
ああなるほど… 言っちゃいけないワードなんですね… puyoにします。
>>193 プログラマは合理的でなければならない
hogeには使用すべき合理的な理由がない
加えて、hogeは日本独特のものである
hogeを使うということはhogeに慣れ親しんでいる可能性が非常に高い
世界のプログラマ人口の中でも日本語を使用する人口はごくわずかであり、そのわずかな言語圏にしか存在しないhogeに慣れ親しんでいるということは
普段のプログラミングに関する調査や学習で利用するウェブサイトにおいて、日本語のウェブサイトを見ている率がかなり高い
情報量はその言語の利用者数に比例するため、例えば日本語の情報は英語の情報に比べると極めて少数であり
わざわざ情報量の少ない言語に絞って学習や調査を行うという自らハンディキャップを課す奇行を行たうえで
他人に質問するという異常な行為を行う者はプログラマの中から排除すべきだから
メタ構文変数が2系統ある分には便利なんだけどね
なぜ日本語で書かれている2ちゃんねるのプログラム板に来ているんだろう
夫がhogeに殺されてから1年が過ぎました
このスレで英語の情報を期待する馬鹿がいるってこと?
>>196 という馬鹿でキチガイが住み着いている
ム板にIDがないのをいい事に
こいつ一人だけが必死でhogeを叩いているだけ
>>201 そうやって仮想敵を一本化するのって流行ってるの?
マイノリティ化して心の安定保ってるみたいだけど妄想垂れ流しで阿呆っぽい。
本当にただのアフォなのかもしれんが。
・・・と思ったら馬鹿でキチガイって自己紹介してた。
203 :
デフォルトの名無しさん :2013/02/17(日) 07:26:42.84
>>177 Hogeが禁止にならない限りいずれはああなるような気がする
てかすでになり始めてるか
>>204 hogeを禁止するのではなくてhoge発狂馬鹿を出入り禁止にするべきだろう。
hoge発狂馬鹿を徹底的にたたけばいい
宿題スレで幇助幇助って騒いでる奴もこっちのhageと同じ感じがするな
207 :
デフォルトの名無しさん :2013/02/17(日) 09:54:11.30
>>205 に賛成!
そうすればwin32apiスレみたいに炎上して楽しくなる!
まともな質問者&回答者はそれで去っていくし面白そう!
次からhoge発狂厨がきたら叩きまくろう!
老兵「もうじきここは戦場になる」
209 :
デフォルトの名無しさん :2013/02/17(日) 10:16:57.28
んだよ、hogeって嫌われてるのかと思っちまったじゃ無いか…
210 :
デフォルトの名無しさん :2013/02/17(日) 10:30:52.65
hoge使ってる奴はキチ
そうだ、予約語にhogeが来ればいいんだ
ホウヂ
>>212 ↑
見事に釣れたキチ
身に覚えがあるんだろうな
プログラムにhogeを使っている奴には真性キチが多いからな そのキチに激しく叩かれて、hogeアンチキチなってしまった奴が非常に多いから hogeが出ると激荒れになるにはしょうがない。 hogeアンチキチは真性じゃないからhogeが出ない限りあまり発狂しない
単にプログラマーにキチが多いだけだろ
>>218 プログラマーはあの猫激ラブ片山見たいなのが極普通って感じだからな
それ以前には、江東区で女をばらばらにしてトイレに流した奴がいたよな
キチだからプログラマーになるのか、プログラマーの職業病がキチなのか...
>>216 > 見事に釣れたキチ
すごいなぁ、まだ後釣りとかしてる奴がいるんだ…
hogeが来る度に荒れるのにはうんざり
222 :
201 :2013/02/17(日) 19:23:38.25
頭が悪くて全く反論できないので馬鹿キチ自演乙と罵ってみました^^
223 :
デフォルトの名無しさん :2013/02/17(日) 21:25:49.10
>>221 これからはhoge厨がアンチhoge厨を叩くらしいから叩き合いになってさらに大荒れになるよw
224 :
デフォルトの名無しさん :2013/02/17(日) 22:05:32.07
あ
HOGE厨マジでウザいな スレを荒らしたくてHOGE使ってるだけの可能性もある 特に質問に対してHOGE叩きとマジレスの両方が来てる場合に、マジレスのほうにすらレス返さずに消えてる奴とかな まあ無意識にHOGEを使う奴もわざとHOGE使ってスレを荒らすことを生き甲斐にしてる奴も同程度に頭おかしいけど
おまえがhogeに過剰反応しなければいいだけ。
foo, bar, bazがいいよ > 初心者のみなさん
hoge, hage, fuga, piyo、どれもお勧めです、馬鹿が沢山釣れますよ > 初心者のみなさん
なんでそこまで反応するのか分からんけど、相手に求めても応えてくれるか分からんのだから 反応しなきゃいいのにな 簡単なこと
単なる構ってちゃんでしょ
231 :
デフォルトの名無しさん :2013/02/18(月) 10:53:42.23
hoge使ってるプログラムの解説サイトってロクなのがないw 本も買えない乞食が見るだけだからそれでいいのかもしれんがww
はいはい、金のある富豪さんはこんな掃き溜めにいないで、家で一人大量の本に囲まれて2828しといてください
>>219 そういえばあれ、頭はどうしたんだろ
頭蓋骨をトイレに流すまで細かくするとか難しくね?
白骨化したやつならまだしも生の状態からだろ
hogeの総本山のapiスレがいつものキチスレになれば、ここは平穏になる apiスレをいつもほげスレにしてあげないと、このスレは死ぬな
あそこでhoge見たことないけどな
>>233 肉は腐敗すると膨張する。よって冷蔵庫を一つ用意し、ばらばらにしたのを冷蔵して少しずつ捨てる
殺したときは勢いとかでやっちゃったのかもしれんが、そんなに長時間興奮(?)状態が続くわけもなく、冷静になった状態でバラしたと考えられる。 しかも頭までトイレに流せるくらい小さくって言ったら4センチ四方以下くらいにしなきゃならない。 あの事件で逮捕された奴って被害者に好意を持ってたらしいけど、好意を持ってた相手の頭をバラすとか普通無理。 そんな作業するくらいなら自首するほうがマシな気がする。
すいません。 こんな感じのヘッダファイルを作って hogehoge.h #define MY_INCLUDE typedef unsigned int uint32_t; typedef unsigned short uint16_t; さらにこのヘッダファイルをインクルードするヘッダファイルを作って foo.h "include "hogehoge.h" でコンパイルをかけたところ、 hogehoge.h:warning: useless keyword or type name in empty declaration hogehoge.h:warning: empty declaration hogehoge.h:warning: useless keyword or type name in empty declaration hogehoge.h:warning: empty declaration と言うエラーが出たので、ソースをプリプロセスしたところ、 たしかに # 1 "hogehoge.h" 1 と空白でした。 初めて見たワーニングなのですが、 このエラーはどういうときに起きる物なのでしょうか?
#include "hogehoge.h" ^?
STLのvectorって複数スレッドからアクセスしても大丈夫でしょうか。
読み取りだけならな
warningをワーニングと言うのは田舎臭いからやめたほうがいいよ
hoge使ってるようなキチガイに田舎臭いとかそんな感覚ないだろ
まともな感覚してたらそもそもhogeなんて使わないわけだし
hoge使ってる時点で精神異常
みたいな感じのアンチレスで満足ですか?>荒らしの
>>238
スターワォーズ でよかった?
♪今だ! 必殺! 戦刃旋風斬り! ワォー!
war ウォー warm ウォーム warn ウォーン warning ウォーニング worm ワーム 通常のar, orと、war, worのar, orは発音が違う。 warm wormと覚えよ。と教わった。
>>247 言語の発音と日本語表記になんか関係でもあるのか?
249 :
デフォルトの名無しさん :2013/02/19(火) 09:47:23.27
これが日本人プログラマーの現状だ 世界に発信できるソフトウェアを作れない
アワード ホントは、award(アウォード、賞)
カタカナで書いてもぉ〜
カタカナで表記するのがムリ
warningを「ワーニング」ってナイツのヤホーと同レベルだよな
ちがうよ
だから辞書見て発音記号調べろって。
カタカナにない発音を持つ言語をカタカナで表記しようとしてる馬鹿がいるのはこのスレですか?
無理やりカタカナにすれば ゥォァーニンじゃね?
日本語に発音できない音声などない あってはならんのだ、この世に存在してはならんのだァー!
単に`Warning'の日本語訳の一つが「ワーニング」ってだけで、 発音とか関係ねえよ
>>259 その通り
warningは英語、ワーニングは日本語
お前らが使っているイギリスって英語なのか?
イギリスって言っている奴っては恥ずかしい奴だよな
イギリスでイギリスって言って通じるのか
日本語のワーニングの元が英語のwarningってだけ
さすがhogeスレだけあってキチで低脳が多いな
warning, working, walking,
ウォーク、何をしていると思う?
歩け
ほげ〜
次に現れる位置が確率的に無作為(ランダム)に決定される運動 ランダムウォーク(英語: random walk) - Wikipedia
ワーク、何をしていると思う?
キャッチ キャッチト キャッチト
if (NULL == ptr) って書く人間が社内にいるんですが、 せめて if (ptr == NULL) と書いてほしいですし、 一番分かりやすいのは if (!ptr) だと思います。 みなさんはどう書きますか?
if(ptr) { ; } else
変数と定数を==で比較するときは、意識して定数を先に書くようにしてるわ。 直感的に書きづらいこともあるけど、万が一「変数 = 定数」と誤記した場合のことを考えると書き直したほうが安心できる。 !=とか<=とか代入にならない場合だと意味的に見やすい方で、というかそのときの気分で書く糞pgですが。
NULL==ptrはNULL=ptrと間違って書いた場合コンパイラがエラーだしてくれるからそう書くんだそうだ でも俺もptr == NULLって書いちゃうけどね !ptrは一瞬首をかしげるから視認性重視でptr == NULlかな
bool isNULL(void*);作って if (!isNULL(ptr)) する。
ウォーニング(発音おっけ?)レベルを -W -Wallにしとけば コンパイラが教えてくれるしね。 むか〜しのCマガジンで if(fp) と書くより if(fp!=NULL) の方がいいってのはあったなぁ。 まぁ結局慣れなんだけど。
ptr=NULLでも大抵のコンパイラは警告出すけどね
if ()←ここをブーリアン型として統一的に扱ってる人とそうでない人じゃないの
ま〜だ if(定数 == 変数) とか言ってる奴がいるのか… 習性ってなかなか直らないモンなんだな。
=と==の視認性の悪さが問題なんだよな A=Bなら代入で A=B?ならbool値を返す、とかなら・・・(でもこれはこれでBが長くなるとまた問題になりそうだが)
条件判断をする場所で代入もするという横着をやめてしまえば 頭が条件判断のカッコの中では=を2連打するように切り替わる。
if(shared_ptr<foo> ptr = flag ? a.lock() : b.lock())
281 :
デフォルトの名無しさん :2013/02/20(水) 11:53:52.90
>>279 俺は最初から横着したことなかったから
>>278 が何を言ってるのか分からなかったがそういうことか
Wirthさん「代入は := って書けばいいじゃない」
>>279 俺も横着したことは殆ど無いけど、それでも入力ミスは発生するんじゃないかな。
>>279 条件式の中で代入する時は俺は必ずカッコで囲んでいる
実際そうすると警告も消える
それは代入の優先順位が低いからじゃね?w
>>286 コンパイラに「ここはわざと代入してんだよ」と教えることも出来る
if (!!(a = 1)) { ... }
>>288 !演算子に副作用がある型だと死ねるな。
いやboolを返さん限りはオーバートードできないだろ
>>290 関数がboolを返すことと副作用があることは矛盾しないだろ
相談室にいましたが初心者スレのほうがいいと思ったのでこっちで質問します。 #include <iostream> using namespace std; class Parent { private: class Child { private: string name; public: void setName(string name) { this->name = name; } public: string getName() { return this->name; } }; private: Child child; public: Child getChild() { return this->child; } }; int main() { Parent parent; parent.getChild().setName("ko"); cout <<parent.getChild().getName()<< endl; } これで子の名前が帰ってこないのはなぜなのですかね?
>>294 C#使ってたんだろうけど
parent.getChild().setName("ko"); このgetChildが返すインスタンスと
cout <<parent.getChild().getName()<< endl; ここでのgetChildが返すインスタンスは別物です
classの中にclassを入れるのはproxy classでしか使った事がない・・・
>>294 C++ で、クラスを返す関数を書くと、その関数が返すクラスは「一時変数」。
return this->child
とかいたときに関数の外にかえってくる Child は、this->child そのものではなく、「this->childと「値が同じ」」別物だ。
298 :
297 :2013/02/21(木) 20:17:19.35
299 :
297 :2013/02/21(木) 20:22:20.29
newしていなくてもインスタンス化されてるんですか?
>>300 すみません、やり直すどころか昨日はじめました
>>302 じゃあ基本からやった方がいいよってことでw
>>296 Childクラスを内部クラスにしない書き方も練習しようと思ったのですけど、その場合たとえば条件として
・ChildクラスのメソッドはParentクラスからしか呼び出せない。
・Childクラスは独立してインスタンス化したくない。
のとき、うまくかけるんですかね
Parentクラスを通してしか操作する気がないChildクラスであるならば、他から参照できないほうがいいですよね?
>Parentクラスを通してしか操作する気がないChildクラスであるならば、他から参照できないほうがいいですよね? うん そういう時は普通に内部クラスにするよ
>>305 ですよね、ありがとうございます。
あれ、なんでインスタンス化の話になってんだろと思ったら設計を勘違いしてました。入れ子にしたんだからこうするべきでしたね
#include <iostream>
#include <windows.h>
using namespace std;
class Parent {
private: class Child {
private: string name;
public: void setName(string name) { this->name = name; }
public: string getName() { return this->name; }
};
private: Child child;
public: void setChildName(string name) { this->child.setName(name); }
public: string getChildName() { return this->child.getName(); }
};
int main() {
Parent parent;
parent.setChildName("ko");
cout <<parent.getChildName()<< endl;
}
Childを隠すならまあそうだよね でもコピーコンストラクタや テンポラリオブジェクトについては 別途調べておいた方がいいよ
#include <iostream> using namespace std; class Animal { public: enum AnimalType { DOG, TIGER, TANASIN }; private: AnimalType animalType; public: Animal() {} public: Animal(AnimalType animalType) { this->animalType = animalType; } public: AnimalType getAnimalType() { return this->animalType; } public: void noise() { switch(animalType) { case DOG: cout <<"Ruff Ruff"<< endl; break; case TIGER: cout <<"Glug Glug"<< endl; break; } } }; int main() { Animal *pappy = new Animal(Animal.AnimalType.DOG); } これができないのはどうして?
Animal::DOGだよ だから基本からやれってwww 文法分かってねーだろw
>>309 いや、コミュニケーションしましょうよ。あなたも復習。私も勉強。
Animal *pappy = new Animal(Animal.AnimalType.DOG);
ここは通りましたが、
pappy.noise();
で泣いてくれません;;
Animal *pappy = new Animal(Animal::DOG); pappy.noise(); でパピーが鳴いてくれない
->使えよw 基本的すぎて何も勉強にならねえよwww ていうかエラーメッセージくらい嫁
>>312 this.name = name;
はダメで、
this->name = name;
は習ったけど次は->をどこに使うのよ?
いいから本読め
Java脳かC#脳過ぎてワロタww
316 :
デフォルトの名無しさん :2013/02/21(木) 22:40:45.05
public public pblic wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
これだから専門は
DOG = 0 の = 0 は別に不要じゃ
懐かしい記事だなw そんな事もあった
= 0 書きたがる人っているよね よく分からんが糞コンパイラでハマったのか?
>>315 逆にJava/C#から入ってきた人のコードがすごくみえてしまうのですけど最初からこんな風におもいつくのかと by K&R1C脳
アロー演算子が何を意味するかが理解できてないのか。
>>323 C++は「出来るだけ新しいキーワードは増やさない」という標準化委員会の意向があるので
同じキーワードや同じ書き方にいろんな意味を持たせる傾向があって、最初は「なにこれ?」と
思うかも知れんね
>>326 純粋仮想関数の = 0; は許せたけど、C++11ではclassに = 0; を付けると sealed、
つまりこれ以上継承出来ない意味になったんだっけ
boostにnonderivableというのがあったけど
うわっ気持ち悪い = delete; と = default; なんだね こういう変態的な文法だからいろいろ言われるのか まあ仕方ない
>>306 ああ移譲の話か
それコンポジションでも良く使うテクニックなので覚えておこうね
まぁどんぐりの背比べだな ポインタ使えるところからJavaやC#きたらそれはそれで恥ずかしいコード書く
おい、C++のポインタ廃止にしろ。初学者に邪魔。 あと、this.nameができるようにしろ。アスタリスクはなくせ。
ていうか、自分はpappyていうインスタンス名をつけたいのに何で頭に汚いマークつけないといけないわけ? だからといって *pappy.noise(); はダメなんでしょ? うちのpappyをなめてるとしかいえない。
(*pappy).noise(); ならよい。基本的にa->bは(*a).bと同じ
>>333 ホントだ。
だけど、
Animal *pappy = new Animal(Animal.AnimalType.DOG);
がダメなのが許せない。
だってさ、Animalクラスの中で「AnimalType」っていう名前でenumを定義したんだよ?
何故に
Animal::DOG
で呼び出せちゃうわけ??
つまり、Animalクラス内にAnimalTypeとは別のenum、
public: enum AnimalMoveType { WAIT, MOVE, WALK }
があったとして、
Animal::WAIT
で呼び出せちゃうとAnimalTypeとAnimalMoveTypeはまるで同じenum内にあるみたいじゃん。
これは正直どうなの!?
javaなら
new Animal(Animal.AnimalType.DOG);
で安全に呼び出せるんだけど。
>>334 どうでもいいけど、なんでいちいちnewするの?
>>335 pappyのほかにpotiが飼いたい場合どうするのよ
「何故いちいちnewするの?」って質問はご法度じゃないかい? 逆に聞きたい。「何故わざわざ部品として将来利用し辛い形に設計するの?」
普通継承して仮想関数を使うけどね caseやif文で分岐させるようにしてると悪い癖が付くよ
>>339 え!
C++ってenum switch非推奨なの?Javaじゃありえないんだけど。
>>341 なになにっ!?
C++はそんなに他からの学習者を寄せ付けない方針なの!?
確かに心当たりある。
javaはCから来た人にも導入しやすいように
int[] a = new int[3]; も
int a[] = new int[3]; もおkにしてる。
だけど!C++は前者を許してくれない。ひどい。もっと互いに仲良くするべき。
上がOKで有り難みが感じられない(´・ω・`)
加えて this.name = name; も許してほしい。 あと、ポインタは難しいのでなくす方針でおながいしますね。
Qは無職の老害の癖に偉そうだな
>>343 相手にすんな
町内の皆さん、聞いてください。これが恩をあざに返す です
>>343 ひどいよ。
仲良くしようや。
誰が恩を提供いつどこで提供したのか言ってもらおうか
だいたいJavaはC++の真似してる癖に
>>346 日本語おかしいですよ?
日本人ですか?
言うなら「恩を仇で返す」でしょ?
>>349 それお前が書いたんだろ
自作自演みっともないからやめろ
言語が人に合わせるんじゃない 人が言語に合わせるんだ
それが嫌なら自分で自分専用の言語でも作れってこった
もうちょっとJava使いにもわかりやすくしてほしい。言いたいことはそれだけ。 使いにくいことを売りにして、そういう趣味の人を囲い込んでるのだろうか・・・。
>>342 C++ のほうが古いし泥臭いし仕方がないっす。たしかに後発のjavaの方が合理的だから許してね
C/C++はオブジェクト型(参照型)に対してもプリミティブ(単純型)と同じように名前で実体全部を表現することを含ませているんです
>>355 だから世界はお前中心に回っているわけではない
嫌なら無理して使わなくていいから
>>354 えっ!?それはどうしてなの?
public static final int DOG = 0;
public static final int TIGER = 1;
としてたなら、直接変数に3や4を入れちゃうと・・・ってことでenumは便利だと。
だけど、implementsですむならimplementsしろってこと?
ちょっとわからない。
「extendsするより可能ならimplementsにしろ」ってのは聞いたことあるけど、enum switchがためらわれるなんてきいたことがないよ!どうなってるの
>>358 もうお前うざいからJavaスレに逝って帰ってくんな
>>356 C++とC/C++って別なの?
C かつ C++ イコール C/C++と表現してるわけじゃなくて?
正直俺にとってC++は難しすぎるよ。ポインタは難しいと聞いていたがここまでだとは思わなかった。 ここで学習をやめるべきかな?それとも続けたらわかるかなぁ。
>>344 >>356 java のオブジェクト型/参照型は new 以外の生成法がないから、a->b() と a.b() を区別する必要がない。
C/C++ はオブジェクト型に対して new を書かないオブジェクト生成がありうるのです。
そして、this はポインタと決まっているので。
java にほしいのは参照渡しだなあ‥‥C# にはあるのに。
>>362 >new を書かないオブジェクト生成がありうるのです。
これって例えばどういう利点があるの?確かにはじめC++で悩んだのが、
Test test;
test.method();
でちゃんとインスタンス化?されているらしく、動いたこと。
故にnewはなくてもいいんだなと単純に解釈したが、newはnewで存在していた。そしてポインタにぶちあたった。
>a->b() と a.b() を区別する必要
ここが知りたいです。教えてください。
>>358 animal を分類区分けして dog と tiger という種別をつくるんですよね
new するときに dog にするか tiger にするかを決めて new し、それを animal で持つんだったら、これは継承で表現するのがOO的じゃないかな
animal のサブクラスが100個のメソッドを持つとき、そこに新たに cat というサブクラス=種別を導入した場面を考えると、
各メソッドが種別ごとに enum switch でごちゃごちゃかいてあったら、ちらばっている100個のメソッドすべてに switch のエントリーを追加しなくちゃならないじゃない?
いや、継承でも cat 用のメソッドを書かなければならないのは同じだけれども、一箇所にまとまるので、すくなくとも書きやすいし把握しやすいと思う
abstract/interface 、C++ 用語での virtual って、そういう enum switch を隠蔽してくれるためのものだと思うのです
C++ のコード生成結果に enum switch が入っています。java も同じことだと思うけど
>>360 C と C++ は別ですが、重なる部分はとても大きいので、重なる部分を意識して C/C++ とかきました、今の場合は「ポインタ」
全部->にすればいいんじゃね 近くにいたらぶっ飛ばすけど template <typename T> class arrow { public: T* operator ->(void) { return static_cast<T*>(this); } const T* operator ->(void) const { return static_cast<T*>(this); } }; class foo :public arrow<foo> {
ところでみんなして子犬じゃなくておっさんを鳴かせているようだがいいのか?w
>>364 Test test; test.method();
静的/スタティックにインスタンスを確保することを指します。確保の仕方としてはコストが非常に低いのです。
java でもプリミティブ型(int とかね)はほぼこれに近いのですが、C/C++ ではクラスも静的に確保できます。
一方、C/C++ で動的/ダイナミックに確保するのなら
Test *test = new Test(); とやるしかない。これはコストが余計にかかります。
C/C++ は動的と静的でインスタンスを表現する方法も区別します。静的と動的とは別だから当然です
静的:Test test; test.method()
動的:Test *test = newvTest(); test->method(); delete test;
java では参照型の場合には動的な確保しかないのです。だから -> とか . とか分ける必要はなく、ドットだけで代表させてしまったのですね
あえて静的・動的を使い分けてがんがんやる用途でもなければ、java の方が単純でわかりやすいでしょうね
>>364 第一義的にnewは遅い。動的メモリ割り当てを行うので、ランタイムやOSに呼び出しを掛けないといけない。
自動GCのないC++で全てのオブジェクトをnewするととんでもなく遅くなる。
一方newを使わないスタック割り当ては恐ろしく速い。というのも(スタックポインタの)数値を加算するだけだから。
加えてスタック上の(newしていない)オブジェクトはスコープを外れると自動的に解体される。
GCがないC++にとってこれは非常に重要な特性となる。
なぜならnewしたオブジェクトは(GCがないので)勝手に破棄される事がなく、放置するとメモリリークというバグになるからだ。
ポインタはまた少し違う。C/C++では「オブジェクトがどこにあるか」についてプログラマが掌握できる。
ということは、プログラム上でオブジェクトのある場所を表現する必要がある。それがポインタ。
オブジェクトがスタック上にあるならそれは目の前にあるのでアドレスを持っている必要はない。
従ってポインタを通す必要もない。
一方「別の場所」からオブジェクトを持ってくる場合もある。そういうときは(場所を表現している)ポインタで渡される。
>>371 だってさあ、C++では仮想関数の呼び出しってポインタかリファレンスを通すしかないじゃん
あー確かに最近の言語と比べてC++はオブジェクト生成の扱いが 若干違うよね。そこらへんはCをやってないとピンとこないかも。
>>363 きょうび、java もある程度語ることができなければc++erとしてどうかと思うのです
>>375 スレ違いの荒らしがなに偉そうに語ってんの?
>>375 JavaもC#も分かるわい馬鹿。このスレで敢えてしないだけだ
KYは去れ
C++というかC系統の言語を扱う時は、コンパイルタイムとランタイムの 区別をきちんとつけられるようにするべき。さらにはコンパイラが宣言を どう解釈し、どういうコンパイルを行うのか想像できるべき。
>>365 うーんっと、なんとなく言ってる意味はわかったのだけれど、
Animalから枝分かれしたDOGやTIGERクラスからインスタンス化することに違和感を感じてしまう。
確かに継承したほうが見やすいし、個としてはまとまる気もする。
あくまでAnimalという次元の中からDOGやTIGERは生成されてほしいという思いがある。
というのも、「犬やトラがAnimalを道具として装備してる状態」が自分には新鮮だった。
「鳴かない動物がある」とすれば、Animalをimplementsしたくないですよね?
だけど、鳴かない動物は紛れも鳴く動物であり、Animalであると思うんですよ。
>>376-377 できるというのならば、java から c++ に移行しようとしている初学者を適切に導いてスレが荒れるのを防止してくださいな
「敢えてしない」のではなくて、「できない」のではないの?
>>379 んー、ちょっとよくわからないけれども、思想をインプリに反映させたい場合もあるんですね
java の人としゃべっているとこういう話がメインになるからわりと新鮮、c/c++er だと
>>371 に軸足が移りがちなんですね
ちなみに上のほうに出ていた例を解説すると C++ class_a a; a.member(); これをJavaで書くと class_a a = new class_a(); または static class_a a; で a.member(); でほぼ等価になるかな。厳密には等価じゃないけど。 C++はポインタでなく実体宣言すると、コンパイル時点で コンストラクタこみの動作になる。
>>381 >思想をインプリに反映させたい場合もあるんですね
むしろそうでないと自分の場合設計できないんですよね・・・。
可能な限り自然界と近い形にしないと自分の頭の中で処理がまわらないというか融通がきかなくなる。
「確かに自然界とは違うが、処理的にはこっちのほうが得だし、便利だし」っていう発想でコードを書き上げる自身がない。
何か遠回りな書き方してる気はしながらも安心感に負けちゃうというか。
女にもてないタイプだな
Javaどっぷりなのは分かったから とにかくC++を最初からやれ 基礎の基礎の基礎から
>>380 ほら出たこういう攻撃
自分が悪いのを棚に上げて他人ばかり悪いように言うあなたの性格が荒れる原因に
なっていると分からない時点で立派な荒らしですよ
俺も元はJava使いだからね
しかしあんたと違ってスレを荒らさずにC++も使えるようになったから
>>381 だからそう思うならJavaスレでC++の話を聞けよ
どうせ同じスレ違いならそっちの方が新鮮な話が聞けていいんでしょ、
あんたの理屈から言えば
C++スレに粘着する理由がわからん
なんでC++やってるのに彼女できないかなぁ…
今時はjavaからc++に入る人ってのもいるんだな。 隔世の感があるな。
>>388 いきなりC++要求してもな・・・
まずはAからだろ
javaを要求したら出てくるのはお茶かカレーか
りんごとはちみつが恋をしてるのはjavaじゃなくてjawa
C#にもstructがあるだろ。 C++でclassをnewしないで確保したら、C#のstructと同じ。 そのときメンバには.でアクセスする。 C++でclassをnewで確保したら、C#のclassと同じ。 ただし、そのときメンバには->でアクセスする。
>>387 >JavaスレでC++の話を
スレチといわれる、どっちみち
>そっちの方が新鮮な話が聞けて
え?JavaスレでC++の話を機構が、C++スレでjavaの話を気候がどっちもどっちですけど
>>386 java から c++ に移行しようとしている初学者を適切に導いてね、これを荒れるとはいわないとおもうよ
>>317 とか
>>342 > C++はそんなに他からの学習者を寄せ付けない方針なの!?
とかいわれてしまう事実をお忘れなく
自演もほどほどにな
C++/Java/C#で開発経験あるけど、 正直言語が変わると頭の中も切り替わるなぁ 相互でどういう機能とか考えたことがない。 C++/CLIだけは、ごっちゃになっているが・・・
逆に私は言語を替えてもそんなに変らないな。
>>394 前言撤回ですか、言い訳としては幼稚過ぎますね
>>342 > C++はそんなに他からの学習者を寄せ付けない方針なの!?
そのとおりです
あなたのような姿勢の人は寄せ付けません(というよりあなたのほうが寄り付くことをこばんでいます)
C++に限りませんが
私はプログラミング言語○○ができるからプログラミングの素人ではないんだ。
素人じゃないから今の知識を生かして新しいプログラミング言語でも簡単に習得できるはずだ
という姿勢ではその言語を正しく習得できません
新しいプログラミング言語に対しては自分は素人以下の何の知識もない初心者なんだという意識で過去の知識にとらわれず
新たな知識として基礎から全てを受け入れる姿勢で学習に臨むべきです
逆にjavaに文句言うのもおかしいよね。 ただ一応初心者歓迎 なので。
初心者は歓迎だけど池沼とhoge厨はお断り
>>400 > 素人じゃないから今の知識を生かして新しいプログラミング言語でも簡単に習得できるはずだ
>という姿勢ではその言語を正しく習得できません
その言語の是非はともかく、今回はそれらとは全く別の何かだと思う。
初心者用のサイトも見ずにjavaではどうのとか言って、 アホなことしてたらやる気ないと思われても仕方ない
池沼はお断り、これで十分 書き込みから池沼具合がにじみ出ている
>>403 いやまったくその姿勢だと思うよ
「俺はjava使えるしプログラミングの初心者じゃない」みたいな要らんプライドが透けて見える
だな java使えてもC++はズブの初心者である事をまず認めろ そうでないとここでは誰も相手にしない
>>383 > 可能な限り自然界と近い形にしないと自分の頭の中で処理がまわらないというか融通がきかなくなる。
> 「確かに自然界とは違うが、処理的にはこっちのほうが得だし、便利だし」っていう発想でコードを書き上げる自身がない。
アスペじゃないの?
自分に酔ってるタイプの人間だな 初学者でこれは厄介w
人格攻撃ごっこしたいなら他でやってくれませんか
皆さん、今日もよろしくお願いしますね
すみません。guiを作りたいのですが、win32Apiのように外部のものじゃなくて、JFrameのようなものはありますか? 標準のAPIで作りたいです
C/C++にそんなものあるわけないだろ
C/C++にとってのAPIってほぼ外部のものじゃないの Qtとか
じゃあ一体全体、スタンドアロンのプログラムっていったいどの言語で一番書かれているわけ?
ホットスーププロセッサ
AdobeとかSkypeはDelphiだったなあ(笑) 最近はJavaとかC#もこっそり使ってるようだけど 他のは大抵VS C++かICLだな
何か見かけはJavaじゃないように作ってJVMで動かしてるようなのが多いな最近
Adobe Readerは妙にもっさりしてるけどどうもJavaっぽい動き
422 :
デフォルトの名無しさん :2013/02/23(土) 12:31:56.12
スマホ向けC/C++コンパイラを教えてくれ
423 :
デフォルトの名無しさん :2013/02/23(土) 12:33:24.16
まだか?
424 :
デフォルトの名無しさん :2013/02/23(土) 12:34:36.06
はやく教えろ
425 :
デフォルトの名無しさん :2013/02/23(土) 12:35:33.11
おいまだか早くしろ
426 :
デフォルトの名無しさん :2013/02/23(土) 12:38:27.65
質問スレ名乗っといて質問きたら無視か?
427 :
デフォルトの名無しさん :2013/02/23(土) 12:41:31.40
答えられないのか
428 :
デフォルトの名無しさん :2013/02/23(土) 13:14:44.11
class MY { string mykey; int myval; //...and other member public: MY(string key) : mykey(key) {}; setval(int x) { myval=x }; }; void func() { map<string,MY> xxx; vector<MY *> yyy; while() { data* = getdata(); //ランダムにデータ取得 string key = data->getkey(); //上記のデータよりキー生成 MY my(key); int val = data->getvalue(); my.setval(val); it = xxx.insert(it, pair<string,MY>(key,my)); if(val==0) yyy.push_back(&it->second) } } みたいな事をやりたいのですが、 コンストラクタ、コピーコンストラクタを減らすにはどうすればいいかな? そんな事考えずにガンガン生成するもの?(ループ内のkey,my,pair辺り) あとyyyに追加するmap内のMYのアドレスはmapから明示的に消さない限り安全なのでしょうか? (xxx内のMY.myvalが0のMYの一覧を後で知りたい)
質問内容が難しすぎてjavaしかできない僕には答えられないよ。次。
>>428 時期尚早な最適化はやめたほうがいい
>あとyyyに追加するmap内のMYのアドレスはmapから明示的に消さない限り安全なのでしょうか?
ダメ拡張時に消える可能性がある
431 :
デフォルトの名無しさん :2013/02/23(土) 14:40:51.90
いいからスマホ向けコンパイラ教えろ
432 :
デフォルトの名無しさん :2013/02/23(土) 14:44:36.25
いつまで待たせる?
>>430 > >あとyyyに追加するmap内のMYのアドレスはmapから明示的に消さない限り安全なのでしょうか?
> ダメ拡張時に消える可能性がある
そんなわけない。というかvectorの要素への参照と勘違いしてるだろ
mapの要素への参照(ポインタ)はその要素を削除したときだけ無効になる
よってmapからその要素を削除しない限り安全にアクセスできる
>時期尚早な最適化はやめたほうがいい これは定石だな 作ってる最中は、その目的をそのクラスでシンプルに達せいしろ。最適化は後だ。みたいな格言あったよな。誰だっけ
>>431 「スマホ」って範囲が広すぎて誰も答えられないんだよ
437 :
デフォルトの名無しさん :2013/02/23(土) 14:55:55.10
>>430 >>あとyyyに追加するmap内のMYのアドレスはmapから明示的に消さない限り安全なのでしょうか?
>ダメ拡張時に消える可能性がある
ありがとうございます。
拡張時も危ないのですか。
やるとすればmapを作り終わって変更しない状態になってから一覧を取り出す、か、
map内のMYをポインタ管理にしてそれを保存しておく感じになるのかな?
C++を使い始めて間もないのですが、
ちょっとしたコードでこんなにたくさんオブジェクト生成とかが呼び出されるのは
なんか気持ち悪いってのがあって。。。
まあ確かに細かい所の最適化は早いですかね。
439 :
デフォルトの名無しさん :2013/02/23(土) 15:07:47.23
アンドロイド
440 :
デフォルトの名無しさん :2013/02/23(土) 15:10:58.39
ほら答えたぞ早くしろ
441 :
デフォルトの名無しさん :2013/02/23(土) 15:14:13.50
まだかリロードしてる俺の気持ちも考えろ
C++11ならmoveが行われて コピーは行われないだろうけどね
443 :
デフォルトの名無しさん :2013/02/23(土) 15:17:12.80
>>433 ,436
あら?大丈夫なのかな?
逆にvectorは連続した配列で確保されてるから、
再確保で先頭アドレスが変わるとダメになるってことでいいのかな?
どうしてもmapを使いたいのか vectorに入れてsortしてからlower_boundで取り出しても十分速いぞ
445 :
デフォルトの名無しさん :2013/02/23(土) 15:20:23.32
さっさとアンドロイド向けコンピラ教えろ
return 問題は 早い段階でc/c++言語仕様に scope(exit) 導入されてればそれほど忌避されることも無かったろうに もう今更だけど
447 :
デフォルトの名無しさん :2013/02/23(土) 15:26:32.34
コンパイラはよ
448 :
デフォルトの名無しさん :2013/02/23(土) 15:38:10.02
まだなのか
好きなコンパイラ使ってプログラムだけスマホに送るか首吊るかしたら良くね
451 :
デフォルトの名無しさん :2013/02/23(土) 15:50:36.93
>>449 それ今やってるわボケ
今はうぇぶIFでコード組んで家のリナックス鯖のGCCでコンパイル実行だけどセキュリティ的にアレだろうが
だからスマホ向けコンピラ探してんだよハゲ
お前の薄い脳で考えるようなことは6年前からやってる
何でAndroidスレで聞かないのか
453 :
デフォルトの名無しさん :2013/02/23(土) 15:59:04.95
>>444 keyが被る数が少ないなら無駄も少なくてそれでもいいですね。
今はkeyが被った瞬間に検出したいってのもあるし、
とりあえず基本的なmapを使っています。
>>451 じゃあここで質問してたら意味なくね(´・ω・`)
>>451 お前の脳内なんか知らねーよwww
毛生やしてから出直してこいよハゲ
スマホ用のCコンパイラ ・製品を製造する側の人が使うプロ用のコンパイラはあるが超高い ・一般向けの安価または無料のコンパイラはない。
458 :
片山博文MZパンク ◆0lBZNi.Q7evd :2013/02/23(土) 22:05:03.56
スマホで動くエミュレータなんてあるのかな
460 :
デフォルトの名無しさん :2013/02/23(土) 22:44:51.22
>>450 うおおおおおおおおおおおおおおおおおおおおおおおおおおお
ありがとううううううううううううううううう
ちょっと高いけどこれはいい1!!11!!!!!1
261円で高いとかどんな金銭感覚だよ まぁ中には外れアプリもあるだろうけどさ
462 :
デフォルトの名無しさん :2013/02/24(日) 01:09:06.11
261ドルじゃなかった?
円だねぇ。
高いわっ
C++で、a.hというヘッダーにclassを作って、int aというpublic変数を作りました。 当然a.cppという同名ファイルでは変数aが使えるのですが、 b.cppなどの他のファイルでは、変数aが使えないみたいです… publicだけでは他のファイルでは使えないのでしょうか?
a.cppからa.hの変数が使えるのは、a.hをインクルードしているから。 b.cppからa.hの変数が使えないのは、a.hをインクルードしてないから。
>>466 ありがとうございます、出来るようになりました!
すみませんどうしても分からないのでもう一つお願いします。 Main、Key、Funcというclassをそれぞれ作って宣言をhとcppに書いたのですが、複数で使うために定義しようとするとエラーが出てしまいます。例えば *a.cpp* Main main; Key key; Func func; *b.cpp* Main main; Key key; Func func; a.cppでもb.cppでもmain、func、keyのクラスを使いたいのでこう書いています。 しかし多重定義エラーだそうです…かと言ってa.cppだけで定義するとb.cppでは使えません… 調べてもこういうところが出てこないのでお願いします。
externを使いましょう
//a.h extern Main main; //etc... //a.cpp #include "a.h" Main main; //b.cpp #include "a.h" //Don't define "main" here
しかしmainて変数名気持ち悪いことこの上ないなw
関数名とかぶっても大丈夫なんだっけ
ありがとうございました上手くいきました、externをそれぞれのcppで定義するんですね。
474 :
デフォルトの名無しさん :2013/02/24(日) 10:25:20.26
凄い、mainって変数名使えるんだw ただし関数内スコープに限る? 宣言前後でmainのアドレスが変わるっぽい? でもグローバル空間だとさすがにダメだ using namespace std; class Main {}; Main main; int main() { return 0; } mainname.cpp: In function ‘int main()’: mainname.cpp:6:10: error: ‘int main()’ redeclared as different kind of symbol mainname.cpp:4:6: error: previous declaration of ‘Main main’
すみませんmain変数は仮の名前なので気にしないでくださいw
はいw
#define private public でよい
なんか他のスレでもあまりhogeを見かけなくなった hoge使ったほうが盛り上がって面白くなるんだからもっと使えよ
そりゃ、書いたらキチガイが暴れるからみんな避けるだろうよ。
ヤクザがターゲットの店内で暴れるためイチャモンつけるようなもんだよ
このクラスを書いたら「仮想デストラクタがない」とか言って怒られるのですが なぜですか? class Hoge { public: virtual void func() = 0; };
vs2012だけど別に怒られないが
仮想関数を持つクラスは仮想デストラクタを定義するべきだから デストラクタが仮想関数じゃないと class Derived : Hoge { } Hoge* p = new Derived(); delete p; の delete p; で ~Derived() でなく ~Hoge() が呼ばれてしまう
>>481 怒られるんなら書けば?
class Hoge {
public:
virtual ~Hoge() {}
virtual void func() = 0;
};
foo, bar, baz
>>486 そうやってアンチhoge厨を呼び込むのはやめてもらえませんか?
class Hoge { public: virtual ~Hoge() = 0; virtual void func() = 0; };
491 :
デフォルトの名無しさん :2013/02/25(月) 02:48:27.90
ざわ…ざわ…
ざわわ、ざわわ、ざわわ 広いサトウキビ畑が
一番いい柵を頼む
大丈夫じゃない、問題だ
Hoge大颶風接近中
仮想デストラクタてVテーブルの要領の無駄じゃね? みんなどうせスマポに包むんだろ?
削除子の容量無駄じゃね?
削除子+Vテーブルの要領って無だじゃん デリータだけでいいやん
1クラスに付きポインタ一つ分の容量が無駄とかどんだけパラノイアだ
503 :
デフォルトの名無しさん :2013/02/26(火) 13:01:51.93
>>502 ちりつも
そういう気の緩みがアホみたいにメモリを食うアプリを作る
>>503 そういうのは、アホみたいにインスタンスを作りまくる奴が気にすればいいことであって、
普通の奴だと、塵は積もらんよ。
505 :
デフォルトの名無しさん :2013/02/26(火) 14:46:17.21
>>504 お前は何を言ってるんだ?
メモリの乱れは心の乱れ。
明鏡止水のような波紋一つない平穏な心でないとそこに自分の魂を映すことはできない。
つまりメモリが乱れていると自分の魂を捉えられないということだ。
捉えられなければ魂の色も向いている方向も分からない。
そんなことでまともなソフトウェア開発ができるものか。
507 :
デフォルトの名無しさん :2013/02/26(火) 17:28:49.93
コードの乱れをどうにかしてください!
4byte * 10K個 = 40KB 全然たいしたことないは
実データ集合にポインタ変数の混在が許されるのはライブラリまでだよね―
CoW ってどういういみ?
牛
Copy on Wright
writeェ・・・
メモリ容量より実行速度のが問題だから スマポのデリーター+仮想デストラクタでオーバーヘッド爆上げで これが場合にっては大量死につながる
仮想デストラクタはクラスごとに1個だが削除子はインスタンスごとに1個だ
内部クラスの1つから別の内部クラスにアクセスする方法について codepad.org/cOb1xlVc InnerBでは一応出来ているのですが無理矢理な感があるので InnerCのような感じで簡単に出来たら嬉しいのですが、出来ないでしょうか? 出来なければInnerBの方法でもう少しましな書き方を教えて欲しいです。 testB2の最初に毎回xを作ってるのが気持ち悪いのでparent.a.testA() のような感じで書けるとすっきりして嬉しいです。よろしくお願いします。
>>517 ポインタで受けたらだめだろ
リファレンスで受けないとアドレスの比較になってしまう
virtual bool operator==<Type>(const Number<Type>& number) { // 実体でないため呼ばれない
return getNumber() == number.getNumber();
}
...
bool eq = (*num1 == *num2);
どうしてもポインタで受けたければoperator==()をfriend関数にすることだな
いちいちCodePad使って質問回答するなよ
>>519 >>520 ありがとうございます
参照での受け渡しはうまく行ったのですが、
friend関数で定義すると、2つの引数が両方ポインタだとエラーが出ます
調べると
An operator function shall either be a non-static member function or be a non-member function and have at least one parameter whose type is a class, a reference to a class, an enumeration, or a reference to an enumeration.
とあるので、両方がポインタの==演算子オーバーロードは不可能ということなのでしょうか
>>516 >//staticにするとエラー
とか
>//myclass parentは不完全な型?で宣言できない
とか、いろいろ基礎がわかってないのにInner Classとか使おうとするなよ
>>522 演算子オーバーロードとか使おうとせずに、素直にequalsTo()とかその手のメソッド定義しろハゲ
525 :
516 :2013/02/28(木) 19:54:59.70
>>518 ありがとうございました!
>>523 すいません、どうしても内部クラスでないとダメだったので。
もう1度基礎から勉強します。
>>522 virtual bool operator==<Type>(const Number<Type>* number) {
return getNumber() == number->getNumber();
}
bool eq = (*num1 == num2);
std::cout << "eq: " << std::boolalpha << eq << std::endl;
引数しかポインタに出来ないな
friendを宣言or定義しようとするとコンパイルエラー
527 :
デフォルトの名無しさん :2013/02/28(木) 22:07:32.85
クラスのポインタをstd::sortとかstd::binary_searchとかにに突っ込みたい時って 無理にオペレーターオーバーロードするんじゃなくて 比較関数を作ってやるべきなんですかね? オペレーターオーバーロードでやろうとしてて、 今日どうしてもテンプレートのエラーが解決できなかった(´・ω・`) クラスのポインタのvectorを上記を使って、 中身に沿ってポインタをソートしたかったんですが。
第三引数にラムダなり関数オブジェクトなり突っ込めばいい
VC++で、テンプレート使ってるとコンパイル時のエラーメッセージがやたらと長くなるのはどうにかならないですかね?
あと5年ほどしたら入るであろうコンセプトさんに期待してください
そこの赤い字読んで なんか悲しい気分になったわ
赤い文字って「C++にコンセプトが入るからアップデート中止するよー」ってやつ? そして間に合わなくて入らなかったのに中止したまま・・・
「C++標準化委員会が、あの採用を見送られてしまったコンセプトをいずれの日にか、いやできれば早くに採用し、それよってこのSTLFiltのようなエラー抽出翻訳ツールがもはや必要でなくなることを、作者は請い願うばかりである。」
ヘッダファイルだけプログラムってあるんですか マクロとか書くときに使うのか?
日本語でおk
>>537 *.hだけあればC言語って文法的に問題ないの?
>>538 コンパイル通るようにしてあったら問題ないだろ
540 :
デフォルトの名無しさん :2013/03/01(金) 23:32:11.32
main関数もヘッダーにあるんすか?
ヘッダに書けばヘッダにあるだろ
ヘッダとかインクルードされるファイル(ヘッダとしての役割)であることを分かりやすく示すためのもんじゃねーの
コンパイル速度を上げるためじゃね
翻訳単位が複数にまたがるときに、共用/共通部分を抜き出してヘッダとするんじゃないの?
545 :
デフォルトの名無しさん :2013/03/02(土) 21:06:50.17
11年前に始めたベテランですが報告させてください。 256桁までの整数を保持して加算/減算できるクラスを作ってやったぜぇ〜 ワイルドだろぉ〜
たったそんだけ?
>>543 そりゃプリプロセッサでインクルード二重読みしないようにすれば速度は上がるだろうけど限定的なのでは?
>>547 二重読みしないようにすればも何も二重読みしたらダメじゃね
>>545 Boost.Multiprecision
550 :
デフォルトの名無しさん :2013/03/03(日) 01:28:46.20
C言語から、C++に移行しようと考えている者です。 C++の本で、メモリ上の動作も意識させてくれるような、教科書はありますでしょうか? C言語の本を見ていると、メモリ上ではこのように確保されます、とか書いてあって はじめは苦労しましたが、そのおかげで、ポインタとか、メモリの確保とか、よくわかるようになりました。 C++の教科書を見ると、こういう風に書いておくと、こういう風に動きますといった説明が多いように思います。 C++の教科書でも、メモリ上の挙動を説明している本はありますでしょうか? (たとえば、new 演算子にクラス型をつかうと、このようにメモリが確保されて、 各メモリ領域にコンストラクタで返された値が云々。ポインタを進めると、ほら、こういう値が返ってきますね、、みたいな感じです。) よろしくお願いします。
C++はメモリイメージより概念的な理解のほうが重要だよ。 あとクラスオブジェクトのメモリ上での展開は実装依存だし、 そんなものを気にしてもしょうがない。
いきなりvtableとかまで言及するような本だとたぶん挫折するだろうな
基本C言語と一緒じゃね ただせっかくC++使うんなら低級な操作は可能な限り避けたほうがいいと思う ポインタを進めるとかまずしないし
>>550 新言語やLL言語は、抽象化がポイントとなる。
マシン依存する言語は良くないという思想。
アセンブラよりもC、CよりC++、C++よりC#、Javaはマシン依存は減る。
>>550 知りたいならアセンブリ吐かせてみればいいのに。
557 :
550 :2013/03/03(日) 11:36:15.95
みなさん、どうもありがとうございます。 まずは、メモリ操作ということは考えずに、クラスを記述してみるのがよさそうですね。 せっかく苦労して覚えたC言語の知識が、あまり使われないのは残念なのと、 Cでメモリ回りの操作ができて、面白かったので しばらくそういうことをしなくなるのは残念ですが、 C++ やってみようと思います。 本の紹介もありがとうございました。 どのオブジェクト指向言語もそうなのかもしれんませんが、 (クラスの数だけ)型がどんどん増えて、メモリ云々言ってる場合ではない気がしてきました。。。
558 :
デフォルトの名無しさん :2013/03/03(日) 12:06:16.67
>>557 まぁアレだ。
メモリ操作が面白いとかそういうプログラミングそのものの楽しさを味わうことが目的なのか、
何かアプリケーションを効率よく完成させることが目的なのか、
そこらへんの区別をつけるとその辺りのモヤモヤから解放されるよ。
ただ解放されすぎて悟りを開いて解脱までしてしまうと、
学習コストが何たらってある意味人生の効率化まで始めるようになる。
メモリレイアウトだの気にすると思考がベターCから抜けられなくなる
C++でもコアな計算部分でSIMD使うとメモリ意識する必要出てくる
>>557 C++の言語設計思想の重要な一項目として、Cとの互換性の維持があるので、全然無駄ではないよ。
混乱して学習の壁に当たる可能性は高いけど、その壁を越えた先で、Cの知識が役に立つ時が絶対に来る。
それはC++の深淵に触れ始めることを意味する。
…でも、仕事の役に立つかどうかは本人次第だし、知らなくても何とかなっちゃう事の方が多いんだけどね。
C言語勉強中・・。 char *ptr = "TEST CODE"; ↑ptr変数は文字列のアドレスを格納してるんですよね では文字列の中身はどこに置かれてるの・・?
メモリ上のどっか
静的などこか
なるほど・・? char *ptr = "TEST CODE"; printf("%c -> %08x\n",*ptr,ptr); -------------------------------- T -> 00420f8d char str[]="TEST CODE"; これだとわかるんですが、strの配列に直接文字列を代入してるから 中身は当然str[]内にある。 char *ptr = "TEST CODE"; これだと、文字列のアドレスただをptrに入れてる?
char str[]="TEST CODE";もchar *ptr = "TEST CODE";もやってることは一緒 メモリのどっかに文字列を置いてその位置を返してるだけ
>>567 有り難うございます。
理解いたしました。
p[5] = {0,0,0,0,0}; とやったらエラー出るんですが、配列に変数入れるのってどうやるんでしたっけ?
>>570 int p[5] = {0,0,0,0,0};
エラーにならないけど?
char *str ="ABC"; char str[]="ABC"; ってやっぱり違うのですか
>>575 下は
str[0] = 'D';とか書き換えられる
あれおかしいな、VC2008++の設定とかがおかしいのかな int p[5]; p[5] = {0,0,0,0,0}; で 構文エラー : '{' 構文エラー : ';' が '{' の前にありません。 構文エラー : ';' が '}' の前にありません。 と出るんですが普通なら合ってるみたいですね…
>>577 それは無理です
宣言と同時にしかその構文は使えません
p[5]だとただのintになっちゃう しかも配列の範囲外だし
そうなんですか、同時宣言とか…ありがとうございあした
VC9でライブラリA.libをリンクして作ったライブラリB.libをアプリから使おうとすると ライブラリAのリンクも求められるんですが、どうすればライブラリBだけで済みますか? ライブラリAのヘッダはライブラリBの.cppでしか読んでません
>>577 > int p[5] = {0,0,0,0,0};
と
> int p[5];
> p[5] = {0,0,0,0,0};
は違うぞ。
あと p[5] の宣言に対して、p[5] に何か代入しちゃダメだろ。
>>576 ということは、
char str[]="ABC"; は 用意されたchar型の入れ物、strの配列に
文字列の文字を一つ一つ格納。 中身そのものはstrの中にある。
char *str ="ABC"; は、ポインタstrに、文字列のアドレスを
いれただけ。 中身はstrの指すどっかにある
??
>>581 ライブラリB.lib に ライブラリA.lib の使ってるオブジェクトファイルを含めちゃえばいいと思うが、
ライセンス的にどうよの問題がある可能性ももあるし、そもそもライブラリAのリンクが求められ
てるんだから、素直にリンクさせればいいと思うが。
メモリのどっかに文字列を置くって言っても置く場所が違うんだけど
char str[]="ABC"; は char str[]={'A','B','C'}; char *str ="ABC"; は char *str=&"ABC"[0];
>>584 両方自作なんでライセンス的には問題ないです
ただ気持ち悪かったんで、、、
lib.exeで結合するしか無いんですかね
char str[]="ABC"; は char str[]={'A','B','C',0}; だぬ。
=&"ABC"[0]; 難しいです。 何ですこれ?
char *str=&"ABC"[0]; は char *str=&["ABC"]0; です。
>>585 それは実装次第だよ。
>>587 なら、
> ライブラリB.lib に ライブラリA.lib の使ってるオブジェクトファイルを含めちゃえばいい
をやればいいだけだろ。
>>585 プログラム領域、静的領域、スタック領域、ヒープ領域
で
char *str ="ABC"; は、静的猟奇で
char str[]="ABCだと、スタック領域
なので、さっき
char *str ="ABC"; こうして
*str = 'K';ってやったら、コンパイラにシバかれました。
str[]でもconst付ければ同じ? 少なくとも実用レベルでは。
>>590 >char *str=&"ABC"[0]; は char *str=&["ABC"]0; です。
の書式の説明、ネットでさがしてるんですが見つかりません。
(持ってるC言語の本にもかいてなかた。独習Cとか)
説明してるサイトとか知りませんか?
>>595 K&Rに、それと似たようなことは書いてあった気がする。
>>591 すみません、それってlib.exeを使わずにやるにはどうすればいいんでしょう
そもそも lib.exe なしで、どうやって A.lib とか B.lib を作ったんだよ…
603 :
デフォルトの名無しさん :2013/03/03(日) 17:09:32.49
>>600 そしたら、足りないオブジェクトのソースコードも含めてB.lib作り直せば?って話だよね?
機能的に必要なものなんだから、何処かには入れておかなきゃダメだよね?
>>567 それらは、同じことを違う表記法で表しただけだしな
>>606 全く違うっつってんだろw
アホは回答するなと何度言えば
何が違うのか説明できないと
>>609 俺が書いたわけではないが、
>>586 で全てだぞ。
文字列リテラルに対する扱いの説明はいらないよね?
char *str=&"ABC"[0]; ↑ 誰か説明してくらはい。 文字列 "ABC"の[0]番アドレス(戦闘番地)を*strに入れてる? (・ω・)? ネットでC言語の説明してるのを探してるけど、見つからない K&Rの本を買わないといけないかしら。 (手持ちのC言語の本、4冊あるんで・・・。)
static char ABC[] = "ABC"; char *str = ABC; と説明した方がいいだろ
staticは別にいらなくね?
>>586 の
char str[]="ABC"; は char str[]={'A','B','C'};
char *str ="ABC"; は char *str=&"ABC"[0];
これらは絶対に正しい覚えとけ
>>613 いるだろw
だからアホは回答すんなと
本当はさらにconstつけた方が正解なんだが、説明が面倒になるので省いた
static const char ABC[] = "ABC";
char *str = (char *)ABC;
>>615 ABCが"ABC"に見えたんだよ
怒るなハゲ
617 :
611 :2013/03/03(日) 19:25:51.70
すみません、誤りますんでケンカしないでください m(_ _)m
俺、アホだから 今まで char str[]="ABC"; は char str[]={'A','B','C','\0'}; char *str ="ABC"はダメポでconst char* str ="ABC" って信じていた
>>614 null終端してないから絶対に正しくない
おお・・・ここはなんて役に立つスレなんだ
まさに 画竜点睛を欠く
もう収拾がつかないのでここで完全な正解をまとめる char str[] = "ABC"; は char str[] = { 'A', 'B', 'C', '\0' }; と同じ strの書き換えは自由 char *str = "ABC"; は static const char[] ABC = "ABC"; char *str = (char *)ABC; と同じ ABCにconstがついていることから分かるように char *で受けるのは推奨はされるものではないが、 互換性のためにconstなしでも受けられるようになっている でもABCの書き換えは禁止 char *str = "ABC"; でなく const char *str = "ABC"; が望ましい
バカはでてくんな
配列を文字列で初期化するときは必ず、constつけるように char ABC[10] = "ABC" は駄目ですよ const char ABC[10] = "ABC" 必ずこうしなさい
>>625 書き換えない場合はその方が望ましいが
書き換えたい場合はそれじゃ困る
「必ず」は言い過ぎ
あと、constなのになぜ要素数を指定する?
constでなければ後の書き換えを意図している場合に必要だが
constの場合は完全に無駄どころか、後の変更に弱いダメなコードだ
constなのに要素数を指定するのは
文字列の配列を要素固定長で確保したい場合くらいだが、
これも文字列へのポインタの配列にできるならそうした方が良い
初心者歓迎ってのは回答者の事じゃなくて質問者の事だからな 勘違いすんなよ
char *str = "ABC"; const char str[]= "ABC"; ポインタと配列の違いだけ *strはrvalueの"ABC"オブジェクトが消えてなくならないように、ポインタでlvalue的扱いできるようにした str[]はrvalueの"ABC"オブジェクトが消えてなくならないように、配列でlvalue的扱いできるようにした 覚えとけよ "ABC"を代入演算子=で左のlvalueに結びつけたってだけ でも、C++には=でコンストラクタ呼ぶのあるがな
>>629 だーかーらー、アホは回答すんなって何度言えばいいんだよ!
上はstrに"ABC"のアドレスを入れているが、
下はstrと"ABC"が別個にあるわけじゃなく、str自体が"ABC"になっている
下では"ABC"オブジェクトなんて存在しない
単なる const char str[] = { 'A', 'B', 'C', '\0' }; のシンタックスシュガーだ
=は代入演算子じゃねえし、もう無茶苦茶だ
ここは質問・回答ともに初心者歓迎大歓迎スレです
初心者は何が正解か分かんないから アホが回答しようが真に受けちゃうだろ 勘弁してくれ
よくぞまあこれだけ自信満々にデタラメ言うアホがいるもんだと逆に感心するわ!
て言うか、本気でそう信じてそうで怖い。
>>630 ここは初心者解答者スレじゃないんだぞ
Cについては知っていても、初心者解答者は答えるなよ
初心者解答者じゃないなら、普通2つの"ABC"とは何か説明するぞ
質問内容から質問者のレベルが解らないような初心者解答者は駄目だな
>>635 安価間違えてないか?
さもなくば日本語でおk
>>633 それは言っちゃダメ、絶対。
荒れちゃう。
もう
>>622 で全てだってのに、
何で見当違いの糞回答を後から後から出してくるのか
そんなに恥かきたいのか
この流れには沖林正紀先生もついていけないだろう
>>636 合っているが
>>635 だけじゃなく他の解答者へでもある
"ABC"が色々出ているのに、初心者が"ABC"を理解していると思っているって
さすが初心者解答者と思った
生徒としては優秀なのかもしれんが、先生としては駄目だな
最初の質問者は2つの"ABC"の違いすらわかってないだろな
642 :
デフォルトの名無しさん :2013/03/03(日) 20:16:35.20
へえ
>>611 *str じゃなくて str ね。
そこ以外の解釈はあってるよん。
文字列リテラルはそのまま配列オブジェクトとして使えるの。
おちつけ
>>641 恥ずかしい回答したことを誤摩化すために
難癖付けてるだけにしか見えない
いいから落ち着けバカチン共
char *str=&"ABC"[0]なんかが出た時点で、祭りモードだよな 祭りは楽しまないとだめだよな
Javaかよって思うよなww あいつらリテラルのメンバ呼び出すからな
だね。 楽しんだもの勝ち。
実際に動かすのがわかりやすいかな。 test2は書き換えちゃいけない領域を書き換えてるので、 コンパイルオプションによっては異常終了したり、 妙な動きをするけど気にするな。 #include <stdio.h> void test1(int pos, char c) { char str[] = "abcdefg"; if (pos) str[pos-1] = c; puts(str); } void test2(int pos, char c) { char *str = "abcdefg"; if (pos) str[pos-1] = c; puts(str); } int main() { test1(0, '.'); test1(3, 'X'); test1(0, '.'); test2(0, '.'); test2(3, 'D'); test2(0, '.'); }
>>648 &"ABC"[0]はconst char *になるからコンパイルエラー出るけど
その点以外に問題があるコードではないと思う
が、初心者への説明として分かりやすい説明か?と言われるとどうだろう
ならないよ C言語では文字列リテラルの型はstatic char[] constが付く規定は無い 付くと思ってるやつはC++と混同している 書き換えは未定義ってだけ
禿げてるくせに経験の少ない奴は char *str と書いた時点でマイルールの皮に閉じこもってしまうから嫌われるんだよ char *ptr なんだよハゲ。
燃料投下?
ここはC/C++スレだから別にC++でいいと思うが CかC++かの注釈は必要だな
すごく初歩的な質問ですが int max=10000; for(cnt=0;cnt<max;cnt++){ if(cnt==100){ cnt=max; } } これでループ抜けるのってヤバイんでしょうか? VC++ですがこれをやると強制終了したり、何回もビルドしてると強制終了しなくなったりでかなり不安です。
それだけだと動作的には問題ない(breakしろよとは思うが) if(cnt==100){cnt=max;}より後ろにcntを使うコードがあって、 そこがおかしくなってんじゃね
C言語の書籍をみてたら、hoge ホゲー 変数を たまにみかけるんですが、由来はなんでしょうか
ジャイアン
文字列がconstだったとしてもC言語ではconst T*からT*への暗黙変換は違反ではないという悲しみを知った。
hogehogeの略だが hogehogeの由来は謎
hogehogeロック
何で既に指摘済みの事項を?
おう、今世紀最大の糞記事やめろや
最近C#ばっか書いてるからミスったわ すまんね constの位置はただの趣味
ところでおまえら、char const * と char * const どっち? 俺は char * const だわ。
そういう釣りは他所でやってください
>>677 char const * と char * const
は意味が違う。
const char * と char const *
は一緒だがねC#馬鹿は出てくるな
春休みにはまだ早いな
const char * と char const *は中身の書き換えが不可で、 char * constはアドレス値の変更が不可ってこと?
そう
>>679 ほんと
>>677 はワロチだよな
char const * と char * const
何がconstなのか解りません><
どう考えても釣りだろ
ごほ、ごほ、その昔は、ふぁ、ふぁ、far とか に、near とかいう、し、修飾子を、ごほ、く、駆使したものじゃがのう、ごほごほ、ごほ
おじいちゃん昨日ご飯食べたでしょ
near/farはどうかと思うが 言語仕様にsegmentを持ったポインタ型の用意が有ってもいいと思う
MS-Cv6にはあったようなきがする
ポインタのポインタ char ch = 'a'; char *ptr1; char **ptr2; ptr1 = &ch; ptr2 = &ptr1; printf("ptr1_address -> %08x\n",ptr1); printf("ptr2_address -> %08x\n",ptr2); わかりにくいですが、実用・実務ではどういった時に使うのでしょうか? 基本情報の午後の問題でもポインタのポインタが使われてましたね
実務は知らんが、char *ならどの文字列を使うか動的に選択したい場合はchar **を使うんじゃないの まあ俺はstring使うから使ったこと無いけど
char* を引数から返したい場合に char** を使ったり、あとは void foo(const char *const *table, int size); static const char *const table[] = { "abc", "def", "ghijk", "lmnopq", "rstuvwxyz" }; foo(table, 5); みたいな使い方もなくはないかもしれない
ポインタのポインタはmain関数のargsとかでよく見てるじゃないか
ソレダ!
char *str[] = {"I","am","Japanese"}; char **ptr2; ptr2 = str; printf("%s \n",*ptr2) ---------------------------------------- >I こうですね
ポポンタは2次元配列でが多いんじゃないか
"static"と"const"はつけた方がいいですか? char* table[] だとやっぱり、第三者に書き換えられる恐れあり?
static付けないと消えそうな気がする なんとなくね
ポポンタって業界用語? (まほうのことばで〜♪たのしいなかまが〜♪)
>>697 つけないとなんとなくセキュリティ的に危ない気がする
>>689 char*や構造体へのポインタ配列をソートする時、実体をコピーしていると
多大なコストが掛かるので、ポインタをソートする
このCのコードが動作しません。 何が問題なのでしょうか。 int value; sscanf("8F5AFC8", "%X", value);
sscanf("8F5AFC8", "%X", &value);
これは釣りではなく、教育的な質題な気がするぞ
これは教育やろなぁ
質題?
そういえばCで初めてprintf使ってから長らく勘違いしてたんだが 不思議と「関数を使っている」という実感が沸かないんだよな。決まり文句・構文のように感じてしまう 引数とはなんぞ、返り値とはなんぞと理解してから関数として認識すると 自ずとprintfは値で、scanfは参照が必要だということが理解できるんだが
スクリプト言語に慣れちまったかつての俺のようだ・・・
710 :
デフォルトの名無しさん :2013/03/04(月) 22:22:37.36
>>708 それはあなたが精神を解き放ってコスモと融合させてないだけだ。
迷路のような現世の構造の中をさ迷っていてはいつまでたっても答えは見つからない。
精神を解き放つにはまず全てのリンクを無へと還すことから始まる。
そのリンクは全て人間に内在するものだから、解脱することによってそれを断ち切れる。
人間に内在するということは、人間が死ねばそのリンクも同時に消えることになる。
例えば誰かが死んだら、その人の持ち物のいくつかは生きている人間によって価値を見いだされるが、いくつかは誰にも価値を見いだされない。
この価値を見いだされない状態こそがリンクを無へと還した状態であり、これが本来の物の価値となる。
ただ、その状態を作り出すために死んでいてはその状態を手にできないため、
修行を行うことによって解脱し、生きながらにして万物のリンクを無へと還す。
さて、無へと還しただけではその物があなたにとって意味を持たないためどうすることもできず、
もちろん再定義することもできない。
そこで精神を解放してコスモと融合させ、コスモの意志によってその物に定義を与える。
コスモの意志はあなたが想像しているよりはるかにニュートラルであり、物の本質を問う。
それによって正しい道へと導かれるわけだ。
printfはあなたにとって何だろうか?
文字を表示するもの、何かよく使うもの、一番最初に習ったもの、打ち慣れたもの、デバッグにも使えるもの、色々あるだろう。
まずは解脱してそういったあなたとprintfをつなぐリンクを無へと還すのだ。
そして精神を解放し、コスモと融合することによってprintfの本質を問うのだ。
そうすればコスモの意志によって関数であるという答えが導かれる。
あなたにコスモの導きがあらんことを。
>>708 わたしは、大学のプログラム講習で余興みたいなので可変引数の
関数を作ったりデバッガでスタックを見たりいじったりして理解を深めて、
printf();もれっきとした関数なんだなと思えるようになりました。
やっぱセブンセンシズに目覚めないとな
解脱と精神解放はプログラマの基本
プログラムと精神世界の間にサーキットを構築するだけじゃないの? そうすればプログラムと精神世界が同じレイヤで同期をとることになるからprintfが関数だってのも一意に定まるでしょ
715 :
デフォルトの名無しさん :2013/03/04(月) 23:11:17.05
write(stdout, msg, msglen); これでおk?
無名名前空間について質問です。 スコープ解決演算子などを用い、無名名前空間の変数を明示的に指定する方法はあるでしょうか。 例えば、以下のようなコードで Namespace を表示させるにはどうしたら良いでしょうか。 #include <iostream> char *str = "Global"; //グローバル namespace{ char *str = "Namespace"; //無名名前空間 } int main( ) { char *str = "Local"; //ローカル //ここで無名名前空間のstrを表示させたい std::cout << ●● << std::endl; return 0; }
ないよ
ありがとう。
釣りもたいがいにしてくれ
普段hogeとかつかってんだろうな そんなんだからこんなアホな質問するんだよ
ついにhoge使ってないコードにまで無理矢理絡み始めたぞ
キューの実装についての質問です。 キューに積まれる内容は、独自のフォーマットで以下のような構造をしています。 long 4byte・・・メッセージの種類を表す整数 long 4byte・・・メッセージの内容そのもののバイト数 char 可変byte・・・メッセージの内容、char型で宣言しているが1byte単位で扱えるようにするためであって文字とは限らない これが区切り文字なしで連続してメモリ領域に追加されていきます [メッセージ1の種類][メッセージ1のbyte数][メッセージ1の内容][メッセージ2の種類][メッセージ2のbyte数][メッセージ2の内容][メッセージ3の種類][メッセージ3のbyte数][メッセージ3の内容]・・・ キューへのメッセージ追加と読み出しは非同期であり、読み出しが来ないままどんどん積まれていく場合もあれば 読み出すべきメッセージがないにも関わらず読み出しに行く場合もあります。 読み出す位置、追加する位置はそれぞれアドレスで、管理してあり、 読み出し/追加が行われた際に、それぞれ次に読み出し/追加を行う位置までアドレスを進めます。
そうか
スタックにデータを入れることを「積む」とは言うが、キューにデータを投入することは「積む」とは言わない。
キューとオバQは全然違う。
"Q"は"que"と綴って発音は"キュー"。 「キュー」は"queue"と綴って発音は"キュー"。 従って、"ue"は無音であると考えられる。 実際、"q"も"キュー"と発音する。 以上から、"queueueueueueueue"のように綴っても 発音は"キュー"であると推測される。
728 :
デフォルトの名無しさん :2013/03/05(火) 17:47:47.46
おまえら deque のことデキュー(核爆)とか言ってそうだな
俺は大学でフランス語やってたせいかqueがクとしか読めなくなった だからdequeもでくーって呼んでる
dequeの棒だからあってる
フランス語だったらdeは「デュ」か「ドゥ」じゃないか?
hogeはなんて読むんですか
733 :
デフォルトの名無しさん :2013/03/05(火) 19:52:59.46
double-ended queueの略だからデキューでもいい気がするが、 本家dequeueがキューから要素を取り出す操作なので かぶらないようにdequeにしたらしい。 charはキャラかチャーかとか、最後のeのないcreatは どう発音するかとか昔からこの手の論争ははてしなくある。
doubleをwにして、wequeueにしとけば良かったのになw
最後のueは冗長不安定
質問は発音についてだったのか?
正しく発音できない奴は言語なんて使えないから 先ずは発音からですよ
printf("%d\n",sizeof((char*)malloc(100))); 100 Byte 用意したつもりが、結果は4Byte・・ なぜでしょうか・・
741 :
デフォルトの名無しさん :2013/03/05(火) 21:26:22.97
>>740 mallocは確保したアドレスを返す
喪前の使ってるコンピュータのアドレス幅が4倍と(43bit)
sizeof(void *)と一緒
>>740 sizeofはコンパイル時定数だから
それはsizeof(char*)が返ってる
実行時に動的に確保したやつはsizeofじゃ分からないよ
743 :
片山博文MZパンク ◆0lBZNi.Q7evd :2013/03/05(火) 21:28:21.52
配列にsizeofを使うと配列のサイズが返るが、ポインタに使うとポインタそのもののサイズを返す。 _msizeで検索
744 :
740 :2013/03/05(火) 21:33:57.04
ご回答して下さった皆様、有り難うございます。 と、なりますとmallocで確保した容量を確認したい時は ムリなんでしょうか?
>>742 sizeofはコンパイル時定数とはかぎらない。
嘘おしえないように。
746 :
デフォルトの名無しさん :2013/03/05(火) 21:35:30.00
747 :
740 :2013/03/05(火) 21:43:06.92
>>743 >>746 有り難うございます
printf("%d\n",_msize((char*)malloc(100)));
でちゃんと、100(Byte)が表示されました。
>>745 マジで?
どういった場合コンパイル定数じゃなくなるの?
749 :
デフォルトの名無しさん :2013/03/05(火) 22:05:03.95
int a; char b[sizeof(a)];
片山うざい
>>750 CTestはCCallBack型じゃないんだからそんなキャストして使っちゃダメ
std::functionなり使ってください
printf ("関数funcのアドレスは %p \n", func); printf ("関数funcのアドレスは %x \n", &func); どっちも同じですよね?
756 :
片山博文MZパンク ◆0lBZNi.Q7evd :2013/03/05(火) 23:12:25.36
>>755 64ビット環境のことを考えたら%pの方がいい
>>756 結果は
関数funcのアドレスは0040100A
関数funcのアドレスは40100a
になりました。 %pの方がいいんですね
>>758 基本的に片山は嘘をつくから相手にしないほうがいい
それに片山の相手をしていると他の回答者に無視されるよ
760 :
デフォルトの名無しさん :2013/03/06(水) 00:07:59.08
761 :
758 :2013/03/06(水) 00:10:41.18
ここで聞くことじゃないんだろうけど、 Toppers とかカーネル使ったC言語のプログラムの 質問できるスレはどこにあるんでしょうか・・。 それか此方でも質問はOK?
此方でも
記念カキコ
関数ポインタってのを初めて 知りました でも用途がわからん。
qsort()をしらべてみよう。かならずつかいますよ!
関数オブジェクトに適した接頭辞とかないかね
>>767 クイックソートで使うんですか
アルゴリズムの勉強しようっと
ifやswitchより高速に分岐できるように、関数へのポインタの配列を利用します
>>769 クイックソート(アルゴリズム)に使うのではなく、qsort(Cの標準関数)に使うの。
実際に使わないとピンと来ないよね、こういうのって。 自分がそうだったってだけかもしれんけど。
std::sortがあるんだからqsortなんて使わんだろ 関数ポインタは配列にして動的に使う関数を決めるときによく使うが
C++ onlyスレではない
>>774 確かにC++ではstd::sortを使った場合qsort()より優れたコードが生成される可能性
があり(保証はない)、優先的に使うべきだが、Cの場合仕方がない
qsortよりよく使う(※)例としてはシグナルハンドラというのもある (※)個人差があります
C++11非対応の環境で、ラムダ式で表現できる程度の処理なら、 関数オブジェクトより関数ポインタのほうがすっきり記述できるかもしれない
関数オブジェクトの方がインライン展開できる分早いとか聞いたような
780 :
778 :2013/03/06(水) 18:45:17.84
>>779 クリティカルな部分だと変わるのかもしれないけど、自分は実感したことないなあ
プラプラでコールバックとイテレーションはマブダチだからな 最適化できる出来ないは地味に効いてくるよ
一応、ローカルクラスとしてその場で書けるというメリットもあるな。 非常にカッコ悪いけど。
>>779 qsortはプリミティブ型の場合、
比較処理のインライン展開より
要素の交換が汎用処理(memcpy)を使って行われるのが
一番の遅くなる要因だと思う
std::sortなら代入演算子がそのまま使われるので、
プリミティブ型なら高速にコピーできる
ただ、プリミティブ型以外の場合、
代入演算子が複雑だと逆に遅くなる場合もあると思う
C++11ならムーブのおかげで大分ましだろうけど
そんなクラスをqsortかけてstd::sortより高速とか言い出すバカはいないだろうから気にしなくていい
コピーにコストのかかる自前のクラスを要素に持つ配列をソートする時は、vector<MyClass*> arrみたいにポインタの配列にすると思うのですが、 これをsortした後にuniqueしたい場合、要素をdeleteするタイミングが分かりません 以下のコードだとメモリリークが発生しますが、それを防ぐためにdeleteするコードはどのように書けばよいでしょうか? sort(arr.begin(), arr.end(), MyClassSmaller()); vector<MyClass*>::iterator it = unique(arr.begin(), arr.end(), MyClassEquals()); arr.erase(it, arr.end());
std::vector<std::unique_ptr<MyClass>> arr;
なるほど、このような時はスマートポインタというのが便利なのですか
便乗質問ごめんなさい std::sort(std::begin(arr), std::end(arr), [](std::unique_ptr<MyClass>& p1, std::unique_ptr<MyClass>& p2) { return *p1 < *p2; }); ここがコンパイルが通りません auto it = std::unique(std::begin(arr), std::end(arr), [](std::unique_ptr<MyClass>& p1, std::unique_ptr<MyClass>& p2) { return *p1 == *p2; }); これは行けるのですが ちなみにクラスは class MyClass { int* ip; int siz; public: MyClass(int i) : ip(new int[i]), siz(i) {} ~MyClass() { delete[] ip; siz = 0; } bool operator<(const MyClass& m) { return siz < m.siz; } bool operator==(const MyClass& m) { return siz == m.siz; } void print() const { std::cout << siz << std::endl; } }; です
>>788 エラーメッセージ読め。
読んで分からないから相談ってことならエラーメッセージ貼れ。
比較関数の引数に const が抜けてるような気がするよ。
>>789 ありがとうございます
エラーメッセージが滝のように出てくるので
std::sort(std::begin(arr), std::end(arr), [](const std::unique_ptr<MyClass>& p1, const std::unique_ptr<MyClass>& p2) { return *p1 < *p2; });
これで行けました
「滝のように出てくるので、どんなエラーが起きたかは想像して答えてください^^」
いえ、貼ってもいいですよ もう解決しましたけど gccのエラーメッセージは読んでも理解出来ない・・・
質問者様がエラーメッセージを恵んでくださるそうだ
そんな態度じゃ先が心配だ
>>793 あのさあ・・・お前頭おかしくない?精神科逝けよ
あのさぁ・・・(呆れ)
初心者スレに質問しに来てる彼が理解できないんだ 我々回答者に理解できるはずもなかろう?
hoge厨が湧いたわけでもないんだから落ち着けお前ら あと夜中は神経が過敏になってるから投稿前に一回深呼吸でもして落ち着いてみろ
>>790 エラーメッセージが長すぎると思うのなら、 codepad や ideone で
エラーの出るコードをコンパイルさせて URL を貼っておけばよい。
>>792 エラーメッセージが理解できないということのほうが根本的な問題であって
そこさえ解決できれば今後多くの問題を自分で解決できるようになるのだから、
読んでも理解できないというメッセージを示して相談したほうがいいだろう。
この読み出し開始位置のアドレスが追加開始位置のアドレスを越えることは基本的にありません。 キューのメモリブロックのイメージ △・・・読み出し開始位置 ▲・・・追加開始位置 □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ △ ▲ 但し、キューが確保したメモリ領域の末端に達した場合、先頭から再利用します。 その際には追加開始位置のアドレスが読み出し開始位置のアドレスよりも大きくなります。 このとき、このキューのサイズは何バイトに設定しておくべきか? また、読み出し速度が追加速度よりも極端に速い場合に、再利用によってまだ読み出していない メッセージを上書きしようとする可能性があるが、その際にメッセージは破棄してもよいか? といった疑問が生じました。 しかし、それはアプリケーションの仕様から決定されるものであり、ここで質問して回答の得られる性質ものではないため このことに関してはここでは質問しません。 その他に以下の条件があります。 I. 読み込み開始位置のアドレスと追加開始位置のアドレスの差(▲-△)が8未満の場合は読み込みを行わない II. ▲-△が、「メッセージ内容のバイト数+8byte」未満の場合も読み込みを行わない
>読み出し速度が追加速度よりも極端に速い場合に、再利用によってまだ読み出していないメッセージを上書きしようとする可能性がある なんでだよ。 つーか、質問じゃないし何がしたいんだ。
MacOSXのゲームを作りたいのですが Windows+CPP+DirectXみたいな鉄板の組み合わせはMacではどういったものになりますか?
MacOSX+Objective-C+OpenGL
マカーって音はどうしてんの?
ギターと洗濯機とガスコンロを使う
>>804 QtOpenGLならWindows/Linux/MacOSどれでも同じソースでいけるぞ。
でも、お高いんでしょう?
なんとただ。
さらに今ご注文いただけると
812 :
デフォルトの名無しさん :2013/03/07(木) 14:07:05.96
プリンタ付けちゃう
質問を先にして情報を後から書くと情報の後出しになってお互いに効率が悪いので、 まず問題となっている箇所でどのような処理を行っているのか説明しています。 質問はしばらくお待ちください。
C言語でGoto文を使ってはダメと言われたので 今まで使った事ないですが、とある案件のソース を見たら、あっちこっちに見かけた件。
ぬるぽ
816 :
デフォルトの名無しさん :2013/03/07(木) 16:28:44.11
C++/CLIへC#から直接ImageかBitmapを渡すにはどの型を使えばいいでしょうか
817 :
デフォルトの名無しさん :2013/03/07(木) 16:52:17.16
>>817 その、theTXTが指す領域はどこだい?
リテラル?
ポインタに、メモリ上の何処かにある文字列の先頭アドレスを格納するのか、 それともメモリ上の何処かにあるポインタに、文字列そのものを突っ込むのかっていう。
初期化されてないからNULL領域にあるっちゅうことなんちゃうんかな
それをNULL領域と呼ぶのはおかしい。
NULLポインタが指す領域をNULL領域っていうんだよ。 static宣言されたポインタは0を初期値に持つから それが指す領域はNULL領域。
0ってNULLなん?
ポインタと共に使われたときのみNULLポインタとして扱われます
0をNULLにする時は、ちゃんとキャストしないと駄目 (T*)((void*)0)、こんな感じ
嘘を着くな
>>826 そんなことしなくても
char* c = 0;
この0はヌルポインタとして扱われる
>>823 ヌルポインタはどこも「指さない」したがってNULL領域なぞ存在しない
存在しない領域をNULL領域と呼んでいるとしたらどうだろうか?
名前をつけた時点で存在を認めたも等しい
まあNULLの概念を教えようと思ったら本一冊になってしまうのでな
NULLとは #define NULL (void*)0 const T NULL = 0; Tはsizeof(ポインタ)が格納できる型 型、長さ調べたければ typeid(NULL).名前() sizeof(NULL) ぬルポとは、しいて言うなら自動で型変換できるてテンプレートのNULLで nullptrとかく 信じてくださいね
ウソばっか
>>830 実際にはどこも指していなくても
コンピューターの世界では便宜的にどこかを指しているとした方が
統一的に扱えて便利なことがあるんだよ。
listのendとかね。
NULL領域もそういった類の用語。
キミがどう思おうが一般的に使われてるから。
>>836 "NULL領域" 約 504 件
"ヌル領域" 約 506 件
一般的・・・?
>>830 nowhere みたいなものだと思えば別に呼んでもいいとは思うが
聞いたことは無いな
>>838 脳内ソースなんだから突っ込んじゃダメだよ
ナルじゃなかったの?
goto hell; hell: printf("お前も蝋人形にしてやろうか!");
概念と実装は別だから、どっちで話してるかによる 実装としては「便宜的に何処かを指す必要がある」というのは、逆にいえば概念を表現できないから だね
>>841 ナルですよ!
ヴァジャイナとかバイラスみたいなもんだよ
C++より、今後はC♯とJavaを勉強した方がいい? Windows環境で動くアプリケーションで 制御系やデータ管理アプリを作るなら
Windowsは廃れるからやめといた方がいい
C++
>>847 時代はLinuxですか?
まさかMac
Macが支配者になります
appleはジョブズ死後はなんかパッとしないんだが
ハードと相性いいUNIXノートを継続して出してくれればそれでいい 細かいことには文句言わないよ
853 :
デフォルトの名無しさん :2013/03/08(金) 12:20:27.45
ジョブズなき後のリンゴは衰退するだけだよ 消滅はしないだろうけど市場規模は限りなく小さくなるから投資するのは馬鹿
なら早くUNIXかLinuxノートだせよくそ$
Linuxノートてなんで無いのかな
普通のノートPCにLinuxぶっこめばいいだけじゃね
このスレで言語相談とか何しに来たって感じだな
ハード対応調べるの面倒だろ 窓みたいに適当でもしっかり動くLinuxノートが求められてるんだよ
ジョブズがappleを立ち上げる ↓ 会社は急成長 役員に追い出される ↓ ジョブズはピクサーを立ち上げ apple急降下 ↓ ジョブズにまた戻ってくれとお願い ↓ ipod,iphone,ipadを発売 apple復活 ↓ ジョブズ死去 ↓ appleはその後・・?
>>860 ジョブズが戻ったからというよりiPodやiPhoneを売り出したから復活てのが正解に見える
iPodやiPhone実際に作って売ったのはすごい事だがアイデア自体はずっと前からある平凡なものだった
ジョブズが居なくても遅くとも二年位内の誤差で誰かがやってたよ間違いなくね
>>855 プレインストール買ってLinuxにしてしまえばいい。
快適だぞ
コロンブスの卵… まぁあれでしょ appleだってバカじゃないから同じ道はたどらんよ 今度はジョブズの遺したものを小出しにして生き延びる
>>861 そんなに遅れてやっても意味ないんだよ
ジョブズは他人のアイデアをさも自分のアイデアのように
主張して迅速にリードしていったからこそ今のアップルがある
>>864 ジョブズが居なければ一年遅れても一番だろ
くだらないちっぽけな誤差の範囲でしかないのにジョブズが評価されすぎなんだよ
ジョブズ一人がいなくなっただけじゃAppleは倒れないよ
>>861 ジョブズがいなかったら、いまの形、機能とは違う
ものになってたんじゃ?
ジョブズは無駄なものを嫌い、また妥協も許さなか
ったからね
ボタンの少なさや今の操作も、ジョブズのこだわり
があったこそだけど
出来上がった試作をいきなりコップの水の中にしずめ
、出てきた空気をみて「空気の入る隙間があるなら
もっと薄くしろ」とか言ったとか言わないとか
>>865 現にジョブズ追い出し後、appleの経営が
傾いたような
>>866 シンプルイズベストなんてよくある価値観だろ
それをジョブズの専売特許みたいに言うのはマジキチだよ
ジョブズがいなけりゃ他の誰かが少し遅れてやってたのは確定的なんだよ
ジョブズが居なくなったのは本当に残念だよ ご冥福をお祈りします
>>867 雑魚しかいなかったんだろ
その当時はな
今のAppleなら人材も充実してるからジョブズ一人の穴はいくらでも埋めれる
>>868 なんでジョブズがいなかったら、遅れてでも
今と同じものが出来上がってたと、確定的に
話してるんだよw
あんたがapple好きなのはわかったがw
てか、今は何か新しいもの出してるか?
> シンプルイズベストなんてよくある価値観だろ いや、ジョブズがいなかったら、 いまのAndroidのスマートフォンみたくなってたよw
>>871 人間てのは不思議なんだが科学水準や文化水準が同程度なら
必ず似たような発想するやつがいるもんなんだよ
微分の発明の話とか有名だろ?
全く同じとは言わんが大差ない(もしかしたらより優れた)デザインの商品が発明されて
Googleが乗っかってAndroidみたいなもの作って、という時代の流れは必ず再現されていたよ
>>868 アップルが出した後、そっくりなものが少し遅れてやってきた。
たしかに
サムチョンやシナがパッケージだけを パクっただけだろw 金型つくるだけなら、一週間でできるよw アップルがだして売れなかったら、 止めてたろうし
はあ だめだこいつら
>>874 > 必ず似たような発想するやつがいるもんなんだよ
よしんば発想はあったとしても、量産化に至るまで
責任をもって世に出せるかは別。
まあ、アップル見てなよ。
倒産はしないが、段階的に規模は小さくなっていくよ
iphone5失速してないか? 次期iPadもこれっていう、価格に見合った感じないし 新しさはないし。
真新しさなんていらないよな 安定して不快感ないデバイス出してくれればおけ
スレチ
>>879 時流に流されて方向を見失っている感はあるな
今のスマホ、タブレット市場は安さが第一の愚盲な底辺の数には対抗できずに先細りだろうな。 ジョブズ無きappleには次のフロンティアは拓けないだろう。
>>880 安定は大事だけど、新しさ、ユニークを失った
appleって終わりだろ
無理してひねり出した新しさには何の価値もない
一瞬板間違ったかと思った
>>885 極端だね、あんた
まあ、他の企業みたいな事やってたら、appleは
落ちぶれるわw
888 :
デフォルトの名無しさん :2013/03/08(金) 14:42:21.05
無理を実現することがイノベーション
> 今のAppleなら人材も充実してるからジョブズ一人の穴はいくらでも埋めれる この根拠がさっぱり語られないのはどうかと思いました
確かに、エンジニアが新しい事(エンジニアに限らないが)止めたら、終わりだよな。
>>889 apple好き過ぎて盲目になった人に、聞いても
ムダ
おまえらせめてプログラム絡めて雑談しろよ
y談しろよ
C++0y
char *pbuf ← 何らかの文字列の先頭アドレスが 既に入ってると仮定 while(pbuf !=NULL){ pbuf++;} ↑だと暴走する
(時間がかかるだけで) ぐるっとまわってきて pbuf == NULL と等価な値に来る環境もあるんじゃない?
ptrの条件式はNULLじゃなく ’\0’の方がいいのかなあ
*pbuf != '\0'
>>897 ”ポインタの” 比較判定なら NULL
”ポインタの指してる先” が文字列の終端かを判定するなら \0
意図が違うので使い分けしてる
ポインタをインクリメントして ぬると比較する例はありましたっけ?
>>899 さん
が答えてくれますたw
ありがとうございます
>>896 宇宙を一周し、ロープの片端を返してくれる
オーバーフローして初期アドレス次第で終了するが、 初期アドレスとポインタサイズによって異なるのか オーバーフローってどうやって判定するの?
最初の2行が意味わかんね
string型って値変わる度に長さ変わってるの?
ソースコードでおk
str系のthread-safeってどうやってんのかね strcpyしてる隣でstrcatやsprintf(&ptr[x]..やptr[x]=... かまされるとどうしようもないと思うんだが
スレッドセーフなの?
・馬鹿が別々のスレッドで同じアドレスを渡した ・strerror() ・strtok() 以外のstr系でどうやったらunsafeになるんだよ
strtok() の類似で errorno とかやっかいそう
ライブラリ提供側からしてreentrantとthread-safeをゴッチャにしてるのあるからねぇ 909みたいなのが声大きくても仕方ないとも言えるけど
str系に限らないがライブラリ関数に渡すデータの 排他制御は呼出し側の責任でおこなう。
>>866 そうそう、iphone と android を並べればわかる。正直 android 陣営はどれもこれもでかすぎ
でもジョブズ亡き後 iphone もでかくなりつつあるなあ‥‥大丈夫か?
>>870 apple なんかよりも人材豊かなはずの Microsoft であのざまだ。大企業病というのは恐ろしいね
>>913 そんな暇があるんだったらロマエの続きを早く!くだらん鯉の終わりだったらゆるさない!
Appleはゆっくり死んでいくのだ ゆるやかに、だが確実に
>>866 そこでジョブスに向かって「お前だって水に沈めれば空気が出るじゃないか」と
返すよう部下がいればアップルは安泰だったかもな。
返しになってない
そんなこと宣う部下はジョブズに一言申す前にクビになってたろうな
WM_RBUTTONDBLCLKである動作をさせてたのですが WM_RBUTTONUPの時にポップアップメニューが出るようにしたら そっちのせいで消されるのかダブルクリックの方の動作をしなくなりました なんとかなりませんか?
なりませんね
右ボタンのダブルクリックとか操作が奇妙すぎる
>>919 そんな事マジメに言うバカがいたら、
現時点でappleはなくなってるかもなw
GetDoubleClickTime()を使います
928 :
デフォルトの名無しさん :2013/03/09(土) 23:37:59.85
GCCのC++でatoull使おうと思ったらcstdlibをIncludeしても error: ‘atoull’ was not declared in this scope と言われます。strtoullは使えるしatollも使えるのですが、atoullは使えないのでしょうか? UbuntuのGCC 4.6.3です。
929 :
デフォルトの名無しさん :2013/03/09(土) 23:38:20.33
林檎は衰退の一途 知り合いが林檎使ってたから試しに触らせてもらったら使いにくいだけの産廃だった
>>929 大抵借りただけだと嫉妬からくる批判をしてしまう
半日耐えたら新世界見えたのになぁ
まじ使いやすいよ
これが無いともう仕事やるのだるいって感じ
使えないのでしょうか、もくそもどっから出てきたそれ
林檎使いだけど使ってる理由なんてターミナル周りが窓よりマシってくらいだ
それ重要だろ Cygwinはうんこコマンドプロンプトベースで使い辛い
かと言ってlinuxに行くほどの度胸はなかったけど
>>928 C++98の規格にはサフィックスがllの変換関数はない
C++11の規格にはatollやstrtoullはあるけどatoullはない
なのでコンパイラが独自拡張してなければatoullは存在せず使えない
>>935 度胸と言うか、ソフトのラインナップの差だな
ああ、そうだね
CUI環境が充実してるのはMacもLinuxも同じだが付加価値として 目に優しい美しいディスプレイ、洗練されたGUI設計、ハードへの対応の良さ、高品質なアプリケーションなど Linuxに無いモノが沢山ある
まあGUI設計にも不満点もあるので何とも言えないところ 特に、ファイルダイアログ上で直接ファイル操作できないのが面倒くさい その代わり、ファイルダイアログにファイルをドロップすればそこが開くというのは結構使えるけど
というかMacじゃないと恥ずかしくて外でノート開けないじゃん ダサい国産やシナのマシンに窓やLinuxなんて乗っけて公共の場で開いたら指さして笑われるよ
>>941 そんな浮浪者みたいな恰好してるから指刺されて笑われるんだよ…
それノート関係ないんじゃ
>>941 今度から笑われないように気をつけようね
>>750 cb->Regist(this,&CTest::print);
じゃなくて
cb->Regist(*this,&CTest::print);
にしないとダメだよ
あとあれはただのテストコードなんで使用は自己責任でお願いします。
俺は趣味マでWin7+VC2010使ってるんだけど 仕事でC/C++を使っている奴は、PC/OSとC/C++開発環境は何を使ってるんだ? Mac(開発環境なんというのか知らないが)とか使ってるのか
VC++6.0です(震え声)
VC++6.0は去年まで(震え声)
949 :
デフォルトの名無しさん :2013/03/12(火) 00:19:10.28
去年までRedHatEnterprise+gcc 今はWinXP+VC6 てかWinでXPより新しいOS見た事も触った事も無いんだが(震え声)
この間ようやくWin7+VC2010になったよ まぁ裏で動いてるコンパイラは別物だけど…
↓すみません。これ実行すると、 1文字目でループ抜けるんですが、なぜでしょうか? #define MAX_BUF 20 char str; char ptr[MAX_BUF]; unsigned int cnt=0; char Comstr(char ch); int main(void){ char code; str=getchar(); do{ code=Comstr(str); } while(code !='y'); return 0; } char Comstr(char ch){ if(cnt >= MAX_BUF){ printf("Buffer OverFlow ! \n"); return 'y'; } else{ ptr[cnt] = ch; cnt++; } }
unsigned int cnt=0; で初期化してるはずが、文字入力したとたん 値が20になってますた
str=getchar(); をdoループ内に入れたら解決しました
char str; というセンスが君の本質だ。
仕事じゃねーんだから、どうでもいい。
>>954 そういう余計なチャチャ入れるのがお前の本質だろ
心底どうでもいいケチをつけてくる奴って
必ずいるよね。
>>954 みたいなのが
strの意味知らずに使ってるのは馬鹿な証拠だろ
倉庫?
ひも C/C++では、文字列 コンピューターでは… ストリング,記号列:単位として取り扱われる記号,語,文字,ビットを一列に並べたもの. ランダムハウス英語辞典
int getchar ( void );
>>954 =958
必死になんなよ、おっさん。
スレタイ読めよ
エネルギーコスト・収支は重要。これが赤字では日本の燃料が減るだけ。バイオ燃料の例。 アルコール燃料 - Wikipedia 正味の燃料エネルギー収支 存続し続けるには、アルコール・ベースの燃料経済は燃料エネルギー収支の正味が黒字になっているべきである。 すなわち、アルコールを生産するのに費やした全ての燃料エネルギー、これには原料植物を耕作、収穫、輸送、発酵、蒸留、配送に費やされた燃料はもちろん、 同様に農場を建設したり農業機具を製作するのに費やした燃料が含まれるのだが、その総計に対しては生産された燃料が内蔵しているエネルギー量を超えるべきではない。 たとえば、「1ガロンの燃料を作り利用するまでに、2ガロンの燃料を消費する」のでは意味が無いと言うことである。 アメリカ合衆国において農業アルコールは一般に穀物から得られるが正味の燃料収支は道はいまだに険しいといった状態である。
>>961 名前を信じたからchar受けしたんろ。勘違いを起こす名前にするなだよな
>>964 getintだったらもっと勘違いするだろ
>>964 プロトタイプは見ることなく関数名だけ見るってどんな状況だよもん
>>966 俺に言うなよ。それやったのが
>>951 だろ。情況は
>>951 に聞け
ともかく名前が行き当たりばったりだと、プログラムのつくりも行き当たりばったり
の奴が多いよな。コーディングしながらプログラムをどうするか考えてるんだうが
パッケージ分割のコツってなんですか? おすすめの資料とか気をつけていることとかあったら教えてください
>>967 getcharに対して勘違いするような名前にするなっていったのはお前だろ。
>>951 はそんなこと言ってないし、他の誰もそんなこと思ってねーよ。
>>967 わかったから、そういう教育はお前の部下にしろよ。
標準入力て一つしか無いんですか? 二つのプログラムの標準出力を同じ行数の行を繋げてパイプでもう一つのプログラムに渡したいのですがやり方がわかりません
>>969 >勘違いするような名前
それstrって名前を皮肉ってるんだよ
>>973 streambufのこと?
それともそこに流し込むためにプールされる標準入力だろうか
しかし後者なら2つ以上あるハズがないか
ぐだぐだと、しつけえ野郎がいるw プログラム組めても、人間として失格w
>>975 うまく説明出来ないんですが
プログラム1の出力が
1
2
3
プログラム2の出力が
a
b
c
だとして
プログラム3の標準入力に
1 a
2 b
3 c
を渡したいんです
>>976 人格もプログラムし直したらいいのにねw
可能なのかわからんけど プログラム1の出力をファイルにリダイレクトしつつ -(A) プログラム2の出力を(パイプ経由で) stdin にもらって -(A) のファイルを読みながら処理する?
>>977 それぞれの出力をnlでナンバリングして名前付パイプに流してjoinでくっつけろ
981 :
デフォルトの名無しさん :2013/03/13(水) 01:07:13.40
join?
char str; かぁ。 命名が int set_data(void); void get_data(int d); 並みにズレている。 名前を軽んずるのはいくない。
>>982 そんなこと書くと噛みつかれるぞ
DQN名前の人が話題になるぐらいのご時勢だしな
名前を軽んずる奴が多いよ
キラキラ変数名の時代が来たか・・・
>>977 paste -d' ' <(プログラム1) <(プログラム2) | プログラム3
でいけるかと。
でも、プログラム1の出力が"1 1 1"などのように
プログラム3の標準入力のデリミタと被るケース(プログラム3の入力は行処理は諦めcsvやjsonなどで受け付けるなど)
プログラム1と2の出力行数が異なるケース(お好み)
などと問題点はあるので
仕様が固まるまでは
bash,awk含めた各種コマンド群やらそれらと相性のいい
PerlやRubyなどのLLで試行錯誤するのがいいんじゃないかな。
あ
>>982 = 983
自演・自己擁護ワロタwww
>>987 お前の書き込み分りすぎ。
ざっと見て
849 866 871 884 887 891 926 976 972 962
はお前の書き込みじゃないか
で、951もお前
Macや林檎貶されて腹立った奴が、ずーっと書き込みしてたんか とにかく、誰かに難癖つけたかったワケだ
>>988 間違いもあるがw
じゃあ、お前はappleマンセーの下りから
strのいちゃもん、
そして
自己擁護の
>>982 = 983まで
ほとんどお前じゃないかw
あのさぁ・・・(棒読み)
ここは相変わらずC/C++の情報が満載だな
appleマンセーバカw
マンセーはしたくないが Windowsは文句無しに残念すぎるし Linuxは実用性重視で見た目がダサい(ハードもソフトも)し遊びが少ないしハード対応よくないし 実施、消去法でMac一択にならざるを得ない 他のドマイナーな選択しもあるが大抵はゴミだし機能は良くてもLinuxと同じ理由でアウトなんだよね
初心者はお断りだな 次スレは【初心者歓迎】はずすべき 変数名とか基本的なお作法はしっかり学んでから来い 基本的なアルゴリズムもある程度勉強しとけよ いちいち教える身にもなれよ
997 :
デフォルトの名無しさん :2013/03/13(水) 12:52:10.62
>>996 お前が自分用に上級者用スレでも立てれば良いだろ
じゃあ、少なくとも 変数名とか基本的なお作法はしっかり学んでから来い マジでムカつくから
わーい、叩かれてたオレの書き込みが マンセーくんのせいになったw
だいべん
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。