「プログラミング言語C++第四版」について気が付いたことなど (2)

非推奨って言われてもなあ (笑)


13.5.1.3 例外指定

古いC++コードでは、例外指定(exception specification)が使われている。たとえば:

void f( int) throw( Bad, Worse); // 送出する例外は Bad と Worse に限られる
void g( int) throw(); // 例外を送出しない

空の例外指定 throw() は、noexcept(§ 13. 5. 1. 1)と等価である。…(中略)… 空でないthrow 指定子は、使いこなすのが難しい上に、指定された例外が送出されたかどうかの判断のための実行時チェックが高コストになる可能性がある。この機能は、うまくいかなかったので、現在では非推奨とされている。利用し てはいけない。


感想:

これは翻訳の問題ではなくてただの感想ですが、noexcept以外は役に立たないということのようですけれども、標準規格に取り入れられた機能が「うまくいかなかったので非推奨」って言われても困るかも知れません。でも、そもそもユーザー例外って、大域エラー処理以外ではあまり使わないものですし、私はthrow()機能は殆ど使ってないので個人的には実は困りません。

 

「プログラミング言語C++第四版」について気が付いたことなど (1)

分かりにくい訳


12.1.6.1 constexprと参照

constexpr 関数 は、 副作用 が 認め られ て い ない ので、 局所 オブジェクト 以外 の 値 は 変更 でき ない。 その ため、 変更 し ない 限り は、 非 局所オブジェクトを利用できる。


原文:

A constexpr function cannot have side effects, so writing to nonlocal objects is not possible. However, a constexpr function can refer to nonlocal objects as long as it does not write to them.


試訳:

constexpr関数は副作用はもてない。従って非局所オブジェクトに対する書き込み操作は出来ないが、書き込まない限り参照することは出来る。


要するに

割と当たり前のことを言っているのに「そのため」のせいで分かりにくくなっているという … 。

「プログラミング言語C++第四版」について気が付いたことなど (0)

C++98(もう30年も前の規格ですね)で止まっている知識のアップデートをはかるべく「プログラミング言語C++第四版」(ビャーネ・ストラウストラップ著、柴田望洋訳)を読みました。この本はC++11が対象で最新のC++17より6年も前の規格を対象にした本なんですけど、ストラウストラップによる教科書は今のところこれ(4th Edition)が一番新しいですし実用的にはそろそろこの2011年規格が普通に使えるようになってきたくらいなもんじゃないかと思ってますもので、まあ、今齧るにはこの辺りが適当かな、と。この邦訳本が出たのも2015年ですし。

少々古いとは言っても、C++11にはこれまで見たことない書き方やライブラリが沢山追加されていて、一体誰がこんなマニアックな言語仕様やライブラリのサポートを必要としているのだろうと怪訝に思う反面、何も律儀に全機能を使う必要は無いのですし、これまでは制約があって素直に書けなかったところやごちゃごちゃ長々と書くしかなかったところなど、古いやり方にこだわらないで使えるところは柔軟に使っていこうと思います。autoや範囲for文は素直に便利ですし、マルチスレッドのサポートが標準に組み込まれたので(ロックフリープログラミングは難解ですが)マルチプラットフォームなプログラムを書くのが楽になりますし、なにより他人の書いたものが読めないようでは困りますしね。

さて、邦訳は全体的にはスムーズな翻訳だと思います。他の方による初期のエディションの翻訳に比べたらもう雲泥の差ですが、それでも、大部な本ということもあって学生さんの手でも借りたのか監訳者の目が届いていないのか、原文と比べるとどうも怪しいところが幾つかあるように思われます。柴田さんのWEBページに正誤表でもあればと思ったのですけれども、見当たらないので、ならばこの本を読まれる方の参考にでもなればと思い、その辺りを中心に気が付いたことなどメモ代わりに(そっと)書いておこうと思います。

誤解して欲しくないのですが、邦訳は全体的にはスムーズな読み易い訳です。このような良質の日本語の教科書があるのはとても幸せなことです。またもし、指摘の方が間違っているというようなことがあれば、記事にコメントして頂ければ幸いです。