スレを勃てるまでもないC/C++の質問はここで 14
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2010/03/23(火) 00:57:51過去ログ
スレを勃てるまでもないC/C++の質問はここで
http://pc11.2ch.net/test/read.cgi/tech/1167476845/
スレを勃てるまでもないC/C++の質問はここで 2
http://pc11.2ch.net/test/read.cgi/tech/1178503366/
スレを勃てるまでもないC/C++の質問はここで 3
http://pc11.2ch.net/test/read.cgi/tech/1187521676/
スレを勃てるまでもないC/C++の質問はここで 4
http://pc11.2ch.net/test/read.cgi/tech/1221633708/
スレを勃てるまでもないC/C++の質問はここで 5
http://pc11.2ch.net/test/read.cgi/tech/1230516307/
スレを勃てるまでもないC/C++の質問はここで 6
http://pc11.2ch.net/test/read.cgi/tech/1231564903/
スレを勃てるまでもないC/C++の質問はここで 7
http://pc11.2ch.net/test/read.cgi/tech/1232983248/
スレを勃てるまでもないC/C++の質問はここで 8
http://pc12.2ch.net/test/read.cgi/tech/1235921779/
スレを勃てるまでもないC/C++の質問はここで 9
http://pc12.2ch.net/test/read.cgi/tech/1240022781/
スレを勃てるまでもないC/C++の質問はここで 10
http://pc12.2ch.net/test/read.cgi/tech/1242300936/
スレを勃てるまでもないC/C++の質問はここで 11
http://pc12.2ch.net/test/read.cgi/tech/1245059383/
スレを勃てるまでもないC/C++の質問はここで 12
http://pc12.2ch.net/test/read.cgi/tech/1248010352/
スレを勃てるまでもないC/C++の質問はここで 13
http://pc12.2ch.net/test/read.cgi/tech/1260842197/
0002デフォルトの名無しさん
2010/03/23(火) 02:01:150003デフォルトの名無しさん
2010/03/23(火) 05:08:48・>>,<<で入力、出力というのが単に気持ち悪いから嫌い
・中身が複雑すぎて自分の頭では理解できないから嫌い
という理由はよく見かける。
ちゃんと使えば標準入出力もファイル入出力も、
あるいは圧縮・展開しながら読み書きとかいうのも
ストリームオブジェクト替えるだけでできて便利。
常に標準出力にしか書かないならprintfで十分かも。
書式指定したいときはsprintfで一度バッファに書いてから出力するか、
boost.format使うとかすればOK。
0004デフォルトの名無しさん
2010/03/23(火) 07:01:53それはお前だけ
0005デフォルトの名無しさん
2010/03/23(火) 07:56:19それはあなたです
0006デフォルトの名無しさん
2010/03/23(火) 09:02:11ここだろ。
大抵の場合、その恩恵授かる事が少ないから使わなくてもいいやってなる。
0007デフォルトの名無しさん
2010/03/23(火) 09:37:12今後のために、必要条件と十分条件の違いを学習した方がいいかも
0008デフォルトの名無しさん
2010/03/23(火) 09:43:07それはあなたです
0009デフォルトの名無しさん
2010/03/23(火) 11:45:32Foo& const GetFoo();
この様な「宣言」は旧式って認識でおkでしょうか?
そして現在では
Foo& GetFoo();
に「簡略化」されているという認識でおkでしょうか?
0010デフォルトの名無しさん
2010/03/23(火) 12:06:000011デフォルトの名無しさん
2010/03/23(火) 12:47:11どっちも×
0012デフォルトの名無しさん
2010/03/23(火) 13:28:120013デフォルトの名無しさん
2010/03/23(火) 13:38:28{
case '+';
k = a + b;
break;
}
でビルドするとエラーになるのはなぜ?
0014デフォルトの名無しさん
2010/03/23(火) 13:43:15:
0015デフォルトの名無しさん
2010/03/23(火) 13:44:14data, a, b, k が未定義だし、mainもないし
0016デフォルトの名無しさん
2010/03/23(火) 13:46:18ごめん よくわからない
0017デフォルトの名無しさん
2010/03/23(火) 13:47:19全部書いたほうがいいのね
#include <stdio.h>
int main(void)
{
int a,b,data,k;
scanf("%d%d%d",&a,&data,&b);
switch(data)
{
case '+':
int k = a + b;
break:
}
printf("%d%d%d",a,data,b);
}
0018デフォルトの名無しさん
2010/03/23(火) 13:50:210019デフォルトの名無しさん
2010/03/23(火) 13:51:59002012
2010/03/23(火) 13:54:56あまりこのスレで暴れないでくれるかな。
君以外にも答えを待っている人が沢山いてだね
チャットみたいに使われるとスルーされるのだよ。
自己中をなおしたまえよ。
0021デフォルトの名無しさん
2010/03/23(火) 13:56:45int k = a + b; → k = a + b;
break: → break;
>>13
case '+'; → case '+':
0022デフォルトの名無しさん
2010/03/23(火) 13:57:50> #include <stdio.h>
行頭に全角スペース?が入ってる
>int k = a + b;
int は不要 → k = a + b;
>break:
break の後ろがコロンに「:」になっている、セミコロン「;」とすべき
0023デフォルトの名無しさん
2010/03/23(火) 18:21:350024スレのテンプレート
2010/03/23(火) 18:22:26C言語なら俺に聞け(入門編)Part 61
http://pc12.2ch.net/test/read.cgi/tech/1267799238/
C言語初心者質問総合(だいぶ過疎っているが)
http://yutori7.2ch.net/test/read.cgi/pc2nanmin/1080308026/
C++相談室 part79
http://pc12.2ch.net/test/read.cgi/tech/1268846738/
【初心者歓迎】C/C++室 Ver.72【環境依存OK】
http://pc12.2ch.net/test/read.cgi/tech/1267775473/
C/C++小心者スレッドPart1
http://pc12.2ch.net/test/read.cgi/tech/1186262298/
【初心者歓迎】C/C++室 Ver.72【環境依存OK】
http://pc12.2ch.net/test/read.cgi/tech/1267775473/
Boost総合スレ part8
http://pc12.2ch.net/test/read.cgi/tech/1251446016/
Boost C++ Libraries Sandbox
http://pc12.2ch.net/test/read.cgi/tech/1250396380/
/******************************************************************/
codepad
ttp://codepad.org/
長いソースを貼るときはここへ!
/******************************************************************/
0025デフォルトの名無しさん
2010/03/23(火) 18:51:20こういうオーバーロードを行うとポインタ操作で不用意なバグを生み出しそうな気がするのですが大丈夫なのでしょうか?
0026デフォルトの名無しさん
2010/03/23(火) 19:00:25それは作り方しだい。
配布するぐらいだからそれなりに作ってんじゃないの。
0027デフォルトの名無しさん
2010/03/23(火) 19:03:25foo.h
class foo {
public:
foo() {}
void var() {
cout << "var" << endl;
}
};
----
foo.h
class foo {
public:
foo();
void var();
}
foo.cpp
foo::foo() {}
void foo::var() {
cout << "var" << endl;
}
それぞれのメリット、デメリットってありますか?
おいらはヘッダに実装しちゃうのが簡単でよいと思ってます。
0028デフォルトの名無しさん
2010/03/23(火) 19:13:45好きにすればいいよ。
君の場合はそのヘッダーを他人に見せるわけではないだろうし、
メモリ効率とかパフォーマンスとかも気にするレベルでもなさそうだからね。
0029デフォルトの名無しさん
2010/03/23(火) 19:31:58おいらのレベルは置いておいて、一般的な話として
メモリ効率が悪くなり、パフォーマンスも悪くなる、ってことですか?
0030デフォルトの名無しさん
2010/03/23(火) 19:39:53クラス定義内で実装すると inline になる。
inline でいいならそれでいいけど、
そうでないものを無理にクラス定義内で実装すると
ちょっと実装を変更しただけで
そのヘッダファイルをインクルードした全てのファイルが
再コンパイルされてしまうので、
inline にするつもりがないなら .cpp で実装した方がいい。
クラステンプレートみたいに全部ヘッダで実装する必要のあるものなら
全部クラス定義内で実装しちゃってもいいと思うけど。
inline になったからって必ずインライン展開されるわけじゃないしね。
0031デフォルトの名無しさん
2010/03/23(火) 19:49:43すごい合点がいきました。
時々空っぽ(もしくはメンバの初期化のみ)のコンストラクタだけヘッダに実装してあって
残りがソースに実装してあるコードを見るので、どういう使い分けなんだろう、と
思ってましたが、inlineになるというので氷解しました。
おいらはJava出身なので、理由がなければヘッダに実装も書きたいんだけど
クラスの設計後、実装をソースに移すようにしてみます。
0032デフォルトの名無しさん
2010/03/23(火) 20:05:36コンパイル時間を気にするような状況なら、プリコンパイルにするはずだから、
再コンパイルとか気にしなくていい。
0033デフォルトの名無しさん
2010/03/23(火) 20:24:16大きなプログラム扱った事無いだろ、お前
0034デフォルトの名無しさん
2010/03/23(火) 21:54:030035デフォルトの名無しさん
2010/03/23(火) 22:04:01コンパイル時間て重要なのにな
partial classが欲しいわあ
0036デフォルトの名無しさん
2010/03/23(火) 22:57:36namespace detail { struct none_helper{}; }
typedef int detail::none_helper::*none_t ;
これがなにをやってるんだかよく判らないんだけどこれどういうこと?
0037デフォルトの名無しさん
2010/03/23(火) 23:10:51他の型に自動変換されない型を定義してる。
相談室かどっかにも同じ質問あったが同じ人か?
0038デフォルトの名無しさん
2010/03/23(火) 23:35:03関係ない人だと思う
>他の型に自動変換されない型を定義してる。
それ以前の問題で
typedef int detail::none_helper::*none_t ;という文法からして何が言いたいのか判らない状態なのです
0039デフォルトの名無しさん
2010/03/24(水) 00:11:52基本的なところから。
typedef A a;
は「Aという型をaという名前でも使えるようにします」という意味。
int A::*b
は「型Aのint型のメンバ変数へのポインタ b」という意味。
両方合わせて
typedef int A::*b;
は「『型Aのint型のメンバ変数へのポインタ』の型をbという名前でも使えるようにします」となる。
メンバ変数ポインタはややこしいので使い方はぐぐってみてくれ。
とりあえず、普通のポインタと違ってNULLですら代入できないという性質がある。
このお陰で、例えば引数にNULLを渡したとしてもオーバーロードを誤判定するということがなくなる。
0040デフォルトの名無しさん
2010/03/24(水) 00:27:20NULLも代入できないのってメンバ関数ポインタだったっけ
0041デフォルトの名無しさん
2010/03/24(水) 00:28:48class A { int x; int y; float z; } a;
class B { int x; int y; float z; } b;
int A::* p1 = &a.x; //OK
int B::* p2 = &b.x; //OK
int A::* p3 = &b.y; //NG
int B::* p4 = &a.y; //NG
float A::* p5 = &a.x; //NG
float A::* p6 = &a.z; //OK
なんで、A::int* ではなく int A::* なんだろう。変な感じ。
0042デフォルトの名無しさん
2010/03/24(水) 00:40:36struct A { int x; int y; float z; } a;
struct B { int x; int y; float z; } b;
int A::* p1 = &A::x; //OK
int B::* p2 = &B::x; //OK
int A::* p3 = &B::y; //NG
int B::* p4 = &A::y; //NG
float A::* p5 = &A::x; //NG
float A::* p6 = &A::z; //OK
・ &a.xは通常のポインタが取得される、&A::xとしないとダメ
・ privateメンバのアドレスはクラス外からだと取れない
intだと分かりにくいけど、
A::B* と書いた場合「型Aのローカル型Bへのポインタ」と解釈される。
struct A{
struct B{};
};
C言語からの伝統で、「ある型の変数の定義の名前の部分を*に置き換えたもの」
がその型のポインタの型になることになっている。
例: int a→int *
int A::b→int A::*
(後者は見慣れないと思うけど、staticメンバ変数の定義のときにはこう書く)
0043デフォルトの名無しさん
2010/03/24(水) 01:05:070044デフォルトの名無しさん
2010/03/24(水) 01:49:28全部shared_ptrじゃ、ダメなんですか。
0045デフォルトの名無しさん
2010/03/24(水) 02:09:21実行速度が気にならないなら全部shared_ptrで構わない。
shared_ptrを使った場合はプログラマが1個のshared_ptrからしか参照されないことを知っていたとしても
毎回参照カウンタを生成するため、そのためのオーバーヘッドが生じる。
unique_ptrは参照カウンタを使用しないため、1つからしか参照されないことが予め分かっているなら効率的。
また、shared_ptrの場合、一度ポインタをshared_ptrに格納してしまうとポインタの所有権を奪い返すことができない。
つまり参照するshared_ptrがなくなった時点でオブジェクトがdeleteされるのを止めることができない。
一方で、unique_ptrはrelease()によって所有権を放棄させることができる。
ぱっと思いつくのはこのくらい。
0046デフォルトの名無しさん
2010/03/24(水) 03:04:54Google、高速・低メモリ消費の正規表現ライブラリ「RE2」を公開 ...
http://sourceforge.jp/magazine/10/03/15/0331223
もし誰も挑戦してみたいの試行RE2 Windows上でコンパイルするには、パッチを歓迎するだろうなされている。
どのようにre2/re2.hの上部にあるコメントを参照してくださいRE2、使用方法に関するドキュメントしてください。
http://code.google.com/p/re2/wiki/Install
No attempt has been made to make RE2 compile on Windows, but if anyone would like to try, patches would be welcomed.
For documentation on how to use RE2, see the comment at the top of re2/re2.h.
0047デフォルトの名無しさん
2010/03/24(水) 09:17:07分かりやすいサイトもしくはサンプルもしくは検索語無いですかね?
0048デフォルトの名無しさん
2010/03/24(水) 11:34:19この質問者ではないんだけど、やりたいこととしては
typedef unsigned int UINT;
が定義されていなければ自分で定義したい。
擬似コードとしては以下のような感じ。
#ifndef UINT
typedef unsigned int UINT;
#endif
冒頭の URL は実行時に判定しているけど(それはそれですばらしい)
やりたいのはコンパイル時です。
0049デフォルトの名無しさん
2010/03/24(水) 12:03:41OKWaveの回答者はなにやら勘違いしているようだけど、あるかないかはエラーかどうかで判断できる。
なので、コンパイルしてみてエラーになったら定義すればいい。
逆に言えば、汎用的な手段で判定することはできないので悪足掻きするだけ無駄。
0050デフォルトの名無しさん
2010/03/24(水) 12:14:51#define mkUINT() typedef mkUINT<UINT>::UINT UINT;
mkUINT()
0051デフォルトの名無しさん
2010/03/24(水) 12:38:46そこの回答だと
namespace fuga { typedef unsigned int UINT; }
using namespace fuga;
を加えるとエラーになるよね
0052デフォルトの名無しさん
2010/03/24(水) 12:43:10引数でshared_ptrを渡したいときは const shared_ptr<hoge>& とすればコピーのオーバーヘッドは発生しないし。
->は参照カウントと変更しないからオーバーヘッドはないよ。
new に対するshared_ptrのコストは無視できる。
まあ、大抵のshared_ptrのコストは無視できるよ。ホントにボトルネックになったときに考えればいい。
0053デフォルトの名無しさん
2010/03/24(水) 16:12:35const でもカウントアップされないと困る場合もあると思うけど。
0054デフォルトの名無しさん
2010/03/24(水) 18:30:370055デフォルトの名無しさん
2010/03/24(水) 18:39:48これが起こるはずがないというのは本末転倒。
元々その辺の管理をやらなくていいようにするための物なんだから。
0056デフォルトの名無しさん
2010/03/24(水) 18:47:28必要に応じてコピーすればいいし
0057デフォルトの名無しさん
2010/03/24(水) 18:48:230058デフォルトの名無しさん
2010/03/24(水) 18:50:01別の型のオブジェクトをplacement newするのは危険、と小耳に挟んだんだけど本当?
0059デフォルトの名無しさん
2010/03/24(水) 18:52:200060デフォルトの名無しさん
2010/03/24(水) 18:57:04だからずーと掴んでおく必要がないのが shared_ptr でしょうに。
0061デフォルトの名無しさん
2010/03/24(水) 19:00:24char[sizeof]を宣言してる関数から抜けたら駄目でしょう。
別に placement new だからというわけでもないと思うけど。
0062デフォルトの名無しさん
2010/03/24(水) 19:03:53関数を抜けなければ大丈夫とお思い?
http://d.hatena.ne.jp/Cryolite/20051102
0063デフォルトの名無しさん
2010/03/24(水) 19:10:12オブジェクトのメンバにchar[sizeof]で確保されたメンバがあって、オブジェクト自体が自動変数だった場合を想定してます。
>>62
それを呼んでもどういう場合が危険でどう回避すればいいか解らないあたりc++に対する理解度が低いのかなと・・・
0064デフォルトの名無しさん
2010/03/24(水) 19:14:43それは処理系から来る制限であり、元の仕様とは関係ない。
問題のある処理系ではそのようなコードを書かないのは当たり前のこと。
逆にメモリ管理を上書きしたいんだから、その辺のことを考慮するのは当然だろ。
0065デフォルトの名無しさん
2010/03/24(水) 19:18:46>危険でどう回避すればいいか解らないあたりc++に対する理解度が低いのかなと・・・
わからない人が使うものではないと思いますが、使う理由は何ですか?
0066デフォルトの名無しさん
2010/03/24(水) 20:19:29話がずれてるだろお前
0067デフォルトの名無しさん
2010/03/25(木) 09:41:55nameを\0で、埋め尽くしたい場合にどう記述すれば良いのでしょう。
0068デフォルトの名無しさん
2010/03/25(木) 10:06:160069デフォルトの名無しさん
2010/03/25(木) 10:19:54最初だけで良いなら static を付けて宣言する
それか
memset(name, '\0', MAX_PATH);
で毎回クリアするとか
0070デフォルトの名無しさん
2010/03/25(木) 10:21:25char name[MAX_PATH] = {'/0'};
0071デフォルトの名無しさん
2010/03/25(木) 10:22:05/0じゃなくて\0ね。
007267
2010/03/25(木) 10:41:55変数クリア時 memset(name, '\0', MAX_PATH);
解決しました、ありがとうございます。
0073デフォルトの名無しさん
2010/03/25(木) 14:26:320074デフォルトの名無しさん
2010/03/25(木) 14:43:36employer 【名】雇用主
employee 【名】従業員
とか言うのと同じ
0075デフォルトの名無しさん
2010/03/25(木) 14:48:290076デフォルトの名無しさん
2010/03/25(木) 14:51:42int *pointer = &pointee;
0077デフォルトの名無しさん
2010/03/25(木) 14:55:01memset(name, '\0', sizeof name); の方がよくない?
0078デフォルトの名無しさん
2010/03/25(木) 14:58:420079デフォルトの名無しさん
2010/03/25(木) 15:46:16i= MessageBox(hwnd, Message, Title, MB_OK);
Set timer
時間経過→ SendMessage(?,WM_KEYDOWN,VK_RETURN,0);
Killtimer
SendMessageでMessageBoxにエンター入力して表示を消すつもりです。
WM_KEYDOWNにVK_RETURNを送るとエンターの入力になりますよね?
また、MessageBoxのハンドルをどうやって所得すればよいのか解りません。
0080デフォルトの名無しさん
2010/03/25(木) 15:48:390081デフォルトの名無しさん
2010/03/25(木) 15:54:32MessageBox 使わず、自分で CreateDialog すればいいじゃん。
SendMessage は控えよう!
008279
2010/03/25(木) 16:18:07CreateDialogも調べてみます。
0083デフォルトの名無しさん
2010/03/25(木) 16:47:35thxです
0084デフォルトの名無しさん
2010/03/25(木) 21:32:49foo(strtok(s, ","), strtok(NULL, ","), strtok(NULL, ","));
なんて呼び出しをしたいんだけど、strtok は第一引数の場所から
順番に呼び出されるって保証がありますか?
0085デフォルトの名無しさん
2010/03/25(木) 21:34:340086デフォルトの名無しさん
2010/03/25(木) 21:34:400087デフォルトの名無しさん
2010/03/25(木) 21:36:03実際の実装ではむしろ逆から呼ばれる傾向にある
(後ろの引数からスタックに詰むため)
これも必ずそうというわけではないが
0088デフォルトの名無しさん
2010/03/25(木) 21:40:22面倒でもいったん変数に取り出す必要があるんですね。
どうもです。
0089デフォルトの名無しさん
2010/03/25(木) 23:37:22Lineが100あり、30行目の内容を読み込みたい時ですが、
int a=30,Line=0;
while (fgets(s, 256, fp) != NULL) {
Line++
if(Line=a) 適当な関数(s);
}
上の記述だと1〜30まで繰り返しますが、ダイレクトに30行目を読み込む方法ってあります?
for()
0090デフォルトの名無しさん
2010/03/26(金) 00:30:220091デフォルトの名無しさん
2010/03/26(金) 02:40:50どれ使えばいいの?(´;ω;`)
0092デフォルトの名無しさん
2010/03/26(金) 03:06:310093デフォルトの名無しさん
2010/03/26(金) 06:25:420094デフォルトの名無しさん
2010/03/26(金) 10:41:27そのソースだと全行で関数が呼び出されるぜw
0095デフォルトの名無しさん
2010/03/26(金) 10:45:48std::vector<int> v;
v.push_back(0);
v.push_back(1);
v.push_back(2);
std::remove(v.begin(), v.end(), 0);
std::remove(v.begin(), v.end(), 1);
printf("%d", v.size());
上記のようにすると、最後のvのサイズは1を期待するのですが3のままです。
でも、v[0]には本来の0ではなく2が入っています。
v[1]もv[2]も2が入っています。
std::remove()の代わりにvector::erase()を使用すれば、
v.size()は1を返します。
std::remove()はそういうモノなのでしょうか?
VC2008で確認しています。
0096デフォルトの名無しさん
2010/03/26(金) 10:55:20そうです
期待通りの動作をさせるには
v.erase(std::remove(v.begin(), v.end(), std::compose2(
std::logical_or<bool>(),
std::bind2nd(std::equal_to<int>, 0),
std::bind2nd(std::equal_to<int>, 1)))
とする必要があります
0097デフォルトの名無しさん
2010/03/26(金) 10:57:09v.erase(std::remove(v.begin(), v.end(), std::compose2(
std::logical_or<bool>(),
std::bind2nd(std::equal_to<int>, 0),
std::bind2nd(std::equal_to<int>, 1)),
v.end())
だった
removeは残す要素の候補を前に集めるだけで、実際の削除は
しませんのでstd::eraseもしくはメンバ関数eraseを使います
0098デフォルトの名無しさん
2010/03/26(金) 11:18:20erase 使うのならそんな面倒なことせず
remove を erase に置き換えれば良いだけだと思うけど。
0099デフォルトの名無しさん
2010/03/26(金) 11:56:46v.erase(std::remove(v.begin(), v.end(), 1), v.end());
これでいいね
removeは第三引数にリファレンスを取るのでlogical_orが使えないな
0100デフォルトの名無しさん
2010/03/26(金) 12:00:180101デフォルトの名無しさん
2010/03/26(金) 12:05:16これは読みにくいわ(^ω^;)
v.erase(
std::remove_if(v.begin(), v.end(),
boost::bind(
std::logical_or<bool>(),
boost::bind(std::equal_to<int>(), _1, 0),
boost::bind(std::equal_to<int>(), _1, 1)
)
),
v.end());
0102デフォルトの名無しさん
2010/03/26(金) 12:08:360103デフォルトの名無しさん
2010/03/26(金) 15:02:28>std::remove()はそういうモノなのでしょうか?
であって、そういう汚いコードに興味はありません。
0104デフォルトの名無しさん
2010/03/26(金) 16:54:30もっと汚いコードは山ほど書いてきた
0105デフォルトの名無しさん
2010/03/26(金) 17:12:19だから、コード書いてくれなんて誰も頼んでないつーの。
オナニーはよそでやってくれ
0106デフォルトの名無しさん
2010/03/26(金) 17:23:03なんなんだろうね。馬鹿じゃないかと思うよね。
0107デフォルトの名無しさん
2010/03/26(金) 17:28:360108デフォルトの名無しさん
2010/03/26(金) 17:46:36ある理由を教えてくださいませませ
Unko* unko_kusai
Chinko chinko_1
0109デフォルトの名無しさん
2010/03/26(金) 17:51:11生成パターンを使うと大抵ポインタにならないか?
それから仮想関数で使う場合もポインタにしなければならない
0110デフォルトの名無しさん
2010/03/26(金) 18:04:490111デフォルトの名無しさん
2010/03/26(金) 18:06:33変数にすると、生存期間をコントロールできない。
ポインタなら自由にコントールできる。
けど自由な分手間もかかるし、プログラマが責任を持つ必要がでてくる。
0112デフォルトの名無しさん
2010/03/26(金) 18:08:00仮想関数の場合な
使う場面は限られるけど
生成パターンでもシングルトンだと参照の場合もあるし
0113デフォルトの名無しさん
2010/03/26(金) 18:16:56{
HogeBase &h = hoge; h.vfunc();
}
ポインタじゃなくてもvtable参照してくれますよ
0114デフォルトの名無しさん
2010/03/26(金) 20:12:27知ってるから
わざわざ書かなくてよろしい
0115108
2010/03/26(金) 23:44:05今勉強してるサンプルプログラムでポインタあ・なしの両方が出てきて、何故に使い
分けてるのか疑問だったのですが、一方は複雑なことやる必要があるからポインタ、
もう一方はその必要が無いなら安全なポインタ無し という風に使い分けてるという解釈で
おkですかね?
0116デフォルトの名無しさん
2010/03/26(金) 23:46:46自動で済ませられるなら自動に任せるって琴田
0117デフォルトの名無しさん
2010/03/27(土) 00:57:48初回のremove()の結果を二回目のremove()の第二引き数とすればerase()は一回でいいんじゃね?
>>101
だとすればわざわざそんなややこしいbind()するメリットもないんじゃね?
0118デフォルトの名無しさん
2010/03/27(土) 01:46:00メモリリークするバグを潰すのは大変だ。と前置きをした上で。
ポインタにしなかった場合、その変数のスコープから抜けるときに
変数の後始末を自動でやってくれる。つまりメモリリークの心配がない。
これは色々処理をする途中で、エラーが発生したら中断、みたいな処理をするときにはとても楽。
ポインタを使った場合、中断するときにnewしたオブジェクトを正しく全てdeleteしないと
メモリリークになるのでよく注意する必要がある。
一方で、>>109の言うようにオブジェクトの生存期間を自分で管理したい場合や、
継承を使ったオブジェクトを使いたい場合、
もしくは大きなオブジェクト(大きな配列など)はポインタを使う必要がある。
C++であれば、ポインタでありながら、メモリリークの心配がいらないスマートポインタという
仕組みがよく使われる。(boost::shared_ptrなど)
これを使うと普通のポインタよりも実行速度がやや遅くなるが、普通は気にするほどではない。
0119デフォルトの名無しさん
2010/03/27(土) 01:54:03ガベージコレクションした方が良い。
ヘッダ変更だけで済む
0120デフォルトの名無しさん
2010/03/27(土) 01:55:54STLをうまく使えば、スマートポインタ、ガベージコレクション、new
はほとんどいらんだろう。
0121デフォルトの名無しさん
2010/03/27(土) 05:50:38>初回のremove()の結果を二回目のremove()の第二引き数とすればerase()は一回でいいんじゃね?
アホ
removeの戻り値は削除候補の先頭だ
前に集められた候補の中に次に削除したい値が含まれているので
その方法はダメ
>だとすればわざわざそんなややこしいbind()するメリットもないんじゃね?
だったらお前が何か書いて見せろや
口だけ出して何もしない奴が一番嫌いだな
0122デフォルトの名無しさん
2010/03/27(土) 08:34:09間抜けで頓馬で馬鹿と来ちゃ、どうしようもないな。
・間抜け
削除候補が集められるのは前じゃなくて後ろだよ。
つまり、「後ろに集められた削除候補の先頭」が戻されるって訳。
・頓馬
自分で確認すれば間違いに気付けたのにそれさえしないんだからな。
・馬鹿
その上、何か書いて見せろって自分が書けもしないのによく言うよ。
馬脚を現わした挙句に自ら墓穴を掘ったわけだ。
0123デフォルトの名無しさん
2010/03/27(土) 08:43:16間抜けのアホはお前だ
>削除候補が集められるのは前じゃなくて後ろだよ。
>つまり、「後ろに集められた削除候補の先頭」が戻されるって訳。
そんなもん常識だろ
>>121のどこにこれを否定するような文が書いてある?
>>117の通りにしたら1が削除されずに残ってしまうだろ
実行して試してみ
それとも図星を突かれて悔しくてファビョったのか?
0124デフォルトの名無しさん
2010/03/27(土) 08:52:48お前さんの言いたい事はこういう事だろ?
std::vector<int> v;
v.push_back(0);
v.push_back(1);
v.push_back(2);
v.erase(std::remove(v.begin(), std::remove(v.begin(), v.end(), 0), 1), v.end());
std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, " "));
std::cout << std::endl;
std::printf("%d", v.size());
0125デフォルトの名無しさん
2010/03/27(土) 09:35:130126デフォルトの名無しさん
2010/03/27(土) 09:38:05合ってるじゃないか
前に集められた「削除から外される」候補の中にと文脈からは取れるだろ
>前に集められた候補の中に次に削除したい値が含まれているので
これをよく読め
0127デフォルトの名無しさん
2010/03/27(土) 09:39:47相手が誰であろうと構わないわけだ
だったら痛くも痒くもないネット内でのビビリ喧嘩などせずに
街に出てDQNに喧嘩吹っ掛けてボコボコに殴られてこい
0128122
2010/03/27(土) 09:51:16まぁ、>124と核は同じだね。
--
#include <algorithm>
#include <cstdio>
#include <vector>
int main()
{
std::vector<int> v;
v.push_back(0);
v.push_back(1);
v.push_back(2);
for (int ic = 0; ic < 10; ++ic) {
v.push_back(ic % 5);
}
v.erase(std::remove(v.begin(), std::remove(v.begin(), v.end(), 0), 1), v
.end());
for (std::vector<int>::const_iterator it = v.begin(); it != v.end(); ++i
t) {
printf("%d\n", * it);
}
return 0;
}
--
それはさて。
>>>121のどこにこれを否定するような文が書いてある?
>121には「前に集められた候補」とあるんだけどな。
まぁ、「削除候補とは書いてない」と言い出すだろうからまぁいいや。
0129122
2010/03/27(土) 09:59:35--
v.erase(std::remove(v.begin(), std::remove(v.begin(), v.end(), 0), 1), v.end());
for (std::vector<int>::const_iterator it = v.begin(); it != v.end(); ++it) {
--
つーか、書いている間に予想通りのレスがついてて笑えた。
無茶しやがって……
0130デフォルトの名無しさん
2010/03/27(土) 10:00:31>>126
お前の目はフシアナだ
0131デフォルトの名無しさん
2010/03/27(土) 10:44:25>removeの戻り値は削除候補の先頭だ
>前に集められた候補の中に次に削除したい値が含まれているので
一行前に削除候補って書いてあるのに、次の行の候補が「削除から外される」候補と
読むのはかなり無理がある
0132デフォルトの名無しさん
2010/03/27(土) 10:48:56お前の頭が悪いからだ
その分だとプログラムもバグだらけだろう
0133デフォルトの名無しさん
2010/03/27(土) 11:00:02いい加減見苦しい。
説明が下手か勘違いしていたのかは詳らかではないが、
そもそも>117で巧くいくことははっきりしている。
他人を嫌う前に、ご自身の言動を見直してみては如何?
0134デフォルトの名無しさん
2010/03/27(土) 11:03:36見苦しいのはお前の方
こちらの説明が間違ってないのに間違って言い張るお前は馬鹿
0135デフォルトの名無しさん
2010/03/27(土) 11:08:20STLをうまく使うにはスマポは必須だけどね。
スマポでもshared_ptrならmake_sharedを使えばnewもいらず例外安全性も確保されるようになるし。
STL+shared_ptrでnewもガベコレもいらなくなるね。
0136デフォルトの名無しさん
2010/03/27(土) 11:11:450137デフォルトの名無しさん
2010/03/27(土) 11:13:16この分だと仕事場でも>>117は同僚とぶつかってばかりだろう
0138デフォルトの名無しさん
2010/03/27(土) 11:18:35> その方法はダメ
見苦しい弁解まだ〜w
0139デフォルトの名無しさん
2010/03/27(土) 11:31:300140デフォルトの名無しさん
2010/03/27(土) 11:33:44これで単純明快なのにケチを付ける奴が一番悪い
0141115
2010/03/27(土) 12:05:39色々まだ自分の知らないワードが出てきたのでググって勉強しますぉ。
0142デフォルトの名無しさん
2010/03/27(土) 21:51:58プロシージャ外じゃないと駄目なんて事は
0143デフォルトの名無しさん
2010/03/27(土) 22:13:10なんのSetTimer?
Win32ならWin32スレで聞くと詳しいぞ
0144142
2010/03/27(土) 22:21:240145デフォルトの名無しさん
2010/03/27(土) 23:14:510146デフォルトの名無しさん
2010/03/27(土) 23:16:26アクセス解析か
0147デフォルトの名無しさん
2010/03/27(土) 23:22:333次元での粒子の位置などを見ます
0148デフォルトの名無しさん
2010/03/27(土) 23:37:52一応「gnuplot C++」あたりでググればそれっぽいページは出てくるな。
だが、もう少し本当にやりたいことは何なのか考えてみた方がいいと思う
0149デフォルトの名無しさん
2010/03/27(土) 23:49:26解析を行いたいのか、解析データはあるからプロットだけしたいのか?による。
0150デフォルトの名無しさん
2010/03/28(日) 00:13:05ただ糞遅いから結局のところ違う描画ライブラリ使うことになるだろうけど
0151デフォルトの名無しさん
2010/03/28(日) 01:02:21後者です
>>150
別にいいのがあるならどんなのがあるか教えてもらえるとありがたいです
0152デフォルトの名無しさん
2010/03/28(日) 01:11:06ここの5.8章みたいなことがしたいということです
説明下手ですいません
0153デフォルトの名無しさん
2010/03/28(日) 16:23:540154デフォルトの名無しさん
2010/03/28(日) 16:36:05英語とフランス語の両方を勉強する意味ってありますか?
0155デフォルトの名無しさん
2010/03/28(日) 16:38:14一方を勉強したらもう一方を勉強するのはかなり楽
0156デフォルトの名無しさん
2010/03/28(日) 17:07:03英語とドイツ語ってぐらいか
0157デフォルトの名無しさん
2010/03/28(日) 17:14:290158デフォルトの名無しさん
2010/03/28(日) 17:15:44要するにどっちも覚えたら最強ってことだ
0159デフォルトの名無しさん
2010/03/28(日) 22:16:31> C++とJavaの両方を勉強する意味ってありますか?何か範囲がかぶってる気がしまして。
仕事がかぶってないからいいんじゃね?
0160デフォルトの名無しさん
2010/03/28(日) 23:47:570161デフォルトの名無しさん
2010/03/28(日) 23:53:23C++を学べばjavaもc#も軽い軽い
0162デフォルトの名無しさん
2010/03/28(日) 23:55:260163デフォルトの名無しさん
2010/03/29(月) 00:25:5832bitビルドのアプリ(wow64で動作)と64bitドライバの組み合わせで動作させることは可能でしょうか?
DeviceIoControlなどのドライバとのIOなど、その他動作面で問題ないでしょうか?
0164デフォルトの名無しさん
2010/03/29(月) 00:52:16できればF5キー一発ぐらい自動的な方法でお願いします
0165デフォルトの名無しさん
2010/03/29(月) 08:55:43どちらも作り方しだいです。
>>164
VMware 内で VS を動かしてください。
0166デフォルトの名無しさん
2010/03/29(月) 10:00:54少しワロタ
0167デフォルトの名無しさん
2010/03/29(月) 16:00:33並行して設計できるようにならないと無意味
0168デフォルトの名無しさん
2010/03/29(月) 16:01:030169デフォルトの名無しさん
2010/03/29(月) 16:45:38すみませんが実機でビルドしてVMwareにロードさせる方法を教えてください
0170デフォルトの名無しさん
2010/03/29(月) 17:09:24開発機でビルドしたというなら話は別だが。
0171デフォルトの名無しさん
2010/03/29(月) 17:15:52逆に普段どうやってるんだ?
隣のPCで動かすのと同じだろ。
0172デフォルトの名無しさん
2010/03/29(月) 17:34:38VMWare上の環境でそれをcheckout
0173デフォルトの名無しさん
2010/03/29(月) 18:28:510174デフォルトの名無しさん
2010/03/30(火) 14:27:000175デフォルトの名無しさん
2010/03/30(火) 14:35:56例えば配列int x[3]の3つの要素がそれぞれ
1,3,5であるが、どのx[]がそれぞれ1,3,5を有するかわからない場合に、
maxたる5を有するx[?]の?を出力したいのです。
特に、これの2次元配列版の出力方法を教えていただきたいのですが
0176デフォルトの名無しさん
2010/03/30(火) 14:37:250177デフォルトの名無しさん
2010/03/30(火) 16:35:350178デフォルトの名無しさん
2010/03/30(火) 16:45:18ユニークで無いなら考察無意味
0179デフォルトの名無しさん
2010/03/30(火) 17:19:02よくではなく、ある程度知っていればOK。
0180デフォルトの名無しさん
2010/03/30(火) 22:58:55と書いた場合
・そのファイルと同じディレクトリのa.h
・コンパイルしたディレクトリのa.h
のどっちが選ばれるのかは決まってますか?
0181デフォルトの名無しさん
2010/03/30(火) 23:10:500182デフォルトの名無しさん
2010/03/31(水) 01:32:58サーチパスの優先順位の高い方
0183デフォルトの名無しさん
2010/03/31(水) 02:05:31ちなみに今中学生です
0184デフォルトの名無しさん
2010/03/31(水) 02:58:10一言で言うと、制限とか宣言とか制約とか多すぎます。今、1変数1バイトの所まで知ってやる気がなくなってきました。
例えばですけど、こんなふうに処理が書きたいです
my %fanc = (
'fanc_a' => sub{ なんか処理 },
'fanc_b' => sub{ なんか処理 },
)
my @fanc = ('fanc_a', '引数'); #これ外部から取り入れた文字列
my $code = '??'; #これも外部から取り入れた何かのコード
$code =~ s/(変換しますお)/$fanc{"$fanc[0]"}->($fanc[1], $1);/eg;
完全に頭の中がperlに支配されてるんです。perlしかできないから。
Cを始めた理由は「exeなGUIを作りたかった」ってだけなんですが、もしかしてC以外を覚えたほうがいいでしょうか?
なんでもいいからなんかお勧めしたり、Cを肯定したり、助言したり、こんな情報みれやとURLを貼ったりしてほしいです。
どうすればいいのか全てを見失ってきそうです。
0185デフォルトの名無しさん
2010/03/31(水) 03:05:47ttp://www.google.co.jp/search?hl=ja&source=hp&q=perl+windows+gui&lr=&aq=f&aqi=g3g-s1g6&aql=&oq=&gs_rfai=
0186デフォルトの名無しさん
2010/03/31(水) 03:17:46人によるとしか。すぐできる奴もいれば10年かけてもダメな奴もいる。
数学・英語・料理・ゴルフ・・・なんでも同じだな。
0187デフォルトの名無しさん
2010/03/31(水) 03:19:19でもperlをexeにしたら、一通りやりましたが何を使ってもバグるんです。
警告なしで関数が動かずにスルーされてたりするんです。ひどいですよね。
0188デフォルトの名無しさん
2010/03/31(水) 03:20:260189デフォルトの名無しさん
2010/03/31(水) 03:28:50もしくは修正する。
結局、言語部分でしっくりきてないようだけどさ、
どちらにしてもWindowsAPI(exeなgui)などの知識が別途必要になってくる訳だし。
0190デフォルトの名無しさん
2010/03/31(水) 03:39:220191デフォルトの名無しさん
2010/03/31(水) 05:46:09一般的には前者。
>>182
それは不等号で括った場合じゃないのか?
0192デフォルトの名無しさん
2010/03/31(水) 08:48:16C#がおすすめ
0193デフォルトの名無しさん
2010/03/31(水) 17:03:26やっぱりwindowsAPIの知識だとか必要
0194デフォルトの名無しさん
2010/03/31(水) 17:13:43嘘付けアホ
泥沼化したらまずバグを見つける事は不可能に近いぞ
0195デフォルトの名無しさん
2010/03/31(水) 17:15:55処理が重いので
どうやればいいですか?
アイディアが浮かびません。
本とかに乗ってるやり方教えてください。
0196デフォルトの名無しさん
2010/03/31(水) 17:23:010197デフォルトの名無しさん
2010/03/31(水) 17:45:01質問の意味が全然わからねぇ。
プログラムの中のプログラムってどういう意味だ?
0198デフォルトの名無しさん
2010/03/31(水) 18:01:030199デフォルトの名無しさん
2010/03/31(水) 18:03:560200デフォルトの名無しさん
2010/03/31(水) 18:08:25関数中で文字列操作をするのだがStringクラスを使うと遅い
これを改善する方法はないだろうか?
私は馬鹿だ
信頼性のある方法を教えろ
0201デフォルトの名無しさん
2010/03/31(水) 18:14:16なるほど、パーサーがパースした物を初めから作れということですね。
しかし構文解析木の接点はstringじゃないんですか?
>>200
一行目が違います。
0202184
2010/03/31(水) 18:54:50他のスレとか見ても、言語に俺のようないちゃもん付けてる人いないので、
どうも俺の脳みその構造が間違ってたみたいです。
少し頭の構造を作り変えるべく勉強してまいります。
ありがとございました。
0203デフォルトの名無しさん
2010/03/31(水) 19:00:41C言語はまだマシだがC++は発狂する難しさだから
今のうちに別言語のほうがいいんじゃない?
exeでさえ良ければrubyならexerbとかあったような気がするから
perlでもあるでしょ。
0204デフォルトの名無しさん
2010/03/31(水) 20:24:480205デフォルトの名無しさん
2010/03/31(水) 23:37:54C++ってそんなに難しいの?
独学では無理なレベル?
0206デフォルトの名無しさん
2010/03/31(水) 23:42:08> 独学では無理なレベル?
俺は趣味プログラマでC++を独学でやっているが、
実装の都合をユーザーに押しつけるような代物。
バッドノウハウと「奥が深い症候群」
ttp://0xcc.net/misc/bad-knowhow.html
これを地でいくC++は、ホント好きor仕事じゃないと
やってらんないと思う。
0207デフォルトの名無しさん
2010/03/31(水) 23:57:14Cから移行しようかとおもってたんだが何か難しそうですね。
取り合えず全部の機能を使おうとするんじゃなくてbetter Cとして練習してみます。ありがとう
0208デフォルトの名無しさん
2010/04/01(木) 00:04:24> 取り合えず全部の機能を使おうとするんじゃなくてbetter Cとして練習してみます。
うん、それが正解だと思うよ。
難しいの使ってる俺SUGEEE
ってなれる性格じゃないとちょっと嫌になりかねないし。
0209デフォルトの名無しさん
2010/04/01(木) 00:27:29最近はC++を本気で絶賛してる子が増えてる気がする
怖いね
0210デフォルトの名無しさん
2010/04/01(木) 00:31:22てめーの感覚なんざ誰も信用しねぇよ
0211デフォルトの名無しさん
2010/04/01(木) 01:05:56C#→C→better CとしてのC++の順にやり、その上で、必要であればC++をやれ
0212デフォルトの名無しさん
2010/04/01(木) 01:13:06入門書の例題レベルなら話は別だろうけど
0213デフォルトの名無しさん
2010/04/01(木) 01:28:05そういう意味で言ったんじゃないんだけどな
0214デフォルトの名無しさん
2010/04/01(木) 03:50:260215デフォルトの名無しさん
2010/04/01(木) 03:59:07こんな感じでゲームが作りたいです。
どうしたらこんな感じで作れるようになりますでしょうか?
参考書でも良いのでアドバイスお願いいたします。
0216デフォルトの名無しさん
2010/04/01(木) 08:58:35春休み中に作るのは不可能。
0217デフォルトの名無しさん
2010/04/01(木) 09:20:10普通の生ポインタではなくスマポを使うようにといわれています。
深いコピーを想定しているため共有する必要はないので、必ずしもshared_ptrである必要はありません。
この場合は実際,
std::shared_ptr(まだ標準でない)
std::unique_ptr(まだ標準でない)
std::auto_ptr(標準)
boost::shared_ptr(boostが入っていない環境では使えない;準標準)
boost::scoped_ptr(boostが入っていない環境では使えない;準標準)
と5通りほど考えられると思うのですが
普遍性、速度などの面でどのスマポがいいのでしょうか。
よろしくお願いします。
0218デフォルトの名無しさん
2010/04/01(木) 11:14:290219デフォルトの名無しさん
2010/04/01(木) 15:15:46>普通の生ポインタではなくスマポを使うようにといわれています。
どういう理由でスマートポインタが必要なんだ?
それががわからないのに選択できるわけがない。
そういう言った本人にお伺いを立てる方が100倍速いわ。
0220デフォルトの名無しさん
2010/04/01(木) 15:22:200221デフォルトの名無しさん
2010/04/01(木) 15:59:34まあお前が雑魚なんだけどな
0222デフォルトの名無しさん
2010/04/01(木) 16:05:40雑魚乙でありますwwwwwww
0223デフォルトの名無しさん
2010/04/01(木) 16:23:500224デフォルトの名無しさん
2010/04/01(木) 19:59:07shared_ptrをpimplで使うのは、不明な型を安全にdeleteできるメリットがある。この理由のためだけにpimplで使っても良いよ。
pimplの為に使うのであれば、shared_ptrの複製を作らない可能性が高く他の方式と速度の差は殆ど無い。
0225デフォルトの名無しさん
2010/04/01(木) 20:41:32動的に確保したオブジェクトへのポインタをクラスのメンバとして持つ場合、
スマートポインタを用いるのが間違いが起こりづらく可読性も高いという
コンセンサスがC++界にはあるのかと思っております。
>>224
動的削除子により不完全型を持てるというやつですね。
0226デフォルトの名無しさん
2010/04/01(木) 21:59:41あれ可読性は高くないだろ?
見た目はかなり汚い
0227デフォルトの名無しさん
2010/04/01(木) 22:02:05一目でスマポと分かるし
0228デフォルトの名無しさん
2010/04/01(木) 22:12:15今まではサクラエディタとか秀丸とかそんなのを使ってて、ALT+Z を押したら編集中のコードがそのままexeになって勝手に保存されてる仕組みでした。
と言うかプロジェクトってなんですか?
統合環境とやらは使ったほうがいいんですか?
使ったほうがいいなら、VC++2008のサイト教えてもらえないでしょうか?(検索したら記述のサイトばっかり出てくる)
0229デフォルトの名無しさん
2010/04/01(木) 22:15:27最後の行は何が聞きたいのかイミフ
0230デフォルトの名無しさん
2010/04/01(木) 22:16:25makeを書けないなら統合環境使っとけ。
0231228
2010/04/01(木) 22:36:05makeのためなら使わないかも・・・
たまたま連休がめぐってきて、なおかつやる気があった日に使い方を調べてみるかもしれません。
0232デフォルトの名無しさん
2010/04/02(金) 00:09:49Edit and Continueを初めて見た時は感動した。
0233デフォルトの名無しさん
2010/04/02(金) 10:45:380234デフォルトの名無しさん
2010/04/02(金) 11:37:39まずは付属のドキュメント読んでチュートリアルやれ
中途半端な知識を応用して手探りで取り組むより遥かに良い
0235デフォルトの名無しさん
2010/04/02(金) 11:59:07「まじめにCをやることになって」ということだけど、この意味がわからないね。
まじめにやるのなら統合環境を使えるようになるのは当然のことだと思うし、
その気があれば数時間もあればビルドぐらいできるようになるはず。
Windows に依存したくないとか、趣味のプログラムなら VC 使う必要ないし、
自分が使えるコンパイラでやってればいいんじゃないの。
コードをトレースしてデバッグとかも必要ないんでしょうからね。
0236デフォルトの名無しさん
2010/04/02(金) 15:11:160237デフォルトの名無しさん
2010/04/02(金) 15:14:240238デフォルトの名無しさん
2010/04/02(金) 15:21:22B. make は書けないが統合環境いこなせる
Bの方が使えるよ
0239デフォルトの名無しさん
2010/04/02(金) 16:10:26えー、まじで?
でも統合環境めんどくさくね?
俺の秀丸なんて、改行するたびにデバックモードでコンパイルされるよ。
F5とか押す必要もなければ、使う予定もない大量のファイルが生成されることもない。
ちなみにF5を押した場合に最後にデバックしたときのログが表示される。
0240デフォルトの名無しさん
2010/04/02(金) 16:53:46改行する度にコンパイルなんかされたら、まともにコード書けないだろ。意味わかんない。
F5かどうかはともかく、コンパイルや実行の指示ができないんなんてありえない。
大量のファイルとか作成されても見る必要がないから関係ない。
統合環境でないと関数のヘルプも見れないだろうし、インテリセンスも機能しない。
リソースも直接 .rc を編集するの??
デバッグ時はコードのトレースもできないし、コールスタックの確認もできない。
つかブレークポイントも設定できないじゃん。
変数の内容を確認するときにはprintf で出力するのかwww
まともなアプリケーションなら開発効率が10倍ぐらい変わってくるねよ。
けどまぁテキストベースのお遊びのプログラムなら、どっちもで変わらんかもな。
多分そういう世界の話なんだろうな。
0241デフォルトの名無しさん
2010/04/02(金) 17:04:44これない環境で同レベルまで自力でやるとなると
10倍どころか100倍やっても追いつかないのでは。
問題点の発見は難しい
0242デフォルトの名無しさん
2010/04/02(金) 17:26:04eclipseもseve automatically before build がデフォじゃん
0243デフォルトの名無しさん
2010/04/02(金) 17:50:060244デフォルトの名無しさん
2010/04/02(金) 21:49:330245デフォルトの名無しさん
2010/04/03(土) 12:05:260246デフォルトの名無しさん
2010/04/03(土) 14:04:24できないんじゃね?
Windows かどうかしらんけど、まあAPIを使えばいいじゃないの?
0247デフォルトの名無しさん
2010/04/03(土) 18:45:03VB6.0のdebug.print、VB.NETのConsole.WriteLine()に相当する
IDEのウィンドウに結果を出力する方法を教えてください。
宜しくお願い致します。
0248デフォルトの名無しさん
2010/04/03(土) 21:14:35::OutputDebugString()
しかしVC++6とはレトロ趣味ですね
0249デフォルトの名無しさん
2010/04/04(日) 00:20:41のですが出来ますか?
VCを立ち上げてプロジェクトを開いた形でならソース編集時にインテリ
シンクは動作しますが、できれば軽いエディタのみで編集したいのですが・・・
vs2008 express editoin
0250デフォルトの名無しさん
2010/04/04(日) 00:21:430251デフォルトの名無しさん
2010/04/04(日) 00:23:44おー、そのやり方をぜひ教えてください
0252デフォルトの名無しさん
2010/04/04(日) 00:34:090253デフォルトの名無しさん
2010/04/04(日) 00:46:06教えてやれよ。
「使えるよ」「できるよ」とか一行レスされて、
やりかたを教えてくださいって聞き返してくるやつ珍しいな。
ほかはコミュ力無いから、そのまま黙っちゃうのに。
0254デフォルトの名無しさん
2010/04/04(日) 04:24:44スルーしてるだけだと思うんだw
0255デフォルトの名無しさん
2010/04/04(日) 12:06:20開発効率は軽さこそ命なのに。
ブレークポイントだのスタックトレースだのが無いと開発出来ないなんてのは
器具がないと治療できませんとぬかす現代の医者のようだな。
組み込み機で割り込みベクタのデバッグとかやってみ。
0256デフォルトの名無しさん
2010/04/04(日) 12:08:21開発速度こそ命の安い案件がどれだけあると思ってるんだ
0257デフォルトの名無しさん
2010/04/04(日) 12:17:02・まず人を見下す
・文意を読み違えている
・憶測をもとにした論拠
君、もう全然ダメ。今日は一日寝てなさい。
0258デフォルトの名無しさん
2010/04/04(日) 12:37:23お前が寝てろ無職
0259デフォルトの名無しさん
2010/04/04(日) 12:42:44・オウム返し
も追加しときますね。
0260デフォルトの名無しさん
2010/04/04(日) 12:47:37オウム返しはお前だろ無職のクズ
0261デフォルトの名無しさん
2010/04/04(日) 13:44:43サブディレクトリのパスを一時格納するのってvector,list,dequeとかで何がいいんだろう
あるディレクトリ内を検索して、サブディレクトリが見つかったらパスを↑のコンテナに入れて、検索が終わったときコンテナに要素が残ってればそいつの中を検索して、ってのを繰り返したいんだ
使ったことがあるのはlistだけなので、別な物も使ってみたい
ぶっちゃけstackでも用は足しそうだけど、速さや容量やコードのシンプルさ求めるとどうなのかなあと
0262デフォルトの名無しさん
2010/04/04(日) 13:46:520263デフォルトの名無しさん
2010/04/04(日) 13:54:340264デフォルトの名無しさん
2010/04/04(日) 15:06:33ありがとうございます
とりあえず定番らしいqueue使ってみます
0265デフォルトの名無しさん
2010/04/04(日) 19:02:55Aクラスの情報をすべてコピーしたいんですけど、どうするのが一番良いでしょうか?
A obja
B objb
…
objaのいくつかの処理を行う
…
objb = obja;
仮にこれができるのなら、objaと同じ状態のobjbは出来そうですが…
0266265
2010/04/04(日) 19:15:20そもそも、Bを作らず、BでオーバーライドしているMove()を、
AのMove()とは別にAの中に作り、
A obja,objb;
...
objaのいくつかの処理を行う
・・・
objb = obja;
として、それぞれのMove()を使い分けする方法は思いつきましたが、
それだと1つのクラスに2つの概念を取り込む形になってしまって気持ち悪いですよねぇ・・・
0267デフォルトの名無しさん
2010/04/04(日) 19:18:520268デフォルトの名無しさん
2010/04/04(日) 19:33:31プログラミング勉強しててある瞬間にそれまでわからなかった事が急に見え始め、万能感に囚われ、
どうして理解出来たかを自分理論で整理し始めた脱初心者くらいの人は、得てしてプライドが高くなりがち
そしてプライドの高さに反比例するように、視野はどんどん狭くなっていきがち
0269デフォルトの名無しさん
2010/04/04(日) 19:39:52脈絡がわからない。
どれに対して言ってるんだ。
0270デフォルトの名無しさん
2010/04/04(日) 19:52:40チラシの裏だろたぶん。
0271デフォルトの名無しさん
2010/04/04(日) 21:05:51うはwwww
誤爆だったんだが、タイミング良く書き込みエラーになったから無問題と思ったのにwwww
なんか時間差で書き込まれてたスマソ
0273265
2010/04/04(日) 21:38:28うーん、それだとprivateとpublicそれぞれに変数がある場合だったり、
Aが派生クラスで、基底クラスの更新が考えられる場合などに、
構造体が1つでなく2つ3つとなったりして、対応しきれないんですよね
「全状態と全関数を引き継いで、その上で異なる動きをさせる」ってのがやりたいんですが・・・
>>266で書いたようなことをすると、気持ち悪いという以外にも
BがAと共有しているポインタをいじってしまう恐れがあるんですよね。
BにAをコピーした上で、『Bにさせる動きだけ』をBでオーバーライドすれば
Bの中身を見るだけで、危ないことをしてないかどうか管理できるのですが・・・
0274265
2010/04/04(日) 21:59:34「Aの "ある時点での" クローンを作成し、そのクローンの動きを監視したい」です
ただし、これはあくまで『見えない』クローンであって、一時的な処理に必要なだけなので
・目に見える処理はさせない必要と、
・Aと共有しているポインタをいじらない必要
があります。
その解決策として、継承→オーバーライドを考えているわけです
ポインタに関しては「クローン用のコピーを作成すればいいのではないか」となりますが、
そのポインタ自身(Cというオブジェクト)がさらにポインタを持ってたりして
それら全ての「その時点」をコピーする必要があってややこしいので、
「Bの処理だけに着目」させて、ポインタは必要な場合のみコピーを作成する、というようにしたいのです
0275デフォルトの名無しさん
2010/04/04(日) 22:03:28つまりは、こういうことがやりたいわけだ。
http://www.geocities.jp/ky_webid/design_pattern/010.html
ポインタを共用するなら自前で参照カウンタ式にするか、boost::shared_ptrを使えば?
0276デフォルトの名無しさん
2010/04/04(日) 22:41:05何がやりたいのかよく分からないです
コードも使って説明した方がいいよ
0277デフォルトの名無しさん
2010/04/04(日) 22:44:20普通にディープコピーすりゃいいんじゃないの?
0278265
2010/04/05(月) 00:05:10class A : public ICloneable{
protected:
int m_time;
public:
virtual void Move(){
m_time++;
}
ICloneable* A::Clone(){
ICloneable* clone = new A();
*clone = *this;
return clone;
}
}
// Bクラス内
class B : public A{
public:
void Move(); // オーバーライド
}
// Cクラス内
A* obja = New A();
obja->Move();
B* objb = A->Clone();
objb->Move();
これだと、「ICloneable*からB*に変換できません」とエラーが出ますが
やりたいことは伝わるかなーと思います...
Bを独立させて動かすことにより「Aの数F先の動きを読む」というのが狙いです。
実際はBのMove()内でAのMove()でさせている処理をいくつか省いています
0279265
2010/04/05(月) 00:07:200280デフォルトの名無しさん
2010/04/05(月) 01:05:23単に B::B( const A& a) : A(a) {}
があれば十分なんじゃねーの?
0281デフォルトの名無しさん
2010/04/05(月) 01:15:37だけならただのコンストラクタってわかるんですが、後ろの「: A(a)」はどういう意味ですか?
0282デフォルトの名無しさん
2010/04/05(月) 01:47:030283281
2010/04/05(月) 02:05:19参照型のaをBの基底であるAのコンストラクタに渡している・・・ということですよね
で、Aに
A::A( A& a )
{
m_time = a.time;
...
}
といった感じで値のコピーをするコンストラクタを実装する・・・
ということで合ってるでしょうか
0284デフォルトの名無しさん
2010/04/05(月) 03:08:280285デフォルトの名無しさん
2010/04/05(月) 03:26:440286デフォルトの名無しさん
2010/04/05(月) 09:44:07#pragma once
という一文についてなのですが、ググって調べた所、インクルードガードを1文で行える便利な物と解説があったのですが、
これの有効範囲というのは、「その一文が置かれたそれ以降」に適用になるのか、
それとも「それが書かれているファイルの内容全てが対象」になるのかどちらなのでしょうか。
確認しようと試しにテストコードを書いてみたのですが、あってもなくても違いがよくわからず、はっきりしないため悩んでいます。
よろしくお願いいたします。
0287デフォルトの名無しさん
2010/04/05(月) 13:05:080288デフォルトの名無しさん
2010/04/05(月) 13:18:11Windows限定(VC++限定?) と書いてあるのが見えないの?
馬鹿なの?死ぬの?
0289デフォルトの名無しさん
2010/04/05(月) 17:16:37今ちょっと確認できないけど、
#pragma onceをファイルの一番最後に書いてみるとかどうだろう。
「それ以降のみ有効」なら、
インクルードガードが無いときと同じリンカエラーが出るんじゃない?
0290デフォルトの名無しさん
2010/04/05(月) 17:24:13>これの有効範囲というのは、「その一文が置かれたそれ以降」に適用になるのか、
以降での適用です。
0291デフォルトの名無しさん
2010/04/05(月) 20:07:20void minsyu(hoge* x)
{
hoge* manifesuto = new hoge();
x = manifesuto;
}
void main()
{
minsyu(a);
minsyu(b);
}
↑のプログラムを実行したところ、aとbに同じアドレスが入りました
スコープから外れたことでポインタ変数(manifesuto)が消されたのはわかるのですが、
このとき、ヒープ領域にはaとb2つ分のhogeサイズが確保されてるのでしょうか?
それとも、aはbに上書きされてるんでしょうか?
0292デフォルトの名無しさん
2010/04/05(月) 20:14:50{
hoge* manifesuto = new hoge();
x = manifesuto;
}
0293デフォルトの名無しさん
2010/04/05(月) 20:16:411) hoge *a, *bじゃね?
2) 「ポインタ変数が消された」意味不明。
3) hoge *h = new hoge()した領域を削除するにはdelete hの呼び出しが必要。
4) minsyu(hoge **x)で*x = manifesuto;しなければもとのaにもbにも代入されない。
5) だから、「aはbに上書きされてる」なんてことは永遠に無い。
二回newされて、どこにもポイントされない領域が出来上がって、
それは削除されたりもしていないし、もとの変数aにもbにも何の値も代入されない。
0294デフォルトの名無しさん
2010/04/05(月) 20:36:51class hoge {
int x;
};
hoge* a;
hoge* b;
void minsyu(hoge*& x)
{
hoge* manifesuto = new hoge();
x = manifesuto;
}
int main()
{
minsyu(a);
minsyu(b);
std::cout << "Address a = " << std::hex << std::showbase << reinterpret_cast<unsigned>(a) << std::endl;
std::cout << "Address b = " << reinterpret_cast<unsigned>(b) << std::endl;
delete b;
delete a;
}
0295291
2010/04/05(月) 22:02:33class aho {
int y;
};
class puyo {
public:
int x;
aho* m_aho;
puyo()
{
m_aho = new aho();
}
~puyo()
{
delete m_aho;
}
puyo puyo::operator=(const puyo& obj)
{
delete m_aho;
memmove( this, &obj, sizeof(puyo) );
aho* w_aho = new aho();
*w_aho = *m_aho;
m_aho = w_aho;
return *this;
}
};
0296291
2010/04/05(月) 22:04:20public:
puyo* m_puyo1;
puyo* m_puyo2;
hoge::hoge()
{
m_puyo1 = new puyo();
m_puyo2 = new puyo();
}
~hoge()
{
delete m_puyo1;
delete m_puyo2;
}
void minsyu()
{
puyo* manifesuto1 = new puyo();
puyo* manifesuto2 = new puyo();
*manifesuto1 = *m_puyo1;
*manifesuto2 = *m_puyo2;
m_puyo1 = manifesuto1;
m_puyo2 = manifesuto2;
}
};
0297291
2010/04/05(月) 22:05:07{
hoge* a = new hoge();
a->minsyu();
std::cout << "Address a = " << std::hex << std::showbase << reinterpret_cast<unsigned>(a->m_puyo1->m_aho) << std::endl;
std::cout << "Address b = " << reinterpret_cast<unsigned>(a->m_puyo2->m_aho) << std::endl;
delete a;
}
3回になってしまった・・・
これで、表示されるアドレスがいっしょになります
※実際に動かすとdeleteがうまくいかずエラーが出ます
0298デフォルトの名無しさん
2010/04/05(月) 22:31:41Error 00001. 0x310030 (Thread 0x0ACC):
Reference to freed resource:
delete(0x00BA79D0)
| reference_of_pointer2.cpp line 17:
| }
| ~puyo() {
|> delete m_aho;
| }
| puyo operator=(const puyo& obj) {
Call Tree:
0x00401E5B(=reference_of_pointer2.exe:0x01:000E5B) reference_of_pointer2.cpp#17
0x00401BF0(=reference_of_pointer2.exe:0x01:000BF0) reference_of_pointer2.cpp#39
0x004012BC(=reference_of_pointer2.exe:0x01:0002BC) reference_of_pointer2.cpp#61
0x32AD8D9E(=CC32100MT.DLL:0x01:0D7D9E)
以下省略
山ほどエラーが出るが、大要はフリーした領域に書きこみを行っているな
0299デフォルトの名無しさん
2010/04/05(月) 22:35:31void minsyu() {
puyo* manifesuto1 = new puyo();
puyo* manifesuto2 = new puyo();
*manifesuto1 = *m_puyo1;
*manifesuto2 = *m_puyo2;
m_puyo1 = manifesuto1;
m_puyo2 = manifesuto2;
}
これまずいやろ
交換してるんだと思うが、上書きしてしまっていてメモリリークが起きている
0300デフォルトの名無しさん
2010/04/05(月) 22:42:45意図した動作かどうかは知らんが
class hoge {
public:
puyo* m_puyo1;
puyo* m_puyo2;
hoge() {
m_puyo1 = new puyo();
m_puyo2 = new puyo();
}
~hoge() {
delete m_puyo1;
delete m_puyo2;
}
void minsyu() {
puyo* manifesuto1 = new puyo();
puyo* manifesuto2 = new puyo();
puyo* t1;
puyo* t2;
t1 = m_puyo1;
t2 = m_puyo2;
m_puyo1 = manifesuto1;
m_puyo2 = manifesuto2;
manifesuto1 = t1;
manifesuto2 = t2;
delete manifesuto2;
delete manifesuto1;
}
};
0301291
2010/04/05(月) 22:57:53aho* delaho = m_aho;
delete delaho;
memmove( this, &obj, sizeof(puyo) );
一般的なポインタ重複防止策は知らないけど、これで解決...?
>>300 指摘感謝
0302デフォルトの名無しさん
2010/04/05(月) 23:00:140303デフォルトの名無しさん
2010/04/05(月) 23:05:20いやそれは関係無い
deleteしないとメモリリークするでしょ
0304デフォルトの名無しさん
2010/04/05(月) 23:32:54クラス使うの初めてなんだろ?
俺コーディングする前に定石を覚えろ。
0305デフォルトの名無しさん
2010/04/05(月) 23:35:26最初はちまちまいじくってた方がいい
0306デフォルトの名無しさん
2010/04/06(火) 00:33:01マニュアル読め
http://msdn.microsoft.com/en-us/library/4141z1cx.aspx
0307デフォルトの名無しさん
2010/04/06(火) 02:57:000308デフォルトの名無しさん
2010/04/07(水) 23:47:43インクルード時に
#include "Uon/Sanukiudon.h"
とすると見つかりませんエラーが出て
#include "Sanukiudon.h"
にしたらちゃんと見つけてくれました。
(実際にはディレクトリの中に格納されてるのも関わらず)
これは一体全体どういうことでしょうか?
0309デフォルトの名無しさん
2010/04/07(水) 23:51:32確認。
> (実際にはディレクトリの中に格納されてるのも関わらず)
#include "Sanukiudon.h"としたソースファイル.cppの存在するフォルダと
"Sanukiudon.h"が同じフォルダにあるの?
それともそうでないの?
0310デフォルトの名無しさん
2010/04/08(木) 00:28:06両方なんです
例えばルートのmainからディレクトリの中に入れてるファイルをインクルードするときも
ディレクトリの中から同じディレクトリ内のファイルをインクルードするときもどちらも
ディレクトリを取ったパスを書かないと駄目な感じです
参考書にはcppの位置に関わらずヘッダの位置をフルパス(プロジェクトのルートディレクトリ
から見て)書いとけって書いているので真似をしようとしたのですが
0311デフォルトの名無しさん
2010/04/08(木) 00:35:52なんの理由があってその本はそれを推奨しているんだ?
どうせ書いてないだろうが
0312デフォルトの名無しさん
2010/04/08(木) 01:01:03{
template<int T>
int func( int val ){ return val; }
template<>
int func<2>( int val ){ return 2 * val; }
};
をコンパイルしようとすると以下のようなエラーが出てしまいます。
test0.cpp:11: error: template-id ‘func<2>’ in declaration of primary template
test0.cpp:11: error: ‘template<int T> int Test::func(int)’ cannot be overloaded
これは文法的に間違っているのでしょうか?
gcc version 4.4.1 です。
0313デフォルトの名無しさん
2010/04/08(木) 01:05:13参考書には「プロジェクト内に同じ名前のファイルがある場合の為にフルパスに
しておいた方が間違いが起きにくい」と書いてます
実際サンプルもディレクトリ違いで同じファイル名の別のものがあります。
でもこの参考書のWEBサイトによるとこれはVC2005用なのでVC2008では
異ディレクトリでも同一ファイル名は使えないのでファイル名を変更しなさいと
書いてありましたので…2005では意味があったけど2008では意味が無い
ということになりますね…あれ?
0314デフォルトの名無しさん
2010/04/08(木) 08:13:32ありがとうございます
0315デフォルトの名無しさん
2010/04/08(木) 10:02:20>#include "Uon/Sanukiudon.h"
>とすると見つかりませんエラーが出て
Uon → Udon にすればいんじゃね?
0316デフォルトの名無しさん
2010/04/08(木) 11:25:00ディレクトリ構成を改めて書いてくれ。言いたいことがよく判らんぞ。
例えば、
<project home>/Udon/Sanuki.h
<project home>/Udon/Sanuki.cpp
<project home>/main.cpp
こういう構成ならmain.cppからなら
#include "Udon/Sanuki.h"
で、Sanuki.cppからは
#include "Sanuki.h"
でインクルードできる。
<project home>がディレクトリサーチパスに指定されているのなら、Sanuki.cppからも
#include "Udon/Sanuki.h"
でいい。
<project home>/Udonがディレクトリサーチパスに指定されているのなら、どちらからも
#include "Sanuki.h"でいい。
0317デフォルトの名無しさん
2010/04/08(木) 11:40:15理由は兎も角、特殊化版を外に出せばコンパイルできると思う。
template<>int Test::func<2>(int val) {return 2 * val;}
0319デフォルトの名無しさん
2010/04/08(木) 13:12:09ヽ(・ω・)/ ズコー
\(.\ ノ
、ハ,,、  ̄
 ̄
0320デフォルトの名無しさん
2010/04/08(木) 13:17:480321デフォルトの名無しさん
2010/04/08(木) 13:18:13で、元の書き方は文法的に正しくないということですか?
0322デフォルトの名無しさん
2010/04/08(木) 13:22:09ダメ
0323デフォルトの名無しさん
2010/04/08(木) 19:39:19>異ディレクトリでも同一ファイル名は使えないのでファイル名を変更しなさい
ってマジ?
0324デフォルトの名無しさん
2010/04/08(木) 19:52:27本の間違いか、>313の勘違いだろ。
0325デフォルトの名無しさん
2010/04/08(木) 22:02:34まあその本の著者の勘違いが原本だろう
0326デフォルトの名無しさん
2010/04/09(金) 00:35:11親クラス型のポインタに子クラスを入れたとして、そこから子クラス固有のメンバ関数呼べない?
0327デフォルトの名無しさん
2010/04/09(金) 00:40:050328デフォルトの名無しさん
2010/04/09(金) 02:12:01これなんだけど
http://www.shuwasystem.co.jp/support/7980html/2118.html#4
どうでしょうか
0329デフォルトの名無しさん
2010/04/09(金) 02:21:18dynamic_cast
0330デフォルトの名無しさん
2010/04/09(金) 08:47:40Javaでもそれ、キャストしないと呼べないんじゃ
0331デフォルトの名無しさん
2010/04/09(金) 09:12:42test3.cpp:17: warning: dereferencing pointer ‘<anonymous>’ does break strict-aliasing rules
test3.cpp:17: warning: dereferencing pointer ‘<anonymous>’ does break strict-aliasing rules
/usr/include/c++/4.4/bits/stl_tree.h:175: note: initialized from here
のようなwarningが出ます。
「-Wall」「-O2」どちらかだけでは出ません。
また、「-Wall -O1」では出ず、「-Wall -O3」では出ます。
これはどういう意味のwarningなのでしょうか?
================================================
// a、bは0~9の値をとるとする
class Hoge
{
public:
double a, b;
Hoge( double a, double b ) : a(a), b(b) { }
bool operator<( const Hoge& rhs ) const{
const double l_val = a*10 + b;
const double r_val = rhs.a*10 + rhs.b; // <- 17行目
return ( l_val < r_val );
}
};
int main(int argc, char* argv[])
{
map<Hoge,int> mmm;
mmm[ Hoge(0,0) ] = 0;
}
0332デフォルトの名無しさん
2010/04/09(金) 09:26:470333デフォルトの名無しさん
2010/04/09(金) 17:39:54??
(∵)
(∵ ) ( )
(∵) ( ∵)
(TT) (∵)
(∵)y-~
(∵)♪ (∵)…
0334デフォルトの名無しさん
2010/04/09(金) 18:20:13g++ 4.1.2 で -O2 -Wall そのコードを試してみたけど、警告は出なかったよ。
0335デフォルトの名無しさん
2010/04/09(金) 18:48:580336デフォルトの名無しさん
2010/04/09(金) 19:47:050337331
2010/04/09(金) 21:06:29g++ 4.4.1 です。
全く考えもしませんでしたが、>>334、>>335さんの結果を見ると
>>336さんの通りバグなんですかね…
0338デフォルトの名無しさん
2010/04/09(金) 21:14:130339デフォルトの名無しさん
2010/04/09(金) 21:22:400340デフォルトの名無しさん
2010/04/09(金) 22:20:50英語の翻訳の仕方くらい勉強しとけよ。
0341デフォルトの名無しさん
2010/04/09(金) 22:30:27お前が一番わかってない
そんな内容のメッセージなんか出ちゃいない
type punningでぐぐれ馬鹿
0342デフォルトの名無しさん
2010/04/09(金) 23:44:330343デフォルトの名無しさん
2010/04/09(金) 23:55:170344デフォルトの名無しさん
2010/04/10(土) 00:20:35char* strrchr( const char *s, int c )関数の第二引数は文字列が
変数だった場合どのようにすれば正しい結果が得られるのでしょうか。
0345デフォルトの名無しさん
2010/04/10(土) 00:31:022行目と3行目の日本語がよく分からん。
0346デフォルトの名無しさん
2010/04/10(土) 00:40:210347344
2010/04/10(土) 00:46:26自分が調べたものは
int c='C';
strrchr(str,c);
のように検索したい言葉が文字リテラルの場合しか出てきませんでした。
ですが、検索したい言葉が
char str2="あいう";
のように変数で指定できるようにしたかった場合、第二引数はどうすればよいでしょうか。
0348デフォルトの名無しさん
2010/04/10(土) 00:58:200349デフォルトの名無しさん
2010/04/10(土) 00:59:150350344
2010/04/10(土) 01:04:17GetOpenFileNameで取得したファイルパスからファイル名を除くようにしたいもので。
もっといい方法あったら教えて下さい。
(最初からこう書けばよかった('A`))
0351デフォルトの名無しさん
2010/04/10(土) 01:06:500352デフォルトの名無しさん
2010/04/10(土) 01:07:330353デフォルトの名無しさん
2010/04/10(土) 02:23:030354デフォルトの名無しさん
2010/04/10(土) 04:07:08SHLWAPIのPathRemoveFileSpec使う。
あるいは、boost::filesystem::pathにて、parent_path()してexternal_directory_string()するなど。
0355デフォルトの名無しさん
2010/04/10(土) 07:30:39こういう環境依存のレスする奴ってバカなの?死ぬの?
0356デフォルトの名無しさん
2010/04/10(土) 08:23:21そもそも元の質問自体が環境依存な件。
0357デフォルトの名無しさん
2010/04/10(土) 09:07:250358デフォルトの名無しさん
2010/04/10(土) 09:29:18あ?他になにがあるっつーんだ
まさかLinuxとか答えたりしないだろうなハゲ
0359デフォルトの名無しさん
2010/04/10(土) 09:40:490360デフォルトの名無しさん
2010/04/10(土) 11:18:23おい逃げるな
他に何があるか答えてみろカス
0361デフォルトの名無しさん
2010/04/10(土) 11:22:190362デフォルトの名無しさん
2010/04/10(土) 11:26:080363デフォルトの名無しさん
2010/04/10(土) 11:46:27+ GetParentFolderName
に相当するVCで使えるAPI知りませんか。
0364デフォルトの名無しさん
2010/04/10(土) 11:49:43せっかく井戸の中に居るんだから無理して出ないほうがいいよー(ワラ
0365デフォルトの名無しさん
2010/04/10(土) 11:57:15static void getparentpath(char* parent, const char* fullpath)
{
strcpy(parent, fullpath);
char* ptr = strrchr(fullpath, '/');
if (ptr != NULL) {
*ptr = '\0';
}
}
0366デフォルトの名無しさん
2010/04/10(土) 11:58:43static void getparentpath(char* parent, const char* fullpath)
{
strcpy(parent, fullpath);
char* ptr = strrchr(parent, '/');
if (ptr != NULL) {
*ptr = '\0';
}
}
0367デフォルトの名無しさん
2010/04/10(土) 12:26:56>>357>>359
おい 良いからさっさと答えてみろよ
POSIX/Windows API環境以外で君が知っている環境を答えてごらんよ?
0368デフォルトの名無しさん
2010/04/10(土) 12:36:430369デフォルトの名無しさん
2010/04/10(土) 13:15:54http://www.kouno.jp/home/c_faq/c5.html#0
0370デフォルトの名無しさん
2010/04/10(土) 13:21:34_tsplitpath
0371デフォルトの名無しさん
2010/04/10(土) 13:41:52言うと思った。でもまあ関係ない
さっさと答えろよ
0372デフォルトの名無しさん
2010/04/10(土) 13:46:130373デフォルトの名無しさん
2010/04/10(土) 13:49:32自演か自演じゃないか決着付かないのがやだな。
まあどうせ串通してきたりするだろうけど。
0374デフォルトの名無しさん
2010/04/10(土) 13:53:36そこまで自意識過剰なのは、もう病気というべきか。
0375デフォルトの名無しさん
2010/04/10(土) 13:56:550376デフォルトの名無しさん
2010/04/10(土) 14:07:190377デフォルトの名無しさん
2010/04/10(土) 14:17:390378371
2010/04/10(土) 14:33:38誰もそんなこと言ってない。
良いから早く答えろ。
>>376-377
お前ら同一人物かどうか知らんが
同一だろうがバカの集合だろうが関係ない
誰か答えて見せろよw
0379デフォルトの名無しさん
2010/04/10(土) 14:37:040380371
2010/04/10(土) 14:43:48もしそうならゴメン>>376
でもまあとにかく他のヤツは良いから
俺は
>>357
に答えて欲しいんだ。
POSIX/WindowsでBoost.FileSystemが動かない環境は?
>>375
> unixかwindows以外でCを使う環境?そんなん無数にあるじゃんw
Boost.FileSystemはC++のライブラリなんだけど。無知を晒すなw
0381デフォルトの名無しさん
2010/04/10(土) 14:47:410382デフォルトの名無しさん
2010/04/10(土) 14:50:50それだとレンタルサーバみたいな自分でインストールできない環境だと動かないんじゃね?
0383デフォルトの名無しさん
2010/04/10(土) 15:08:42>>356ってさあ、
>Boost.FileSystemはPOSIX/Windosで動くから大概の環境で大丈夫
って言ってるけど、
それを否定してる>>357って別に
「POSIX/WindowsでもBoost.FileSystemが動かない環境はある」
と言ってるとは限らないのでは。
「POSIX/Windows以外にもC++の環境はあるからBoostの例はよくない」
という可能性もあるわけで。
0384デフォルトの名無しさん
2010/04/10(土) 15:16:42まともに相手する価値なんてねーよ
0385356
2010/04/10(土) 15:36:52今さらながらtypoしてた。恥ずかしい。
というか、ファイルパスとかディレクトリという概念自体が環境依存だよね。
デリミタだって'\', '/', ':' いろいろあるし、ダメ文字の問題もあるし。
0386デフォルトの名無しさん
2010/04/10(土) 15:41:27お前ら全員あぼんしたいから安価しろ!
0387デフォルトの名無しさん
2010/04/10(土) 17:41:03まともな大人が10割もいない
0388デフォルトの名無しさん
2010/04/10(土) 17:47:13ネタ?wwwネタだよなwww
まともな大人が10割居るコミュニティなんてこの世に存在しないだろ
0389デフォルトの名無しさん
2010/04/10(土) 17:57:2490割は厨房だしな
0390デフォルトの名無しさん
2010/04/10(土) 18:00:520391デフォルトの名無しさん
2010/04/10(土) 18:07:39900%はやばいな
0392デフォルトの名無しさん
2010/04/10(土) 18:10:010393デフォルトの名無しさん
2010/04/10(土) 18:10:59> まともな大人が10割もいない
これは恥ずかしいwwwww
こんな自己言及的な無知レスは久々に見たぜw
0394デフォルトの名無しさん
2010/04/10(土) 18:14:13これは新しいネタだな覚えておこうw
0395デフォルトの名無しさん
2010/04/10(土) 18:14:57一件居たのかw
0396デフォルトの名無しさん
2010/04/10(土) 18:15:58自分のレスのどこがおかしかったかって分かってる?
0397デフォルトの名無しさん
2010/04/10(土) 18:18:390398デフォルトの名無しさん
2010/04/10(土) 18:40:24↓
10割もいない=100%以下だ(だがおおよそ100%は居る)
↓
まともな人間が10割もいない=ほとんどまともだけど、一部まともじゃない人がいる
なんだ正しいじゃないか
0399デフォルトの名無しさん
2010/04/10(土) 18:49:01てかスレチだから帰れ
0400デフォルトの名無しさん
2010/04/10(土) 19:44:080401デフォルトの名無しさん
2010/04/10(土) 22:44:53そんなん聞きたくねぇよw
0402デフォルトの名無しさん
2010/04/10(土) 22:45:4220割もいない
とかだったらまだ分かるけど、
10割もいない
は素でやっちまったんだろうな。
0403デフォルトの名無しさん
2010/04/11(日) 03:32:30多数のファイル(クラス)に別れたプログラムを効率的に目で追っていくワザってありますか?
極端に言うファイルごとに全てのコードをプリントアウトして見比べると分りやすいのですが
コストがかかるので、エディター上でラクに確認できればと。。。
0404デフォルトの名無しさん
2010/04/11(日) 07:39:30例えば、関数のcall/retrun をみる。
0405デフォルトの名無しさん
2010/04/11(日) 10:16:25VisualStudioなら、変数やらメソッドやらを右クリックして、
宣言に移動とか、すべての参照を検索やらって機能があるんで
それが便利。
eclipse+Javaでも同様の機能が使えたんで、eclipse+C++とか
NetBeans+C++の組み合わせでも同様の機能があるかもしれない。
0406デフォルトの名無しさん
2010/04/11(日) 10:53:05IDE無いと何も出来ないんじゃねえのか
0407デフォルトの名無しさん
2010/04/11(日) 11:13:21全自動洗濯機無いと何も出来ないんじゃねえのか
パソコン信者が鬱陶しいな
パソコン無いと何も出来ないんじゃねえのか
0408デフォルトの名無しさん
2010/04/11(日) 11:14:22まともなロジックなんか組めないぞ♪
0409デフォルトの名無しさん
2010/04/11(日) 11:16:000410デフォルトの名無しさん
2010/04/11(日) 11:17:570411デフォルトの名無しさん
2010/04/11(日) 11:19:35PerlやRubyでやれば簡単なことを、Cでやってる人がいて、
「PerlやRubyが無いと何もできないんじゃねえのか」と言っても空しいだけ。
マッチやライター持ってる人に原始人がケチつけても空しいだけ。
0412デフォルトの名無しさん
2010/04/11(日) 11:21:37あんなもの有難がるのは駆け出しの素人だけだろ。
0413デフォルトの名無しさん
2010/04/11(日) 11:23:41IDEはIDE。便利なものを、便利に使える時に使う。
0414デフォルトの名無しさん
2010/04/11(日) 11:36:24いいから働けよ。Helloworld ばっかり書いててもご飯食べられないんだぞ?
0415デフォルトの名無しさん
2010/04/11(日) 11:37:530416デフォルトの名無しさん
2010/04/11(日) 11:42:04エディタで済ませられる時はエディタで済ますようにして効率向上を図ってるなあ。
0417デフォルトの名無しさん
2010/04/11(日) 11:48:42どっちかしかダメとか、どっちかしか使えないとか、そういう事じゃないもんな
0418デフォルトの名無しさん
2010/04/11(日) 11:50:56ideじゃなくても、タグジャンプ機能くらいあるだろ?
そういうのも使わんの?
0419デフォルトの名無しさん
2010/04/11(日) 11:52:43各種機能がシームレスにつながってるIDEのほうが効率いいだろ。
0420デフォルトの名無しさん
2010/04/11(日) 11:54:47おまえがそういう開発環境しか知らないだけだってのに
0421デフォルトの名無しさん
2010/04/11(日) 11:58:37伝統的に IDE を使わないスタイルが主流な
プラットフォームとか、
高々数百行程度のコードしか書かない人とか、
色々なケースがあるだろ
0422デフォルトの名無しさん
2010/04/11(日) 12:03:28IDEより効率いい環境あるよって言っても、
具体的にどういう環境かかけないんだろ?
どうせ2chだし。
0423デフォルトの名無しさん
2010/04/11(日) 12:05:25こういう井の中の蛙でも口は付いてるからな、一丁前な減らず口を叩くのが鬱陶しい。
おまえの狭い世界で何がわかるんだと。
IDEが要らない開発環境なんかいくらもある。組み込み機もそうだし、UNIX上でsocketサーバを作る時もそうだ。
phpとかのwebアプリケーションだってIDEなしで作る人もいるだろうに。
0424デフォルトの名無しさん
2010/04/11(日) 12:09:09それって、IDEが使えない仕事ならIDEが効率よくないって当たり前の話だよね。
やっぱIDEが使える環境なら、IDEが効率高いと。
0425デフォルトの名無しさん
2010/04/11(日) 12:13:06前者は正しいが後者は正しくない
0426デフォルトの名無しさん
2010/04/11(日) 12:16:24で、相変わらず、IDEより効率いいって環境の具体的な名前はでてこないと。
0427デフォルトの名無しさん
2010/04/11(日) 12:20:27意味不明。
散々説明しただろうに。
それとも、プロジェクト名だか何だかを引き出そうとでもしてるのか?NDAって知ってるか?
0428デフォルトの名無しさん
2010/04/11(日) 12:38:15散々っていうか、説明っぽいのって、>>423だけじゃん。
それも、IDEが使えない仕事もあるよってだけで。
上のほうを見ると、IDEが使えてもより効率のいい環境があるような
ことを言ってる人がいるじゃん。
機密事項で、名前もだせないような特殊なツールでも使って
環境を構築してるのかね。
そういうのは一般論で語らないでほしいよ。
まあ、屁理屈こねて逃げまわってるのは明らかなんで、IDEより
効率のいい環境ってのは、IDEを使えない人の妄想ってことで決着ですね。
あとは具体的な話がでてくるまで一切相手をしないので、そういうことで。
0429デフォルトの名無しさん
2010/04/11(日) 12:44:01だからお前はツールがないと何一つ作れないのかとww
makeとエディタとgrepとsedかawkあたり、pythonでもいいが、
その辺があればツールなんて自分で作れるだろ。
IDEがあってもなくても作れるものは、例えばWindowsのコンソールアプリケーションなんかがそうだが、
こういうのはコマンドラインのほうが効率いいんじゃないのか?
IDEを使うときっていうのは大抵、それがないと作れない=嫌々使う時だよ。
言いたかったのはそんなことじゃない、IDE様様っていってる奴はIDE無い時にモノ作れるのか?ってことだ。
世の中IDEが無い環境はいくらもあるんだからな。
0430デフォルトの名無しさん
2010/04/11(日) 12:54:03ええ、ツールって、makeとかgrepとかスクリプト言語のことだったのか。
まじめに相手して損した。
0431デフォルトの名無しさん
2010/04/11(日) 12:55:430432デフォルトの名無しさん
2010/04/11(日) 12:57:05これがあれば俺もエディタでいいかなって思うんだけど、いままで使ったのは中途半端な感じ
0433デフォルトの名無しさん
2010/04/11(日) 13:00:42> こういうのはコマンドラインのほうが効率いいんじゃないのか?
やっぱIDEのほうが効率いいでしょ。
コマンドラインになったらIDEの機能が使えなくなるわけじゃないし。
0434デフォルトの名無しさん
2010/04/11(日) 13:02:33makeやらgrepで効率いいって言ってる人って、IDE使ったことの無い人でしょ。
0435デフォルトの名無しさん
2010/04/11(日) 13:03:520436デフォルトの名無しさん
2010/04/11(日) 13:10:38makeやgrepがツールだとは書いてない。(ツールだけどな)
>makeとエディタとgrepとsedかawkあたり、pythonでもいいが、
>その辺があればツールなんて自分で作れるだろ。
自分で作れる、と書いたんだ。
案件ごとにコンバータやら何やらの要件は変わってくる。それらを拾い上げるのには
各種ツールを組み合わせて自前の変換ツールを作るんだよ。
0437デフォルトの名無しさん
2010/04/11(日) 13:43:50レベルがそんな程度なんだろうな。
0438デフォルトの名無しさん
2010/04/11(日) 14:22:52それだったらIDEでも作ればいいんじゃね?
逆にIDEの各種機能やら、それがシームレスにつながってるような環境を
非IDEで作るのは難しいだろ。
(このまえrubyでインテリセンスできるツール作ったとかって記事は見たけど)
0439デフォルトの名無しさん
2010/04/11(日) 14:42:14ありがとうございます!!
VisualStudioでしたが、こんな機能があるとゎ!
これでダイブ楽になりそうですぅ
0440デフォルトの名無しさん
2010/04/11(日) 18:46:02多分ない。
スマートポインタなんかのアロー演算子の解決とか、
コンパイラが統合されているからこそできることだと思うし。
0441デフォルトの名無しさん
2010/04/11(日) 21:32:080442デフォルトの名無しさん
2010/04/11(日) 21:37:40穏健なところでは JAVA, でもそれよりは
http://www.amazon.co.jp/dp/4894714221/
なんかが面白い。また、STL やその根本技術である template を把握するまでは C++ 一本で精進すればいいかと
0443デフォルトの名無しさん
2010/04/11(日) 22:00:36その本クソミソに言われてるが、なんで勧めるの?
>>441
JavaよりもC#だな。でも、442のいうとおりtemplateやSTLを一通り理解してからでも良いと思う。
0444デフォルトの名無しさん
2010/04/11(日) 22:09:06JavaやC#でもいいが、
「C++に挫折しないでちゃんと使いこなせる様になった場合」
どうせこれらの言語を学んでもあんま意味無い気がする。
それよかP言語系(Perl, Python, PHP, Ruby)を学んでおくと、
日頃の作業のお手伝い・自動化系=>P言語系
お手軽開発=>P言語系
ガチ開発=>C++
としっかり棲み分けできて良いと思う。
ちなみに俺はPython使い。
0445デフォルトの名無しさん
2010/04/12(月) 01:01:04進数変換のプログラムは書いたことがあるのですが、ポインタの扱い方がよく分かりません。
よろしくお願いします。
#include <stdio.h>
int main(){
double x = 123;
unsigned char *p = (unsigned char *)&x+7;
for(;p>=(unsigned char *)&x;p--)
printf("%x ",*p);
printf("\n");
return 0;
}
0446デフォルトの名無しさん
2010/04/12(月) 01:19:42int main(){
double x = 123;
unsigned char *p = (unsigned char *)&x+7;
int i;
for(;p>=(unsigned char *)&x;p--)
for(i=7; i>=0; i--) printf("%d", ((*p) >> i) & 1);
printf("\n");
return 0;
}
0447デフォルトの名無しさん
2010/04/12(月) 03:41:58下のように入力した文字(Y/N)によって分岐して、 Yなら1を返して終了、Nなら0を返してYが入力されるまで入力を繰り返す、 それ以外は2を返してYが入力されるまで繰り返すというものですが、
Yを入力したときは正常に動作するのですが、 Nやそれ以外のときはgetcharの部分がスキップされてしまうのか正常に表示されません。
continueの使い方が間違っているのかもしれません。 どなたかアドバイスいただければ幸いです。
#include<stdio.h>
int check(void);
int main(void)
{
int end;
while(1){
end = check();
printf("%d\n", end);
if(end == 1)
break;
else
continue;
}
printf("終了\n");
return(0);
}
int check(void)
{
char yn;
yn = getchar();
if(yn == 'Y')
return(1);
else if(yn == 'N')
return(0);
else
return(2);
}
0448デフォルトの名無しさん
2010/04/12(月) 03:46:150449デフォルトの名無しさん
2010/04/12(月) 12:07:03返信ありがとうございます。改行文字ですか・・・
どこの改行でしょうか?またどのような改善策が考えられますでしょうか?
知識不足ですみません。返信お願いいたします。
0450デフォルトの名無しさん
2010/04/12(月) 12:11:27エスパー回答だが'n'を入力しているとか?
0451デフォルトの名無しさん
2010/04/12(月) 12:22:47getchar()は一文字入力の関数だが、端末は1行単位で入力して使う。
このため、YやNを一文字打っても入力できず、改行キーも打っていることと思う。
この時、改行文字も入力されてしまうので、次のgetchar()の呼び出しで改行文字が得られてしまう。
従って、getchar()だけでやるなら改行文字はスキップしないといけない。
0452デフォルトの名無しさん
2010/04/12(月) 13:31:21while(getchar()!='\n');
0453デフォルトの名無しさん
2010/04/12(月) 19:22:08リンク時に new オペレーターが定義されてない、とか言うエラーを出すんですが・・・
グーグルで「gcc リンクエラー」で検索しても「ライブラリの順序を〜」とかしか見つかりません。
ファイルひとつだけなのでライブラリの順序は関係ないとおもうんです。
同じファイルをVisual C++ Expressではコンパイルできましたしちゃんと動きました。
0454デフォルトの名無しさん
2010/04/12(月) 19:26:12gcc foo.c などと実行せず、g++ foo.c などと実行してみてください。
0455デフォルトの名無しさん
2010/04/12(月) 19:54:39new とかあるわけ無い
0456デフォルトの名無しさん
2010/04/12(月) 20:02:310457デフォルトの名無しさん
2010/04/12(月) 20:05:55昔はそうだったが今はgnu compiler collectionの略で何でもコンパイルするようになったとか何とか聞いた記憶がある
0458デフォルトの名無しさん
2010/04/12(月) 20:52:36大文字のCと小文字のcではなかったか?
0459447
2010/04/12(月) 21:11:42みなさんアドバイスありがとうございます。不具合が起こる理由はわかったのですが、
どこをどのように訂正すればいいのかわかりませんでした。
改行文字のスキップとはこのプログラムの場合どのように行えば適切でしょうか?
0460デフォルトの名無しさん
2010/04/12(月) 23:13:330461(u_・y) ◆e6.oHu1j.o
2010/04/13(火) 00:21:57STL使うと容量が物凄い増えるんだけど
少しは増えないようにしよう! みたいな流れはないの?
0463デフォルトの名無しさん
2010/04/13(火) 06:51:00つエネルギー保存則
STLは容量を犠牲にして書きやすさ、使いやすさを追求しているから不可能
容量を小さくしたいなら自前で全部やるしかない
0464デフォルトの名無しさん
2010/04/13(火) 07:01:08> エネルギー保存則
物理 何点だよ。
0465(u_・y) ◆e6.oHu1j.o
2010/04/13(火) 08:24:15C++STLで出来て、C#のジェネリックで出来ない事って何かあるの?
C#のほうは全然容量増えないじゃん
0466デフォルトの名無しさん
2010/04/13(火) 09:15:03おまえの頭にはプリミティブな要素しかないのか?
人生、比喩とか応用とか出来ないと余計な苦労が増えるぞ。
0467デフォルトの名無しさん
2010/04/13(火) 09:16:270468デフォルトの名無しさん
2010/04/13(火) 09:19:34言語は言語、コンパイラと実行環境は別。
0469デフォルトの名無しさん
2010/04/13(火) 09:24:08それ、意味わかって書いてるか?
C系列でSTLのような高速かつ型依存しないコードを実装するには
コンパイル前にコードを型別に展開しなければ不可能。ゆえにコードサイズは膨れ上がる。
LL言語ならそういう縛りが無いから何でもできる。実行時に動的に型に合わせたコードを実行するとかな。
その代わり実行速度は落ちる。
0470デフォルトの名無しさん
2010/04/13(火) 09:40:44初心者は引っ込んでろ
0471デフォルトの名無しさん
2010/04/13(火) 09:51:090472デフォルトの名無しさん
2010/04/13(火) 09:55:40専門職のツールと白物家電を比較するとかwww
0473デフォルトの名無しさん
2010/04/13(火) 09:58:26> C系列でSTLのような高速かつ型依存しないコードを実装するには
> コンパイル前にコードを型別に展開しなければ不可能。ゆえにコードサイズは膨れ上がる。
?? 静的に展開したから高速なのでは?
「型依存しない」の意味がよくわからんが、
動的束縛により具体的な型に依存せずにすむ。
静的に展開しないからサイズも膨らまない。
> LL言語ならそういう縛りが無いから何でもできる。
一向によくわからんが、速度とサイズの問題は一緒では?
>>467
> ネイティブコンパイラのC++とLL言語のC#を比較するのは無意味
そもそもなんだコレ? C#がLL言語だって??
0474デフォルトの名無しさん
2010/04/13(火) 10:07:40お互いの言葉の意味が通じないから実例を示す。
std::vector<int> int_array;
std::vector<char> char_array;
std::vector<std::vector<int> > intvec_array;
この3つの変数はコンパイル前にそれぞれ別々のコードに展開される。
int_array.size() と char_array.size() と intvec_array.size() もそれぞれ別のコードの関数が生成される。
それにより、高速性と、型依存しないvectorという高機能性の両方が実現されるが、
トレードオフとしてコードサイズが犠牲になっている。
あと、LL言語の正式な定義にはc#やらjavaは合致しないかもしれない。詳しい定義は知らん。
でもC使いから見たらc#なんてLL言語で充分だよ。
0475デフォルトの名無しさん
2010/04/13(火) 10:16:43> お互いの言葉の意味が通じないから実例を示す。
(中略)
>トレードオフとしてコードサイズが犠牲になっている。
んなこと知ってるよ…。どうしたいんだ一体。
>>469
> LL言語ならそういう縛りが無いから何でもできる。
なんでもできる、つってるのは、
STLみたいな静的な展開ができる、つってんの?
LL言語じゃないのに、どんな縛りがあるって?
LL言語じゃないC++にはSTLもあれば、
ポリモーフィズムもあると既に示した。
静的、動的、両方のアプローチを既に持ってる。
0476デフォルトの名無しさん
2010/04/13(火) 10:17:26> LL言語じゃないのに、どんな縛りがあるって?
LL言語じゃない言語には、どんな縛りがあるって?
0477デフォルトの名無しさん
2010/04/13(火) 10:23:37>LL言語じゃない言語には、どんな縛りがあるって?
STLは高速かつ高機能を実現するのが目的(=縛り)なので、コードサイズは犠牲になっている。
C#のような中間コード言語で、頑張って高速を実現しても意味がない(=高速を実現せよという縛りがない)から、
動的なアプローチで充分(=何でもできる)。
0478デフォルトの名無しさん
2010/04/13(火) 10:32:13> STLは高速かつ高機能を実現するのが目的(=縛り)なので、
だがSTLを使うか否かは縛られてなどない。
LL言語じゃない言語には、そんな縛りは無い。
> C#のような〜意味がない(=高速を実現せよという縛りがない)〜(=何でもできる)。
言わんとすることはなんとなく分かってきたような気もせんでもないが、
「動的なアプローチで充分」というより、静的なアプローチには限度があるだろうし、
そう考えると、「=動的なアプローチしかできない」のではと思ってしまうけど。
0479デフォルトの名無しさん
2010/04/13(火) 10:38:18>だがSTLを使うか否かは縛られてなどない。
ちょちょまてまて、この話、もともとは
>>461>>465の「STLはコードサイズが膨れ上がるけど、c#のジェネリックではそんなに増えないのはどうして?」
という疑問へのレスだから、STL前提ですよ。
0480デフォルトの名無しさん
2010/04/13(火) 10:42:21ごめんw 薄々お気づきのこととは思うけど、
>>467単体で読んで噛み付いただけなんで、
なんか無意味なレスを連ねてしまったねw
0481デフォルトの名無しさん
2010/04/13(火) 10:44:11俺の作業量を返せw
0482デフォルトの名無しさん
2010/04/13(火) 10:47:270483デフォルトの名無しさん
2010/04/13(火) 16:17:49環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
っつぅC++スレのテンプレほぼまんまだなwww
0484デフォルトの名無しさん
2010/04/13(火) 21:15:310485デフォルトの名無しさん
2010/04/13(火) 21:32:170486デフォルトの名無しさん
2010/04/13(火) 21:42:34std::cout << "test";
}
std::coutをした後にflushをしないと気持ち悪い
だから、ループが終わった後に
std::endl;を入れたんだけど、エラーが出る
何で?
0487デフォルトの名無しさん
2010/04/13(火) 21:49:51std::cout << std::endl;
を入れないとだめなんじゃね
0488デフォルトの名無しさん
2010/04/13(火) 22:17:39> std::endl;を入れたんだけど、エラーが出る
そのエラーメッセージをどうして貼らない?
ねぇどうして?
ねぇどうして?
ねぇどうして?
for(int i = 0; i < 10; i++) {
std::cout << "test";
}
std::endl;
もしこうだとしても「エラーは出ない」と思うぞ。
0489デフォルトの名無しさん
2010/04/13(火) 22:26:41gcc foo.cpp でエラーだったのが
g++ foo.cpp でちゃんと実行ファイルできました。
ありがとうございます。
gcc は拡張子cppだとg++を呼び出すと思ってたのに、違うみたいですね。
0491デフォルトの名無しさん
2010/04/13(火) 22:40:01拡張子 cpp は microsoft の方言。昔は大文字の .C が c++ を示すものだったが最近は不明。
0492デフォルトの名無しさん
2010/04/13(火) 22:57:000493デフォルトの名無しさん
2010/04/13(火) 22:59:09cppに限らず、gccは拡張子で動作を切り替えたりしない
0494デフォルトの名無しさん
2010/04/14(水) 01:33:31#include <stdio.h>
int main(int argc, char *argv[]) {
puts("hoge");
return 0;
}
$ gcc a.o
a.o: file not recognized: File format not recognized
collect2: ld returned 1 exit status
>493 うそつき
0495デフォルトの名無しさん
2010/04/14(水) 01:47:060496デフォルトの名無しさん
2010/04/14(水) 09:35:02これでどうやってゲームとかアプリとかが出来るのか分からん
0497デフォルトの名無しさん
2010/04/14(水) 10:29:02英語の単語を大量に覚えて文法を理解してもしゃべれるようになれないのと同じ。
0498デフォルトの名無しさん
2010/04/14(水) 11:19:140499デフォルトの名無しさん
2010/04/14(水) 21:11:16> 英語の単語を大量に覚えて文法を理解してもしゃべれるようになれないのと同じ。
それは嘘。
単語を覚えず、文法が身についていない人間の妄言。
単語を大量に覚えて文法を理解していれば、しゃべれる。
0500デフォルトの名無しさん
2010/04/14(水) 21:16:32言語だけでなくAPIの知識が必要だからな
0501デフォルトの名無しさん
2010/04/14(水) 23:17:040502デフォルトの名無しさん
2010/04/14(水) 23:54:52じゃあお前今目の前にネイティブのアメリカ人がいたら
ペラペラ会話できるか?できないだろう
単語を覚えるのと喋れるのは全然違う
>>501
でも理解していない
0503デフォルトの名無しさん
2010/04/14(水) 23:58:240504デフォルトの名無しさん
2010/04/14(水) 23:58:360505デフォルトの名無しさん
2010/04/14(水) 23:58:45string[3][10]という二次元配列があるとして、その2行目に日本語を直接代入するならば
「string[1] = "代入したい文字";」と書けるような気がするのですが、
「左のオペランドが、左辺値になっていません。」というエラーが表示されます。
一体これはどういう意味でしょうか。解決策等あればお教えください。
返信お待ちしています。
0506デフォルトの名無しさん
2010/04/14(水) 23:59:560507デフォルトの名無しさん
2010/04/15(木) 00:03:34string[1] = "代入したい文字";
0508デフォルトの名無しさん
2010/04/15(木) 00:04:20気のせいです
0509デフォルトの名無しさん
2010/04/15(木) 00:06:43char型の配列に文字列定数は代入できないよ。
=で結べるのは初期化の時だけ。
0510デフォルトの名無しさん
2010/04/15(木) 00:20:37こうやればいい
char *string[3];
string[1] = "代入したい文字";
文字を代入しているわけではないけど
0511デフォルトの名無しさん
2010/04/15(木) 00:21:58それは嘘。
熟語を覚えず、背景文化が身についていない人間の妄言。
0512デフォルトの名無しさん
2010/04/15(木) 00:31:230513デフォルトの名無しさん
2010/04/15(木) 00:58:260514デフォルトの名無しさん
2010/04/15(木) 01:02:130515デフォルトの名無しさん
2010/04/15(木) 01:02:230516デフォルトの名無しさん
2010/04/15(木) 02:36:57自己分析乙
0517デフォルトの名無しさん
2010/04/15(木) 14:11:080518デフォルトの名無しさん
2010/04/15(木) 19:58:26エンコードの扱いが確かに面倒だけど
stringを言語仕様に持つところからCに来たら泥沼は確実
0519デフォルトの名無しさん
2010/04/15(木) 20:15:21> 文字列は最後の要素が0のchar配列だと最初から理解していればそうでもない
そうでもあるって!
const char * a = "mojiretsu!";
これを理解するのに一苦労だったよ!
0520デフォルトの名無しさん
2010/04/15(木) 22:39:59とか
strncpy( string[1], "代入したい文字", sizeof(string[1]) );
って解決策が解決策にならない罠
0521デフォルトの名無しさん
2010/04/15(木) 23:04:340522デフォルトの名無しさん
2010/04/15(木) 23:04:45下はNG
0523デフォルトの名無しさん
2010/04/15(木) 23:15:56ほんとうに禁止されているのですか?
0524356
2010/04/15(木) 23:20:48Boost.Preprocessorとか。
0525デフォルトの名無しさん
2010/04/16(金) 06:42:13無限にループさせたり、定義が被ることさえなければ、
どうインクルードしようが自由だ
0526デフォルトの名無しさん
2010/04/16(金) 16:29:44hppファイルの中に
class Test
{
public:
Test( );
};
Test::Test( )
{
}
のように実装まで書くのは間違いで、
hppの中は宣言、実装は別のcppファイルに書くべきなのでしょうか?
0527デフォルトの名無しさん
2010/04/16(金) 16:32:12必ずというわけでもない
0528デフォルトの名無しさん
2010/04/16(金) 16:38:33そんなのが答えと言えるかぼけ
>>526
Cでソースとヘッダがわかれてるのは、別に整理のためでも嫌がらせのためでもなくて、
複数のソースから参照するべきものはコピペするのムダだからヘッダにまとめてあるわけ。
だから、複数箇所で参照するものをヘッダに書いて、一箇所からしか見ないものをソースに
書けばよろしい。
何を言ってるのかわからなければ、まだヘッダとかを触る段階じゃないから、全部ソースに
書けばよい。
0529デフォルトの名無しさん
2010/04/16(金) 16:57:270530526
2010/04/16(金) 17:16:11>>528
ありがとうございます。
ヘッダには「宣言」を書くと教わったので、「定義」は別ファイルに書くという決まりがあるだと思ってしまいました。
なので以下の様な書き方もダメだと思っていました・・・
-----------------------------
// hoge.hpp
// 宣言かつ定義
void hoge( )
{
// 何か処理
}
-----------------------------
0531デフォルトの名無しさん
2010/04/16(金) 17:27:090532デフォルトの名無しさん
2010/04/16(金) 17:29:430533デフォルトの名無しさん
2010/04/16(金) 17:32:19そこまでしてヘッダに書くくらいならソースに書けばいい
0534デフォルトの名無しさん
2010/04/16(金) 17:38:37>>531
>>532
>>533
この流れはおかしいぞ、「複数のファイルから」という話が「複数のファイルを」に摩り替わってるぞ。
0535デフォルトの名無しさん
2010/04/16(金) 17:42:130536デフォルトの名無しさん
2010/04/16(金) 17:45:02ヘッダーに関数の定義を書いても良いが、
関数の定義が書かれたヘッダーは複数のソースで include できなくなる。
ヘッダーの本来の目的は、複数のソースで同じことを何度も書くのが面倒なだから、
その共通部分をヘッダーファイルに書いて置き、複数のソースからはinclude するだけで済ますこと。
よってその目的が失われることをヘッダーに書いたりはしないのが常道。
0537デフォルトの名無しさん
2010/04/16(金) 17:45:47>>533
そこまでして、っていうけどその言い方だと普段インクルードガード書かないように聞こえるよ
0538デフォルトの名無しさん
2010/04/16(金) 17:51:06現実にはインクルードガード書かない方が、
そこまでしてヘッダーの構成考えるのかって言いたくなるなw
0539デフォルトの名無しさん
2010/04/16(金) 18:32:05>>そこまでして
hogeが多重定義にならないように変なインクルードガードして
>>ヘッダに書くくらいなら
hogeの定義をヘッダに書くなら
>>ソースに書けばいい
hogeの定義はcppに書けば良いって意味じゃないか?
0540デフォルトの名無しさん
2010/04/16(金) 18:47:22まず、インクルードガード使ってもhoge関数の多重定義は防げないよ。
hoge関数の定義をcppに書くべきと言うのはそう。
けど、それとは関係ない話になっているわけで、
>>537 が言ってるのは、
インクルードガードが大変みたいなこと言ってるけど、インクルードガードぐらい普通に使うだろ、
それを君は書かずにやってるのか?
という意味だと思う。
>>538 はそれ賛同して
実際にはインクルードガード書かない方が面倒で大変なことだよね。
と言ってる。
0541デフォルトの名無しさん
2010/04/16(金) 18:48:250542デフォルトの名無しさん
2010/04/16(金) 18:48:520543デフォルトの名無しさん
2010/04/16(金) 19:04:590544デフォルトの名無しさん
2010/04/16(金) 21:08:06>まず、インクルードガード使ってもhoge関数の多重定義は防げないよ。
メリットがなく混乱の元になるだけなので、使う意味は全くないが、できることはできる。
�@ 定義の部分だけガードしてやる
�A 呼び出し側の規約として、�@で弾かれるように#defineで定義する
→ makeなどで、コンパイル時に自動で定義されるようにするとかでも可
�B ヘッダは、定義せずにコンパイルする
0545デフォルトの名無しさん
2010/04/16(金) 21:08:150546デフォルトの名無しさん
2010/04/16(金) 21:20:53VisualStudio2008コマンドプロンプトを使ってclコマンドを使おうとすると、
D:\work>cl reber.c
Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for 80x86
Copyright (C) Microsoft Corporation. All rights reserved.
reber.c
Microsoft (R) Incremental Linker Version 9.00.30729.01
Copyright (C) Microsoft Corporation. All rights reserved.
LINK : fatal error LNK1104: ファイル 'C:\DOCUME~1\佐藤' を開くことができません。
というエラーが出て、オブジェクトファイルはできているのにexeファイルができません。
現在マイコンピュータ→ローカルディスク(D:)→workフォルダに入れています。
ソースプログラムはTeraPadに書いています。
エラーは何が原因なのでしょうか。
0547デフォルトの名無しさん
2010/04/16(金) 21:30:31佐藤ってあーた…
まぁ、多分、パスが通ってないんじゃないの?
0548デフォルトの名無しさん
2010/04/16(金) 21:31:45何が原因って、ちゃんと書いてあるだろ……
LINK : fatal error LNK1104: ファイル 'C:\DOCUME~1\佐藤' を開くことができません。
↑これが原因だよ。
君のPC環境は全く分からないのでエスパーレスになるが、
C:\DOCUME~1\佐藤 ←このディレクトリ、名字の後に半角SP入って名前が続いてるんじゃないのか?
もし半角SPが入っているなら消さないと駄目だ。
0550デフォルトの名無しさん
2010/04/16(金) 21:37:09Windowsのシステムフォルダで
Windowsを正しく実行するのに必要なので名前を変更できないと出ますので、
どうすればいいのか分からない状況です。
0551デフォルトの名無しさん
2010/04/16(金) 22:16:23作業フォルダの設定がユーザのフォルダになってるのか…?
まぁ、変更方法とか、興味ないし知らんけど、
取り合えず、そのユーザはあきらめて、新しいユーザを作成して
その新しいユーザで試してみたら?
0552デフォルトの名無しさん
2010/04/16(金) 22:20:43スタートメニュー⇒Visual Studio⇒Visual Studio Tools⇒コマンドプロンプト
cl すればいい
0553デフォルトの名無しさん
2010/04/16(金) 22:23:530554デフォルトの名無しさん
2010/04/16(金) 22:32:29ユーザー名変えてもプロファイルフォルダパスは変わらないから無駄だぞ
0に戻して再起動してから新規ユーザー作るか環境変数TMPにスペースの入らないパスを設定しないと
ちなみにVC2010の次で直す予定だそうだ
0555デフォルトの名無しさん
2010/04/16(金) 22:35:590556デフォルトの名無しさん
2010/04/16(金) 22:45:37なんで、新規ユーザ作るのに、またスペースが入ることが前提なんだ?
0557デフォルトの名無しさん
2010/04/16(金) 22:49:26いわゆる~/に入れようとしたら
Documents and Settings
とスペースが入っちゃうからじゃない?
0558デフォルトの名無しさん
2010/04/16(金) 22:53:26>>546で
'C:\DOCUME~1\佐藤'
になってるんだから、問題となるのはユーザ名だけなんじゃないの?
0559デフォルトの名無しさん
2010/04/16(金) 23:01:26あぁなるほど
じゃぁあるのかどうかは分からないけど
半角スペース以外の問題だね
0560デフォルトの名無しさん
2010/04/16(金) 23:20:57>>550でユーザ名に全角スペースが入ってるのは確からしく、
また、>>546で名前が途切れていることからユーザ名がおかしな原因になってると予測される。
さらに、ググってみると、ユーザ名部分は半角スペースがあっても、
ショートファイル名に直さないらしいので、それがNGの原因となることがあるらしい。
つーわけで、ユーザ名の全角スペースを自動的に半角スペースに
読み替えてくれる、素敵機能が、どっかの機能についてると予測
0561デフォルトの名無しさん
2010/04/16(金) 23:59:45お付き合いいただきありがとうございました。
0562デフォルトの名無しさん
2010/04/17(土) 00:26:53ディレクトリ名に全角文字は使わない。
ディレクトリ名にスペースは使わない。
ぐらいの暗黙のルールがあるべきだと俺は思う。
0563デフォルトの名無しさん
2010/04/17(土) 00:33:470564デフォルトの名無しさん
2010/04/17(土) 00:40:52ユーザ名が、そのままフォルダ名になってしまい、
さらに、その命名ルールを決めたMSの製品で不具合がおきることだな。
さすがだぜ。
つーか、互換性の為にショートファイル名を残しているのに
互換性の無い製品内部でショートファイル名を残してるって、
MSは、ショートファイル名を切り捨てる気はないのだろうか?
0565デフォルトの名無しさん
2010/04/17(土) 00:51:11XP&2008EEの環境で色々試したけど再現しないのだが。
0566デフォルトの名無しさん
2010/04/17(土) 13:06:49http://www.kmonos.net/alang/cpp/glossary.html
より
NTP (Named Template Parameter)
名前付きテンプレート引数。
大量にパラメータを指定出来るようなクラステンプレートを作ると、
実際に使うときには、どれをどんな順番で指定しなければならない… ということをいちいち確かめる必要があって、大変。
template<
class Pointee,
class OwnerShip = RefLink,
class CheckNull = NoCheckNull,
class ThreadModel = SingleThread
> class smart_ptr { ... };
typedef smart_ptr<MyClass,
RefCount,NoNullCheck,MultiThread> myptr;
もちろんそれぞれのパラメータにデフォルト値を指定しておけば、 たいていの場合は最初の一つだけ指定して終わり、で済むので楽です。
が、この場合もデフォルト以外を使いたくなったら大変。
そこで、 各パラメータに名前を付けて、順番は適当に指定出来たらいいな、 という気分になります。
typedef smart_ptr< MyClass,
ThreadModel_is<MultiThread>,
OwnerShip_is<RefCount>,
> myptr;
この技法が、です。最近の幾つかのライブラリでは、 NTPでパラメータ指定出来るようになっています。
とありますが、これについてもっと詳しく分かる日本語のWebサイトを教えてください。
よろしくお願いします。
0567デフォルトの名無しさん
2010/04/17(土) 13:49:570568デフォルトの名無しさん
2010/04/17(土) 17:00:250569デフォルトの名無しさん
2010/04/18(日) 10:02:398.3形式の名前の生成を止めるかexFAT使った上でコマンドラインからcl.exeやらないと再現なんか出来ないぞ
0570デフォルトの名無しさん
2010/04/18(日) 14:24:06ってどういう意味? どっちが条件文? &&とか||ではなく,なのはなぜ?
0571デフォルトの名無しさん
2010/04/18(日) 14:24:48きたねえコードだなおい
オレが上司なら不許可だな
0572デフォルトの名無しさん
2010/04/18(日) 14:26:32カンマで区切られた式は、左から順番に評価され、
一番最後に評価された式の値が、その式の値となる。
0573デフォルトの名無しさん
2010/04/18(日) 14:27:40コンマ演算子でググれ
0574デフォルトの名無しさん
2010/04/18(日) 14:28:560575デフォルトの名無しさん
2010/04/18(日) 14:29:120576デフォルトの名無しさん
2010/04/18(日) 14:30:330577570
2010/04/18(日) 14:36:01ところでwhile(cin >> w >> h, (w||h)) と
while(cin >> w >> h && (w||h))
は同じ意味になりますよね?
どっちが望ましい?
0578デフォルトの名無しさん
2010/04/18(日) 14:39:25見てすぐわかんないだろ、どっちもダメ。
0579デフォルトの名無しさん
2010/04/18(日) 14:44:07while()のカッコの中だけに全てのプログラムを書くことも可能じゃないのか?
0580デフォルトの名無しさん
2010/04/18(日) 14:44:44え、この程度がわかんないの?
そんなんでよくやっていけるな
0581デフォルトの名無しさん
2010/04/18(日) 14:46:35cin >> w >> h の評価が偽だった場合は、w が真でも (w||h) が評価
されないから、同じ意味ではない。
0582デフォルトの名無しさん
2010/04/18(日) 14:48:09少なくとも >>570 はわかってないから、>>570 でもわかる
書き方をすべきだな。
0583デフォルトの名無しさん
2010/04/18(日) 14:49:51for でよく使うでしょ
>>582
Cを勉強してない人に分からないから
Cは廃止した方がいいというレベルの事言われても
0584デフォルトの名無しさん
2010/04/18(日) 14:58:110585デフォルトの名無しさん
2010/04/18(日) 14:58:41「わかんない」んじゃない。
「見てすぐわかんない」んだ。
じっくり見て、考えて、やっとわかるコードなんか書く奴はダメ。
見てすぐわかるように書かないとデバッグの時にひどい目にあうよ。
0586デフォルトの名無しさん
2010/04/18(日) 15:01:120587デフォルトの名無しさん
2010/04/18(日) 15:03:47この程度すぐ見て分からないようじゃねぇー
0588デフォルトの名無しさん
2010/04/18(日) 15:05:32おれはどっちかというとそれを問題視したいw
ハゲ一派のアスタリスク位置。
0589デフォルトの名無しさん
2010/04/18(日) 15:06:25底辺から煽られてもなんかくすぐったいな位しか感じないぞ
0590デフォルトの名無しさん
2010/04/18(日) 15:12:39って上から見ている気になっているヤツが何人いることかw
0591デフォルトの名無しさん
2010/04/18(日) 15:13:41>>589
0592デフォルトの名無しさん
2010/04/18(日) 15:14:30DECLVAR(Foo*) a, b;
0593デフォルトの名無しさん
2010/04/18(日) 15:15:27自分を慰めたいと思う人は、
それを自覚しないものさ。
0594デフォルトの名無しさん
2010/04/18(日) 15:16:08どうせなら
typedef Foo* LPFoo;
LPFoo a, b;
0595デフォルトの名無しさん
2010/04/18(日) 15:16:38ttp://www2.research.att.com/~bs/bs_faq2.html#whitespace
0596デフォルトの名無しさん
2010/04/18(日) 15:22:34decltype(int*) a, b;
0597デフォルトの名無しさん
2010/04/18(日) 16:02:58template<typename T>using &rA,*pA=A<T>; //とかできんのかね?
template<typename T>typedef class tagA{}A,*pA,&rA; //template typedefsで定義宣言一発を妄想してたのに
0598デフォルトの名無しさん
2010/04/18(日) 16:51:43>>595
> A ``typical C programmer'' writes ``int *p;'' and explains it ``*p is what is the int'' emphasizing syntax,
> and may point to the C (and C++) declaration grammar to argue for the correctness of the style.
> Indeed, the * binds to the name p in the grammar.
> A ``typical C++ programmer'' writes ``int* p;'' and explains it ``p is a pointer to an int'' emphasizing type.
> Indeed the type of p is int*. I clearly prefer that emphasis and see it as important
> for using the more advanced parts of C++ well.
どっちが言い悪いの問題じゃないよって言っているってことか?
0599デフォルトの名無しさん
2010/04/18(日) 16:59:23decltypeの中に書くのは式なのでそれはできない。
なので上にあるようにboost::mpl::identityを使うのが近い方法。
0600デフォルトの名無しさん
2010/04/18(日) 22:28:48どうすればいいの?
0601デフォルトの名無しさん
2010/04/18(日) 22:35:07> 他で定義したマクロを使いたいんだけど、
どこで定義したんだよ?
0602デフォルトの名無しさん
2010/04/19(月) 14:43:12ヘッダに書いてインクルードしろよ。
そんな事もわからなかったら、お先マっクロだぞ
0603デフォルトの名無しさん
2010/04/19(月) 15:01:08( ・∀・)彡 パーン!
((⊂彡☆∩ _, ,_
⊂(⌒⌒(;`Д´)
`ヽ_つ ⊂ノ ←>>602
0604デフォルトの名無しさん
2010/04/19(月) 16:22:18他だよ
0605デフォルトの名無しさん
2010/04/19(月) 18:22:41死ねクズが
0606デフォルトの名無しさん
2010/04/19(月) 18:29:26Cではみんな伝統的にこうやってる
0607デフォルトの名無しさん
2010/04/19(月) 19:06:41C++が必要なんだけど、まず何から勉強したら良い?
今まで勉強した言語はMELってやつしか無くて
プログラム経験皆無と言って良いレベルかもしれないんだけど
0608デフォルトの名無しさん
2010/04/19(月) 19:35:45だったらその定義している他のヘッダを引き込めば良かろうに。
0609デフォルトの名無しさん
2010/04/19(月) 19:37:14まずはC/C++が何なのか知らないと話にならない。
C++ 入門 でぐぐるといい。
0610デフォルトの名無しさん
2010/04/19(月) 19:45:14オッス!ありがとうございます!頑張りまっす!
0611デフォルトの名無しさん
2010/04/19(月) 19:45:55そうするわ
0612デフォルトの名無しさん
2010/04/19(月) 20:03:23とりあえず天賦の才を持たない限りCの知識が無い状態からC++を勉強すると
数年越しのプランになるよ。
価値はまああると思うけど。
0613デフォルトの名無しさん
2010/04/19(月) 21:20:27>PhysXっていうソフトを使うのに
>C++が必要なんだけど
PhysX はNVIDIAの物理演算用数値計算ライブラリというか、SDKなのでどっちかって言うと、
「C/C++ で PhysXライブラリ を使って何かを作りたい。そのため、C/C++を勉強したい」
って話になると思う。 ソフトを使う、ってニュアンスじゃないぜ。とりあえず年単位くらいで腰すえて勉強してくれ
0614デフォルトの名無しさん
2010/04/19(月) 21:38:20Cの知識があってC++初めてから数年経つけど学習プラン終わらないよ…
0615デフォルトの名無しさん
2010/04/20(火) 09:12:47inline void func(hoge h, const fuga &f)
{
・・・;
}
{ func(h, f); }
と書いた場合
{
hoge h_ = h; const fuga f = f;
・・・;
}
こんな感じで展開されると考えていいんですか?
0616デフォルトの名無しさん
2010/04/20(火) 09:16:20>hoge h_ = h; const fuga f = f;
こんな物が生成されたりはしない
0617デフォルトの名無しさん
2010/04/20(火) 09:45:420618デフォルトの名無しさん
2010/04/20(火) 11:43:43PDH系APIを使用してCPU使用率を取得を考えています。
PdhAddCounter()に特定プロセスを登録した場合と全体を指定した場合(以下の2つ)
"\\Process(Hoge#0)\\% Processor Time"
"\\Processor(_Total)\\% Processor Time"
プロセスを登録した方がCPU使用率が高く表示されたのですが、
_Totalを設定した場合は、全てのプロセスが使用しているCPU使用率を表示してる。
プロセスを設定した場合は、動作中のCPUを100としてその何パーセントを、そのプロセスが
占めいているという考えでよろしいでしょうか?
0619デフォルトの名無しさん
2010/04/20(火) 21:50:42time_t t;
time(&t);
tm* ltm = localtime(&t);
localtime( ) の戻り値が tm構造体のポインターなのが気になります。
localtime( )の中で、tm構造体はmalloc/newで取られて
それをさすポインターを返しているのでしょうか?
malloc/newしないとlocaltime()のスコープ抜けたらポインターが
無効になってしまいますよね?
0620デフォルトの名無しさん
2010/04/20(火) 22:08:3632 ビット バージョンおよび 64 ビット バージョンの gmtime、mktime、mkgmtime、localtime の各関数はすべて、1 スレッドあたり 1 つの tm 構造体を使用して変換を行います。これらのルーチンを呼び出すたびに、前の呼び出しの結果は破棄されます。
0621デフォルトの名無しさん
2010/04/20(火) 22:08:51localtime が持っている static な領域が返されています。
ポインタを保持しておいて後で使う、という場合は、
もう一度 localtime を呼ぶと結果が上書きされてしまうので注意です。
0622デフォルトの名無しさん
2010/04/20(火) 22:12:570623デフォルトの名無しさん
2010/04/20(火) 22:12:42>>621
ありがとうございます。
static変数へのポインタを返す、というのは全く思い付きませんでした。
0624デフォルトの名無しさん
2010/04/20(火) 22:15:04typeの頭文字
0626デフォルトの名無しさん
2010/04/20(火) 22:56:08押忍!長く腰を据えてがんばります!
あざっっす!!
0627>>612
2010/04/20(火) 22:58:26その気合いがあれば大丈夫だ。
C++0xではどうだとか最初は気にしない方が良い。
C言語を2ヶ月かけて色々いじったりして勉強して、
(簡単な文字列関連の処理プログラムを標準Cライブラリの範囲内で作るとか)
次の月からC++をやるのが良いと思うよ。
がんばれ
0628デフォルトの名無しさん
2010/04/20(火) 23:05:30C++に手を出す
なにかと理由をつけてCに戻る
C++に再チャレンジする
なんどか繰り返す
才能があればC++に定着する
なければC信者になる
0629612
2010/04/20(火) 23:18:53俺は
1.C覚える
2.C++に手を出す
->この後ずーっとC++信者になったよ。
でもあんまりにも細かい仕様は覚えたくないので
TMPとかは他人任せ(ライブラリまかせ)にしている。
0630デフォルトの名無しさん
2010/04/20(火) 23:19:14C/C++に戻れなくなりC#信者になる
0631612
2010/04/20(火) 23:29:43いや俺は>>612でありかつ>>444なんだけど、
Pythonに手を出した。
C#はなんだか中途半端なんだもん。
日頃の作業のお手伝い・自動化系=>P言語系
お手軽開発=>P言語系
ガチ開発=>C++
がお薦め。
0632デフォルトの名無しさん
2010/04/20(火) 23:52:00上で述べられているTMPは
Template MetaProgramming
の略です。
TeMPlate の略だと思っている人がたまにいるので
冗長ながら申し上げました。。
0633デフォルトの名無しさん
2010/04/21(水) 00:01:310634デフォルトの名無しさん
2010/04/21(水) 00:10:11スクリプト言語の信者は、記述が少なくて楽って言ってるけど、
動的型の言語は、かえってめんどくさいな。
IDEのサポートがへぼいとか、コンパイル時にぜんぜんエラーを検出
できないとかで。
C#くらいが超楽でいい。
0635デフォルトの名無しさん
2010/04/21(水) 05:15:37C++やめようかなと
0636デフォルトの名無しさん
2010/04/21(水) 21:45:370637デフォルトの名無しさん
2010/04/21(水) 22:05:27gccが文句を言ってきます
0638デフォルトの名無しさん
2010/04/21(水) 22:25:57出しても問題ないが、デストラクタが動かないので気をつける事
(派生クラスやコンストラクタの既に実行されているメンバ変数のデストラクタは動く)
>>637
どんな名前使ってんだ
0639デフォルトの名無しさん
2010/04/21(水) 22:26:45○基底クラスや
逆を書いちゃう事ってよくあるよね
0640デフォルトの名無しさん
2010/04/21(水) 22:28:39ダメなのはデストラクタ
0641デフォルトの名無しさん
2010/04/21(水) 22:36:00案件でC#による開発、とかは費用対効果的に(もちろん要件によるが)素晴らしいとは思うが、
趣味のプログラミングって話だと、C#絶賛してる奴は大抵何も知らない、勘違いしたゆとりって印象。
・・・実際、便利で良く出来てるとは思うけどさ。VC#をIDEに据えると本当にRADって感じだし
0644デフォルトの名無しさん
2010/04/21(水) 23:11:16C#でいいと思った
0645デフォルトの名無しさん
2010/04/21(水) 23:32:05やっつけ仕事でもGUIアプリとか作りたい
0646デフォルトの名無しさん
2010/04/21(水) 23:39:22大丈夫。
ちゃんとメモリーリークしたりしないようにできているなら
気兼ねなく例外を投げろ。
Constructorにもし例外を投げないことを強制したら、
うまくConstructできない場合には不完全なオブジェクトが
できることになってしまう。
(例:Googleのコーディング規約ではConstructorでの例外を禁止し、
init()というメンバ関数で初期化するように要請している。)
0647デフォルトの名無しさん
2010/04/21(水) 23:45:230648デフォルトの名無しさん
2010/04/21(水) 23:46:370649デフォルトの名無しさん
2010/04/22(木) 07:07:50なんで無いんだよ
十分じゃないか。
0650デフォルトの名無しさん
2010/04/22(木) 07:16:58class A {
public:
A() : p1(NULL), p2(NULL) { p1 = new char[100]; p2 = new char[100]; }
~A() { delete[] p1; delete[] p2; }
char* p1;
char* p2;
};
で p2 の new で失敗したら p1 がメモリリークする。
こういうことしたいなら、
new を生で使わず vector を使う(vector のデストラクタが動いてくれる)か、
A() 内で一旦例外を catch して p1 を開放する必要がある。
0651デフォルトの名無しさん
2010/04/22(木) 07:17:50別に普通に使えると思うけど・・・
0652デフォルトの名無しさん
2010/04/22(木) 12:49:46> C#絶賛してる奴は大抵何も知らない、勘違いしたゆとりって印象。
スクリプト言語絶賛してる連中も中二病くさいやつがよくいる印象。
0653デフォルトの名無しさん
2010/04/22(木) 15:15:56int main (int argc, char const *argv[])
{
int* localarray;
localarray = (int*)malloc(16 * sizeof(int));
printf("arraysize = %d", ARRAY_SIZE(localarray));
printf("\n");
return 0;
}
16って表示させたいんですけど、どうすればいいのですか??
0654デフォルトの名無しさん
2010/04/22(木) 15:18:12int main (int argc, char const *argv[])
{
int* localarray[16];
printf("arraysize = %d", ARRAY_SIZE(localarray));
printf("\n");
return 0;
}
0655デフォルトの名無しさん
2010/04/22(木) 15:26:46いや、確かにそうなんですけど…
mallocやreallocつかったときは、どうやって要素の数を得ることが出来るのかが知りたいです。
0656デフォルトの名無しさん
2010/04/22(木) 15:27:50※ただし int localarray[16];
1.>>653の localarray はただの int のポインタ。ただどこかのアドレスを指す為の、ただのポインタ
2.malloc は単に指定されたバイトサイズの領域を確保しただけ。ただそれだけ
3.1と2から、そこには望んだようなサイズの答えは無い
また ARRAY_SIZE マクロの定義はこうなので
#define ARRAY_SIZE(X) (sizeof(X)/(sizeof(X[0])))
sizeof(X) で領域全体のバイトサイズが拾えないと無理。
と言うか、そもそも 「これだけの領域が欲しい」 と確保している時点で自分でサイズは知っている訳だから
それを見ろって話。例えそれが動的配列のつもりであったとしても。
0657デフォルトの名無しさん
2010/04/22(木) 15:32:30>mallocやreallocつかったときは、どうやって要素の数を得ることが出来るのか
malloc系統はバイトサイズ指定して確保するだけの物であって、
要素の数なんて無いし、それで得られるポインタが例え確保領域の外に飛び出したとしても
それを丁寧にチェックなどしない。
float *pF;
pF = (float*)malloc(16 * sizeof(int));
float f;
f = pF[1000]; // !
これだって可能だろ?そういう事だ
0658デフォルトの名無しさん
2010/04/22(木) 15:34:540659デフォルトの名無しさん
2010/04/22(木) 15:35:53そんな型サイズも"要素"数も malloc は関知なんてしないよ」 って話な
0660デフォルトの名無しさん
2010/04/22(木) 15:56:28このスレでそれは禁句。と書こうとしたらここはC/C++のスレだったw
折角だから、C++版のARRAY_SIZE関数でも貼っておこう。
--
template<typename T, std::size_t N> static inline std::size_t numberof(T (&)[N]) {return N;}
0661デフォルトの名無しさん
2010/04/22(木) 16:45:370662デフォルトの名無しさん
2010/04/22(木) 17:21:20へぇ×100
0663デフォルトの名無しさん
2010/04/22(木) 19:26:57実行時ではダサいです
コンパイル時にしてください
0664デフォルトの名無しさん
2010/04/22(木) 19:29:040665デフォルトの名無しさん
2010/04/22(木) 20:20:34>660は普通のコンパイラなら最適化で定数になるよ。
0666デフォルトの名無しさん
2010/04/22(木) 20:36:31コンパイル時に解決しないと
配列のサイズとかに指定できないだろ
template <typename T, std::size_t N> char (&ARRAY_SIZE_(const T(&)[N]))[N];
#define ARRAY_SIZE(a) (sizeof ARRAY_SIZE_(a))
int n[10];
char m[ARRAY_SIZE(n)];
0667デフォルトの名無しさん
2010/04/22(木) 21:20:28普通にコンパイル通ったけど。。
--
int array[5];
double da[numberof(array)];
for (int ic = 0; ic < numberof(array); ++ic) {
printf("%d:%g\n", array[ic], da[ic]);
}
--
勿論、不定値が出力されたw
0668デフォルトの名無しさん
2010/04/22(木) 21:22:38どないなってんのこれ?
0669643
2010/04/22(木) 21:26:03メンバ変数がint threadIdって名前なんだけど
何故かダメぽ
threadIDは大丈夫なんだけど、予約されているのかな?
1度も継承は使っていない
0670デフォルトの名無しさん
2010/04/22(木) 21:26:12例外安全について書かれた
英語のWebサイトを教えてください。
basic guarantee is ***
みたいな感じで、そこそこ詳しく書いてあるところを教えてください。
よろしくお願い申し上げます。
0671デフォルトの名無しさん
2010/04/22(木) 22:18:26gccの文句書いてよ
0672デフォルトの名無しさん
2010/04/22(木) 22:19:42このあたりはどうか。
Exceptional C++ の元ネタになったサイト。
http://www.gotw.ca/gotw/
#56〜#60, #82 あたりとか。
0673デフォルトの名無しさん
2010/04/22(木) 22:25:32前方宣言じゃなくて#includeを使わないとダメなんですか?
インクルードガード?ってのと何か関係あるの
0674デフォルトの名無しさん
2010/04/22(木) 22:29:00要はサイズを知ってればおk
ポインタか参照だったらサイズは固定(たいてい4バイト)だから前方宣言だけでいい
普通の変数だとクラスのサイズを知らないといけないからincludeするなりしてサイズを教えてあげないといけない
ガードとは関係ない
0677デフォルトの名無しさん
2010/04/23(金) 16:10:10式の演算結果が、その式の持つ情報量(x*yの場合3文字)より多くなるとします。
演算結果はどこかが変数になっていて毎回変わるものというわけではない場合、
情報量を少なく表現するために演算子を用いて書くか、
あるいは解を直接書くかどっちが速度的に早くなるのでしょうか?
演算回数にもよると思うのでなんともいえないとは思いますが、
ちょっと気になったので詳しい方教えてください。
0678デフォルトの名無しさん
2010/04/23(金) 16:17:46計算式に意味があるとか、手計算だと面倒とか言う場合にはそのままでかまわない。
0679デフォルトの名無しさん
2010/04/23(金) 16:17:49勝手に言葉を再定義したって誰にも理解できんぞ
0680デフォルトの名無しさん
2010/04/23(金) 16:31:17まあ情報量が「3文字」なんていう時点でそれはないのな。
0681デフォルトの名無しさん
2010/04/23(金) 16:44:44ここに格納される文字が英語(半角)のみの文字か、
日本語が含まれているかを簡単に判別することはできないでしょうか?
0682677
2010/04/23(金) 17:02:15>>678
参考になります。
そのままでもいいとのことなのでケースを吟味して計算式に特に意味がないようならそのままにしたいと思います。
>>679-680
すみません。
なんという言葉が正しいのかわからなかったので・・・
文字数というかバイト数?というとちょっとおかしいですよね?
int i = 3*3;
でiは4バイトということではなく、
この文字列をテキストなんかにSJISで保存した場合、12バイトになるみたいなことです。
コメントを含め大量の文字量が書かれたプログラムだと実行速度が遅くなると思ったので。
エントロピーとか難しい話は分かりません・・・すみません。
まぁ気にすることでもないと思うので気にしないことにします。
変な質問してすみませんでした。
0683デフォルトの名無しさん
2010/04/23(金) 17:13:480684677
2010/04/23(金) 17:25:50すみません。
その辺が重要な認識のズレでしたね。
確かにCのようなコンパイラ言語なら関係ないですね。
インタプリタ視点で考えてました。
0685デフォルトの名無しさん
2010/04/23(金) 17:41:56JITが一般的になってるはずで、コメント云々で実行速度が落ちるとかはまずない。
何度もソースを再ロードしまくるとかなら別かもしれんけど。
0686デフォルトの名無しさん
2010/04/23(金) 17:45:310687デフォルトの名無しさん
2010/04/23(金) 19:04:27> 名前長くしすぎるとtypeid.name();を使ってなにか処理するときに
なーるほど。
確かに等価ではないかもしれん。
でもまあ
> typeid.name();を使ってなにか処理する
そんなコードはすべからくクソコードだろう。
0688デフォルトの名無しさん
2010/04/24(土) 15:07:410689デフォルトの名無しさん
2010/04/24(土) 15:15:340690デフォルトの名無しさん
2010/04/24(土) 16:06:09はい。そうです。
0691デフォルトの名無しさん
2010/04/24(土) 16:08:10氏ね
0692デフォルトの名無しさん
2010/04/24(土) 16:11:240693デフォルトの名無しさん
2010/04/24(土) 16:13:27p = &p;
0694デフォルトの名無しさん
2010/04/24(土) 16:15:19int*p=&a;
int**p2=&p;
int***p3=&p2;
0695デフォルトの名無しさん
2010/04/24(土) 16:22:12動的に確保されたメモリはヒープ領域に格納される。
ポインタの指す実体はスタックにある場合もヒープにある場合もある。
それだけの話。
0696デフォルトの名無しさん
2010/04/24(土) 16:46:31>>694 ← スタックに格納される場合
0697デフォルトの名無しさん
2010/04/24(土) 16:51:46しかも、ポインタのポインタの直接指す先もスタック
ポインタのポインタを二度脱参照した先はヒープとスタックの差があるけども
0698デフォルトの名無しさん
2010/04/24(土) 16:53:12>どちらもポインタのポインタ自体はスタックに保持されている件について
何言ってるの?
0699デフォルトの名無しさん
2010/04/24(土) 16:58:45ポイント先の領域を指す言葉では無いでしょ
0700デフォルトの名無しさん
2010/04/24(土) 16:59:280701デフォルトの名無しさん
2010/04/24(土) 17:01:28その説明は違う。
ポインタってのは変数であって、そこに格納されている値はアドレス。
>>693のpに格納される値*pは、アドレスであってポインタではない。
0702デフォルトの名無しさん
2010/04/24(土) 17:04:370703デフォルトの名無しさん
2010/04/24(土) 17:13:370705デフォルトの名無しさん
2010/04/24(土) 17:36:05え?
0706デフォルトの名無しさん
2010/04/24(土) 17:41:43えっ
0707デフォルトの名無しさん
2010/04/24(土) 18:01:360708デフォルトの名無しさん
2010/04/24(土) 18:02:18何らかの変換を行ったもの、だな
0709デフォルトの名無しさん
2010/04/24(土) 18:11:200710デフォルトの名無しさん
2010/04/24(土) 18:44:05the resulting pointer, called a null pointer, is guaranteed to compare unequal to a pointer to any object or function.
0711デフォルトの名無しさん
2010/04/24(土) 20:15:580712デフォルトの名無しさん
2010/04/24(土) 20:23:22何かおもしろそうな事ありませんか?
0713デフォルトの名無しさん
2010/04/24(土) 20:28:04MMOのサーバーを作るのが面白そうだな
0714デフォルトの名無しさん
2010/04/24(土) 20:36:25デバイスドライバー
0715デフォルトの名無しさん
2010/04/24(土) 20:39:56データマイニングするとか
0716デフォルトの名無しさん
2010/04/24(土) 22:15:13何それ?
0717デフォルトの名無しさん
2010/04/24(土) 22:17:260718デフォルトの名無しさん
2010/04/24(土) 22:18:490719デフォルトの名無しさん
2010/04/25(日) 00:05:360720デフォルトの名無しさん
2010/04/25(日) 00:12:15エディタかな、やっぱ。
0721デフォルトの名無しさん
2010/04/25(日) 00:18:470722デフォルトの名無しさん
2010/04/25(日) 00:51:16PCは必須かな
0723デフォルトの名無しさん
2010/04/25(日) 05:38:15int a=100;
int b=30
int c;
c=a/b; ←cに4が入るようにしたい!
0724デフォルトの名無しさん
2010/04/25(日) 06:30:580725デフォルトの名無しさん
2010/04/25(日) 07:28:15ttp://www.cppll.jp/cppreference/stdmath_details.html#div
を有効利用するとか。
0726デフォルトの名無しさん
2010/04/25(日) 08:00:37こういう発想がパッと出てくるかどうかって、とても大事だよな
0727デフォルトの名無しさん
2010/04/25(日) 08:10:59とてもかどうかは知らんが大事。
0728デフォルトの名無しさん
2010/04/25(日) 08:19:23いやこれは定石手だろ
1.7 整数除算で端数切り上げ(商のみ) | 株式会社きじねこ
ttp://www.kijineko.co.jp/tech/cpptempls/integer/ceil.html
0729デフォルトの名無しさん
2010/04/25(日) 08:34:390730デフォルトの名無しさん
2010/04/25(日) 08:47:270731デフォルトの名無しさん
2010/04/25(日) 08:49:03センスの問題じゃなくて数学力・・・というか理系力の問題だろう。
0732デフォルトの名無しさん
2010/04/25(日) 08:52:26>>730 って事じゃね?そういう意味で、同じ言葉で表すなら
数学力/理系力のセンス
0733デフォルトの名無しさん
2010/04/25(日) 08:52:53定石とか言ってる間抜けはsize_tでないのに負数とか気に成らんのか?
0734デフォルトの名無しさん
2010/04/25(日) 09:10:29/演算の規則覚えたての初心者にこそ
自力で挑戦してもらいたいところだな。
0736デフォルトの名無しさん
2010/04/25(日) 10:10:25割り算の商の丸め方向が規格で定義されてないんだっけ
C99ではされてるけど
0737デフォルトの名無しさん
2010/04/25(日) 10:33:07size_tはunsignedの代わりではありません
0738デフォルトの名無しさん
2010/04/25(日) 10:48:54BohYoh.com−C/C++ FAQ 負数に対する除算の結果がおかしいのはどうしてですか。
ttp://www.bohyoh.com/CandCPP/FAQ/FAQ00134.html
0739デフォルトの名無しさん
2010/04/25(日) 11:04:000740デフォルトの名無しさん
2010/04/25(日) 12:13:22そのメモリ領域だけを壊すコードを作りたい
何でこんな意味の無いコードを書きたいかというと、
面白そうだから
0741デフォルトの名無しさん
2010/04/25(日) 15:27:36rand関数で1から10までと指定すると
1と10は含まれるのですか?それとも2〜8が選択されるのでしょうか
0742デフォルトの名無しさん
2010/04/25(日) 15:36:51それとは別の話?
0743デフォルトの名無しさん
2010/04/25(日) 20:59:01サンプル読めと言われました これってネタ?マジ? ネタかどうかわからないですが・・・
最近まで他の入門書とか読んでてやっと次の段階いけるかなってなりました
0744デフォルトの名無しさん
2010/04/25(日) 21:00:53言った本人に聞けよ。
0745デフォルトの名無しさん
2010/04/25(日) 21:01:51言った本人には何か考えがあるのかもしれないが
真面目にレスさせてもらうと、それはもうちょい先にするべきかもしれない
0746743
2010/04/25(日) 21:06:48適当にサンプル漁ってみたりしたらいいんですかね?
0747デフォルトの名無しさん
2010/04/25(日) 21:18:34Qtだって立派なライブラリーだと思うから覚えて損は
ないと思うけど、おれが、次は Visual C++ 2008 EE
を落としてきて C++/CLI を覚えろ、といったら、お前は
覚えるのか?とか、結局、次に何をしたいかとかは、
自分で決めるしかないだろ?
0748743
2010/04/25(日) 21:39:170749デフォルトの名無しさん
2010/04/25(日) 21:48:49を読みなされ
話はそれからじゃ
0750デフォルトの名無しさん
2010/04/26(月) 09:29:230751デフォルトの名無しさん
2010/04/26(月) 10:21:200752デフォルトの名無しさん
2010/04/26(月) 20:56:57(1)effective
(2)effective c++
(3)effective stl
(4)more effective
(5)more effective c++
(6)more effective stl
()が1個以上という意味なら2冊
(1)more effective c++
(2)more effective stl
0753デフォルトの名無しさん
2010/04/26(月) 21:11:10C/C++準拠の正規表現で書けよ。
・・・あ、まだ導入されてないんだったか。
0754デフォルトの名無しさん
2010/04/26(月) 21:23:490755デフォルトの名無しさん
2010/04/27(火) 22:41:54俺の友達は10日間でマスターしたらしいんだが、そんなに簡単なの?
0756デフォルトの名無しさん
2010/04/27(火) 22:49:190757デフォルトの名無しさん
2010/04/27(火) 23:00:330758デフォルトの名無しさん
2010/04/27(火) 23:02:08> 俺の友達は10日間でマスターしたらしい
それは小学生が言う「俺は幽霊が見えるんだぜ」と同じで眉唾物。
C言語をマスターしているヤツなんて世界に何人だよおいw
てな話になってしまう。
マスターのレベルを下げて、
文法+標準ライブラリをそこそこ使えるってなら
センスありで仕事の傍らで1ヶ月、
センス普通で仕事の傍らだと4ヶ月
センス無しで仕事の傍らだと12ヶ月
ってところじゃないかな。
0759デフォルトの名無しさん
2010/04/27(火) 23:03:35文法・仕様・概念が変態化し、
仕事の傍らでセンス普通で数年越しのプランになる。
0760デフォルトの名無しさん
2010/04/27(火) 23:05:10Java/C#/Rubyあたり覚えてたらC++も同程度で覚えれるんじゃね
0761デフォルトの名無しさん
2010/04/27(火) 23:08:52確かに3日ぐらいだった。
だがC++は他とは一千を画す変態仕様だと思うぞ。
センスありでも仕事の傍らでは1年はかかると踏んだ。
0762デフォルトの名無しさん
2010/04/27(火) 23:12:11他の人も言ってるが、他言語などを普段使っていて良く慣れていて、だとか
自分のやりたい事をコードに落とすのに、どうしたらいいだとかの地図が見えているような人が、
頭の中で文法を置き換えて、あるいはロジックの組み方を置き換えて、書ける様になるまでだって時間がかかる。
そして 「何日でマスターした」、って台詞にはでっかい欠陥がある。
それは 「何を持ってマスターしたって話なのか」 って事だ。
その友達に 何が出来る?とか、何を作った?とか、これってどうすれば出来る?って聞いてみな。
何を聞いても答えられて、その場でコード書いて見せられるようなら、きっと本当にマスターしたんだと思うぜ
本を読んで理解できたとか、サンプルコードコピペして動かして上手く動かせた、って話だったら
黙って笑顔だけ返してあげればいいよ
0763デフォルトの名無しさん
2010/04/27(火) 23:18:210764デフォルトの名無しさん
2010/04/27(火) 23:28:4510日間ぐらいかかりそうだがwww
>>763
eva名言
0765デフォルトの名無しさん
2010/04/28(水) 10:46:21CにしろC++にしろ、OOPにしろ、だ。
フツーの感性ならやればやるほど、
正確に理解し切れてない部分があることに気がつく。
0767デフォルトの名無しさん
2010/04/28(水) 20:04:41未だに知らないことあるわな
0768デフォルトの名無しさん
2010/04/29(木) 11:54:161) constメソッド内での、メンバ変数アクセスはどう制限されているか。
2) *NULLとは何か。
3) リファレンスの使いどころ。[]オーバーロードの返り値しか思いつかない。
4) コンストラクタで例外投げたらどうのこうの。
5) メソッドポインタとその使用。staticなやつじゃなくて。
0769デフォルトの名無しさん
2010/04/29(木) 12:10:49weak_ptr<X> w = A;
とか?
0770デフォルトの名無しさん
2010/04/29(木) 13:19:38>1) constメソッド内での、メンバ変数アクセスはどう制限されているか。
質問の意味がわからんが、constメソッド内でメンバ変数の値を変えるコードを書くと
エラーでコンパイル出来ないけど、これで答えになってる?
>2) *NULLとは何か。
一般保護違反。
>3) リファレンスの使いどころ。[]オーバーロードの返り値しか思いつかない。
関数にオブジェクトを渡すとき、値渡しするとコピーが発生する。大きなオブジェクトだと高コスト。
ポインタを渡すとコード見たとき値かえてるのかって勘違いする。
>4) コンストラクタで例外投げたらどうのこうの。
知らん。
>5) メソッドポインタとその使用。staticなやつじゃなくて。
STLでアルゴリズムにメソッドを渡したいときに使う奴ってこれじゃなかったっけ。
0771デフォルトの名無しさん
2010/04/29(木) 13:26:204)
コンストラクタで例外を投げても問題ない。対応するデストラクタの{}内が呼ばれないだけで、メンバおよび派生元のデストラクタは呼ばれる。newでもdeleteされるのでリークしない。
0772デフォルトの名無しさん
2010/04/29(木) 13:34:44未定義
0773デフォルトの名無しさん
2010/04/29(木) 13:35:411)はあれだ、内部的にはthisがconstになるとかどうとか。
メンバ変数へのポインタを返したりもできないとかどうとか。
0774デフォルトの名無しさん
2010/04/29(木) 16:18:15コンソール上でfgetcなどで標準入力からの入力を待っている際に、ユーザーが編集可能な文字列をコンソール上に表示させたいのです。
つまりヒストリ機能を実装したいのですが、どういう関数を使えば良いのでしょう。
readline等は使わない本来的なやり方を教えてください。
0775デフォルトの名無しさん
2010/04/29(木) 17:42:490776デフォルトの名無しさん
2010/04/29(木) 21:33:210777デフォルトの名無しさん
2010/04/30(金) 00:11:58実際どうやっているんでしょうね。bash とかみてみようか。
0778デフォルトの名無しさん
2010/04/30(金) 00:20:53出力しているだけだと思うのですが。
0779デフォルトの名無しさん
2010/04/30(金) 00:22:100780デフォルトの名無しさん
2010/04/30(金) 00:23:30....
}
として、メイン関数で
hoge h;
for(i=0;i<100;i++){
h.print();
}
return 0;
となっているときにデストラクタを設定するとどこで働きますか?
0781デフォルトの名無しさん
2010/04/30(金) 00:25:430782デフォルトの名無しさん
2010/04/30(金) 00:27:31ありがとうございます。for回るごとにデストラクタを働かせたい場合はどうしたらいいでしょうか?
0783356
2010/04/30(金) 00:29:21自動変数のデストラクタは、定義されたスコープ(ブロック)を
抜けるときに実行される、と覚えておけばいい。
for(i=0;i<100;i++){
hoge h;
h.print();
}
0784デフォルトの名無しさん
2010/04/30(金) 00:34:30ありがとうございます。
0785デフォルトの名無しさん
2010/04/30(金) 00:43:57みえねーよ
0786デフォルトの名無しさん
2010/04/30(金) 15:12:39構造体使って分割ファイル作ったんですが関数がうまくいきません
どこが悪いか教えてください
0787デフォルトの名無しさん
2010/04/30(金) 15:24:54まさかとはおもうんだが
void mem(str p);
void show(str p);
これ呼び出しのつもりなのか?ww
0788デフォルトの名無しさん
2010/04/30(金) 15:36:23「構造体使って分割ファイル作った」 ってのが良くわからないが、
とりあえず修正してみた。 >>787 も言っているのは、ここ。
http://codepad.org/ChrCi1XX
※見づらかったので一部書き換えてある
0789デフォルトの名無しさん
2010/04/30(金) 16:05:47・公開したい関数以外は静的にしておきましょうよ。
・オブジェクトとポインタを1行で宣言するのはやめた方がいい習慣。
0790デフォルトの名無しさん
2010/04/30(金) 16:09:51三つ目はどういう事情から来るのでしょうか
前二つは分かるのですが三つ目の意味が分かりません
ちなみに私は元の質問者ではありません
0791デフォルトの名無しさん
2010/04/30(金) 16:12:40俺は 788 だけど、こういう事じゃね?
int* a, b; // ← 紛らわしい
0792デフォルトの名無しさん
2010/04/30(金) 16:15:04元の質問者のソースとは形は違うけど、紛らわしさは同じ。
int *a と int b を一緒に書いちゃうと紛らわしい、って話
0793デフォルトの名無しさん
2010/04/30(金) 16:19:29なるほどいわれてみれば確かに紛らわしいです
どうもありがとうございました
0794デフォルトの名無しさん
2010/04/30(金) 16:28:42ついでに言えば、>788の例なら
--
str data, *p;
p = &data;
--
と書くよりも
--
str data;
str * p = & data;
--
と書いた方がpが不定値である期間が短くて済むと言う利点もある。
オブジェクトの生存期間を短くするためにもその方がいい。
0795デフォルトの名無しさん
2010/04/30(金) 19:46:46>str * p = & data;
こんな気持ち悪い書き方教えるな!
0796デフォルトの名無しさん
2010/04/30(金) 19:59:29VC++のコンパイラを使える、軽いIDEに心当たりのある方は居ないでしょうか?
EeePCを使って、出先でテストコードとかを使いたいんです。
0797デフォルトの名無しさん
2010/04/30(金) 20:09:51IDEにどのくらい機能求めてるの?
エディタ使ったらどうだ?
0798デフォルトの名無しさん
2010/04/30(金) 20:11:50でいいのでは
0799デフォルトの名無しさん
2010/04/30(金) 20:12:08最低限、Fキーでコンパイルと実行ができれば・・・。
いちいちコマンドラインからコンパイル・実行するのは面倒で。
CPadとかいいかな、と思ったんですが古いしボーランド潰れてるしでアレですし。
0800デフォルトの名無しさん
2010/04/30(金) 20:18:07ならやっぱエディタでいいと思うよ
ショートカットで設定すればそれも実現できるし、有名所は大概できるから何使うかは好みで
0801デフォルトの名無しさん
2010/04/30(金) 22:02:26避難所なんで無いんだよ
0802デフォルトの名無しさん
2010/05/01(土) 00:47:01std::string *str = new std::string();
と
std::string *str = new std::string;
の違いってありますか。
0803デフォルトの名無しさん
2010/05/01(土) 00:48:480804デフォルトの名無しさん
2010/05/01(土) 05:49:47面倒ならあきらめて重いIDE使え
軽快な環境を使うには最低限のスキルが要るんだよ
0805デフォルトの名無しさん
2010/05/01(土) 08:29:58初心者程度ならCpadで十分。
0806805
2010/05/01(土) 08:36:060807デフォルトの名無しさん
2010/05/01(土) 08:41:19放物線の問題で高校物理でやったような公式で当てはめて
解析的に解く方法
ttp://yasumoto.iuhw.ac.jp/HS_phys/1-9/1-9.htm
と
数値計算的に解く方法がわかりません
ttp://www-cms.phys.s.u-tokyo.ac.jp/~naoki/CIPINTRO/HIGH/high1.html
前者はこれまでやってきたことなので、直感的にも理解できて
コレが答えを出すのに正しいものだとわかるのですが
後者は、どうしてこれが正しいのか、なぜこのソースとなるのか
というところからわかりません。
数値計算的に解く、ということを解説してる良いサイトとかご存知ないですか?
0808デフォルトの名無しさん
2010/05/01(土) 08:48:510809デフォルトの名無しさん
2010/05/01(土) 08:50:290810デフォルトの名無しさん
2010/05/01(土) 08:52:44まず微積分は理解できるのか
別にニュートン法等の説明が必要な手法でもなく、
ただ単に微分して傾きをだしてそれを少しづつ伸ばしてく手法なので
Cというより高校物理と数学やりなおせって話だな
一応、数値解析と呼ばれる分野なので、この単語でぐぐって本なりサイトなりを探せばいいよ
0811デフォルトの名無しさん
2010/05/01(土) 09:40:040812デフォルトの名無しさん
2010/05/01(土) 10:49:280813デフォルトの名無しさん
2010/05/01(土) 12:28:42~の意味を教えてください
0814デフォルトの名無しさん
2010/05/01(土) 12:34:200815デフォルトの名無しさん
2010/05/01(土) 12:35:140816デフォルトの名無しさん
2010/05/01(土) 13:25:230818デフォルトの名無しさん
2010/05/01(土) 20:09:56/usr/lib/p7zip/7z.soがあるんだけど、*.hじゃないとダメだよね?
0819デフォルトの名無しさん
2010/05/01(土) 20:28:250820デフォルトの名無しさん
2010/05/01(土) 21:21:08解答のしようがない などと申しており
0822デフォルトの名無しさん
2010/05/01(土) 21:32:21> 7zipを解凍したいと考えている
OK
> /usr/lib/p7zip/7z.soがあるんだけど、
OK
>*.hじゃないとダメだよね?
何が?少なくとも.soが.hじゃないのは見ればわかる。
0824818
2010/05/01(土) 21:38:33>#includeする時に*.soでも、大丈夫なのか?
0825デフォルトの名無しさん
2010/05/01(土) 21:44:10includeするのはヘッダーファイルだろ。.hかどうかは分からないが、通常.soではない。
どんな関数があるかは7z.soのマニュアルでも読めばいい。
あるいは
$ nm 7z.so
とか。
0826デフォルトの名無しさん
2010/05/01(土) 21:52:46>7zipを解凍したいと考えている
>/usr/lib/p7zip/7z.soがあるんだけど、*.hじゃないとダメだよね?
↓↓↓
>7zipを解凍する処理をC/C++で書きたいと思っている
>手元にダイナミックリンクライブラリの 7z.so があるんだけど、
>これだけあっても、ヘッダファイルが無いと書けないよね?
多分、こういう質問を言葉端折って書いてて伝わっていない事に気づいてなかったと思われ
0828デフォルトの名無しさん
2010/05/01(土) 22:11:22おまえがバカだってことを証明したレスに偉そうに「その通り」とかレスしてんじゃねえよアホ
0829デフォルトの名無しさん
2010/05/01(土) 22:15:45質問をしちゃいけないとかwww
何この人wwww
0830デフォルトの名無しさん
2010/05/01(土) 22:18:20アンカーつけないとどれに言ってるのかわからん
0831デフォルトの名無しさん
2010/05/01(土) 22:20:130832818
2010/05/01(土) 22:21:060833デフォルトの名無しさん
2010/05/01(土) 22:21:490834デフォルトの名無しさん
2010/05/01(土) 22:22:550836デフォルトの名無しさん
2010/05/01(土) 22:30:31また、コンパイルする時のライブラリとしても使われる
/etc/ld.so.conf.d/
に実行時に使われるようにPATHを記述したファイルを作って
/sbin/ldconfig
する
0837デフォルトの名無しさん
2010/05/01(土) 22:48:28いや、必須ではないが、現実的には普通ヘッダファイルもインクルードするだろ。
0838デフォルトの名無しさん
2010/05/01(土) 22:50:220839818
2010/05/01(土) 23:13:22/usr/includeにヘッダファイルが見当たらないもので
>>838
develってredhat系のディストリでは見るけど
今はgentooを使っているから、そんなの無いよ
0840デフォルトの名無しさん
2010/05/01(土) 23:36:440841デフォルトの名無しさん
2010/05/01(土) 23:40:38その知識で7zip使って何やりたいんだか?
0842818
2010/05/01(土) 23:46:31*.zipと*.rarを解凍したいんだよ
testってディレクトリを作って、さらにディレクトリを作り
その中にエロデータを解凍したいわけ
0843デフォルトの名無しさん
2010/05/01(土) 23:48:380844デフォルトの名無しさん
2010/05/01(土) 23:53:09いいだけかもしれない。
0845818
2010/05/01(土) 23:58:16前にperlで作ったことがあるから、機能強化版をC++で作りたいわけ
その時は外部コマンドの呼び出しをしたので、
今回はちゃんとライブラリを使って書きたいな〜と
>>843
それって、外部コマンドの呼び出しでおk?
0846デフォルトの名無しさん
2010/05/02(日) 00:03:380847818
2010/05/02(日) 11:01:21これって禁じ手じゃないんですか?
0848デフォルトの名無しさん
2010/05/02(日) 11:05:36たまたま同名のマクロが宣言されてたらマズいからって事?
0850デフォルトの名無しさん
2010/05/02(日) 11:18:270851デフォルトの名無しさん
2010/05/02(日) 11:23:22それ右辺の型の問題であって、マクロの話じゃないじゃん
マクロってプリプロセッサで置き換わるだけのものだから
0852デフォルトの名無しさん
2010/05/02(日) 11:33:38そうでない場合は積極的にconst使った方がいい
禁じ手は言いすぎだが、
使わなくて済むならマクロは使わない方がいいし、使うべきではないと思う
型もそうだけど、名前空間の概念が無いとか、同名の定義したらアウツとか
色々問題あるからねえ
0853デフォルトの名無しさん
2010/05/02(日) 14:42:53クラスの名前くらいなら、名前が衝突する可能性が低いと思うんですが
0854356
2010/05/02(日) 15:53:10数十万行を越えると衝突しないはずがない。
機能の分類を明確にする意味もある。
0855デフォルトの名無しさん
2010/05/02(日) 16:09:000856デフォルトの名無しさん
2010/05/02(日) 16:54:33名前被ったらOS様と被る名前をつけていた方が悪い
0857デフォルトの名無しさん
2010/05/02(日) 18:39:49被るもヘチマもない。
0858デフォルトの名無しさん
2010/05/02(日) 18:41:50そうゆう意味じゃないだろ
数えたことないけど, どんだけシンボルがあるか > Linux
# Linux に限ったことではない
0859デフォルトの名無しさん
2010/05/02(日) 18:50:06今度はこれで構造体の初期化を外部のファイルにしたのですがセグメントエラーに
なるのですがどこが悪いのかご教授ください
http://www1.axfc.net/uploader/Sc/so/109596
0860デフォルトの名無しさん
2010/05/02(日) 18:52:36codepadやpastebinなら見るけど。
0861859
2010/05/02(日) 19:31:44codepadにしました。本来7個くらいの分割ファイルですが。
initのところがおかしいです
0862デフォルトの名無しさん
2010/05/02(日) 19:33:140863デフォルトの名無しさん
2010/05/02(日) 19:44:07>>862 も言ってるが・・・
void init(str *p)
{
str DATA; // static にするか、グローバルにするかしないと関数抜けたら捨てられる領域
〜省略〜
p=&DATA; // 抜けて捨てられる領域を返している
}
怖い処理するなw
0864デフォルトの名無しさん
2010/05/02(日) 19:44:15その後のアクセスで落ちてる
まぁ>>862の指摘してる勘違いも持ってはいるなそうだが・・・・・・
だだ>>862の指摘はおかしい、代入した変数も消滅してるからなwwwww
0865デフォルトの名無しさん
2010/05/02(日) 19:46:27その関数は怖くないよ
無意味なだけでwww
0866デフォルトの名無しさん
2010/05/02(日) 19:50:47俺も釣ってくるwwwwwwwwwwwwwwwwwwwwwwwwwww
恥ずかしいわ
0867デフォルトの名無しさん
2010/05/02(日) 19:58:110868デフォルトの名無しさん
2010/05/02(日) 20:05:08いろいろ理由は省くがこの形を保って動作させるのは不可能
どこか変えないとだめだ
ttp://codepad.org/WBeUPiQa
こういう感じが一番無難かなぁ・・・・
0869デフォルトの名無しさん
2010/05/02(日) 20:05:19void init(str **p)
{
static str DATA;
*p = &DATA;
}
とかしなきゃ無理じゃね。で、メインはこう
int main(int argc, char** argv)
{
str *p;
init(&p);
}
0870デフォルトの名無しさん
2010/05/02(日) 20:11:58main関数に入れたほうが見やすくなりそうですね
0871デフォルトの名無しさん
2010/05/02(日) 21:50:59C++でもほぼ全ての関数をクラスに属させようとしている俺はバカですか?
Qtはほとんどの関数がクラスに属しているので、C++でもおkな気がする
0872デフォルトの名無しさん
2010/05/02(日) 21:57:57> C++でもほぼ全ての関数をクラスに属させようとしている俺はバカですか?
バカとは言わん。別に良いと思うよ。
ただ、カプセル化という考え方を知っているか?
そしてメンバ関数とメンバでない関数でどっちでも同じ事ができるから
どっちにしようか迷った場合は、メンバでない関数を選ぶべきと言うのが
一応のC++の推奨される考え方。
(『Effective C++』 Scott Meyers著 参照ね。)
0873デフォルトの名無しさん
2010/05/02(日) 22:00:04別にいいんじゃない?
ほぼってのが、メンバ関数にしない方が良いケースならそうするって意味ならいいが
限界まで無理やり所属させる気でいるならすこし問題がある
0874873
2010/05/02(日) 22:00:570875872
2010/05/02(日) 22:01:05>>871
メンバ関数でしかできない処理の場合はもちろんメンバ関数にすべきであるがね。
あと、C++には
オブジェクト指向のC++(クラス, 継承, etc)
といった使い方以外にも、
TemplateのC++(STLやTemplate MetaProgrammingとか)
という側面もあったりするので、色々勉強なさってください。
0876デフォルトの名無しさん
2010/05/02(日) 22:01:23C++のbitsetを使うのでは速度に差が出たりしますか?
それとも内部的にはやってることが同じなのでほとんど変わりませんか?
同様に連結リストとvectorでは速度に差が出たりしますか?
0877デフォルトの名無しさん
2010/05/02(日) 22:27:300878デフォルトの名無しさん
2010/05/02(日) 22:33:560879デフォルトの名無しさん
2010/05/02(日) 22:39:390880デフォルトの名無しさん
2010/05/02(日) 22:43:32前半はともかく
後半みたいな質問するとか、list と vectorで何が違うのかを知らないのか?
0881デフォルトの名無しさん
2010/05/02(日) 22:46:38this -> が、たくさんでてきます。 一応オブジェクト指向はすこし理解していますが、
このThisってどこで定義されているんでしょうか?またthisの意味を教えてください
0882デフォルトの名無しさん
2010/05/02(日) 22:50:07それよりC++の本でも読んでC++の仕様を理解して下さい
そのインスタンスのアドレスです、thisの定義文はどこにもありません
0883デフォルトの名無しさん
2010/05/02(日) 22:50:37線形と双方向だろ?
で、速度は?
0884デフォルトの名無しさん
2010/05/02(日) 22:52:420885デフォルトの名無しさん
2010/05/02(日) 22:53:45メモリの連続性から自明だろ。
0886デフォルトの名無しさん
2010/05/02(日) 23:02:27>>インスタンスのアドレス
ありがとうございました!!
0887デフォルトの名無しさん
2010/05/03(月) 10:40:43比較関数を自分で作れと言われて大変なショックを受けました。
なんでC++はこんなに面倒くさいんですか?
Pythonなら簡単に書けるのに‥。
ちなみにPythonではなくC++を使う理由は、modを作りたいゲームが
C++を採用していて、選択の余地がないからです。
0888デフォルトの名無しさん
2010/05/03(月) 10:44:090890デフォルトの名無しさん
2010/05/03(月) 11:11:39C++が面倒くさいんじゃなくて、Pythonが簡単過ぎると気づいて欲しい
0891デフォルトの名無しさん
2010/05/03(月) 11:13:55ソートについても比較関数を使って比較方法を変更できるようにしてある。
そういう風に、できる範囲が広いぶん面倒になっている。
0892デフォルトの名無しさん
2010/05/03(月) 11:16:53そのめんどくささも少し慣れれば、std::less<int>()とか体が自然に入力してくれるようになるから問題ない。
0893デフォルトの名無しさん
2010/05/03(月) 11:22:45Python.exe を作る人の立場に近いって事に気づいていない様子。
同じ立場の言語じゃないんだぜ。
Python言語を作ったベンダが、その面倒くさい処理をPythonユーザの代わりにやってくれてるから簡単なだけ。
C/C++でのコーディングは、その辺を全部自分でやらないといけないけど・・・ 探せば >>892 も言うようなライブラリもあるんだぜとヒント。
探すっていうか、標準だけど。 ただ、まったく何も知らない状態だったら、それ自体勉強して理解しないと多分無理
0894デフォルトの名無しさん
2010/05/03(月) 11:38:28失礼しました。
それをやると遅くなるし、そもそもこんな基本的な操作で外部処理を呼び出すというのは
スマートではない気がして、できればやりたくありません。
ほとんど自己流の日曜プログラマなので、とりあえずC++での一般解はどうなのか
知りたくてここにやってきました。
>>890-893
ふむう〜。
低級言語と高級言語の違いってことでしょうか。
とりあえずstd::lessというのを調べてみます。
ありがとうございました。
0895デフォルトの名無しさん
2010/05/03(月) 11:40:590896デフォルトの名無しさん
2010/05/03(月) 12:01:04お前らは*.hと*.cppのどちらにコメントを書いていますか?
やっぱり、doxygenとかを参考にしたほうがいいのかな〜
0897デフォルトの名無しさん
2010/05/03(月) 13:05:35VC++2010ならラムダ式が使えるよ
0898デフォルトの名無しさん
2010/05/03(月) 13:17:19何でヘッダファイルに定義をしないで、*.cppだけに宣言して大丈夫なんですか?
0899デフォルトの名無しさん
2010/05/03(月) 13:18:220900デフォルトの名無しさん
2010/05/03(月) 14:22:590901デフォルトの名無しさん
2010/05/03(月) 17:08:300902デフォルトの名無しさん
2010/05/03(月) 17:37:240903デフォルトの名無しさん
2010/05/03(月) 18:50:19毎回コピペしてますんで直接打ちたい
0904デフォルトの名無しさん
2010/05/03(月) 18:52:060905デフォルトの名無しさん
2010/05/03(月) 19:05:06Shift押して\マークですか…
キーボード上じゃ線が真中で切れてるから解りませんでした。
コピペ卒業できました、ありがとう。
0906デフォルトの名無しさん
2010/05/03(月) 19:07:33vector<int> IntA;
vector<int> IntB;
// 各vector配列に要素を追加
・・・
IntA = IntB;
とした場合、IntBの各要素がIntAの各要素にハードコピーされるのでしょうか?
それとも、ポインタ的な交換が行われるだけで、要素の多少に関わらず、代入のコストは同じなのでしょうか??
0907デフォルトの名無しさん
2010/05/03(月) 19:11:59足りてなければリサイズして各要素の代入
0908デフォルトの名無しさん
2010/05/03(月) 19:34:340909デフォルトの名無しさん
2010/05/03(月) 19:56:13http://codepad.org/9aKSOg8D
0910906
2010/05/03(月) 22:21:35失礼しました(汗)
おっしゃる通り、ディープコピーのことです。
>>907
>>909
ありがとうございました。
スッキリしました。
(そのサイト、便利ですね!)
0911デフォルトの名無しさん
2010/05/04(火) 11:39:460912デフォルトの名無しさん
2010/05/04(火) 11:40:250913デフォルトの名無しさん
2010/05/04(火) 11:47:42int x = 0;
i = &x;
の時、
if(i==NULL) {
// i はNULL
} else if((*i)==0) {
// i(の示す先の値)は0
}
単に 「0が数値かNULLか」 って質問だと解無し。(NULL=値0)
0914デフォルトの名無しさん
2010/05/04(火) 11:52:45どちらとして扱われるかは、代入や比較の対象によって決まる
0916デフォルトの名無しさん
2010/05/04(火) 11:55:48コード上の表記のやり方がたまたま同じになってるだけ
(けど賢いコンパイラが文脈から判断して峻別している)
ってこと?
0917デフォルトの名無しさん
2010/05/04(火) 11:58:594*0 だって (9+4*5)/300 だってヌルポインタ定数だぜ
0918デフォルトの名無しさん
2010/05/04(火) 12:00:47C FAQのヌルポインタの項とか読んどけ
0919デフォルトの名無しさん
2010/05/05(水) 07:58:42struct animpat{
vector<int> ghlist;
int anigap;
anipat(){anigap=1;}//コンストラクタ
}
vector <anipat> aplist;
public:
animDraw(){
aplist.push_back(anipat());//ひとつめのanipatをセット
}
};
とある本に載ってるコードなのですが
push_back()って一番最後に要素を追加するって関数ですよね?
なぜanipat()というコンストラクタを入れて機能するんでしょうか?
返り値ないですよね?
0920デフォルトの名無しさん
2010/05/05(水) 09:25:07それはコンストラクタを関数として呼んでるんじゃなく
一時オブジェクトを生成しているんだお
偉い人がそう書けって決めたんだお
一時オブジェクトとかテンポラリオブジェクトでググれば詳しく出てくるお
0921デフォルトの名無しさん
2010/05/05(水) 09:47:11ありがとうございました 勉強になりました
0922デフォルトの名無しさん
2010/05/05(水) 12:12:33WIN32API / MFC / .NET という種類がある中でどうも違いが分からず。
.NETで、C++のコードを組み合わせて作れそうだとおもったのですが
これらの入門的なサイトなどありましたら教えていただけますか
0923デフォルトの名無しさん
2010/05/05(水) 12:19:09int a = 123; // ← 普通の代入
int b(123); // ← コンストラクタ
int(123); // ← 名前の無い一時オブジェクト
int c = int(123); // ← 一時オブジェクトを生成してコピー
int *d = new int(123); // ← int でも new 演算子で
0924デフォルトの名無しさん
2010/05/05(水) 12:24:03windowsの話だとして
win32API … OSが持っている膨大な関数群。Windowsのソフトウェアにとって全ての大本
MFC … win32API関数群をラッピングしたマイクロソフト謹製のクラス集。VC6時代を最後にほぼ廃れている。
.NET … 上記2つと全然別物。上2つがネイティブコード、C/C++の世界だとすると .NET は管理された中間言語の世界。
VMによって管理され実行される Javaに似た世界。 まったく別物。
0925デフォルトの名無しさん
2010/05/05(水) 12:27:24やろうと思えば出来ると言えば出来るけど、それは C++ と言うより
C++/CLI という別言語を使う事になるので誤解しないように。
.NET使ったCLIによる実装は、よっぽど何か事情がある場合か、
あるいは予めそれが普通のC++ でない事を知った上で物好きが使う物。
0926デフォルトの名無しさん
2010/05/05(水) 12:27:27これからは.NETが主流になるのかな。
しかし、C++/CLIは分かりにくかったぞ・・・
0927デフォルトの名無しさん
2010/05/05(水) 12:38:41コンパイルして出来る exe 自体、ネイティブじゃない
0928デフォルトの名無しさん
2010/05/05(水) 12:38:420929デフォルトの名無しさん
2010/05/05(水) 12:59:56最終的にネイティブDLLとのやりとりで間にマーシャリングが必要になるから、
単純にそうすれば早くなるとは言えない。 というか、もうその辺の話はスレチ
0930デフォルトの名無しさん
2010/05/05(水) 13:06:130931デフォルトの名無しさん
2010/05/05(水) 13:21:26みなさんありがとうございました。
openglを使ったGUIアプリを作ろうと思っていたので
C++ということしか頭にありませんでした。
違いがよくわかりました。
openglでお絵かきソフト的なIFつけるとなると…どうしたらいいんだろうか…
0932デフォルトの名無しさん
2010/05/05(水) 13:27:22glut でも使えば?と言うかOpenGLはただの C向け3D描画関数群なので
ソフトのUI なんて話になると、そもそもOpenGL以前にそのターゲットプラットフォーム上で何らかの手段で
それが構築出来ないと話にならないので、自分で動き理解した上で考えてググった方がいい
0933デフォルトの名無しさん
2010/05/05(水) 13:37:54なるほど。仰るとおりですね。
glutは以前使っていたのですが、コンソールでの利用しかしておらず
windowsしか考えていないのでwindows上でいかに構築して
そこにopenglをぶち込めるかで検討しろということですよね。
0934デフォルトの名無しさん
2010/05/05(水) 13:46:47ごちゃごちゃして面倒だったり、物量多そうなら Qt だとか wxWidget だとかを利用してもいいしって感じ
0935デフォルトの名無しさん
2010/05/05(水) 22:34:080936デフォルトの名無しさん
2010/05/05(水) 22:45:440938デフォルトの名無しさん
2010/05/05(水) 22:57:270939デフォルトの名無しさん
2010/05/05(水) 23:04:37http://support.microsoft.com/kb/837697/ja
0940デフォルトの名無しさん
2010/05/05(水) 23:10:08ポインタの指す先で調べたいのでどうにも・・・。
リンク先の情報を応用すれば大丈夫なんでしょうか?
コードで言うと、
std::priority_queue< Object* > Queue;
Queue.push( new Object() );
といった感じで・・・。
0941デフォルトの名無しさん
2010/05/05(水) 23:16:00そこ応用すれば普通に出来ると思うけど
0942デフォルトの名無しさん
2010/05/05(水) 23:20:29std::priority_queue<Object *, std::vector<Object *>, Comp> q;
0943デフォルトの名無しさん
2010/05/07(金) 00:44:37ためしに
struct a;
struct *b;
b=&a;
とやってbと&aを確認しても違うアドレスが出てきます。
そもそも構造体なのでアドレスはひとつではないと思うのですが一つしか出てこないため確認の仕方が間違ってるようなきがします。
0944943
2010/05/07(金) 00:51:220945デフォルトの名無しさん
2010/05/07(金) 00:52:290946943
2010/05/07(金) 01:02:22ちゃんとnewとdeleteが動いてるか確かめたくて上のようなやつ作りました
0947デフォルトの名無しさん
2010/05/07(金) 01:34:50それと>>943となんか関係あるの?
0948デフォルトの名無しさん
2010/05/07(金) 02:01:00そのコードのどこに>>943のコードがあるん?
0949デフォルトの名無しさん
2010/05/07(金) 07:16:430950デフォルトの名無しさん
2010/05/07(金) 08:39:16&a と b は同じになるはずだよ。
0951デフォルトの名無しさん
2010/05/07(金) 11:01:14>>944 で struct は適当な構造体と書いてあるので、
もし違う構造体なら、&a と b は同じになるとは限らないよ。
0952デフォルトの名無しさん
2010/05/07(金) 11:11:52これなら同じになるんじゃない?
/* Cなら */
struct st;
struct st a;
struct st *b;
b = &a;
// C++なら
struct st;
st a;
st *b;
b = &a;
0953デフォルトの名無しさん
2010/05/07(金) 18:16:03いや、違う型の構造体へのポインタへ代入する場合ね
0954デフォルトの名無しさん
2010/05/07(金) 18:42:41どういう意味?
struct st1;
struct st2;
struct st1 a;
struct st2 *b;
b = (struct st2*)&a;
ってこと?
それでもbと&aは同じだよね?
0955デフォルトの名無しさん
2010/05/07(金) 18:58:37main(){
struct st a;
struct st *b;
b=&a;
}
0956デフォルトの名無しさん
2010/05/07(金) 19:01:41main(){
b=&a;
}
0957デフォルトの名無しさん
2010/05/07(金) 19:37:34struct A {
int a;
};
struct B {
int b;
};
struct AB : public A, B {
}
AB ab;
B* b = &ab;
// b != &ab となる
0958デフォルトの名無しさん
2010/05/07(金) 19:42:550959デフォルトの名無しさん
2010/05/07(金) 19:49:42friend ostream& operator<<(ostream& out, hoge h);
のように宣言して、関数の中身はクラスの外に別書きする場合、書き始めはどうなりますか?
0960デフォルトの名無しさん
2010/05/07(金) 19:51:300961デフォルトの名無しさん
2010/05/07(金) 20:09:53ありがとうございます
0962デフォルトの名無しさん
2010/05/07(金) 20:49:28ですが、960で書き始めるとfriendがクラスの外にあるって内容の警告が出ます。
あと、must exactry take one argumentってエラーも出ました。
関数の宣言オンリーではなく、関数の中身をクラスの外に書く場合の書き方がわかる方お願いします
0963デフォルトの名無しさん
2010/05/07(金) 21:04:530964デフォルトの名無しさん
2010/05/07(金) 21:35:53たとえばlhsが自クラスでは無い場合。
complex& operator+(double lhs,const complex& rhs);
たとえばlhsとrhsが対称な場合
void swap(hoge& lhs,hoge& rhs);
friendを使うのは、こんな場合にメンバを外部に晒さずに実装できること。
0965デフォルトの名無しさん
2010/05/07(金) 21:38:29クラスの外がだめならクラスの中に書けばいいじゃない。
class hoge
{
friend void func1(int);
};
void func1(int)
{
}
0966デフォルトの名無しさん
2010/05/07(金) 21:45:22friend 書いちゃだめって、こういう事じゃないの?
http://codepad.org/7Ermo55E
>>961
正解はこれ。てか、なんでこんな質問でgdgdになってんだよ
0967デフォルトの名無しさん
2010/05/07(金) 21:47:110968デフォルトの名無しさん
2010/05/07(金) 22:13:52ありがとうございます
クラスの外に書くときにフレンドは要らないとわかったのですが、
voidではなく、istreamやostreamなどの場合も有効でしょうか?
must take exactly one argumentというエラーが出てしまいます。。
0969デフォルトの名無しさん
2010/05/07(金) 22:21:58その場合もfriend使わないだろ普通
0970デフォルトの名無しさん
2010/05/07(金) 23:59:42マリー・アントワネット風でワロタw
0971デフォルトの名無しさん
2010/05/08(土) 00:00:160972デフォルトの名無しさん
2010/05/08(土) 00:01:460973デフォルトの名無しさん
2010/05/08(土) 00:04:090974デフォルトの名無しさん
2010/05/08(土) 00:22:260975デフォルトの名無しさん
2010/05/08(土) 10:25:180976デフォルトの名無しさん
2010/05/08(土) 11:35:00だからそう言う未定義動作をだな…(ry
0977デフォルトの名無しさん
2010/05/08(土) 11:36:51#if defined(private) || defined(protected) || defined(public) || defined(class) || defined(struct)
#error you must die!
#endif
って書くべきだろうか。
0978デフォルトの名無しさん
2010/05/08(土) 11:38:470979デフォルトの名無しさん
2010/05/08(土) 16:22:05private を public に置き換えたほうがいいかと
0980デフォルトの名無しさん
2010/05/08(土) 17:31:59namespaceに属する関数で実装しているコードを発見しますた
お前らはどう思いますか?
namespace hoge {
Test getInstance();
}
class Test {
public:
Test();
~Test();
}
0981デフォルトの名無しさん
2010/05/08(土) 17:42:59諸般の事情からfriend関数で実装したのかな?と思った
0982デフォルトの名無しさん
2010/05/08(土) 18:51:25でも理由は何かあるんだろうな
何だろう?
0983デフォルトの名無しさん
2010/05/08(土) 19:19:34それのどこがシングルトンなんだ?
0984デフォルトの名無しさん
2010/05/08(土) 19:27:10馬鹿なのか?
0985デフォルトの名無しさん
2010/05/08(土) 19:29:31別にこのまま書かれてた、って話じゃないと思うの
0986デフォルトの名無しさん
2010/05/08(土) 19:30:41無意味な煽りはいらんよ
0987デフォルトの名無しさん
2010/05/08(土) 19:35:16定義を省いてるだけだろうよ
0988デフォルトの名無しさん
2010/05/08(土) 20:07:250989デフォルトの名無しさん
2010/05/08(土) 21:27:560990デフォルトの名無しさん
2010/05/08(土) 21:30:250991デフォルトの名無しさん
2010/05/08(土) 22:12:420993デフォルトの名無しさん
2010/05/09(日) 08:35:580994デフォルトの名無しさん
2010/05/09(日) 09:05:39>本当にシングルトンだったのかすら疑問に思える
俺もうっすらそんな気はしてるw でもそれはそれとして、
質問は単にどう思うかってだけなのでどう思うかだけ答えればいいかなとw
0995デフォルトの名無しさん
2010/05/09(日) 09:07:11戻り値の型が参照でもポインタでもないわなw
0996デフォルトの名無しさん
2010/05/09(日) 10:32:29スレを勃てるまでもないC/C++の質問はここで 15
http://pc12.2ch.net/test/read.cgi/tech/1273368706/
0997デフォルトの名無しさん
2010/05/09(日) 10:44:310998デフォルトの名無しさん
2010/05/09(日) 10:45:270999デフォルトの名無しさん
2010/05/09(日) 20:00:251000デフォルトの名無しさん
2010/05/09(日) 20:01:1510011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。