C++相談室 part34
■ このスレッドは過去ログ倉庫に格納されています
0001v(^・^)v
NGNGただし質問の前にはFAQに一通り目を通してください。
テンプレートライブラリ(STL含む)に関する質問は
専用の別スレにお願いッス。
過去スレ、関連スレ、関連リンクなどは >>2-20 あたり
0348デフォルトの名無しさん
NGNGnew_handler 書いたり、アロケータ用意したりとかマンドクセ
0349デフォルトの名無しさん
NGNGってやるのと、必要になる都度
std::
ってやるのとどっちがいいですか?
あと、どっちの方が主流なコーディングですか?
0350デフォルトの名無しさん
NGNGusing namespace std; しちゃうと string, vector, list, map 等々、
ありきたりな名称で名前空間を汚されるのが嫌。てかうっかり名前
被らせて知らぬ間にバグを埋め込みそうで怖い。
0351デフォルトの名無しさん
NGNGやはり std:: ってやる方がいいですか。
せっかく分けた名前空間をごっちゃにしちゃ意味ないですもんね。
ありがとうございました
0352デフォルトの名無しさん
NGNG重要なのはコンパイルスイッチでの制御の可否じゃなくて、当時の仕様だ。
>>347
windows.hが通らないだけだった気がする
0353デフォルトの名無しさん
NGNGヘッダのグローバルな部分ではusing namespaceは使っちゃ駄目、絶対。
でも小さなソースファイルとか、関数単位ならそれほど問題ない。
0354デフォルトの名無しさん
NGNG自分でも using namespace std; って書いててかなり疑問に感じてました。
名前空間の持つそのものの利点が失われるので。
std:: とその都度打つ方が主流みたいですし、はっきりした利点もあるようなのでこれからはこう書いていきます
0355デフォルトの名無しさん
NGNG名前空間の持つ欠点も失われるけどね。
0356デフォルトの名無しさん
NGNG0357デフォルトの名無しさん
NGNG次どうなるかまったく予測がつかなくなった例
0358デフォルトの名無しさん
NGNG0359デフォルトの名無しさん
NGNG読んでても一貫して無くて、むきーっとなるなw
0360デフォルトの名無しさん
NGNGで、やっぱ、こういうのって、文字列操作が、からんで、くるじゃないですか?
ってことは、やっぱり、PERLがいいのでしょうか?
それとも、C++?
皆さんも仕事で、コーディングチェックのための、ツールを、作っていると、思うのですが、
言語は、何が、おすすめでしょうか?
0361デフォルトの名無しさん
NGNG文字列操作なんて言ってるようじゃ無理ぽ。
そんなの、先人の作ったオプソのツールを活用せい。
それと、手段を目的にしてるようじゃダメだね。
0362デフォルトの名無しさん
NGNG> 皆さんも仕事で、コーディングチェックのための、ツールを、作っていると、思うのですが、
作ってないし使ってない。人が作ってるものを探してるなら C++ beautifier あたりで
検索かけてみ。
0363デフォルトの名無しさん
NGNGコーディングチェックって、具体的にはなにをするの?
0364デフォルトの名無しさん
NGNG0365>>360
NGNGなるほど、人が作っているものが、あるのですね。
そうします。
>ヘンな読点には突っ込まないのか。大人だなおまいら。
すいません、リアル中国人SEなので。
話すのは流暢なのですが、文章苦手です。
在日10年で、この7月に永住許可、もらっちゃいましたよ。(帰化ではないですよ)
0366デフォルトの名無しさん
NGNGそうか。すまんかった。
0367デフォルトの名無しさん
NGNGできれば>>363に答えて欲しい。
0368デフォルトの名無しさん
NGNG南京大虐殺、の被害者数捏造とかです。
0369デフォルトの名無しさん
NGNG>>360は西村京太郎だろ
0370デフォルトの名無しさん
NGNG技術者の場でそういうネタを持ち込むはやめれ。
0371デフォルトの名無しさん
NGNGいやあ、技術に国境は確固として存在するよ。それに伴う偏見や雑言もね
0372デフォルトの名無しさん
NGNG0373デフォルトの名無しさん
NGNG言語はC++です。
int型の数値をchar型の文字列に変換したいときは
どのような関数を作ればよいですか?
同じように、
double→char
など。
初心者の質問で申し訳ないですが
宜しくお願いします。
0374デフォルトの名無しさん
NGNGchar c = 2;
double d = 3.0;
c = static_cast< char >( n );
c = static_cast< char >( d );
こういうこと?
0375デフォルトの名無しさん
NGNGsprintf()
0376デフォルトの名無しさん
NGNGfgets()
0377373
NGNG374さんが書いたコードは、
int i;
char j;
j = (char)i;
といったかんじの普通のキャストとは
やはりどこか違うんでしょうか?
>>375
sprintfという便利なものが
あったのですね。
とりあえずがんばってみます!
ありがとうございました。
0378デフォルトの名無しさん
NGNGワラタ
暗にマルチポストを指摘しているな。
0379デフォルトの名無しさん
NGNGそういうことなら
ostringstream ってのがある
0381デフォルトの名無しさん
NGNGboostかな?
うわおれc++忘れてる
0382デフォルトの名無しさん
NGNG0383デフォルトの名無しさん
NGNGまた他にもっと良い方法はありますか?
A get( ){
return a;}
const A a = get( );
この方法は値渡しがネックです。
void get( A& a ){
a = b;}
A a;
get( a );
この方法だと2行必要ですし、constが付けられません。
0384383の続き
NGNGreturn a = b;}
const A a = get( );
この方法はオーバーライドした際、バグの元になりやすいです。
例)
A& get2( ){
return get();}
A& get( ){
static A a; // TLSでも可
return a = b;}
const A a = get( );
この方法だとなんだか無駄が多い気がします。
キャッシュミスも起こりそう。
0385デフォルトの名無しさん
NGNGNRV 最適化でググれ。
0386デフォルトの名無しさん
NGNGNRVとは初めて知りました。
自分のコンパイラ(VC)で適用されるのか試してみます。
ありがとうございました。
0387デフォルトの名無しさん
NGNG0388デフォルトの名無しさん
NGNGあれほんとに何も最適化しないもんな。
定数式の最適化位だろ。
0389デフォルトの名無しさん
NGNGclass Personal {
string name, sex, tel, email;
int age;
}
例えば、こんなクラスで、あるときはnameで、あるときはageでソートや検索をしたいという場合です。
operator== や operator< はクラスで1つしか持てないので、別の比較関数(or関数オブジェクト)を用意する必要があると思いますが、
どこで用意するのが管理しやすいでしょうかね・・・。
マネージャクラスを別に作って、そこにstaticな比較関数を持たせるのが一番楽かなと思っているんですが・・・
class PersonalManager {
public:
static bool AgeCompareLessl(Personal &p1, Personal &p2){ return p1.age < p2.age}
;
}
としておいて、
vector<Personal> v;
sort(v.begin(), v.end(), PersonalManager::AgeCompareLess);
これじゃぁ、あんまり頭よさそうじゃないですよね。
もっといい案あったら教えてください。
0390デフォルトの名無しさん
NGNG{
bool operator() (const Personal &p1, const Personal &p2){ return p1.age < p2.age; }
}
vector<Personal> v;
sort(v.begin(), v.end(), PersonalComparator());
0391デフォルトの名無しさん
NGNG○PersonalAgeComparator
0392デフォルトの名無しさん
NGNGttp://www.tietew.jp/cppll/archive/549
0393デフォルトの名無しさん
NGNGそれだとやっぱりメンバの数だけ、関数オブジェクトが出来てしまいますよね。
なんか分散しちゃうのが感覚的に嫌な感じ・・・。
>>392
ありがとうございます。そういう奴がほしかったんです。
templateつかってうまいことできないかなぁと。
とりあえずそこ読んで研究してみます・・・・。
0394デフォルトの名無しさん
NGNGprintf("\x1b[30m");
とか。
VC++.NETを使っています。
0395デフォルトの名無しさん
NGNGhttp://book.mycom.co.jp/user/preview/4-8399-1555-5/index.shtml
この本に日本の未来に光を感じました。
これのC言語版がほしいのですが、どこで売ってるのか教へてください。
おながいします。
はふはふ。
0396デフォルトの名無しさん
NGNG0397デフォルトの名無しさん
NGNGちなみにコーディング規約でsprintf使用禁止になっています。
std::stringにそのようなメソッドはないでしょうか?
0398デフォルトの名無しさん
NGNG0399デフォルトの名無しさん
NGNG0400デフォルトの名無しさん
NGNG#include <iostream>
using namespace std;
int main(){
stringstream ss;
string s;
int n;
cin >> n;
ss << n;
ss >> s;
cout << s << endl;
return 0;
}
0401デフォルトの名無しさん
NGNGメンバ変数ポインタと Boost Bind もしくは Boost Lambda を使う。たとえば名前をキーに
したければ
boost::bind(std::less<string>(), boost::bind(&Personal::name, _1), boost::bind(&Personal::name, _2))
あるいは
using namespace boost::lambda;
bind(&Personal::name, _1) < bind(&Personal::name, _2)
ってな感じで、望みの関数オブジェクトが作れる。
0402デフォルトの名無しさん
NGNG馬鹿な規約ですね。
0403デフォルトの名無しさん
NGNG0404デフォルトの名無しさん
NGNG0405デフォルトの名無しさん
NGNGsprintf 禁止でも snprintf なら OK とか?
0406デフォルトの名無しさん
NGNG0407デフォルトの名無しさん
NGNG>401
ちなみにlambdaなら
using namespace boost::lambda
&_1->*&Personal::name < &_2->*&Personal::name
こういう書き方もできますよ.
0408デフォルトの名無しさん
NGNG0409デフォルトの名無しさん
NGNGstd::cout << "\x1b[30m";
0410>>397
NGNG0411デフォルトの名無しさん
NGNGできないです。
どうすればいいでしょう。
もしかしてVC++についているコマンドプロンプトみたいのを使ってるから?
0412デフォルトの名無しさん
NGNGVC++付属じゃないけどな。
0413デフォルトの名無しさん
NGNGコマンドプロンプトでする方法ないですか?
0414デフォルトの名無しさん
NGNG0415デフォルトの名無しさん
NGNG0416デフォルトの名無しさん
NGNG0417デフォルトの名無しさん
NGNGSTLつかうと(ry
0418デフォルトの名無しさん
NGNGこういうのはどうだ?
http://www.kumei.ne.jp/c_lang/intro/no_58.htm
0419デフォルトの名無しさん
NGNG環(ry
0420デフォルトの名無しさん
NGNGすげ(ry
0421デフォルトの名無しさん
NGNG0422デフォルトの名無しさん
NGNG0423デフォルトの名無しさん
NGNG0424デフォルトの名無しさん
NGNG0425デフォルトの名無しさん
NGNG0426デフォルトの名無しさん
NGNG0427デフォルトの名無しさん
NGNGって話かとオモタ。
0428デフォルトの名無しさん
NGNGfor( int i = 0; i < 10; ++ i ){
...
}
std::cout << i << std::endl;
みたいな風に、for を抜けても i を参照することって許されてるんですか?
0429デフォルトの名無しさん
NGNG0430デフォルトの名無しさん
NGNGマジデスカ…
おのれ VC7.1 …
0431デフォルトの名無しさん
NGNG0432デフォルトの名無しさん
NGNGおぉ、THX!
これやってみます
0433デフォルトの名無しさん
NGNG#define for if (0) ; else ; for
0434デフォルトの名無しさん
NGNGイテレータが2種以上あるとき無力だにょなあ
map::iterator im = m.begin();
for( int i = 0; i < 10; ++i, ++im)...
結局こうなっちゃうし。
俺は古い仕様のままでいいと思うけど。
0435デフォルトの名無しさん
NGNG0436デフォルトの名無しさん
NGNGi<10;
++i, ++im) {}
でいいじゃん
0437デフォルトの名無しさん
NGNGそれ、コンパイル通る?
0438デフォルトの名無しさん
NGNGなら通るんだけどねぇ
0439デフォルトの名無しさん
NGNGテンプレートが16種類もあるんだけど
どれが何用とか決まってんの?
0440デフォルトの名無しさん
NGNG0441デフォルトの名無しさん
NGNGint i = 0, map::iterator im = m.begin();
が、
int i = 0; int map::iterator im = m.begin();
と解釈されちゃうんだね。
forの初期化部には一つの型しか書けないわけか。
0442デフォルトの名無しさん
NGNGmap::iterator im = m.begin;
for (int i = 0; i < 10; ++i, ++im)
{
}
}
0443デフォルトの名無しさん
NGNG0444デフォルトの名無しさん
NGNG禿げしく却下
0445デフォルトの名無しさん
NGNG0446デフォルトの名無しさん
NGNG人にとって
0447デフォルトの名無しさん
NGNGんなアンコモンケースに対応することの方がどうでもいい。
■ このスレッドは過去ログ倉庫に格納されています