C++相談室 part85
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2010/10/09(土) 20:22:35ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。
前スレ
C++相談室 part84
http://hibari.2ch.net/test/read.cgi/tech/1284736187/
0175デフォルトの名無しさん
2010/10/15(金) 16:39:140176デフォルトの名無しさん
2010/10/15(金) 17:03:380177デフォルトの名無しさん
2010/10/15(金) 17:13:360178デフォルトの名無しさん
2010/10/15(金) 17:23:400179デフォルトの名無しさん
2010/10/15(金) 17:25:300180デフォルトの名無しさん
2010/10/15(金) 17:50:000181デフォルトの名無しさん
2010/10/15(金) 20:40:46assert( false && "message" );
で"message"も表示してくれるよね
0182デフォルトの名無しさん
2010/10/15(金) 20:53:320183デフォルトの名無しさん
2010/10/15(金) 20:55:420184デフォルトの名無しさん
2010/10/15(金) 20:56:51C++の仕様の話をしているんじゃねぇの?
0185デフォルトの名無しさん
2010/10/15(金) 21:05:530186デフォルトの名無しさん
2010/10/15(金) 22:04:030187デフォルトの名無しさん
2010/10/16(土) 01:18:090188デフォルトの名無しさん
2010/10/16(土) 04:45:18標準はNDEBUGだけかと思ってたが
0189デフォルトの名無しさん
2010/10/16(土) 20:03:460190デフォルトの名無しさん
2010/10/16(土) 20:11:180191デフォルトの名無しさん
2010/10/16(土) 23:20:560192デフォルトの名無しさん
2010/10/16(土) 23:43:310193デフォルトの名無しさん
2010/10/17(日) 00:38:290194デフォルトの名無しさん
2010/10/17(日) 00:56:10マクロも全部展開することで
コンパイルがわずかに早くなるよ。
人間には検出不可能だけど。
0195デフォルトの名無しさん
2010/10/17(日) 01:00:470197デフォルトの名無しさん
2010/10/17(日) 01:08:390198デフォルトの名無しさん
2010/10/17(日) 01:11:08class hoge
{ // hoge class
public:
hoge(){}
};
こんな風に中括弧とスコープ内部が同じ深さになってて更にネストが加わるとどんどんわかりにくく
0199デフォルトの名無しさん
2010/10/17(日) 01:19:250200デフォルトの名無しさん
2010/10/17(日) 01:20:41エディタのタブ幅設定が違うだけかと
0201デフォルトの名無しさん
2010/10/17(日) 01:22:300202デフォルトの名無しさん
2010/10/17(日) 01:32:190203デフォルトの名無しさん
2010/10/17(日) 01:32:46さすがの俺もスペースとタブを見間違えませんよw
>>199,201
え、STLって書き換えていいもんなんですか?
それ以前になんかファイルに読み取り専用設定がされています
あと別に書き換え云々じゃなくてMS(が作ったんですか?)が
こういう風にしてるからには一つの有名な流儀なのかなと思いまして
0204デフォルトの名無しさん
2010/10/17(日) 01:33:310205デフォルトの名無しさん
2010/10/17(日) 01:39:260206デフォルトの名無しさん
2010/10/17(日) 01:43:34スタイルに興味あったらこれとか眺めてみるといいかも
ttp://astyle.sourceforge.net/astyle.html#_Predefined_Style_Options
0207デフォルトの名無しさん
2010/10/17(日) 01:50:31どうもありがとう、なんだか凄く歴史がありそうな書き方なんですね
>>206
どうもです、自分でもスタイルに関して少し思うところがあったので読んでみます
0208デフォルトの名無しさん
2010/10/17(日) 16:03:12普通の職場じゃ一般的じゃないフォーマットだよな
0209デフォルトの名無しさん
2010/10/17(日) 16:13:44#ifndef __FILE_H_INCLUDED__
#define __FILE_H_INCLUDED__
#include<stdio.h>
class CFile{
0210デフォルトの名無しさん
2010/10/17(日) 16:16:14class CFile{
//メンバ変数
private:
FILE *m_pfile; //ファイル
・・・・・・
このclass CFile と書いてある所で宣言の構文エラーがあるようなんですが、よくわかりません。
エラー E2141 File.h 6: 宣言の構文エラー
http://www7b.biglobe.ne.jp/~robe/cpphtml/index.html
0211デフォルトの名無しさん
2010/10/17(日) 16:18:080212デフォルトの名無しさん
2010/10/17(日) 16:20:37#define __FILE_H__ENCLUDED__
#include<stdio.h>
class CFile{
//メンバ変数
private:
FILE *m_pfile; //ファイル
bool m_bCopy; //コピーコンストラクタで作られたかどうか
//コンストラクタ・デストラクタ
public:
CFile(); //コンストラクタ
CFile(const CFile& rohter); //コピーコンストラクタ
~CFile(); //デストラクタ
//ファイルの開閉
public:
bool Open(const char *pszFile,const char *pszFlags);
//ファイルを開く
void Close(); //ファイルを閉じる
0213デフォルトの名無しさん
2010/10/17(日) 16:21:18private:
bool ModifyFlags(const char *pszSource,char *pszDest,int nSize);
//フラグの調整
//ファイルの操作
public:
size_t Read(void *pData, seze_t nSize); //ファイルから読みだす
size_t Write(const void *pData,size_t nSize) //ファイルに書き込む
//評価
public:
bool IsValid() const; //m_pfileの値が有効かどうか
bool Eof(); //ファイルの終端に達したかどうか
};
//m_pfileの値が有効かどうか
inline bool CFile::IsValid() const{
return (m_pfile != NULL);
}
#endif
0214デフォルトの名無しさん
2010/10/17(日) 16:22:59size_t Write(const void *pData,size_t nSize); //ファイルに書き込む
0215デフォルトの名無しさん
2010/10/17(日) 16:24:42■C:\c++> bcc32 File.h
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
File.h:
エラー E2141 File.h 6: 宣言の構文エラー
エラー E2141 File.h 40: 宣言の構文エラー
*** 2 errors in Compile ***
0216デフォルトの名無しさん
2010/10/17(日) 16:29:06#define __FILE_H__ENCLUDED__
ここも何か変だな
0217デフォルトの名無しさん
2010/10/17(日) 16:30:440218デフォルトの名無しさん
2010/10/17(日) 16:38:400219デフォルトの名無しさん
2010/10/17(日) 16:41:50class A{};
だけ書いたファイルのコンパイルは通る?
0220デフォルトの名無しさん
2010/10/17(日) 16:43:500221デフォルトの名無しさん
2010/10/17(日) 16:45:07通ってない?
0222デフォルトの名無しさん
2010/10/17(日) 16:45:47■C:\c++> bcc32 classtest.cpp
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
classtest.cpp:
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
Error: 外部シンボル '_main' が未解決(C:\BORLAND\BCC55\LIB\C0X32.OBJ が参照)
0223デフォルトの名無しさん
2010/10/17(日) 16:47:14int main(){
return 0;
}
こう書けば通りますが
0224デフォルトの名無しさん
2010/10/17(日) 17:29:23.cppだったらC++としてコンパイルされてあたりまえ
.hはどうなんだと訊いてるんだ
0225デフォルトの名無しさん
2010/10/17(日) 17:37:27>>223を.cppだとコンパイル出来ましたが、
.hはエラーが発生しました
0226デフォルトの名無しさん
2010/10/17(日) 17:39:160227デフォルトの名無しさん
2010/10/17(日) 17:39:29のかわりに
#include <cstdio>
ではどうですか?
0228デフォルトの名無しさん
2010/10/17(日) 17:41:28マニュアル読めよ
http://docwiki.embarcadero.com/RADStudio/ja/C%2B%2B_%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%83%A9%E3%82%A4%E3%83%B3_%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%A9%EF%BC%9A_BCC32
>拡張子が .CPP のファイルは C++ ファイルとしてコンパイルされます。拡張子が .C のファイル、拡張子のないファイル、および .CPP、.OBJ、.LIB、.ASM 以外の拡張子を持つファイルは、C ファイルとしてコンパイルされます。
0229デフォルトの名無しさん
2010/10/17(日) 23:23:340230デフォルトの名無しさん
2010/10/17(日) 23:39:320231デフォルトの名無しさん
2010/10/17(日) 23:40:370232デフォルトの名無しさん
2010/10/18(月) 10:24:58struct eq_t { bool eq(const T &lhs, const T &rhs) { return (lhs == rhs); } };
というような、比較関数をラップした構造体があり、いくつかの型に対して特殊化したバージョンもあります。
その中に、vector一般に対して部分特殊化した次のようなものがあるのですが、
template <typename T>
struct eq_t<std::vector<T>>
{
bool eq(const std::vector<T> &lhs, const std::vector<T> &rhs)
{
return (lhs.size() == rhs.size() && std::equal(lhs.begin(), lhs.end(), rhs.begin()));
}
};
これをコンテナ一般(というかbegin(), end()を持つクラス)を対象とするにはどうすればいいのでしょうか?
vector::mplあたりに何かありそうか気はするのですが。
0233デフォルトの名無しさん
2010/10/18(月) 12:21:04引数が左辺値か右辺値かによってコピーとムーブを自動的に区別して行う関数と
理解していいんでしょうか。
0234デフォルトの名無しさん
2010/10/18(月) 12:27:47エラー出力はバッファを持たないの意味が分からないのですが。
バッファを持つと持たないとは何が違うのでしょうか?
バッファとは何をするものですか?
0235デフォルトの名無しさん
2010/10/18(月) 12:33:49ディクスファイルや端末、ネットワークへの入出力は低速なので、一定量データを
溜めておいて、一度に行う事で高速化する。これがバッファリング
バッファリングされたデータは適切なタイミングで出力される必要があるが、
エラーが発生してプログラムが異常終了すると出力されない場合がある。
異常終了の場合にこそエラー出力は重要なので、エラー出力はバッファリングしない。
0236デフォルトの名無しさん
2010/10/18(月) 12:42:30forward() をはさまないとぜんぶ左辺値の参照(従来の参照)になっちゃう。
0237デフォルトの名無しさん
2010/10/18(月) 15:05:04例えばAクラスを継承するBクラスというものがあって、
BクラスからはAクラスのconst関数しか呼べないようにするにはどうすればよいでしょうか
(もちろん素のAクラスはいかなるAメンバ関数も使えます)
0238デフォルトの名無しさん
2010/10/18(月) 15:07:500239デフォルトの名無しさん
2010/10/18(月) 15:41:52Aはそのまま使うこともあり、その時にはconst関係なくメンバ関数を使いたいんです
要はAはメンバ変数書き換え関数を持っており、それは(もちろん非const時の)Aとしては普通に使えますが、
継承先Bからはそれを使えないようにしたいんです
Bが継承ではなくメンバ変数としてconst Aを持てば上記のことは出来るんですが
これを継承でする方法はないものかと
0240デフォルトの名無しさん
2010/10/18(月) 15:47:45書き換え関数を持つAを作れば解決じゃね?
0241デフォルトの名無しさん
2010/10/18(月) 15:50:570242デフォルトの名無しさん
2010/10/18(月) 16:22:28どうもありがとうございます
なるほど、クラスを分離して役割を明確にさせるんですね
結構シンプルでいいかもしれない
>>241
それって少なくとも非const関数を全てオーバーロードするんですよね?
ちょっと引数とかの同期が大変そうなので上の方法で検討してみたいと思います
どうもすみません
0243デフォルトの名無しさん
2010/10/18(月) 16:33:110244デフォルトの名無しさん
2010/10/18(月) 17:36:16(´B`)
0245デフォルトの名無しさん
2010/10/18(月) 17:37:29boolをintに詰め込んでintの配列にするのが最も効率的ですか?
0246デフォルトの名無しさん
2010/10/18(月) 17:43:300247デフォルトの名無しさん
2010/10/18(月) 17:56:36メモリ効率的にはそうだけど、実行効率は必ずしもビットがいいとは限らない。
0248デフォルトの名無しさん
2010/10/18(月) 17:59:26じゃあ何が良いの?
0249デフォルトの名無しさん
2010/10/18(月) 18:01:520250デフォルトの名無しさん
2010/10/18(月) 18:03:070251デフォルトの名無しさん
2010/10/18(月) 18:05:180252デフォルトの名無しさん
2010/10/18(月) 18:08:10今時のCPUのキャッシュを考えたら殆ど意味がない。
寧ろ、ビット演算のコストの方が問題。
0253デフォルトの名無しさん
2010/10/18(月) 18:16:210254デフォルトの名無しさん
2010/10/18(月) 18:33:15具体的にどういうコードを書けば効率良くなるんだろう
なるべく変数を減らして使いまわすぐらいしか思い浮かばん
0255デフォルトの名無しさん
2010/10/18(月) 18:41:16キミが思い浮かぶくらいの事はコンパイラが全部知っている。
変数使いまわしは難読性を向上させるだけ。
0256デフォルトの名無しさん
2010/10/18(月) 18:41:17実直なコードを書いて、最適化はコンパイラに任せるのがよい。
0257デフォルトの名無しさん
2010/10/18(月) 18:43:39これってよくできた諺だよな
0258デフォルトの名無しさん
2010/10/18(月) 19:44:52とboostの中の人も言っている。
http://cpp-next.com/archive/2009/08/want-speed-pass-by-value/
0259デフォルトの名無しさん
2010/10/18(月) 20:01:170260デフォルトの名無しさん
2010/10/18(月) 20:04:35フラグを1カ所で管理してるのがおかしい。
0261デフォルトの名無しさん
2010/10/18(月) 20:17:13上から目線であやふやな思い込みを語るのはどうかと思う。
0262デフォルトの名無しさん
2010/10/18(月) 20:33:57なんとなく速くなった遅くなったじゃなくて、ちゃんとプロファイリングするなり
アセンブリ出力を読むなりしないと。
0263デフォルトの名無しさん
2010/10/18(月) 20:34:28ありがとうございました
0264デフォルトの名無しさん
2010/10/18(月) 20:42:27えいごよめねえ
解説を
0265デフォルトの名無しさん
2010/10/18(月) 20:46:23ガテン系に転職した方がいい。
0266デフォルトの名無しさん
2010/10/18(月) 20:52:130267デフォルトの名無しさん
2010/10/18(月) 21:27:11http://codepad.org/PIjvF4Yq
0268デフォルトの名無しさん
2010/10/18(月) 21:28:42プログラマーってガテン系じゃなかったのか?
0269デフォルトの名無しさん
2010/10/18(月) 21:35:15ガテン系プログラマは英語を読む必要は無い。
0270デフォルトの名無しさん
2010/10/18(月) 21:37:300271デフォルトの名無しさん
2010/10/18(月) 21:38:460272デフォルトの名無しさん
2010/10/18(月) 21:57:160273232
2010/10/18(月) 22:00:23まさに私が求めていたものです。Exaclty what I was looking for です。
じっくり読んで隅々まで理解するようにします。ありがとうございました。
0274デフォルトの名無しさん
2010/10/18(月) 22:44:49■ このスレッドは過去ログ倉庫に格納されています