スレを勃てるまでもないC/C++の質問はここで 20at TECH
スレを勃てるまでもないC/C++の質問はここで 20 - 暇つぶし2ch521:デフォルトの名無しさん
12/01/29 22:56:40.08
時刻を管理するクラスTimeのメンバ関数として、
分を返す
int Time::min( ) const
を用意したのですが、
VC++ 2010だと、windows.hをインクルードした際に
マクロmin(a,b)(((a)<(b))?(a):(b)) と解釈されてしまい
引数が足りないというコンパイルエラーになります。
このコンパイルエラーを回避するためには
min()の名前を変更する以外に方法は無いのでしょうか?

よろしくお願い致します。

522:デフォルトの名無しさん
12/01/29 23:22:39.49
#define NOMINMAX か (t.min)();

523:デフォルトの名無しさん
12/01/29 23:23:52.48
>>521
includeした後にundefする。でも衝突しそうな名前は初めから避けるべき

524:デフォルトの名無しさん
12/01/30 00:39:48.02
ファイル名やフォルダ関係はUNICODEで統一しといた方がいいかも
ファイルの中身は知らん

525:521
12/01/30 09:55:06.10
>>522
>>523
ありがとうございます。

526:デフォルトの名無しさん
12/01/30 10:10:56.90
stdと衝突するあたりM$の頭の悪さが露呈してるよなぁ

527:デフォルトの名無しさん
12/01/30 14:50:02.33
maxマクロを書いたMSのプログラマは絶対に許さない。絶対にだ

528:デフォルトの名無しさん
12/01/30 22:38:39.10
>>526
windows.hって相当昔からあるから、STLが規格に入る以前に作られてたとか

529:デフォルトの名無しさん
12/02/03 00:18:22.76
C++の大規模ソースをソーストレースするときのおすすめツールを教えてください。
ある関数の宣言もとや使用箇所を手早く探せるようにしたいです。


以下、今まで使ってたもの。

 ctags     :同じ名前の関数(オーバーライドされてる関数)があるとき、
          候補をリスト表示できない。
          関数やメンバを使用している箇所を表示できない。

 GNU Global :構造体のメンバを検索したり、
          関数定義もとを探すときに見つからないことがある。


Windows 、Linux のどちらかで使えれば良いです。

530:デフォルトの名無しさん
12/02/03 00:31:09.18
grepや全文検索。
コンパイラ提供のインクルードパスをgrepかけることあるがそれほど時間掛からん。

531:デフォルトの名無しさん
12/02/03 10:17:31.94
ビルド環境さえ用意できるならなにもなくてもなんとかなるね
grep,ファイラー,テキストエディタはさすがに用意できるだろうし

532:デフォルトの名無しさん
12/02/03 13:40:47.76
ソースを全文検索対象にして、indexつくらせちゃう
まったくのベタだが、結局これがいちばん早かった

533:デフォルトの名無しさん
12/02/05 15:08:59.03
class c_A、class c_Bがあって、


~~ヘッダファイル内~~
#include "c_B.h"

class c_A
{
c_B hoge;

};
~~~~~~~~~~~
でインスタンス生成できちゃうんですか

534:デフォルトの名無しさん
12/02/05 15:46:32.64
>>529
つ[Doxygen]

>>533
できない。


535:デフォルトの名無しさん
12/02/05 18:41:28.49
C++の規格上vector.end()をインクリメントすると何が帰ってくるか未定義?
だとすると内部で+=や++オペレータを呼ぶだけのadvanceは終わりをチェックしてくれていないの?

536:デフォルトの名無しさん
12/02/05 18:43:48.01
はい

537:533
12/02/05 19:56:00.52
すいません、c_Aのインスタンスを生成したときに、内部に持っているc_Bの
インスタンスも生成されるのでしょうか?
という質問でした

538:デフォルトの名無しさん
12/02/05 19:59:31.87
はい

539:デフォルトの名無しさん
12/02/05 20:44:34.41
それで納得したならそれでいいし、
それで何か困るなら、ラッパクラスを作ってもいい

540:デフォルトの名無しさん
12/02/05 21:03:30.46
>>536
ohそうなのか。ありがとう
規格上どのコンテナのイテレータでもそうなってる訳?

541:デフォルトの名無しさん
12/02/05 21:05:46.99
はい

542:デフォルトの名無しさん
12/02/05 23:09:47.26
ほんとにちょっとした質問なんですけど、

ifstream ifs("csvファイル.csv");
string line;
getline(ifs,line);
//※ここで、別のファイルを開きたくなったので、
ifs.open("別のファイル.csv");
ってやった場合、マズかったりしますか?
それとも、ifsは「別のファイル.csv」をちゃんと頭から読み込んでくれますでしょうか?

543:デフォルトの名無しさん
12/02/05 23:16:38.66
はい

544:デフォルトの名無しさん
12/02/05 23:19:07.66
マズかったりします

545:デフォルトの名無しさん
12/02/06 01:10:08.63
>>541
thx!
だとイテレータ使ったループって使いにくくない?
Cだとfor(i=0;i<10;i+=2);で偶数飛ばせるけどイテレータはいつもend()になったかどうか
チェックしないといけない。ぶっちゃけ改悪なのでは?

546:デフォルトの名無しさん
12/02/06 01:35:42.46
listなどの実装を考えると一般的にイテレーターがi<Nと書けない(非常にコストが掛かる)ことに気がつく

547:デフォルトの名無しさん
12/02/06 07:56:49.62
コンティナーのせっかく抽象化したい照れーたをインクリメイツ
って発想が
キモイと思うのだが
片リストを逆から辿ろうとしたら
「このコードはバヤイ!リバースコピーをいテレータ用に確保なう!」
「もっといい方法があるのにp」
と忠告してくれるコンパイラーがあるといい

548:デフォルトの名無しさん
12/02/06 08:07:20.64
>>546
大概の実装はlistのsizeは定数時間になっていると思うが

549:デフォルトの名無しさん
12/02/06 11:33:49.80
>>548
それとこれとは関係ない。

550:デフォルトの名無しさん
12/02/07 16:30:45.59
while(true){
int a = 1;
cout << a << endl;
a = 2;
}

whileブロック内で変数を定義したらどんなもんかとこれを試してみたら
無限に1が出力されました。初期化って一度だけかな?と思ったけど
この結果ということは、これは一回のループごとに毎回変数が定義されてる
ということですか?auto変数の確保→破棄を延々と繰り返すみたいな。
だとするとwhileブロックの外で定義した場合に比べて効率が悪いのですか?

551:デフォルトの名無しさん
12/02/07 16:33:50.32
>>550
気にするほどの差はないだろ。最適化される。
使うときに明示的に定義した方が速いこともある。
長期間使用され続ける物は、CPUキャッシュに入りにくくなる可能性がある。

552:デフォルトの名無しさん
12/02/07 16:39:03.86
レスどうもです。
たいした差はないということですが、プログラミング作法としても
whileブロック内での変数定義ってあたりまえのように使われるの
でしょうか(初期化のあるなしに関わらず)。

553:デフォルトの名無しさん
12/02/07 16:45:50.33
あたりまえのように使われる

554:デフォルトの名無しさん
12/02/07 16:46:57.81
そうですか、ありがとうございました。

555:デフォルトの名無しさん
12/02/07 19:00:20.48
while(true)
{
 std::vector<int> tmp(1000);
}
とかなら考え直したほうがいいな

556:デフォルトの名無しさん
12/02/07 19:06:36.55
while(true) {
static std::vector<int> tmp(1000);
}

つまりこういうことですね?

557:デフォルトの名無しさん
12/02/07 23:25:52.31
変数の生存が長く使われないほど
CPUキャッシュ ⇒ メモリ ⇒ HDD と配置が格下げされる。
HDDまでいったら値を読み込むのに時間食う。
新規に生成したほうが得。
メモリにあったとしてもそれを読み込むよりL1キャッシュに新規に生成した方が速いだろう。

558:デフォルトの名無しさん
12/02/08 01:45:33.96
>>557
キャッシュミスより生成コストのが普通に高いと思うけど、
そんな事ありえるの?

559:デフォルトの名無しさん
12/02/08 03:11:26.31
プリフェッチも考慮するとキャッシュミス自体それほど起こるかどうか

560:デフォルトの名無しさん
12/02/08 08:25:58.69
そもそも、ローカル変数なら同じコードに落ちる可能性が高い。
つまり、関数突入時にスタックポインタを移動するだけ。

561:デフォルトの名無しさん
12/02/08 08:58:10.22
そういうくだらない最適化は最後の最後にしろ

562:デフォルトの名無しさん
12/02/12 18:45:29.51
クラスメンバ関数の宣言と定義を分けるときにinline化したい場合は
宣言か定義のどちらかにinlineが入っていればOKですか?
それとも両方書かないとだめですか?


563:デフォルトの名無しさん
12/02/12 22:11:37.43
int a[4];
があったとして、
もしa[0],a[1],a[2],a[3]全てが0だったら、という条件式は
if(a[0]=0 && a[1]=0 &&a[2]=0 &&a[3]=0)
以外に表せますか?
なんかもっとスマートに書けたりできますか?

564:デフォルトの名無しさん
12/02/12 22:22:55.93
if(a[0]|a[1]|a[2]|a[3])
スマートかどうかは知らん

565:デフォルトの名無しさん
12/02/12 22:25:24.66
そもそもそれ代入やん

566:デフォルトの名無しさん
12/02/12 22:27:17.51
ひっかけ乙だったのかw > 565

567:デフォルトの名無しさん
12/02/12 22:37:50.98
if(a[0]=a[1]=a[2]=a[3]==0)
とかだめだったっけ

568:デフォルトの名無しさん
12/02/12 22:52:52.39
中身ぶっこわしてもいいのならアリ・・・か?

569:デフォルトの名無しさん
12/02/12 23:27:14.24
>>563
int i;
for(i=0; i<4; i++) if(a[i] != 0) break;
if(i == 4) {
    //全て0のときの処理
}

570:デフォルトの名無しさん
12/02/13 00:26:09.73
intが32bitで128bitレジスタがあったら
if (*(int128*)a != 0)

