[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 05/10 01:13 / Filesize : 241 KB / Number-of Response : 948
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C++は難しすぎ 難易度:2



1 名前:前々スレ985 mailto:sage [03/12/18 06:52]
理解できないわけないだろ!
デザパタも知らずにC++使いの質を下げるC厨には げんあり

前スレ達
難易度:1 pc2.2ch.net/tech/kako/1058/10586/1058675178.html
難易度:2 1pc2.2ch.net/test/read.cgi/tech/1063323615/

477 名前:デフォルトの名無しさん mailto:sage [04/11/27 03:07:44]
>>461
C++を究めた人はアセンブリに戻る。

478 名前:デフォルトの名無しさん mailto:sage [04/11/27 03:10:04]
>>477
そういう内容のメガデモ作品があったな

479 名前:デフォルトの名無しさん mailto:sage [04/11/27 06:47:22]
>>461の二番目みたいに、全く抽象化されてもいないのに
無理やりイテレータ使う意義って、全くないように思えるんだが

480 名前:デフォルトの名無しさん mailto:sage [04/11/27 09:02:51]
インポラリ

481 名前:デフォルトの名無しさん mailto:sage [04/11/27 09:22:04]
>>457
> C++の難しさに挫けそうです
「プログラミング言語C++」の難しさに挫けそうなだけだろ。

482 名前:デフォルトの名無しさん mailto:sage [04/11/27 09:34:42]
>>479
そんなことはない。
少なくともコンテナを差し替えられる。

483 名前:デフォルトの名無しさん mailto:sage [04/11/27 23:14:25]
そんなこといったら、最初の書き方ならば
vectorを配列にさしかえれるという利点があるなw

484 名前:デフォルトの名無しさん mailto:sage [04/11/27 23:16:08]
>>483
vectorを配列に差し替えても、あまり嬉しくはないだろう。

485 名前:デフォルトの名無しさん mailto:sage [04/11/27 23:37:44]
速くなるやん



486 名前:デフォルトの名無しさん mailto:sage [04/11/28 04:04:31]
>>485
そういう用途なら、boost::arrayがあるから利点とはならない。

487 名前:デフォルトの名無しさん mailto:sage [04/11/28 04:36:03]
boost::rangeでcontainerとbuilt-in arrayが汎用に扱えるようにもなったしね

488 名前:デフォルトの名無しさん mailto:sage [04/11/28 11:09:50]
後からコンテナを差し替えやすいってのが利点。

489 名前:デフォルトの名無しさん mailto:sage [04/11/28 17:27:41]
コンテナの差し替えなんかするのか?ホントか?

テンプレート引数で型を受け取るときに、
どのコンテナでもOKなのは、確かに意義があるといえるが

前述の例はそういうわけでは全くないし、
正直、三つある例のどの書き方でも、優劣はないと思うが

490 名前:デフォルトの名無しさん mailto:sage [04/11/28 20:57:16]
前述の例だけみればたしかにどれでもいいレベルの話だけど、
意識の持ち方のことを言ってるんじゃないの?
できるだけSTLコンテナやSTLアルゴリズムを使おうという。

491 名前:デフォルトの名無しさん mailto:sage [04/11/28 21:39:47]
しっかし、組み込み型(intとかdoubleとか)のコンテナならSTLのアルゴリズムは
教科書通りに使えるんだが、クラスになると途端に使い物にならなくなるのは
どういうこと?
STLの範囲で済ます場合、メンバ関数ならアダプタでなんとかなるが、メンバ変数は
叙述関数・関数オブジェクトを用意しなければならない。
正直、boost::bindやboost::lambdaが無かったらやってられないよ。
でもこれも一長一短で、boost::lambdaは動かないコンパイラもあるし(bcc32)、
boost::bindは遅いし。

492 名前:デフォルトの名無しさん mailto:sage [04/11/28 22:55:18]
> boost::bindは遅いし。
なんで?

493 名前:デフォルトの名無しさん mailto:sage [04/11/28 23:17:06]
>>492
なんでだろう? 俺が聞きたいよ。
アセンブリコード見たけどよく分からん。あまり最適化されてない様子。
lambdaは早いんだけどな。
単純なlambda式なら、イテレータをループで回すより早かったりする。

494 名前:デフォルトの名無しさん mailto:sage [04/11/28 23:47:31]
>>493
テストコード出せる?

495 名前:デフォルトの名無しさん [04/11/28 23:49:47]
boostの一部のライブラリを見てると、素直にC++にクロージャを足した
新しい言語を作って使えよと言いたくなる。



496 名前:デフォルトの名無しさん mailto:sage [04/11/28 23:55:10]
boost使ってる時点で負け組み

497 名前:デフォルトの名無しさん mailto:sage [04/11/28 23:57:22]
>>496
何を使うと勝ち組みになれるの?
boost のめざそうとしているものを使わなくてもいいってこと?

498 名前:デフォルトの名無しさん mailto:sage [04/11/29 03:52:25]
>>495
C++Builder言語

499 名前:デフォルトの名無しさん [04/11/29 08:41:38]
C++が難しいのは、テンプレートのがポリモルフィズムより速いからだと思う。

500 名前:デフォルトの名無しさん [04/11/29 08:55:56]
pc5.2ch.net/tech/kako/1058/10586/1058675178.html
pc5.2ch.net/test/read.cgi/tech/1063323615/

501 名前:デフォルトの名無しさん [04/11/29 09:53:18]
>>495
templateの良し悪しはともかくとして、
言語のコアとしてそういった概念のシンタックスを
持つのではなく、メタプログラミングによって後から
追加できるのっていいなと思うけど。


502 名前:デフォルトの名無しさん [04/11/29 11:15:07]
このスレ見てるとげんなりしてくるなw

503 名前:デフォルトの名無しさん mailto:sage [04/11/29 11:19:09]
>>501
同感、クロージャーなどを突っ込むよりtemplate機能をもっと整理して
この種の機能はライブラリとして実装してもらいたい。
クロージャー以外にもデザパタ一式ガベコレ一式程度は自働ジェネレートできるくらいがいい。
言語のコアはあくまでシンプルで高速な物がいい。

504 名前:デフォルトの名無しさん [04/11/29 12:55:33]
VC++で計算した数値を引数で表示したいんですが、printfで表示されません。だからMessageBoxを使って表示したいんですがエラーがでます。どうしたらいいんでしょうか?どなたか分かる人教えてください。


505 名前:デフォルトの名無しさん mailto:sage [04/11/29 13:10:08]
( ゚Д゚)ポカーン



506 名前:デフォルトの名無しさん [04/11/29 15:55:09]
505うぜーよ!!
知らないならくるな!!!
消えちまえーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

507 名前:モウモウ mailto:sage [04/11/29 21:13:40]
>>504
とりあえず、現状のソース見せて。

508 名前:デフォルトの名無しさん mailto:sage [04/11/29 21:15:44]
質問した本人はそのスレ全てを覚えてるとは思えないが…(笑)

509 名前:デフォルトの名無しさん mailto:sage [04/12/04 16:22:48]
「ファイアーエムブレム」は難しすぎ
game.2ch.net/poke/kako/1020/10203/1020340325.html
Linuxは難しすぎ
pc.2ch.net/linux/kako/1025/10252/1025263879.html
三連複は難しすぎ
cocoa.2ch.net/keiba/kako/1025/10252/1025257025.html
メモ帳は難しすぎ
pc5.2ch.net/test/read.cgi/win/1101205340/

510 名前:デフォルトの名無しさん mailto:sage [04/12/13 13:46:51]
C++はSTLと継承を使いこなし始めた辺りが
生産性・理解向上の分水嶺だった記憶がある。

511 名前:釣られたか(w mailto:sage [04/12/13 14:01:00]
>504
ConsoleとWinアプリは違うから。
デバイスコンテキストをキーワードに勉強しる。

あとこの手の質問はVC++のスレ・・・って適当なの無いな今は MFC限定しか


512 名前:デフォルトの名無しさん mailto:sage [04/12/13 14:44:57]
>>511
★初心者にVisual C++を教えるスレ★ Part16

513 名前:デフォルトの名無しさん mailto:sage [05/01/01 23:35:39]
C++には、他に類を見ない自由と絶対的な○○が与えられている。

514 名前:デフォルトの名無しさん mailto:sage [05/02/15 18:08:52 ]
C++の機能限定版とか無いの?

515 名前:デフォルトの名無しさん mailto:sage [05/02/15 18:32:19 ]
>>514
例外、クラス、関数オーバーロードや
デフォルト引数などの機能を取り除いた
C というものがあります。



516 名前:デフォルトの名無しさん mailto:sage [05/02/16 18:00:21 ]
>>514
EC++なんてものもある。
ja.wikipedia.org/wiki/Embedded_C_Plus_Plus

517 名前:デフォルトの名無しさん mailto:sage [05/02/17 00:39:05 ]
>>516
だがしかし、はっきり言ってウンコだ。

518 名前:デフォルトの名無しさん mailto:sage [05/02/19 00:11:41 ]
>>516
例外処理が省かれてるのが最大の問題だな。

519 名前:361=別名ポリホ mailto:sage [05/02/19 00:26:05 ]
>>518

テンプレートも名前空間もない。
実際にEC++環境があったのでコーディングしてみたことがあるけど、
全然C++らしくない。


520 名前:デフォルトの名無しさん mailto:sage [05/02/19 06:54:53 ]
まああくまでもembeddedだからねえ。

521 名前:デフォルトの名無しさん mailto:sage [05/02/22 15:21:43 ]
時々、ECMAScript をバイナリに落とすことが出来ればと考えることがある。

obj = new Object;
obj["Method"] = function( a, b )
{
 echo("OK");
}

obj.Method(); // OK

441 がやりたいことも、プロトタイプ取得で簡単OK

522 名前:デフォルトの名無しさん mailto:sage [05/02/23 14:30:47 ]
漏れの考えはこうだ!

>461 様の例で「CからC++に移ったばかりの人」の書き方は
いかにも効率が悪そうな印象を受けるけど、
漏れが「仕事で」プログラムを作るなら、
迷わずこのやり方を取る。
(かなり馬鹿にされるだろうけど…。)

そして趣味で(個人的な事情で)プログラムを作るなら、
「C++を使い慣れてきた人」や「C++が『使える』というレベルの人」のような
書き方ができるように努力するだろう。

なぜなら仕事でプログラムを作り、それを他の技術者に引き継ぐ場合、
単純な書き方がもっとも無駄な手間を省くからだ。

そして多くの場合、理解しにくいバグの発生を予め抑制することができる。
また、改修を加えるときや、
不幸にしてプラットフォームの異なる環境へ移植する場合にも、
少ないコストで作業を終えることができるであろう。

スレ違いで申し訳ないけど、
引継ぎ作業によるコストって、
プログラムの書き方で随分変わるんですよ。

「凄いC++技術者」の書いたプログラムを引き継いだ場合、
「凄くないC++技術者の私」が改修を加えるのは大変なんですよ。

523 名前:デフォルトの名無しさん mailto:sage [05/02/23 15:30:38 ]
>>522
ごく普通なC++プログラマな私からすれば、他人のソースを引き継いだときに
ループが書いてあったらそれだけで要注意項目になります。
std::fillならそのまま読み飛ばせる分だけ、引き継ぎコストは抑えられるわけですな。
構造体も然り。初期化処理をその構造体を利用する側でやらなければいけないよりは
コンストラクタを書いておいてくれたほうがよっぽど確実。
まぁ、「凄くないC++技術者=C++をベターCとしてしか使えない技術者」というなら別ですが。

524 名前:デフォルトの名無しさん mailto:sage [05/02/23 18:11:34 ]
ようするに522が凄いC++技術者になればいいだけ。

525 名前:デフォルトの名無しさん [05/03/12 16:40:27 ]
なんで一時オブジェクトは非const参照に変換できないんだ
template<typename E, typename T, typename A, typename Value>
inline std::basic_string<E, T, A>& ToString(std::basic_string<E, T, A>& rstr, Value t) {
  return rstr = static_cast<std::basic_ostringstream<E, T, A>&>(std::basic_ostringstream<E, T, A>() << t).str();
} //static_castしないとエラーを吐く。これはコンパイラのせいだと思う。
#define ToStr0(t) ToString(std::string(), t)

template<typename E, typename T, typename A, typename Value>
inline std::basic_string<E, T, A>& ToString(std::basic_string<E, T, A>* pstr, Value t) {
  return *pstr = static_cast<std::basic_ostringstream<E, T, A>&>(std::basic_ostringstream<E, T, A>() << t).str();
}
#define ToStr1(t) ToString(&std::string(), t)

int main() {
  cout << ToStr0(5) << endl;  //エラー:一致するものが見つからない
  cout << ToStr1(.125) << endl; //OK
  return 0;
}
って書こうと思ったんだよ。
そしたらふと思いついてこうしたら動くんだよ。
#define ToStr0(t) ToString((std::string&)std::string(), t)
頼むからこんなのキャスト無しでも適当にやってくれよ。

そもそもオブジェクトを値渡しで返そうとするとインライン展開できない
ってのがなけりゃこんなことで悩む必要は無かったんだよ>Borland



526 名前:デフォルトの名無しさん mailto:sage [05/03/12 17:34:19 ]
それはインライン展開しない方がいいと思うが。

つうか、boost::lexcal_castとか素直に使った方がええんじゃないの?

527 名前:デフォルトの名無しさん mailto:sage [05/03/12 19:06:53 ]
>>526
lexcal_cast.hppをインクルードするとエラーになってしまうもんで。

528 名前:デフォルトの名無しさん mailto:sage [05/03/13 04:15:03 ]
>>525
> //static_castしないとエラーを吐く。これはコンパイラのせいだと思う。

ostream に対する operator << の戻り値は ostream& だから、
コンパイラに依らずエラーになるはず。
一時オブジェクトで処理しようとしているのが間違い。

529 名前:デフォルトの名無しさん mailto:sage [05/03/13 11:35:07 ]
>>523
for ( xxx i = foo.begin(); i != foo.end(); ++i.) {
 nannka(*i, arg1, arg2, arg3);
 kannka(*i, arg4, arg5);


こんなのは、NGで
一回しか使わんつまんねえファンクタわざわざ宣言して
for_eachなりつかわんとNGなんだよな?

アンタがそうゆう主義なのはかまわんが
それがごく普通かねえ?

つうか、実務経験なさそうなふいんき

530 名前:デフォルトの名無しさん mailto:sage [05/03/13 13:12:54 ]
>525
形式的には、一時オブジェクトは右辺値なので非 const 参照に変換できない。

非 const 参照→呼び出された側で変更される

一時オブジェクト→もともと定数だった可能性がある / すぐに破棄される
=定数のものを変更しようとしている / 変更された値が破棄される
ということでデフォルト安全側に倒してるんじゃないでしょうか。

531 名前:523 mailto:sage [05/03/13 15:09:14 ]
>>529
んにゃ、一々ファンクタ書くまでもない処理ならループでもいいんでない?
ただ、ファンクタもいらんような単純な処理まで一々ループを書くなって話。
適切な比較オペレータを持っているクラスだというのに一々findループを書く神経は疑うってことね。
まぁ、>529の例ならファンクタ書かれるよりはループで書かれた方がよっぽどまし。
更に言えば、for (int i = 0; i < foo.size(); i++) なんて書かれるよりずっとまし。

532 名前:デフォルトの名無しさん mailto:sage [05/03/15 02:44:42 ]
そこでlambdaですよワラ

533 名前:デフォルトの名無しさん mailto:sage [05/03/19 05:54:34 ]
>>531
しょーもないことにこだわってるあたり覚えたての学生とみた(遠い目

534 名前:デフォルトの名無しさん mailto:sage [05/03/19 10:29:39 ]
「まし」とか繰り返して、さも自分にはもっといい案があるかのように匂わせておいて
結局そのまま書かずに退散するのが「らしい」ですよね ;-)

535 名前:523 mailto:sage [05/03/19 10:41:38 ]
んー、ないよ〜
単にどっちがいいかって書いただけだし。
ファンクタを作らなくてもalgorithmのfind使えるケースで自分でループ書くのや
iterator使わずに制御変数でループを回すのが要注意だって話で。
>529の例ならそれでなんも問題ないんでない?
#そもそも私自身がファンクタ作るの苦手だw



536 名前:デフォルトの名無しさん mailto:sage [2005/03/21(月) 12:01:02 ]
C++よりMLの方がいいよ。

537 名前:デフォルトの名無しさん mailto:sage [2005/03/24(木) 05:34:21 ]
まあバランスが大事だよな

538 名前:デフォルトの名無しさん [2005/03/25(金) 07:52:46 ]
C++はすさまじく肥大化した言語。しかし、慣れると機能が多くて便利なのも事実だったりする。
シンプルといわれていたJAVAもバージョンが新しくなるにつれて肥大化が進んでいる。
C#はC++から機能を削ったとはいえ、機能を付け加えているから最初から肥大化している。
機能が多い言語は必ず肥大化し、複雑になってしまう。

シンプルで初心者に優しいけど「不便な言語」よりは、複雑で便利な言語のほうが良いと思が、
複雑な言語は初心者には優しくない。

初心者にやさしい「複雑な言語」があれば望ましいけど、それは無理かもしれない。


539 名前:デフォルトの名無しさん mailto:sage [2005/03/25(金) 08:59:47 ]
>>538
(行き着く先は)自然言語。
そして曖昧さと冗長性が増える罠。

540 名前:デフォルトの名無しさん mailto:sage [2005/04/25(月) 00:25:10 ]
シーピーピー シーピーピー シーピーピー シーピーピー
シーピーピー シーピーピー シーピーピー シーピーピー
ろ く な も ん じ ゃ ね ー

541 名前:デフォルトの名無しさん mailto:sage [2005/04/25(月) 08:41:55 ]
負け犬?

542 名前:デフォルトの名無しさん [2005/04/26(火) 23:11:19 ]
int n;
n.~int();
これがコンパイルを通ってしまうのに驚いた。
こんな関数にint型の値を渡してもコンパイルが通ったからまさかと思ってやってみたら通った。
template <class T>
void Destroy(T& t)
{
  t.~T();
}


543 名前:デフォルトの名無しさん mailto:sage [2005/04/26(火) 23:52:59 ]
>>542
VS.net2003だと下のテンプレ関数のみ通った。
n.~int();は error C2059: 構文エラー : ''<L_TYPE_ambig>'' って出る。


544 名前:デフォルトの名無しさん mailto:sage [2005/04/27(水) 00:21:50 ]
テンプレートじゃなくても通るのが正しいような気がする。

545 名前:デフォルトの名無しさん mailto:sage [2005/04/27(水) 13:49:42 ]
>>538
今ならまだD言語のライブラリは少ない…貧弱



546 名前:デフォルトの名無しさん mailto:sage [2005/04/27(水) 14:17:59 ]
C++もなにかしようと思ったら機能が貧弱だよ
GCもないし、拡張工事をせざるを得ない
良くも悪くもCなんだな

547 名前:デフォルトの名無しさん mailto:sage [2005/04/28(木) 00:29:01 ]
>>546
そうだね、あせんぶらにもGCつければべんりだね(わら

548 名前:デフォルトの名無しさん mailto:sage [2005/04/28(木) 05:10:40 ]
>>546
そうじゃなくて、君の頭じゃC++は無理なんだよ。

549 名前:デフォルトの名無しさん mailto:sage [2005/04/28(木) 05:16:58 ]
何見当違いの煽りをしてるんだか。

550 名前:デフォルトの名無しさん mailto:sage [2005/04/28(木) 07:44:37 ]
javaは.closeを書かせておいてGCがあると
主張するのは無理がある。同期のコードなんてCそのものだ。
そういえばGenericsもプリプロセッサで実装しているし
assertの実装は失笑である。javaは新しいCなのだろう。
DはRAIIというのがあるようだ

551 名前:デフォルトの名無しさん mailto:sage [2005/04/28(木) 17:52:40 ]
C++はむずかしいので、機械語で書いてます。

552 名前:デフォルトの名無しさん mailto:sage [2005/04/28(木) 18:04:09 ]
>551
俺にはそっちの方がムズい…

553 名前:デフォルトの名無しさん mailto:sage [2005/04/29(金) 02:10:38 ]
BCBのヘルプに
「alloca 関数の使用はあまりお勧めできません。」
って書いて有るんですけど、そうなんですか?

554 名前:デフォルトの名無しさん mailto:sage [2005/04/29(金) 09:14:17 ]
>>553
スタックを食い潰すし、移植性に乏しいからでは?

555 名前:デフォルトの名無しさん mailto:sage [2005/04/29(金) 10:02:13 ]
C99ならVariable Length Arraysを使ったほうが良いかと。



556 名前:デフォルトの名無しさん mailto:sage [2005/04/29(金) 17:30:06 ]
C++ならstd::auto_ptrを使ったほうが良いかと。

557 名前:デフォルトの名無しさん mailto:sage [2005/06/02(木) 20:59:36 ]
仮想関数を使えばswitch-caseの嵐から抜けられるわけで、個人的にはそれだけで大満足です。

558 名前:デフォルトの名無しさん mailto:sage [2005/06/02(木) 23:37:01 ]
>557
だね。場合分けをすることなしに、異なる振る舞いを事前に記述して、コンパイラ任せにできる
有利性、というか。

でも、その有利性を理解できない層というのも確実にあって、それは何かっつーと、
仮想関数という概念、というか言語仕様を知らない層なんだよね。C++はもちろん、
Javaも知らないという層。switch-caseで、あり得る場合分けが全部ソース上に
明記してあった方が判りやすいしデバッグしやすいじゃん、と主張してきそうな、
えてしてそういう層が実装仕様を決めやがるんだよなあ。おっとこれはグチだな。すまん。
誰か強力に布教してくんねーかな。俺はもー疲れた。

559 名前:デフォルトの名無しさん mailto:sage [2005/06/03(金) 05:12:20 ]
>>558
無理。そういう層は大抵「学習意欲」<「日々の仕事をこなすこと」だから。

560 名前:デフォルトの名無しさん mailto:sage [2005/06/03(金) 11:21:57 ]
switch-case の代わりとしての仮想関数なら C でも出来るわけで。

561 名前:デフォルトの名無しさん mailto:sage [2005/06/03(金) 11:26:56 ]
>>560
だからどうした?

562 名前:デフォルトの名無しさん mailto:sage [2005/06/04(土) 00:16:50 ]
C++儲のおいらでも560には半分同意。
switchの代わりなら構造体+関数ポインタでも
それほど労力がふえるとも思えない。
勿論、仮想関数の方が楽なのは事実だけど。

むしろ、Cで困るのはコンストラク・デストラクタ・templateがない事。
auto_ptrを見ても分かるようにデストラクタが非仮想であっても、
templateと組み合わせればものすごく便利になる。
これが無い故に生成と破棄がセットになったリソースを複数作る
処理で、生成失敗時の破棄処理を書いてるとうんざりする。

563 名前:デフォルトの名無しさん mailto:sage [2005/06/04(土) 01:28:29 ]
要するに、リソースリークを避けるための下らない労力、プログラムの本質
から大きく外れたロジックやコードがCでは多くを占めてしまうってこったよな。
文字列やリストなんて単純なものも、Cでは悩みの種だ。

まあメモリリーク回避だけならGC使う手もあるがなー。
GC使えるような環境なら今時Cなんて使うなよという話もあるが。

564 名前:デフォルトの名無しさん mailto:sage [2005/07/13(水) 23:42:53 ]
この速度ならぬるぽ

565 名前:デフォルトの名無しさん mailto:sage [2005/07/13(水) 23:45:51 ]
>564
ガッ!
ちゅーかまたお前かっ!



566 名前:デフォルトの名無しさん mailto:sage [2005/07/20(水) 22:15:59 ]
sageてぬるぽもなかろうに
それよか、こんな過疎スレで
sageぬるぽに3分でガッした565の方が神

567 名前:デフォルトの名無しさん [2005/07/24(日) 23:15:44 ]
int main()
{
  std::locale::global(std::locale("japanese"));
  _bstr_t bs(L"ほげ");
  std::wcout << bs << std::endl; //static_cast<const wchar_t *>(bs)とすれば無問題。
  return 0;
}

VC7.1だとbsはconst wchar_t *か悪くてwchar_t *へ変換されるかと思いきゃ、
なぜかこれに解決される。せめてconst wchar_t *とであいまいにしてくれよ。
template<class _Elem, class _Traits> inline
  basic_ostream<_Elem, _Traits>& __cdecl operator<<(
  basic_ostream<_Elem, _Traits>& _Ostr, const char *_Val)

568 名前:デフォルトの名無しさん [2005/07/30(土) 10:43:10 ]
今更だけどブロック内での関数宣言を廃止し、全て変数宣言と見なすという仕様にすれば良かったのにと思う。

569 名前:デフォルトの名無しさん mailto:sage [2005/07/31(日) 00:36:05 ]
>>568
そのメリットは?

570 名前:デフォルトの名無しさん mailto:sage [2005/07/31(日) 01:25:38 ]
>>569
コンストラクタ呼び出しで作った一時オブジェクトでローカル変数を直接初期化できる。

struct S0 { S0(); };
struct S1 { S1(S0 zero); };

int main()
{
 S1 x(S0()); // 現行の規格では関数宣言
 ...
}

571 名前:デフォルトの名無しさん mailto:sage [2005/07/31(日) 04:20:58 ]
>570
S1 x = S0(); で回避できると思うけど、いちいち気にするのがいやってこと?

572 名前:デフォルトの名無しさん mailto:sage [2005/07/31(日) 04:45:26 ]
>>571
その書き方だと暗黙の変換とコピーコンストラクタが必要になる。
S1を↓のようにするとコンパイルできない。
struct S1 { explicit S1(S0 zero); };
struct S1 { S1(S0 zero); private: S1(S1 const&); };

573 名前:デフォルトの名無しさん mailto:sage [2005/07/31(日) 05:09:49 ]
>>569
ブロック内で関数宣言する奴なんて見かけない。みんなヘッダをインクルードする。
570みたいなコードは誰もが最初変数宣言だと思ってはまる。
それだったら全部変数宣言にするほうが、わかりやすいんじゃないかと考えた。

たとえば「ブロック内では関数宣言をしたければexternを付ける必要がある。
externなしで関数・変数宣言どちらともとれるときは変数宣言」とでもすればよかったのにと思う。

574 名前:デフォルトの名無しさん mailto:sage [2005/07/31(日) 10:32:18 ]
>>573
Cとの互換性を最優先した結果、なんだろうなあ。

575 名前:デフォルトの名無しさん mailto:sage [2005/08/01(月) 12:09:55 ]
>>570
S1 x((S0()));

()の2バイト分も面倒か?



576 名前:デフォルトの名無しさん mailto:sage [2005/08/01(月) 14:22:05 ]
対処法の有無はこの話題には関係無いだろう。

577 名前:デフォルトの名無しさん mailto:sage [2005/08/02(火) 00:55:12 ]
>576
その対処法によって、570のいう、
> コンストラクタ呼び出しで作った一時オブジェクトでローカル変数を直接初期化できる。
ことができない(実際にはできる)という、現行規格への不満が解消されるのだから関係ある。

まぁ570が、一時オブジェクトをローカル変数のコンストラクタに渡す文法を知らなかっただけのようだが。







[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<241KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef