C++0x 3 ..
[2ch|▼Menu]
367:デフォルトの名無しさん
08/04/13 19:28:44
>>361
p[i]はマジで害悪にしかなってないからなくなった方がいいと実際思ってる
まるでCに配列が存在するかのような幻想を初心者に与えて混乱させる元凶になってるだけ

368:デフォルトの名無しさん
08/04/13 19:28:59
区切り入れられるようにすれば読みやすいと何度言えば

369:デフォルトの名無しさん
08/04/13 19:29:42
ただの荒しだろこいつら

370:デフォルトの名無しさん
08/04/13 19:29:53
>>367
バカすぎる・・・

371:デフォルトの名無しさん
08/04/13 19:30:46
それで読みやすくなるコードが既に誤ったコーディングスタイルだってことも指摘されてるのに

372:デフォルトの名無しさん
08/04/13 19:31:17
権威主義に落ちてるのさ。批判的精神を失ったら、もう技術者としては終わりだ

373:デフォルトの名無しさん
08/04/13 19:31:55
一人で両方の意見を書いてるマッチポンプ野郎が2人くらい来ている気がする

374:デフォルトの名無しさん
08/04/13 19:32:02
[]がなかったら宣言ができなくなる

375:デフォルトの名無しさん
08/04/13 19:32:07
>>371
定数を定義するする地点で使うことに問題は無いと何度言えばいいのだろうか。

376:デフォルトの名無しさん
08/04/13 19:32:39
>>368
何の機能もない表現をプログラム本文中に入れるのは問題だと思う
本文中の記号はプログラムの動作に何かをもたらすものでなければいけない
(使われ方次第では無意味になることもあるとしても)

377:デフォルトの名無しさん
08/04/13 19:33:36
>>376
それで読みづらくなるんだったら意味が無い。ただのバカだな。

378:デフォルトの名無しさん
08/04/13 19:33:53
>>376
おまえ、改行と空白を敵に回したな

379:デフォルトの名無しさん
08/04/13 19:34:10
コメントも敵に回してるな。

380:デフォルトの名無しさん
08/04/13 19:35:27
>>377
何の意味もない記号なんてものが(コメント以外に)ある方がよほど読みづらいわ

381:デフォルトの名無しさん
08/04/13 19:35:50
>>380
そろそろ苦しいから諦めろ。

382:デフォルトの名無しさん
08/04/13 19:36:01
>>378
トークンを区切るという立派な仕事があるじゃないか
0bの中のアンダースコアはそれすらないんだぞ

383:デフォルトの名無しさん
08/04/13 19:36:12
>>376
ぜひ作ってくれ。
全てのトークンがプログラムの動作に影響を与える言語。

384:デフォルトの名無しさん
08/04/13 19:36:26
盛り上がってきたね。いいぞいいぞ。どちらも負けるな。もっとやれ。

385:デフォルトの名無しさん
08/04/13 19:36:37
>>382
Dでそれが問題になってるという話は聞かない。
ただの妄想に過ぎないな。

386:デフォルトの名無しさん
08/04/13 19:39:04
>>383
C++は全てのコメント以外のトークンがプログラムの動作に影響を与えうる(もちろん与えないこともある)言語ですよ

0bの_は「絶対に」プログラムの動作に影響を与えない
0bXYと0bX_Yが違う意味を持つということはいかなる文脈でも絶対にない
無意味だと思わないか

387:デフォルトの名無しさん
08/04/13 19:39:41
上のほうで書かれてた5ビットずつのRGBってのもビット列自体に意味はないから
こんなの使う必要ないと思うんだけど

388:デフォルトの名無しさん
08/04/13 19:40:30
>>386
別に?

389:デフォルトの名無しさん
08/04/13 19:40:50
>>382
自明的にトークンを構成する文字の前後に冗長な空白を入れるのは禁止したほうが良いですね

390:デフォルトの名無しさん
08/04/13 19:42:16
>>386
「違う意味を持つということはいかなる文脈でも絶対にない」トークン列なんて無数に考えつくけど

391:デフォルトの名無しさん
08/04/13 19:44:22
変数名内の _ の使用も禁止。
全部英小文字のみにしろということか。

392:デフォルトの名無しさん
08/04/13 19:44:34
唯一使えるとしたらアイコンかなんかのパターンを記述するとき
ソースを見ただけでどんなアイコンか見当付きやすいってことくらいかな

他になんかある?

393:デフォルトの名無しさん
08/04/13 19:45:09
>>390
いやいや、そりゃあるだろうよ
でもそのトークン列で使われている記号はどれも、別のトークン列の中でなら区別に貢献する可能性があるわけだ

0bの中の_という記号は、それがどんな数値定数の中でも区別に寄与しない
機能自体が全く無意味なんだよ
あるトークンの中で無意味というのとは次元が違う

394:デフォルトの名無しさん
08/04/13 19:47:22
>>393
トークン間(空白等)は良くて、トークン内は許せないとする論拠は?

395:デフォルトの名無しさん
08/04/13 19:47:40
何でそれがダメなのか明確な理由が述べられていない。
さっさと言え。

396:デフォルトの名無しさん
08/04/13 19:47:49
>>391
D言語と同じようにするならその問題はない。

397:デフォルトの名無しさん
08/04/13 19:49:48
変数名に使える文字に _ を含めてる時点で
プログラムの見た目は非常に重要な要素だということを
言語レベルで認定しているようなもんなんだがな。

398:デフォルトの名無しさん
08/04/13 19:52:17
>>394
トークン間の空白はあるとないとで全く意味が変わる可能性があるじゃないか

ab /*「ab」という識別子*/
a b /*「a」と「b」という2つの識別子*/

_はあってもなくても絶対に何も変わらない

0b11 /* 10進数で3という数 */
0b1_1 /* これも10進数で3という数 */
0b____1___1_________ /* どう入れてみた所で3という数は変わりはしない */

_によって意味が変わることはどんなプログラムにおいても存在しない
だから無意味なんだ

399:デフォルトの名無しさん
08/04/13 19:53:35
>>397
abとa_bとa__bは違う識別子です
0b11と0b1_1と0b1__1は全く同じ意味です

400:デフォルトの名無しさん
08/04/13 19:53:36
int ab = 0;
int a_b = 0;
int a_b = 0;

意味は変わらないな。

401:デフォルトの名無しさん
08/04/13 19:54:07
>>398
何故無意味か説明できていない。
早く説明してくれ。

402:デフォルトの名無しさん
08/04/13 19:55:35
>>401
0bの中の_にプログラム的に意味がある場合がもしあるなら教えて下さい

403:デフォルトの名無しさん
08/04/13 19:55:40
>>398
空白だって連続している場所では意味を持たない、そうでない場所では意味を持つ
'_' だって数値リテラルの中では意味を持たない、そうでない場所では意味を持つ(識別子等)

さほど大きな違いがあるようには思えないのだが。

404:デフォルトの名無しさん
08/04/13 19:56:46
>>402
動作に違いが無いこととその存在が無意味であることには乖離がある。
なぜなら、プログラムはコンパイラだけが読むものではないからだ。

405:デフォルトの名無しさん
08/04/13 19:57:28
>>402
特定の文脈(この場合は0bの後)でのみ意味を持たないってだけでは?

406:デフォルトの名無しさん
08/04/13 19:57:55
>>401
398の説明で理解してもらえないとすれば
プログラム中の記号に「意味がある」というのはどういうことなのか
あなたの考えを聞かせていただきたい
可読性とか動作に関係ないことは除いてね

407:デフォルトの名無しさん
08/04/13 19:58:40
可読性に意味が無いと言う >>406 のプログラムは
たいそう汚いんだろうな。

408:デフォルトの名無しさん
08/04/13 19:59:51
そもそも必要あるの?
0b001_110_011 なんてやるより
(AAA | BBB | CCC) とかのほうが分かりやすいと思うんだけど

409:デフォルトの名無しさん
08/04/13 20:00:42
>>408
場合によるのでは?
極端なケースは上で出てきたアイコンのデザインとか。

410:デフォルトの名無しさん
08/04/13 20:01:42
ビットだけで考えてる人がいるようだが、
Dでは2進数に限らず _ を入れられるわけで、
長い10進数に区切りを入れるのもアリだ。

411:デフォルトの名無しさん
08/04/13 20:02:30
>>406
お前プロジェクトで人の話聞かないで周りに色々迷惑かけてそうだな
>>376から続いてる話なのにどうして「可読性に意味が無い」なんて馬鹿な読み方が出来るんだ?

412:デフォルトの名無しさん
08/04/13 20:02:46
move semanticsのディープな話題が出たときには沈黙してるくせに
おまえらって奴は

413:デフォルトの名無しさん
08/04/13 20:03:30
頭のおかしい奴が話を引っかき回してるようなので一回寝る

414:デフォルトの名無しさん
08/04/13 20:04:44
>>412
ムズカシイ話はワカラナイもん

415:デフォルトの名無しさん
08/04/13 20:04:57
>>410
そういや、お金の計算だと三桁ごとにカンマを入れるなぁ。
カンマの代わりに"_"を入れることができると。
int yen = 100_000_000;

416:デフォルトの名無しさん
08/04/13 20:05:26
>>403
確かにそう言われてしまうとそうなんだが
識別子中の_とリテラル中の_というのは全く別の扱いになる機能で
一方は全く無意味というのはどうなのかと

417:デフォルトの名無しさん
08/04/13 20:05:43
たまたま開いたら面白そうな話してたから参加してるだけ
普段はどんな話してるのか知らない

418:デフォルトの名無しさん
08/04/13 20:06:25
互換性的にはどうなの
__1とかって識別子になったっけ

419:デフォルトの名無しさん
08/04/13 20:06:48
>>418
途中にしか入れられないようにすれば問題ない。

420:デフォルトの名無しさん
08/04/13 20:09:45
・・・まさか >>413>>376 なのか・・・?
・・・ゴクリ。

421:デフォルトの名無しさん
08/04/13 20:14:09
もうC++0bにしちゃえよ

422:デフォルトの名無しさん
08/04/13 20:16:00
実際そうなりそうで怖い。2011年。

423:デフォルトの名無しさん
08/04/13 20:26:43
そんなに無意味な表記が嫌いなら一生マシン語でコード書いてろ

424:デフォルトの名無しさん
08/04/13 20:33:18
プログラミング言語自体、
マシン語のシンタックスシュガーみたいなもんだからな。
あくまでみたいなもんだけど。

425:デフォルトの名無しさん
08/04/13 20:36:17
>>412
美少女中学生の話も食い付き悪くてさみしい


426:デフォルトの名無しさん
08/04/13 20:58:02
>>425 昔から知的で美人の大学生のおねいさんの方がいいに決まってるんだが...


427:デフォルトの名無しさん
08/04/13 21:19:59
>>425
そんなオバサンの話されても。

428:デフォルトの名無しさん
08/04/13 21:29:25
構成された美少女中学生そのものが意味なのだ

パーツのどこそこに意味があるだのないだのとあげつらってみても
それらが集合して美少女中学生を構成しない限り意味を成すことはない

美少女中学生の一部分だけ見つづけると観察者はゲシュタルト崩壊を起こす
0b論も同じこと
いくら論じてもこの美少女中学生の現時点の美少女っぷりにはなんの影響も与えない

繰り返す
構成された美少女中学生そのものが意味なのだ

429:デフォルトの名無しさん
08/04/13 22:04:51
それは脳内美少女中学生ってことで FA?


430:デフォルトの名無しさん
08/04/13 23:08:55
お前らバイナリバイナリうるせーんだよ。

#include <boost/static_assert.hpp>

template<unsigned int v, unsigned int n> struct binary_i{
private:
BOOST_STATIC_ASSERT((n % 10) <= 1);

public:
enum{ value = (n % 10) + (binary_i<v, n / 10>::value) * 2 };
};

template<unsigned int a> struct binary_i<a, 0>{
enum{ value = 0 };
};

template<unsigned int v> struct binary{
enum{ value = binary_i<v, v>::value };
};

std::cout << binary<1001110101>::value << std::endl;

431:デフォルトの名無しさん
08/04/13 23:13:32
10桁までしか使えないじゃんか・・・。
もっといいマクロならそこら辺に落ちてる。

432:デフォルトの名無しさん
08/04/13 23:16:57
最低128ビットくらいは使いたいんだけど