571:デフォルトの名無しさん
12/02/13 08:16:17.69
if( a[0]*a[0] + a[1]*a[1] + a[2]*a[2] + a[3]*a[3] == 0 )

572:デフォルトの名無しさん
12/02/13 08:23:37.82
if(a[0] || a[1] || a[2] || a[3]) {
; /* なにもしない */
} else {

}

573:デフォルトの名無しさん
12/02/13 12:38:17.22
>>562
宣言にinlineは、書いても書かなくてもinlineじゃないか?

定義はinlineにしたいならヘッダに書くべきだし、
ヘッダに書くとして複数includeする場合は、
inlineを書かないといけない。

1ファイルでしか使わない場合はシラネ

574:デフォルトの名無しさん
12/02/13 14:12:45.40
テンプレート関数xxxにfuncを渡すときには自動的にTとUが設定されるのに
テンプレートクラスyyyにfuncを渡すときには、自分でTとUを指定しなければなりません。
この違いはなんなのでしょうか?
環境は gcc version 4.6.1 です。


template<class T, class U>
void xxx( T (*func)(U) )
{ }


template<class T, class U>
class yyy
{
 private:
  T (*f_)(U);
 public:
  yyy( T (*f)(U) ): f_(f){ }
};


double func( int v ){ return (double)v*0.1; }

int main( )
{
 xxx( func );
 //yyy obj( &func ); //templateの型を指定しないとコンパイルエラー
 yyy<double,int> obj;

return 0;
}


575:デフォルトの名無しさん
12/02/13 18:30:09.86
>>574
関数は型推論してくれるが、クラスはしてくれない決まりだから

576:574
12/02/13 22:46:09.01
>>575
ありがとうございます。

std::mem_fun_refとその内部で呼んでいるstd::mem_fun_ref_t
との関係がイマイチわからなかったので色々試していたところでした。
テンプレート関数のstd::mem_fun_refで型推論して、
テンプレートクラスのstd::mem_fun_ref_tに伝えているのですね。

577:デフォルトの名無しさん
12/02/15 12:40:26.78
こういう命名ってC++では合法ですか?

namespace _hoge {
struct _fuga {
void _func(void);
};
}

578:デフォルトの名無しさん
12/02/15 13:02:26.24
>>577
×namespace _hoge {
○struct _fuga {
○void _func(void);
先頭にアンダースコアはオススメしない

579:デフォルトの名無しさん
12/02/15 19:47:17.24
これってどういう意味でだめなんだっけ?
> ×namespace _hoge {

ネームスペース名って先頭アンダースコアだめなんだっけ?


580:デフォルトの名無しさん
12/02/15 20:04:49.94
>>579
グローバルスコープが禁止

581:デフォルトの名無しさん
12/02/15 20:43:27.29
どうもです。
じゃあ入れ子になってれば可能なんですな。

582:デフォルトの名無しさん
12/02/21 12:57:48.48
文字列の配列を10個用意して最初の文字列にstrcpyでデータをコピーしたいのですがエラーになってしまいます

char* p[10];
p[0] = "Spring";
strcpy(p[0],"Summer");

一体どこをどう直せばよいのでしょうか?

583:デフォルトの名無しさん
12/02/21 13:03:26.26
std::string p[10];

p[0] = "Spring";
p[0] = "Summer";

584:582
12/02/21 13:45:23.18
ありがとうございます、string型でやってみます。
ちなみにstrcpyを使うのは間違いなのでしょうか?
何が間違いなのかよく分からないのです



585:デフォルトの名無しさん
12/02/21 13:51:30.39
メモリについてもう少し勉強しなさい

586:582
12/02/21 13:55:37.67
分かりました、もう少し勉強します

587:デフォルトの名無しさん
12/02/21 15:28:01.01
浮動小数の比較で

a=1.0;
b=1.0;
if ( a <= b )

みたいにするのは、やめたほうがいいですか?
a=1.0 とすると実際は a=1.00000000001 みたいになってて <= の評価が
うまくいかない可能性を危惧しています。とりあえず今のところ問題なさそうなんですが。
Fortranやってたときは、よくこんなふうにやってました。

eps=1e-30;
a=1.0-eps;
b=1.0;
if ( a <= b )

588:デフォルトの名無しさん
12/02/21 15:30:17.33
場合による

589:デフォルトの名無しさん
12/02/21 15:45:14.64
問題出るまでそのまま使っとけ。
問題あったら任意精度や整数計算へおきかえればいい。
精度が64、128ビットと固定されていればどれだけビット数上げても誤差が出る。
その初めに引いとくのは駄目だろ。もしaが負の方向へ小さかったら間違える。

590:デフォルトの名無しさん
12/02/21 23:19:04.96
一致じゃなくて大小関係なんだろ?
単に if( b > a) でいいのでは…
一致が必要なときは、確かに、EPSILON系の定数を使うけど。


591:デフォルトの名無しさん
12/02/21 23:29:00.68
厳密には大小でもダメだよ
計算機上の値では0 < xが真になる場合でも真値では0 < xが成立しない事は普通にある

592:デフォルトの名無しさん
12/02/25 17:10:03.20
vector<bool>に限らず特殊化されたテンプレートクラスを
特殊化しないで使いたい場合はどうすればいいんですか?

593:デフォルトの名無しさん
12/02/25 17:36:17.81
そんなことはできない

594:デフォルトの名無しさん
12/02/26 03:37:46.38
具体的に何がしたいんだろう、ちょっと読めない

595:デフォルトの名無しさん
12/02/26 05:19:34.45
hoge<bool> という特殊化されたオリジナルのテンプレートがあって、
それを、hoge<int>でも使いたいとか、そういうことかな?

他はまったく思いつかない。


596:デフォルトの名無しさん
12/02/26 07:25:45.13
何でそうしたいか理由が全く分からん。やるならメンバにboolだけ持たせた構造体を定義してそれを渡すとか?

597:デフォルトの名無しさん
12/02/26 13:27:55.80
最適化などのために特殊化されてるけど
他のコードと互換性がなくて仕方なく非特殊化バージョンを使いたいなーということはあるでしょ
bool参照しか受け取らない関数にvector<bool>の要素渡せないとか


598:デフォルトの名無しさん
12/02/26 16:53:20.32
質問させていただきます。PGを書く問題ではないのですが、
「ソートプログラムとデータ構造について
具体的なソートプログラムの名前をあげ、
とのようなデータ構造(配列、単方向リスト、双方向リスト、循環リストなど)が
なぜ適しているか述べろ。

が分かりません!教えてください

599:デフォルトの名無しさん
12/02/26 17:39:01.94
丸投げは宿題スレ行け

600:デフォルトの名無しさん
12/02/27 00:31:23.68
これは簡単なようでいて、こういうのに強くないと解けない 宿題スレが適当

601:デフォルトの名無しさん
12/02/27 10:11:12.67
宿題スレでも扱いが酷いな。テンプレ無視だからしょうがないけど

まずソートの種類を調べるくらいは自分で出来るんじゃない?
それからそのソートに適したデータ構造と理由を聞けば…

ところで循環リストが適してるソートなんてあったっけ?

602:デフォルトの名無しさん
12/02/27 11:07:15.84
循環ソート

603:デフォルトの名無しさん
12/03/16 00:20:56.14
c++ってchar使うの?
文字列はstringを必ず使うべきなの?

604:デフォルトの名無しさん
12/03/16 00:33:04.28
stringはcharがもとになっている。資源の無駄を減らすならchar

605:デフォルトの名無しさん
12/03/16 07:49:56.89
純粋に高級言語として使うなら「1文字の文字」を扱うときぐらいだが
C++には高級アセンブラたるC言語の後継としての役割もあるから無いと困る
組み込み系はもちろんだし、そうでなくてもAPIとかはchar[]ベースだったりする

606:デフォルトの名無しさん
12/03/17 12:18:11.06
charを要求するライブラリを呼ぶ限り、charは不滅
もちろん、charを極力廃すような書き方をすることは可能だろう

607:デフォルトの名無しさん
12/03/18 20:24:47.88
C++のステートパターンの骨組みというか
サンプルプログラムを教えてください。

608:デフォルトの名無しさん
12/03/18 23:02:30.36
>>607
URLリンク(www.google.co.jp)

609:デフォルトの名無しさん
12/03/19 00:00:49.96
struct A{
  int a;
  struct B{
    static int& a;
  };
  int f(){
    a = 10;
    B::a = a;
  }
};
int main(void){
  A a;
  a.f();
}
で,
undefined reference to `A::B::a'
とエラーが出ます.
どうやって回避すればいいのでしょうか.

610:デフォルトの名無しさん
12/03/19 00:08:44.64
>>609
そもそも、なんで構造体の中から外を知ることができると思い込んだの?

611:デフォルトの名無しさん
12/03/19 00:27:02.08
>>610
確かに言われて見れば・・・
とりあえず構造体のネストを消すように作り直してみます.

612:デフォルトの名無しさん
12/03/19 01:24:49.10
>>609
参照は定義時に初期化しなければならない。まあやりたかったこととは違うだろうが。

struct A {
 int a;
 struct B {
  static int& a;
 };
 int f(){
  a = 10;
  B::a = a;
  return 0;
 }
};

A x;
int & A::B::a = x.a;

int main(void){
 A a;
 a.f();
}

613:デフォルトの名無しさん
12/03/19 21:24:25.17
C++のステートパターンの骨組みというか
サンプルプログラムを教えてください。

614:デフォルトの名無しさん
12/03/19 21:26:51.56
>>613
>>608

615:デフォルトの名無しさん
12/03/19 22:15:48.44
>>613
URLリンク(codepad.org)
概念を理解できてれば多言語のソースでもなんとなく読めるはずだがな

616:デフォルトの名無しさん
12/03/19 22:48:35.81
>>615
本質的なところじゃないけど、deleteしようぜ

617:デフォルトの名無しさん
12/03/24 13:51:17.47
構造体内部に関数って入れられるんだっけ?

618:デフォルトの名無しさん
12/03/24 14:14:55.96
C++だからstructで定義するものもクラス

619:デフォルトの名無しさん
12/03/26 20:12:58.72
C++だとunionもクラスなの?

620:デフォルトの名無しさん
12/03/26 20:42:27.78
ポリモルフィズムの概念がない

621:営利利用に関するLR審議中@詳細は自治スレへ
12/03/31 15:29:17.65
ポインターについて質問です。

*p++

>この文では最初にp をインクリメントし、次に新しいメモリアドレスにある
>値を得ます。

と、いう説明がありますが、"次に新しいメモリアドレスにある値" の意味が
わかりません。 仮にp に格納されているアドレスが100番地 だったとすると、
それが+1(char の場合) されて101 となるだけではないのでしょうか。

622:営利利用に関するLR審議中@詳細は自治スレへ
12/03/31 15:54:39.35
>>621
いいえ違います

623:営利利用に関するLR審議中@詳細は自治スレへ
12/03/31 17:00:17.86
>"次に新しいメモリアドレスにある値"
その例では、101にある値。

624:営利利用に関するLR審議中@詳細は自治スレへ
12/03/31 17:02:07.88
>>622
ではどういう動作をするのでしょうか。詳しくお願いします。

625:営利利用に関するLR審議中@詳細は自治スレへ
12/03/31 17:13:32.58
>>623
なんとなくわかりましたが、101番地にある値が"得られる" というのが
いまいちしっくり来ません。 ひょっとしてこれは、ポインターが+1 されて、
それ以降、そのポインターを使ったときは、101 番地のデータが読める、
という意味で"得られる" と書かれたものだと解釈してよいでしょうか。

626:営利利用に関するLR審議中@詳細は自治スレへ
12/03/31 17:30:40.63
>>625
演算子の優先順位が
 後置インクリメント(++) >> 前置インクリメント(++) >> 間接参照(*) >> 乗算(*)

この場合は
 *p++ = *(p++)

メモリ内容が以下だとすると
ADDRESS VALUE
0x00401000 0x0123
0x00401004 0x0456
0x00401008 0x0789
0x0040100C 0x0ABC

DWORD* p
p = 0x00401004   *p は 0x0456
p++
p = 0x00401008   *p は 0x0789

627:営利利用に関するLR審議中@詳細は自治スレへ
12/03/31 17:33:49.60
あ、最後のp = 0x00401008
の "=" は代入じゃなくて p が指す物を示す

628:営利利用に関するLR審議中@詳細は自治スレへ
12/03/31 19:02:19.38
>>626
具体的な例を挙げてくださり、ありがとうございます。
演算子の優先順位を忘れていました。カッコをつけるとわかりやすいですね。

ただ、残念ながらおっしゃっている事がまだ理解できません。
*p++ ・・・この文が、何かの変数や関数への代入文に使われているのなら、
「ポインターを+1 されたアドレスのデータを何かに代入しているんだな」 と
思えるのですが、参照している教科書には *p++ とだけしか書かれておらず、
何かに代入しているわけではないのです。
だったら * は不要で、 p++ だけでいいのでは? と思います。

ど素人の低レベルな質問で意味不明かもしれませんが、なにかヒントを下さい。

629:営利利用に関するLR審議中@詳細は自治スレへ
12/03/31 19:07:33.60
>>628
前後のコードもしくは文章plz

630:営利利用に関するLR審議中@詳細は自治スレへ
12/03/31 19:21:45.24
>>629
独習C から、該当部分を引用します。

>ポインタそのものに対してだけでなく、ポインタが指しているオブジェクトに
>対してもインクリメント演算子やデクリメント演算子を使用する事ができます。
>しかし、ポインタが指しているオブジェクトをインクリメントしようとするときには
>注意してください。 例えば、値1 の整数を指しているp があるとします。
>次の文を実行するとどうなるでしょうか。
>
> *p++
>
>予想は当たったでしょうか。この文では最初にp をインクリメントし、次に
>新しいメモリアドレスにある値を得ます。ポインタが指しているものを
>インクリメントするためには、次のような式を使わなければなりません。
>
> (*p)++
>
>かっこをこのように使うことによってp が指している値をインクリメントすることが
>できます。
>また、関係演算子を用いれば、2つのポインタの値を比較する事ができます。
>もちろん、ポインタの比較は、それが相互に関連している、つまり、同じ型の
>オブジェクトを指しているような場合に、初めて意味を持ちます。

以上該当部分です。何か重要な情報がありますでしょうか。

631:営利利用に関するLR審議中@詳細は自治スレへ
12/03/31 19:35:48.07
>>630
書いてるまんまだろ

参照先をインクリメントしたいときは (*p)++ と書け
*p++ と書いたらポインタ自体をインクリメントすることになる
って言ってるだけ

*p++ のコード自体に筆者の言いたい意味があるわけじゃない

632:営利利用に関するLR審議中@詳細は自治スレへ
12/03/31 21:05:42.47
>>631
>*p++ のコード自体に筆者の言いたい意味があるわけじゃない

なるほど。ここまで読み進めてきて、はしょった表現がなかったものですから、
勘違いしていたようです。 どうもありがとうございました。

633:営利利用に関するLR審議中@詳細は自治スレへ
12/03/31 21:10:08.38
*p++ って、もはや定型的な書き方なのさ。

634:営利利用に関するLR審議中@詳細は自治スレへ
12/03/31 22:44:18.36
>>630
>> *p++
>>
>>予想は当たったでしょうか。この文では最初にp をインクリメントし、次に
>>新しいメモリアドレスにある値を得ます。

「インクリメント前のメモリアドレスにある値を得た後、pをインクリメントする。」だろ?

635:営利利用に関するLR審議中@詳細は自治スレへ
12/04/01 18:34:04.05
なんだか勘違いしそうな説明が続いてるなw

例えば、
int a[4] = { 0,1,2,3 };
int* p = a;

int n = *p++;
int m = *(p++);

ってすると、n = 0, m = 1 になるんだぜ。
上の説明だけでは納得できないだろ?w



636:営利利用に関するLR審議中@詳細は自治スレへ
12/04/01 19:22:47.06
>>635
いや、大体わかったつもりです。

int n = *p++
// 配列a の先頭番地のデータ(0) をn に代入し、その後インクリメントされる。

int m = *(p++)
// p は+2 されているので、データ(1) がm に代入され、その後インクリメント。

これらの文が処理された後、p はデータ(2) の番地を指している。

・・こういう解釈であっていますよね。

637:営利利用に関するLR審議中@詳細は自治スレへ
12/04/01 19:32:19.53
>>636
nもmも式評価のときは*pで++は*よりも優先順位が高いから
結合するのはどちらもpだけってことだろ?

638:営利利用に関するLR審議中@詳細は自治スレへ
12/04/01 19:42:30.17
>637
すいません、本当に素人で、釣りをしているわけではありません。
直球ど真ん中のマジレスでお願いします。
そこであえて質問ですが、"結合" とは、この場合どういう意味でしょうか。

639:営利利用に関するLR審議中@詳細は自治スレへ
12/04/01 19:44:20.68
疑問に思ったところは6章のポインタで
>>636のいいたいインクリメントについては2章制御文その1でやってるから大丈夫だろ
ってかインデックス見ようと翔泳社見たら独習C絶版なのな
独習C++ってC読んでること前提で書かれてなかったっけ?

640:営利利用に関するLR審議中@詳細は自治スレへ
12/04/01 19:57:11.02
>>638
その演算子がある項に作用すること

後置インクリメント++の場合、単項演算子で結合性は右から左
また優先順位は参照演算子*よりも高いので
この場合(*p++)は++の左にある単項、pに作用する
後置インクリメントは評価後にインクリメントされるので
この式(*p++)自体の結果は*p

これでいい?

641:営利利用に関するLR審議中@詳細は自治スレへ
12/04/01 20:49:01.75
>>640
160km/h のストライク。よくわかりました。今後ともよろしくお願いします。

642:営利利用に関するLR審議中@詳細は自治スレへ
12/04/01 20:54:47.31
>>639
いや、絶版じゃないだろう・・・・・第3版のことか?
URLリンク(books.shoeisha.co.jp)

独習C++が独習Cを読んでいる(C言語は既習である)ことを前提に書かれているのはその通り。

643:営利利用に関するLR審議中@詳細は自治スレへ
12/04/01 21:02:35.80
>>642
おおスマン
見落としていた

644:営利利用に関するLR審議中@詳細は自治スレへ
12/04/02 03:19:18.51
昨日からC言語始めたプログラム初心者です

四捨五入のプログラムで
例えば1.666を第3位で四捨五入すると1.670000って表示されるんだけど
これを1.67と表示させるにはどうやったらできますか?

645:営利利用に関するLR審議中@詳細は自治スレへ
12/04/02 03:24:44.66
printf("%.2f",1.67);

646:営利利用に関するLR審議中@詳細は自治スレへ
12/04/02 03:49:55.45
>>645
サンクス

647:営利利用に関するLR審議中@詳細は自治スレへ
12/04/02 20:05:15.76
>>644
つ[ "%g"]

648:営利利用に関するLR審議中@詳細は自治スレへ
12/04/05 17:20:56.61
CLRのコンソールのメイン関数って、Microsoft独自のモノですか?
それとも、C++の新規格のメイン関数なのですか?

#include "stdafx.h"

using namespace System;

int main(array<System::String ^> ^args)
{
Console::WriteLine(L"Hello World");
return 0;
}


649:営利利用に関するLR審議中@詳細は自治スレへ
12/04/05 18:25:56.69
>>648
該当スレできけば?
くだすれC++/CLI(初心者用)part2
スレリンク(tech板)

650:営利利用に関するLR審議中@詳細は自治スレへ
12/04/05 18:34:32.79
>>648
そもそもnamespace Systemなんて標準のC++にはないよ。

651:営利利用に関するLR審議中@詳細は自治スレへ
12/04/05 18:50:39.50
CLIで探せばよかったのですね。Thanx!

652:営利利用に関するLR審議中@詳細は自治スレへ
12/04/05 20:26:16.99
c++簡易ブラウザーを作りたい
boost::asioでソケット周りできた。クッキーも仕様書みながらある程度できた。
javascriptはECMAScriptと戦わないとだめなのか?

653:営利利用に関するLR審議中@詳細は自治スレへ
12/04/05 20:41:16.75
モジラやググールのを使え

654:営利利用に関するLR審議中@詳細は自治スレへ
12/04/05 21:04:59.82
V8が面白そうだ。先は長いな…

655:営利利用に関するLR審議中@詳細は自治スレへ
12/04/06 00:36:28.03
DOMをやるのかやらないのかでだいぶ違う
ブラウザの進化の過程をたどるか、あるいは新発想のアーキテクチャでいくか。
ある程度の完成物を狙うなら、いったん、V8なり、JSCなりを呼ぶ実装がいい
そもそも、JavaScriptエンジンのインタフェース自体から、学ぶ点がある

656:営利利用に関するLR審議中@詳細は自治スレへ
12/04/06 16:48:33.44
ECMAScript - Wikipedia
URLリンク(ja.wikipedia.org)



657:デフォルトの名無しさん
12/04/14 15:40:27.10
int a=ランダム値;
bool flag;
if(a==1 || a==42 || a==145)flag=true;

↑こんな感じのことをやりたいんですが、
(a==1 || a==42 || a==145) ←ここのとこを簡単に書く方法ってないですかね?
例えば
(a==(1 || 42 || 145)) みたいな。(これじゃ当然無理ですけど)

何か方法があれば教えて下さい。よろしくお願いします。


658:デフォルトの名無しさん
12/04/14 15:46:14.83
bool check(int const a)
{
static const int checkers[] = {1, 42, 145};
for (int ic = 0; ic < sizeof(checkers) ? sizeof(* checkers); ++ic) {
if (a == checkers[ic]) return true;
}
return false;
}

bool flag = check(a);

659:デフォルトの名無しさん
12/04/14 22:09:09.10
最終的に吐き出されるバイナリが、結局、
(a==1 || a==42 || a==145) みたいなことになるんだろうから、
(a==1 || a==42 || a==145) で十分に簡潔と言えるんじゃなかろうか。

もちろん、そんなクジみたいな抽選をやたらとあちこちで実行してるなら、
全体的に読みやすいように、書き様はあると思うが。マクロとかで。

660:デフォルトの名無しさん
12/04/14 22:10:54.95
こうなら書けるな 発想の転換の一助になれば。

flag=false;
select(i){
case 1: case 42: case 145: flag=true;
}

661:デフォルトの名無しさん
12/04/14 22:25:07.23
<< とか使う

662:デフォルトの名無しさん
12/04/14 23:48:08.59
bool operator,(~)とか使う

663:デフォルトの名無しさん
12/04/15 00:10:01.79
bool f(int a){
struct ck{ck(int a):v(a),t(false){}ck&operator,(int a){t=t||a==v;return*this;}operator bool(){return t;}int v;bool t;};

return ck(a),1,25,142; }

664:デフォルトの名無しさん
12/04/15 00:23:45.95
可変長引数でチェック関数作るとか

665:デフォルトの名無しさん
12/04/15 08:09:44.01
flag = (a==1 || a==42 || a==145);
が、一番シンプルに見えるわけだがw

666:デフォルトの名無しさん
12/04/15 14:31:40.48
Perl6のJunctions風の何かを作るといいのかな

667:デフォルトの名無しさん
12/04/15 21:22:35.70
D言語のlazy 相当の機能が有ればなあ

668:543
12/04/18 22:11:53.62
0~999の番号を10000の要素にランダムに割り当てるときに
各番号が10回ずつ(各番号が同じ回数という意味で)出てくるように割り振りたいのですが
なにかいい方法ありませんか?

669:デフォルトの名無しさん
12/04/18 22:16:13.58
vectorに突っ込んでrandom_shuffle

670:デフォルトの名無しさん
12/04/18 22:20:46.95
>>669
そのような関数があったんですね。勉強になります!
ありがとうございました。

671:デフォルトの名無しさん
12/04/18 22:28:39.71
質問です
C言語でマイクから入力した音声を送信する方法
もしくはマイクから入力された音声がどこに保存されているかを教えてください


672:デフォルトの名無しさん
12/04/18 22:43:31.86
環境も書かずになんて間抜けな質問を……

673:デフォルトの名無しさん
12/04/18 23:00:22.03
失礼しました
環境はbcpadです

674:デフォルトの名無しさん
12/04/19 00:00:32.77
WindowsならmmsystemだからWin32APIスレで聞いた方がいいだろ

675:デフォルトの名無しさん
12/04/19 06:51:33.03
>>674
情報ありがとうございます!

676:デフォルトの名無しさん
12/04/19 14:52:44.05
コマンド・ライン引数でargc と argv というのが伝統的に使われている
そうですが、それぞれの語源(何の略) か、教えてください。

677:デフォルトの名無しさん
12/04/19 15:05:36.01
argument count value

678:デフォルトの名無しさん
12/04/19 15:26:44.81
>>677
ありがとうございます!


679:デフォルトの名無しさん
12/04/19 21:37:51.52
VC++をつかってC言語でLifeGameを書こうとしてみたのですが、

680:デフォルトの名無しさん
12/04/20 01:33:52.49
セルがモニタから飛び出して勝手に増殖し出してしまって、

681:デフォルトの名無しさん
12/04/20 02:54:49.21
|....,,__
|_::;; ~"'ヽ
| //^''ヽ,,)
|  i⌒"
| ∀`) < 誰もいない きのこるならいまのうち
|⊂
| ノ
      _,,,......,,__
  /_~ ,,...:::_::;; ~"'ヽ
 (,, '"ヾヽ  i|i //^''ヽ,,)
   ^ :'⌒i    i⌒"
      |( ´∀`) < きのこ のこーのこ げんきのこ ♪
      |(ノ   |つ
      |     |
     ⊂ _ ノ
       ""U
      _,,,......,,__
  /_~ ,,...:::_::;; ~"'ヽ
 (,, '"ヾヽ  i|i //^''ヽ,,)
   ^ :'⌒i    i⌒"
     (´∀` )| < エリンギ まいたけ ブナシメジ ♪
    ⊂|  (ノ |
      |     |
      ヽ _ ⊃
      .U""
|
| ミ
| ミ  サッ!
| ミ
|

682:デフォルトの名無しさん
12/04/20 03:00:54.75
罠を張って待っていることも知らずに、

↑なーんてなことを書き出してしまって、

683:デフォルトの名無しさん
12/04/20 04:06:50.55
【そりゃないよドコモさん】ドコモが日本通信に提訴された経緯
URLリンク(weekly.ascii.jp)
 ドコモは「必要な費用」と説明したとのことですが、その費用はそもそも算定式に含まれているはず、
というのが日本通信側の主張です。
 このため日本通信が差額の支払いを一時停止したところ、ドコモ側は「接続を切断する」と回答。
結果、ユーザーへの影響を考慮して、日本通信側はドコモ側の要求どおりの支払いを続けている、
というのが今の状況です。

684:デフォルトの名無しさん
12/04/24 06:23:00.54
宿題で出されたこの問題が分からないのですが、誰か教えてくれませんか。

1~9までの連続する数字の間に和・差・積の演算子(+, -, *)を適当に入れて、
式の値がちょうど 100 となる例を挙げよ(10とおりだけ書け)。

たとえば、
 1 + 2 * 3 * 4 * 5 + 6 * 7 - 8 * 9 = 91
というような計算をする。ただし、この例では式の値が91となるので答えではない。

685:デフォルトの名無しさん
12/04/24 06:33:39.44
このスレに何の関係が

686:デフォルトの名無しさん
12/04/24 06:35:50.34
ごめんなさい、宿題スレに書き直してくるので無視してください

687:デフォルトの名無しさん
12/04/24 06:55:17.27
eval() を実装しろという問題だな

webサービスを呼ぶ、でもいい

688:デフォルトの名無しさん
12/04/25 00:26:53.55
csvのデータを読み込み、このデータセットの平均値Ave を求めて
標準出力するCプログラムを書きたいのですがどうすればいいですか?

689:デフォルトの名無しさん
12/04/25 00:36:54.63
まず深呼吸します

690:デフォルトの名無しさん
12/04/25 07:58:46.21
宿題レベルの質問に見えるが、csvに何が詰まってるかによるな(22,2Cの扱い)。

出題者が、データはこれな。って言ってきてないか。

691:デフォルトの名無しさん
12/04/25 14:26:18.67
図書館でプログラミング作法を借りてくる

692:デフォルトの名無しさん
12/04/25 16:16:06.77
C言語で、できるだけ簡単な文法だけを用いて、「ある数列から重複している値があれば取り出す」という関数を作りたいのですが、どうすればいいのですか?

693:デフォルトの名無しさん
12/04/25 16:36:07.14
>>692
数列は長いか?(数万件)
数値範囲が予測できるか?
範囲が狭いか?(1~10など)
小数点以下も必要か?
で方法が違う。

694:デフォルトの名無しさん
12/04/25 16:38:59.09
>>692
CSTLのsetを使う


695:デフォルトの名無しさん
12/04/25 16:52:07.30
回答ありがとうございます。

数列は、int型で自由に入力したものになるので、長くなる可能性があります。
値の範囲は予測できません。
小数点は利用しません。

696:デフォルトの名無しさん
12/04/25 17:24:24.59
要はエスパー待ちて事だな。

697:デフォルトの名無しさん
12/04/25 17:26:40.06
>>692
「重複している値があれば取り出す」とあるが、例えば「1,1,1,1,1」という数列があったとき、
1は1回だけ取り出されるのか、それとも4回取り出されるのか。

698:デフォルトの名無しさん
12/04/25 18:08:25.02
どっちでもいいじゃん

for (i=0; i<N; ++i) {
IntSet_insert(tmp, data[i], &success);
if (!success) {
IntSet_insert(s, data[i], NULL); //1回だけの場合
IntList_push_back(l, data[i]); //複数回の場合
}
}

699:デフォルトの名無しさん
12/04/25 18:21:15.51
取り出すってどういうことを言ってるんだろうか

700:デフォルトの名無しさん
12/04/25 18:33:23.57
>>699
日本語の問題だな。
取り出す→Action
抽出、除外→Process

701:デフォルトの名無しさん
12/04/25 18:46:10.92
配列から取り出して元の配列の要素数を減らすのか、取り出したものを別の配列に入れて再利用するのか


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch