Re: const
新城@筑波大学情報です。こんにちは。
const は、自分のプログラムでは使わないけれど、
In article <IRtmf.5$r61.1@news3.dion.ne.jp>
wvn <wvnveowije@yahoo.co.jp> writes:
> 典型的な例として
> void foo(const char * const a)
> {
> ...
> a = b; // error.
> ...
> a[2] = '\0' // error.
> }
> // error.
> の部分がコンパイル時にチェックできるものがありますが、
これ、どちらか一方は OK かと思ってました。両方ダメでもいいけ
ど、片方だけ OK にしたい時にはどうやって書くのですか?
> > volatile も納得できないです。volatile の方は付けるか付けない
> > かでコンパイルが通るかどうかではなくて、動作が変わってしまう。
> > 型宣言で動作が変わるってのは、或る種の直交性を放棄している感
> > じ。volatile ではなくて、明示的にオブジェクトの値を読み出す
> > 演算子を用意した方が良いと思う。
> どちらにせよ、現在のPCのようなリッチな環境で考えればvolatileは負の
> 遺産と位置付けるのは間違ってはいないかと思います。
volatile は、次の場合に必要になります。
(1) 共有メモリ型マルチプロセッサでプログラムを書く時
(2) ハードウェアのレジスタをたたく時
全部の領域が volatile と思うと、最適化全然かかりませんよ。
const じゃなくて、invariant ということで、プログラムの外から
与えるというのは、好きです。コンパイル時には決まらなくても
実行時に決まるというものが特に。実行時特化できるやつね。
そういうのも、コンパイラに入れて欲しいけれどね。
ちょっと宣伝。実行時特化でスレッドのプログラムが速くなるとい
う話の論文です。
[] Yasushi Shinjo and Calton Pu: "Achieving Efficiency and
Portability in Systems Software: A Case Study on POSIX-Compliant
Multithreaded Programs", IEEE Transactions on Software Engineering,
Vol.31, No.9, pp.785-800 (September 2005).
http://doi.ieeecomputersociety.org/10.1109/TSE.2005.98
\\ 新城 靖 (しんじょう やすし) \\
\\ 筑波大学 電子・情報 \\
Fnews-brouse 1.9(20180406) -- by Mizuno, MWE <mwe@ccsf.jp>
GnuPG Key ID = ECC8A735
GnuPG Key fingerprint = 9BE6 B9E9 55A5 A499 CD51 946E 9BDC 7870 ECC8 A735