433:デフォルトの名無しさん
08/04/13 23:18:04
0bでスレが加速するってどんだけスレ違いなんだよ

434:デフォルトの名無しさん
08/04/13 23:22:48
文句があるならそのマクロとやらを使ってとっととこのスレから出て行きやがれ

435:デフォルトの名無しさん
08/04/14 00:31:21
ここはconstexprを使った例を出すべきだろ…
C++0x的に考えて

436:デフォルトの名無しさん
08/04/14 00:39:07
どんな底辺プログラマが書き込んでるんだ?

437:デフォルトの名無しさん
08/04/14 00:39:51
boost の static_assert は式版のがないのがうんこだな。
#define BOOST_STATIC_ASSERT_EXPR(b) ((void)(char(*)[(b) ? 1 : -1])0)
くらい用意してくれないと constexpr で困る。
・・・って、constexpr の引数って静的な値として認識されるんだよね?

438:デフォルトの名無しさん
08/04/14 01:03:38
>>437
式版の有る無しで何が変わるの?

キャストやカンマ演算子は定数式にはなれなかったような気がするし、
静的な式なら評価タイミングも関係ないし、あんまり意味が無いような。

439:デフォルトの名無しさん
08/04/14 04:35:03
#define 0B_00001111 0xff

440:デフォルトの名無しさん
08/04/14 06:56:57
そうなのか・・・。
じゃあ constexpr の引数をチェックできないの?

441:デフォルトの名無しさん
08/04/14 10:27:41
>>440
メタ関数書けば?
外向きに一段 constexpr 関数かませば使いやすくはなるかも。

442:デフォルトの名無しさん
08/04/14 10:44:57
>>432
2進数を128桁も書きたいというお前がマレw

443:デフォルトの名無しさん
08/04/14 13:28:45
static_assert の式版とかいうやつを使って
具体的にどういうコードが書きたいのかもうちょっとkwsk

444:デフォルトの名無しさん
08/04/14 19:18:59
式に置換するマクロで

#define TOHEX(n) (STATIC_ASSERT_EXPR(sizeof #n <= 9), 0x##n)

みたいなことをやってんだけど、
まあこれはそのまあ constexpr にするわけにゃいかんが、
constexpr の引数を静的にチェックしたいと思ってね。
typedef が constexpr の中に入れれるなら別に
BOOST_STATIC_ASSERT を使えばいいんだけど、どうだっけ?
無理なら return STATIC_ASSERT_EXPR(hoge < 10), hoge; みたいなことができれば
面白いなあと思ってね。

445:デフォルトの名無しさん
08/04/14 22:37:44
いまさらだけど、0b の話って、
URLリンク(www.open-std.org)
が採用されたらさらに一般化されて解決されるんじゃないの?
誰も上で話に出してなかったけど ...

446:デフォルトの名無しさん
08/04/14 22:42:09
ユーザ定義リテラルは誰か途中で書いてなかったっけ
つうか0bの話ししてる奴の大半はドラフトなんか読んでないんじゃね

447:デフォルトの名無しさん
08/04/14 23:38:21
>>445
キモイ記法になるから組み込みにして欲しいって話だと思ってた。

448:デフォルトの名無しさん
08/04/15 00:21:30
>>445
>>259を忘れないで。
たぶんこれのことだよね?

449:デフォルトの名無しさん
08/04/15 00:49:32
>>259を理解できていたらここまでスレは加速しない。

450:デフォルトの名無しさん
08/04/15 01:23:02
あれって入る見込みありそうなの?

451:デフォルトの名無しさん
08/04/15 01:23:26
たぶん無理

452:デフォルトの名無しさん
08/04/15 03:11:10
入ったとしても定義できるのはサフィックスだけだから
0bは無理なので厨はお気に召さないだろう

453:デフォルトの名無しさん
08/04/15 07:23:28
別にサフィックス b でいいよ。

454:デフォルトの名無しさん
08/04/15 07:29:49
#define b0 0
#define b00 0
#define b000 0
// ... 一つの数値に128通りの#define
// = 2^129個の#define

455:445
08/04/15 09:59:34
すいません、アホな言い合いが続いていたので 259 を読み飛ばしてました。
でも constexpr って今の定義だとそんなに中にいろいろ書けないんじゃ?

456:デフォルトの名無しさん
08/04/15 18:47:23
ループを手動でアンロールすればいいっしょ。

457:デフォルトの名無しさん
08/04/15 18:47:45
ああ、配列アクセスしてる時点で無理なのか。

458:デフォルトの名無しさん
08/04/15 22:59:46
N2378 と最新のドラフト読む限りでは
suffix しか無理ながら,とりあえず constexpr リテラル化はできるような?
>>259 みたいに for 文を使用 (して,かつ constexpr 化) することは
現在の提案ではできないみたいですけれど

459:デフォルトの名無しさん
08/04/16 00:27:15
ようやくらしくなってきたが、未解決なのは変わらずか。

460:デフォルトの名無しさん
08/04/16 03:32:48
constexpr unsigned char operator "b" (unsigned int value) {
 return (value % 10 != 0) | ((value / 10 % 10 != 0) << 1) | ...;
}

このくらいならできるのか?

461:デフォルトの名無しさん
08/04/16 07:28:12
5bitしか扱えないけどね

462:デフォルトの名無しさん
08/04/16 07:36:04
いつの時代の住人だ

463:デフォルトの名無しさん
08/04/16 11:24:41
N2378 と N2588 に従うと以下のような感じになるとは思うんですが,
いかんせん以下をコンパイルして確認できる環境が存在しないので
間違いがある可能性が高いです.

template<char C>
unsigned long long binaryDigitToNum();

constexpr unsigned long long binaryDigitToNum<'0'>(){ return 0; }

constexpr unsigned long long binaryDigitToNum<'1'>(){ return 1; }

template<unsigned long long I, char C, char... TAIL>
constexpr unsigned long long binaryLiteralImpl()
{ return binaryLiteralImpl<I << 1 + binaryDigitToNum<C>(), TAIL>(); }

template<unsigned long long I, char C>
constexpr unsigned long long binaryLiteralImpl()
{ return I << 1 + binaryDigitToNum<C>(); }

template<char C, char... TAIL>
constexpr unsigned long long operator "b" ()
{ return binaryLiteralImpl<0, C, TAIL>(); }

普通の raw-form literal operator だと, '0', '1' 以外が来たときに
compile-time error を吐かせる方法がいまいちピンと来なかったので
variadic template form を使いました.

464:デフォルトの名無しさん
08/04/16 12:22:30
しかし、この例をみるにつけても C++0x は変態ですね

465:デフォルトの名無しさん
08/04/16 19:32:22
これはまだ分かりやすい方だろ。

466:デフォルトの名無しさん
08/04/16 21:30:21
美少女中学生は変態さん。なんと制服の下で身体を縄で縛って学校に行っちゃうのです

467:デフォルトの名無しさん
08/04/16 22:31:32
マジレスすると疲れるだけで全然えろくも変態でもない。

468:デフォルトの名無しさん
08/04/16 23:03:57
>467は人生の勝ち組

469:デフォルトの名無しさん
08/04/20 05:34:54
0b狂がいなくなったら誰もいなくなった

470:デフォルトの名無しさん
08/04/20 10:36:22
mailing2008-03読んでるけど、
0bで馬鹿らしくなって>>257くらいしか書き込んでないw

471:デフォルトの名無しさん
08/04/20 10:53:04
美少女中学生は空を見上げ待ち続けている…

472:デフォルトの名無しさん
08/04/20 12:20:10
C++0xで2進リテラルを作成するスレを別に立てたらどうだ?

473:デフォルトの名無しさん
08/04/20 12:22:39
糞スレたてんなよ

474:デフォルトの名無しさん
08/04/21 01:15:32
>>473
読まなければ良いのでは?

475:デフォルトの名無しさん
08/04/21 01:22:22
糞スレを立てると無駄なCO2を排出することになります

476:デフォルトの名無しさん
08/04/21 01:31:12
俺様のゲップに含まれるメタンガスに比べれば無視できる量だけどな

477:デフォルトの名無しさん
08/04/23 08:11:49
美少女中学生が排出したメタンを肺いっぱいに吸い込みたい

478:デフォルトの名無しさん
08/04/23 08:33:53
つ (美少女の)硫化水素

479:デフォルトの名無しさん
08/04/23 12:15:45
お前らスレタイ0x100回読め

480:デフォルトの名無しさん
08/04/23 18:33:01
スレンダーでタイツの似合う美少女中学生が俺の嫁

481:デフォルトの名無しさん
08/04/23 18:35:18
256回読みましたがわかりませんでした

482:デフォルトの名無しさん
08/04/26 22:18:03
>>481
美少女中学生について語ってはならないとは
スレタイにもテンプレにも書いてないんだが

# 個人的には平面の方が好きなんだけどな


483:デフォルトの名無しさん
08/04/26 23:25:12
C++0xは3次元あるいはそれ以上の次元を持つとはどこにも書いていないぞ。
まあ2次元とも決まっていないがな。
#ん、C++タンの出番だな。

484:デフォルトの名無しさん
08/04/26 23:27:23
N2582
新しい関数宣言方法(ラムダ式と同じ形にする案)
[]foo(int x) -> int { return x; }

485:デフォルトの名無しさん
08/04/26 23:30:30
[] は大変キモいので、こういうマクロを標準で提供して欲しい。
lambda とかいうヘッダファイルを用意して。

#define labmda []
foo(lambda foo(int x) -> int { return x; });

486:デフォルトの名無しさん
08/04/26 23:33:19
typo したがキニシナイ

487:デフォルトの名無しさん
08/04/27 00:49:50
[] にはもう既に慣れちゃった

488:デフォルトの名無しさん
08/04/27 03:30:50
委員会のキーワード忌避は強迫観念レベルだな

489:デフォルトの名無しさん
08/04/27 03:33:59
それほど既存のソースが多すぎるのさ。
そこはしゃーないと思う。
でも、C99 の #define bool _Bool みたいに
互換性を保ちつつキーワードを導入するテクはもっと使ってもいいと思う。

490:デフォルトの名無しさん
08/04/27 03:48:53
無名関数のおかげで無名構造体にコンストラクタとデストラクタを搭載できるようになりました!
大勝利ですね!

491:デフォルトの名無しさん
08/04/27 04:06:37
一方ロシアはコンストラクタをthisで定義できるようにした。

492:デフォルトの名無しさん
08/04/28 11:12:49
なんでlambda expressionのlambda-return-type-clauseって、
->を使うんだろ。
コロンじゃだめだったのかな。
たとえば、普通の関数も統一しようぜっていうN2582も、
こんな風に書けるのに。

[] func() : int
{
  return 0 ;
}

493:デフォルトの名無しさん
08/04/28 11:35:23
#define : ->
は無理だったっけ ...

494:デフォルトの名無しさん
08/04/28 11:44:20
>>492
見た目が違うだけじゃんw

495:デフォルトの名無しさん
08/04/28 13:33:02
 [] main(int argc, char* argv[]) -> int
 {
  //...
 }


496:デフォルトの名無しさん
08/04/28 18:35:05
>>492
コロンはコンストラクタの初期化子と競合しそうだな。

497:デフォルトの名無しさん
08/04/28 18:38:20
コンストラクタでは戻り値の型がないから大丈夫じゃね。
文法的な紛らわしさに関してはまああるかもしれないが。

498:デフォルトの名無しさん
08/04/28 18:46:28
ECMAScript4ってそんな感じじゃなかったっけ
いやだなぁ

499:デフォルトの名無しさん
08/04/28 19:30:15
function func() : int { return 0 ; }
だったか。ECMAScript4は文法キモすぎて見たくもない。
いつのまにかコンストラクタの初期化子まで採用してるし。

500:デフォルトの名無しさん
08/04/28 19:35:51
テンプレートもあるよ!
function func.<T>() : T { return new T(); }

501:デフォルトの名無しさん
08/04/28 20:35:43
ぐはぁ

502:デフォルトの名無しさん
08/04/28 20:42:16
しかしなぜ->なんだ
Haskellかよ

503:デフォルトの名無しさん
08/04/28 21:04:22
プログラミング言語 Scala
スレリンク(tech板)

Scala違いだ移動しる・・

504:デフォルトの名無しさん
08/04/28 22:49:10
returnでいいじゃんかよ
コンフリクトはないはずだ

[] func() return int
{
  return 0 ;
}

505:デフォルトの名無しさん
08/04/28 22:50:51
なんかもうどうやってもキモいんだが。

506:デフォルトの名無しさん
08/04/28 22:52:00
ラムダ式くらい 100% 型推論でやってくれ。

507:デフォルトの名無しさん
08/04/28 22:53:18
そもそもどうしてラムダと形を合わせたいんだ
コピペのためか?

508:デフォルトの名無しさん
08/04/28 22:56:04
関数型言語的には→なんだから、
->でいいんじゃないの?

509:デフォルトの名無しさん
08/04/28 22:58:39
関数型言語的にどうかは知らんしどうでもいいが
C系言語的には->は昔からずっと間接参照演算子だ

510:デフォルトの名無しさん
08/04/28 23:13:55
美少女中学生的には -> と [] はブラのホックの両端だから

511:デフォルトの名無しさん
08/04/28 23:26:17
>>504
それ、俺も思っていたんだけど、
C++の文法としては、何か違和感あるよね。

ところで、@と$がC++の規格にないのは、何か理由があるの?

512:デフォルトの名無しさん
08/04/28 23:30:21
[] int foo() { ... } で不都合があったから -> になったんだと思うが、
どんな不都合があったの?

513:デフォルトの名無しさん
08/04/28 23:50:13
returnsのほうがいい

514:デフォルトの名無しさん
08/04/28 23:53:10
>>512
(charからcharへの関数)を引数に取り(intからintへの関数)を返す関数
を引数に取り(charからintへの関数)を返す関数の型を、
C++03(「関数」は「関数へのポインタ」とする)とC++0xで書いてみてくれ。

515:デフォルトの名無しさん
08/04/28 23:58:27
int (*(int (*(*)(char (*)(char)))(int)))(char) のことだよね?

516:デフォルトの名無しさん
08/04/29 00:10:24
グロい

517:デフォルトの名無しさん
08/04/29 00:11:59
まぁ現状十分汚い言語なんだから、
多少醜くなってもいいじゃん

518:デフォルトの名無しさん
08/04/29 00:14:30
>>517
いいこと言うなあ。君のそのレスで俺の気持ちは吹っ切れたよ。

519:デフォルトの名無しさん
08/04/29 00:19:47
[]([]([](char)->char)->([](int)->int))->([](char)->int)

520:デフォルトの名無しさん
08/04/29 02:22:09
typedef char (*ctoc_t)(char);
typedef int (*itoi_t)(int);
typedef int (*itoc_t)(char);
typedef itoi_t (*ctoc_to_itoi_t)(ctoc_t);

typedef itoc_t (*answer_t)(ctoc_to_itoi_t);

こんな型何に使うかは知らんが、使うとしたら
きっと近くでitoc_t型やctoc_to_itoi_t型の変数も必要になるだろ
ならそんなキモい書き方しないで必要なものをtypedefで作るべき

521:デフォルトの名無しさん
08/04/29 06:35:41
>>519の方がわかりやすいが?

522:デフォルトの名無しさん
08/04/29 07:06:50
>>519
これは従来のアナルっぽい記法よりは読みやすいな

523:デフォルトの名無しさん
08/04/29 07:15:37
>>511
いまさらtrigraphやdigraphの要るような記号追加するのもねえ…ってことじゃないかと予想

524:デフォルトの名無しさん
08/04/29 07:38:26
>>523
そういう理由なのかなぁ。
しかし、trigraphやdigraphって廃止しても、それほど互換性の問題も無いんじゃないかなとおもったりするんだけど。
西側の、なまじ7bitで全種類の文字を表せちゃったので、悲惨なことになっている連中も、
結局使ってないみたいだし。

525:デフォルトの名無しさん
08/04/29 09:39:20
>>521
まずそんなものを書く状況自体が無いな。
あっても >>519 も読みづらいから typedef 使うわ。

526:デフォルトの名無しさん
08/04/29 11:51:29
C++でtypedefを禁止したらどんなカオスなコードになるか見てみたい

527:デフォルトの名無しさん
08/04/29 11:53:44
>>526
template メタプログラミングがかなり出来なくなる気が ...

528:デフォルトの名無しさん
08/04/29 11:58:25
>>526
decltype と auto を駆使することになる

529:デフォルトの名無しさん
08/04/29 18:05:21
あーはやくautoが欲しい

530:デフォルトの名無しさん
08/04/29 19:02:48
正直、auto 以外、いらん。初期化もまぁあればいいね、程度だし

531:デフォルトの名無しさん
08/04/29 19:46:54
ここまでいじっちゃうともう新しく言語作った方が早い気がするしな。

532:デフォルトの名無しさん
08/04/29 19:51:44
Cとの互換性をとりつつ拡張するのに苦労してんのにそんな事言うなよ

533:デフォルトの名無しさん
08/04/29 20:12:56
互換性無視できる
ネイティブディレクティブとか作ろうよ


534:デフォルトの名無しさん
08/04/29 20:36:05
もう互換性なんかとっくにボロボロなのに今更何を

535:デフォルトの名無しさん
08/04/29 21:37:43
>>530
初期化指定子で初期化指定が完了するのは美しいと思わんか

536:デフォルトの名無しさん
08/04/29 21:54:12
なぁ、これは俺の思い過ごしかもしれんのだが

ヒープ領域って誰が管理してくれるんだ?

ラムダ返されて、それ引数に関数呼び出して
関数の中でグローバルに束縛されて... ... ...

でも, らむだはデストラクションしないとまずいんだろ?


537:デフォルトの名無しさん
08/04/29 22:07:15
関数を動的に生成してるわけじゃないだろ

538:デフォルトの名無しさん
08/04/29 22:17:48
536 に便乗で聞くけど、
例えば C# の場合、ローカル変数を参照するようなラムダ式書くと、
クラスが自動生成されて、ローカル変数参照がメンバ参照に置き換わるんだけど、
そういう状態になった場合、デストラクタはどこで呼ばれるの?

ローカルスコープ内でしか使わないラムダ式ならいいけど、
例えば、「ラムダ式を返す関数」みたいなの作っちゃった場合。

539:デフォルトの名無しさん
08/04/29 22:21:56
そんなのローカル変数のポインタ返してるのと一緒だろ
クラッシュしても自業自得で済まされる話
C++はプログラマを全面的に信頼する言語ですよ

540:デフォルトの名無しさん
08/04/29 22:24:33
>>537
あんまマジにシンタックス見てないんであれなんだが

こんな感じの関数書くとするやん?
f(x, y) {
return [copy x]lambda(y){+ x; ...}
}
この場合, x はスタックじゃなくてヒープに取るしかないと思うんだ

で,
g(f(1), f(2)...)
とかな感じで, 呼び出したら?
f が返す関数に束縛されてる x がコピーされた領域は誰が回収するんだろ?

と、思った


541:デフォルトの名無しさん
08/04/29 23:01:43
ん、よくわからん。
スタックじゃないの?

542:デフォルトの名無しさん
08/04/29 23:04:43
alloca() を思い出した

543:デフォルトの名無しさん
08/04/29 23:08:10
new [...] (...) {...}
はないの?よくわからんけど

544:デフォルトの名無しさん
08/04/29 23:23:24
ラムダ式は関数オブジェクトのシンタックスシュガー
なので、単なる一時オブジェクトとして生成されると思う

545:デフォルトの名無しさん
08/04/29 23:24:34
関数から返せないということか。
何かエセっぽいな。

546:デフォルトの名無しさん
08/04/29 23:28:11
C的に考えると、それでいい気がする。

547:デフォルトの名無しさん
08/04/29 23:30:37
折角だからカリー化とかしたいのになあ。

548:デフォルトの名無しさん
08/04/29 23:31:35
ラムダキャプチャーを参照でなく値(コピー)にしたら返せる
関数オブジェクトと同じ
でも、戻り値の型を特定できないかも、新シンタックスで可能?

549:デフォルトの名無しさん
08/04/29 23:33:07
カリー化は手動だな

550:デフォルトの名無しさん
08/04/29 23:33:48
>>544
となると、>>543 みたいな、ラムダ式をヒープに取るような構文が必要じゃない?
(スマートポインタ使うにしても、まずはただのポインタが要るし。)

それか、ラムダ式から生成される関数オブジェクトが
適切な operator = を実装しててくれるなら別にどうでもいいことなのかな。

551:デフォルトの名無しさん
08/04/29 23:37:49
>>550
あっても困らないけど、なくても良いと思う
ポリモーフィズムは必要ないし、必要なら従来の関数オブジェクトがあるし

552:デフォルトの名無しさん
08/04/30 00:13:58
本物のC++プログラマは動的解決をしない。
本物のC++プログラマはコンパイル時に解決する。
コンパイラでできなければ、プリプロセッサでやる。
プリプロセッサでできなければ、それはやる価値が無いのだ。

553:デフォルトの名無しさん
08/04/30 00:16:03
new を入れたのが間違いの始まりだったんですね

554:デフォルトの名無しさん
08/04/30 00:30:05
プリプロセッサ(笑)

555:デフォルトの名無しさん
08/04/30 00:36:14
タイトルはどうなるんだろう。
「本物のプログラマはJavaを使わない」
あたりかな

556:デフォルトの名無しさん
08/04/30 00:36:39
本物のプログラマネタが分からないのは
流石に本物のプログラマとは言えないな。

557:デフォルトの名無しさん
08/04/30 00:45:50
本物のプログラマがわからなければ、そのネタは理解する価値が無いのだ。

558:デフォルトの名無しさん
08/04/30 01:03:02
>>555
間違いなく言語と環境をごっちゃにした反論が帰ってきそうなタイトルだなw

559:デフォルトの名無しさん
08/05/04 00:38:19
conceptがまだドラフトに入らないのが気になる
一番楽しみなのに

560:デフォルトの名無しさん
08/05/04 00:39:07
独立wordingの方でまだまだ直しが続いてる。

561:デフォルトの名無しさん
08/05/05 18:01:34
ここで聞くか、Boostスレで聞くか迷ったんだけど、
Unordered associativeコンテナの、bucket関連のメンバってなんに使うの?
規格読んだだけだと、どうもよくわからないんだけど。
あるキーがどのbucketに属するかのインデックスを返されたとしても、
実際のbucket単位に直接アクセスする方法って無いよね?
普通に要素へのイテレータしかないみたいだし。
そのどのbucketに入れられているかってことが分かって、ライブラリを使う側の人間にとって、何がうれしいの?

562:デフォルトの名無しさん
08/05/05 19:14:44
>>561
begin(i),end(i) で local_iterator を取得できたような。
ハッシュの分散結果をどう使うかってことなので、カスタムハッシュ関数次第
じゃないか? まあ通常はあまり使わないかも

563:デフォルトの名無しさん
08/05/05 19:23:03
どっかのbucketにばっかり入っちゃうようなデータで、そのせいで遅くなるようなときに
調査するためじゃねえの

564:デフォルトの名無しさん
08/05/05 19:27:20
>>561
詳しいドキュメント読んでないから分からんけど、たぶん同一 hash 値だったら
同一の bucket に入ることが保証されるはずだから、次のような使い方ができる。

次の問題を考える:
 二次元平面上の点が大量に与えられる。これを前処理して
 新たな点 p が与えられたときに p に最も近い点を求めよ。

こんなときに、最初の二次元平面上の点に対して、ハッシュ関数を
(x座標値/1000)×(y座標値/1000) なんかに設定したコンテナを用意すると
元のデータが結構ばらけていたら、「同一 bucket 内に入るデータを全部調べる」
みたいなアルゴリズムで結構効率的に解ける。

565:デフォルトの名無しさん
08/05/05 19:59:38
おもろい

566:デフォルトの名無しさん
08/05/05 20:46:02
>>562
本当だ。
引数を取るb.begin(b), b.end(b)があったのか。
local_iteratorは、あるbucket内の要素のイテレータとは。

しかし、>>564には疑問だな。
例えば、その点pのハッシュ値が、ちょうどbucket単位の境にあった場合、
点pに最も近い点は、別のbucketに入るんじゃない?
すると、隣接するbucketも調べないといけないよね?
少なくとも二つ、大抵の場合は三つ。

それに、規格にあるのは、
>Keys with the same hash code appear in the same bucket.
だけで、似たようなハッシュ値が同じbucketに入るとは規定してないし。
隣接するbucketに入るとも規定されてないよね。

あくまでハッシュという名称を使っているだけで、実装じゃないし。

567:デフォルトの名無しさん
08/05/05 21:01:51
境界の違うハッシュを2つ使えば?
(x/1000)*(y/1000) と ((x+500)/1000)*((y+500)/1000) みたいな

568:564
08/05/05 21:33:30
>>566
bucket の番号を用いる例のためだけに、アルゴリズムの細かなことを書くのは
面倒だったから、本当に方針だけを書いたつもりなんだけどなあ。


まず、点を含む領域以外も見ないといけないのはそのとおりで、
ちゃんとやるには、点を含む領域から近い順に探索することになる。
(それまでに見つけた最も近い点までの距離を覚えておき、
 見る必要のある領域を限定していく)

見る領域に対応する bucket の番号は、領域の座標値が分かっているのだから
領域座標 → ハッシュ を計算してやった後に ハッシュ → bucket 番号と取得する。
このとき、隣接領域で bucket 番号が隣接している必要はない。

詳しいことは、適当な計算幾何学の本を読んで欲しいところ。
こういうのはバケット法などの名前で知られている割と標準的な技法。

569:デフォルトの名無しさん
08/05/05 21:36:55
えぴが陰毛茫々じゃないから
進みが遅いと思う

570:デフォルトの名無しさん
08/05/05 21:40:38
>>566
いや、だから規格では、同じハッシュ値のキーが同じbucketに入ってるって事ぐらいしか、
規定されてないような気がするんだけど。
似たようなハッシュ値が同じ、あるいは近いオフセットのbucketに入っているかもしれないとは書いてない。
そりゃ、大抵の実装はそうなるだろうけど。


571:デフォルトの名無しさん
08/05/05 21:40:59
間違えた、>>568

572:デフォルトの名無しさん
08/05/05 22:01:44
>>561
URLリンク(cpplover.blogspot.com)

573:デフォルトの名無しさん
08/05/05 22:05:07
>>570
似たような点を同じハッシュにするって話じゃないの?

574:564
08/05/05 22:10:03
>>570
なんで似たようなハッシュ値が近いbucketに入る必要があると思うの?
そういう必要は無いですよ、と588で
> このとき、隣接領域で bucket 番号が隣接している必要はない。
と明記したつもりなんだけどなあ。


具体例で説明すると、たとえば 1000×1000 のメッシュに切って、
(x/1000)×(y/1000) % 100 をハッシュ関数として設定したとしよう。
ここに (10000,10000) の点 p が与えられたとしよう。
この点を含む領域に対応するハッシュ関数値は (10×10) % 100 = 0 だから、
ハッシュ関数値 0 に対応する bucket を持ってくればいい。
(点 p に対して bucket(p) を実行することが、この操作に対応する)

次に、この点を含む領域の左側の領域を調べることにしよう。
左側の領域の座標に対応するハッシュ関数値は (9×10) % 100 = 90
だから、ハッシュ関数値 90 に対応する bucket を持ってくればいい。
(p を左に 1000 だけ平行移動した点 q に対して
 bucket(q) を実行することがこの操作に対応する)

575:デフォルトの名無しさん
08/05/05 22:34:13
で、0x関係あんのか

576:デフォルトの名無しさん
08/05/05 22:41:03
>>574
関係ねーだろ10000回染んで来い


577:デフォルトの名無しさん
08/05/05 23:41:50
そんなにdelete thisできないな

578:デフォルトの名無しさん
08/05/06 00:17:58
>>570
つうか、一体何が疑問なんだ
同じハッシュ値のキーが同じbucketに入ってるって事が規定されてりゃ十分だろう
同じハッシュ値になるようにハッシュ関数を作れば同じbucketに分類されるんだから

579:デフォルトの名無しさん
08/05/06 05:45:07
ああ、なるほど。
似たようなキーを同じハッシュにするのか。
それで(x座標値/1000)×(y座標値/1000)だったのか。

580:デフォルトの名無しさん
08/05/06 21:04:03
レベルが高すぎてよくわからん

581:デフォルトの名無しさん
08/05/06 21:05:26
そんなに高くないよ
情報系の学校入れば絶対習う程度

582:デフォルトの名無しさん
08/05/06 21:26:48
学無くても考えれば分かりそうな。

583:デフォルトの名無しさん
08/05/06 22:06:41
修学旅行での温泉の脱衣場の洗濯カゴみたいなもんだ
一つのカゴで一人の美少女中学生をイテレートできる
美少女中学生は控えめだから棚の下の方にハッシュされてるという寸法さベイベ♪

584:デフォルトの名無しさん
08/05/06 22:08:43
下着がなくなってたりするんだな

585:デフォルトの名無しさん
08/05/06 22:54:27
露骨なエロで興奮するあたり、それらが控えられた萌えに欲情する若者とは違うという部分がみえみえなスレだな。
勢力の足りないおっさんが無理にネタ振らなくても良いんだぜ?つまらないだけだから。

586:デフォルトの名無しさん
08/05/07 02:20:45
age

587:デフォルトの名無しさん
08/05/09 03:27:54
>>585
つまらない。

588:デフォルトの名無しさん
08/05/09 09:42:13
どうでもいいよ

589:デフォルトの名無しさん
08/05/14 03:55:48
ここんとこ寒いね

590:デフォルトの名無しさん
08/05/14 04:05:16
うんそうだね

591:デフォルトの名無しさん
08/05/14 04:34:23
今までが暑くて相対的に寒く感じるだけ。
平年並みだろ。

592:デフォルトの名無しさん
08/05/14 21:41:35
それだけ暑いのが続けば「平年並み」の気温も底上げされててもいいんだがなあ。

593:デフォルトの名無しさん
08/05/17 18:02:04
平均気温は過去20年のデータで計算するから、20年間で急激に気候が変動してると追いつかない。
そんだけ温暖化が深刻ってこったな。

594:デフォルトの名無しさん
08/05/17 18:45:41
strong typedef って入るんだったっけ?

595:デフォルトの名無しさん
08/05/17 19:32:54
URLリンク(www.open-std.org)
これか?
入る見込みは無さそうだねぇ。

URLリンク(www.open-std.org)
>Not ready for C++0x, but open to resubmit in future

BOOST_STRONG_TYPEDEFでもつかっておけば。

596:デフォルトの名無しさん
08/05/17 20:20:55
strong typedefってどういう物?
usingとかとは違くて?

597:デフォルトの名無しさん
08/05/17 20:41:23
typedef元とtypedef先が別の型として扱われるというtypedef。

598:デフォルトの名無しさん
08/05/17 20:43:10
C++09 になってんのか、もう。

599:デフォルトの名無しさん
08/05/17 20:58:14
え、まじ?

600:デフォルトの名無しさん
08/05/17 21:12:18
あ、いや、ちゃうわ。ごめん。

601:デフォルトの名無しさん
08/05/17 22:19:45
>>597
それあったらテンプレートがまたワクワクするものになりそうだな

602:デフォルトの名無しさん
08/05/17 22:38:47
数値型の暗黙の変換はC/C++の型システムの穴だから
strong typedef でまずその穴をふさぎたい

603:デフォルトの名無しさん
08/05/17 22:43:14
そんなもん別に機能にしなくてもこれでいいんじゃないの

class AnotherType : public Type{
private:
 operator Type(); //実装しない
}

604:デフォルトの名無しさん
08/05/17 22:44:25
そんなこともできるのか。それは欲しい

605:デフォルトの名無しさん
08/05/17 23:11:50
intとかでもやりたいんでは

606:デフォルトの名無しさん
08/05/18 22:50:15
実装あるもんなw

607:デフォルトの名無しさん
08/05/18 23:24:53
もう#define int nanikaしろよ

608:デフォルトの名無しさん
08/05/19 00:05:38
要するにこういうの作ればいいんだろ?

#include <iostream>

#define STRONG_TYPEDEF(base, name) \
template <typename Dummy = void> class name##_ { \
public: \
name##_() { } \
explicit name##_(const base& value) : m_value(value) { } \
base& get() { return m_value; } \
const base& get() const { return m_value; } \
name##_& operator=(const name##_& rhs) { m_value = rhs.m_value; return *this; } \
friend name##_ operator+(const name##_& lhs, const name##_& rhs) { return name##_(lhs.m_value + rhs.m_value); } \
private: \
base m_value; \
}; \
typedef name##_<> name

struct TestBase { void show() { std::cout << "Test" << std::endl; } };

STRONG_TYPEDEF(int, Hoge);
STRONG_TYPEDEF(TestBase, Test);

int main() {
Hoge a(1), b;
b = Hoge(2);
std::cout << (a + b).get() << std::endl;

Test t;
t.get().show();
}

609:デフォルトの名無しさん
08/05/19 07:37:07
手抜きをするためのものなのに、メンバがコピーされないようじゃ意味がない。

610:デフォルトの名無しさん
08/05/21 10:29:55
mailing 2008-05 きてるお

611:デフォルトの名無しさん
08/05/21 11:09:49
^ω^

612:デフォルトの名無しさん
08/05/21 12:32:56
>>610


613:デフォルトの名無しさん
08/05/21 12:37:34
コンテナとかSTLがみんなconcept化されてる!

614:デフォルトの名無しさん
08/05/21 12:42:31
ドラフトは N2606

615:デフォルトの名無しさん
08/05/21 12:48:01
URLリンク(www.open-std.org)
がスゲイ


616:デフォルトの名無しさん
08/05/21 18:04:02
C99と同じ感じになったりしないの?
現行のC++から、この仕様のC++にキレイに置き換わってしまう?
また、複雑難解怪奇な文法を覚え直さなければいけないの?

617:デフォルトの名無しさん
08/05/21 18:49:37
>>616
GCCだけでなくVC++も実装してくると思う、現にTR1も対応しているし。
C99よりは広まると思う。

文法はどうしようもないな。現在でも複雑怪奇なんだから
今さら少しくらい増えたってどうってことないって構えをしたほうがいいかも。


618:デフォルトの名無しさん
08/05/21 18:50:26
better C++03 として使う人が多そうな予感。
auto とかは使うけど・・・って感じ。

619:デフォルトの名無しさん
08/05/21 20:38:48
ぶっちゃけC++が廃れる要因になるだけな気がしないでもない

620:デフォルトの名無しさん
08/05/21 20:49:42
化粧を覚えたてでちょっと厚塗りしてみた美少女中学生のような感じだな
化粧のナイステクを見つけるのが先かこっちが見慣れるのが先かというところか

621:デフォルトの名無しさん
08/05/21 21:21:56
今はネイティブで代わりがないから C++ 一択だけど、ObjCを綺麗にしたようなクラスベースの
言語があれば、もう C++ にこだわる気になれないなぁ。うんざりする

622:デフォルトの名無しさん
08/05/21 21:36:41
Cに速度的な最適化を期待したのが間違いだったんだ。
やるならfortranを++すれば良かったのに。

623:デフォルトの名無しさん
08/05/21 21:38:00
>>622
そこで Fortress ですよ

624:デフォルトの名無しさん
08/05/21 22:35:21
>>621
だからD言語を使えと(ry

625:デフォルトの名無しさん
08/05/21 22:36:59
>>623
あれは数値計算用途以外では使いたい文法でもないけど・・・
それ以前に、なかなか開発進んでなくね?

626:デフォルトの名無しさん
08/05/21 22:40:30
>624
GC がいらない

627:デフォルトの名無しさん
08/05/21 23:09:24
>>616
(ほぼ)今のままのコードで動く。

628:デフォルトの名無しさん
08/05/21 23:10:26
>>626
GCありというか明示的メモリ管理なしのC++ってもの使ってみたい。
DとかJavaじゃなくて、まっとうなC++で。

629:デフォルトの名無しさん
08/05/22 00:25:00
>628
だが、リソース管理は結局自前だろ
ファイナライザは入れないんだよな

630:デフォルトの名無しさん
08/05/22 20:45:13
>>618
現行でC++03としても使えてない奴の方が多いからな
その辺はしゃーない

631:デフォルトの名無しさん
08/05/22 22:04:12
サブセットでヘッダの要らない仕様を作ってくれないかな。
どうせ、プリコンパイルヘッダみたいな事やるんだから、
.cppをプリコンパイルして参照解決したっていいじゃん。


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5389日前に更新/166 KB
担当:undef