2010-09-05

やはりわからない文面

前回の投稿、本の虫: よく分からない文面

やはりわからない。そもそも、cv-qualifierは複数存在こともある。

void f( int const volatile ) ;

しかし、文面は、"Any cv-qualifier..."である。cv-qualifiersではない。とすると、この場合、constかvolatileのどちらかひとつだけが取り除かれるのだろうか。しかし思うに、この場合の関数fの型は、void (int)であるはずだ。とすれば、複数のcv-qualifier(s)を消し去っているわけだ。これまた疑問である。

やはり思うに、Any cv-qualifier modifying a parameter typeとは、any top-level cv-qualifiersと同じ意味ではなかろうかと思う。ではなぜそう書かないのかというと、これまた分からない。

さらに分からないのは、なぜここだけ、deleteという言葉を使っているのかということだ。普通、cv-qualifiersと関係する他の場所では、ignoreとかremoveという言葉を使っている。deleteという言葉は、このような取り除くという意味では、プリプロセッサーあたりでしか使われていない。

6 comments:

やねうらお said...

> 複数のcv-qualifier(s)を消し去っているわけだ。これまた疑問である。

"Any cv-qualifier modifying a parameter type is deleted."

"All cv-qualifiers modifying parameter types are deleted."
は同じ意味です。高校の受験英語でよく出てくるAny←→Allの書き換えです。

ただ、後者のように書くと、ひとつのcv-qualifierがひとつのparameter typeを修飾するという関係が不明瞭になるので前者の形で書いてあるわけです。

Anonymous said...

3.9.3 の 1 に

3.9.1 と 3.9.2 で言及された型は
cv-unqualified型 である。

とあり、

cv-unqualified complete or incomplete object type
もしくは
void
である
各々の型は
それぞれ
3つの cv-qualified バージョン
を持つ。

とあるので

int なら
const int, volatile int, const volatile int

int * なら
int * const, int * volatile, int * const volatile

const int * なら
const int * const, const int * volatile, const int * const volatile

volatile int * なら
volatile int * const, volatile int * volatile, volatile int * const volatile

const volatile int * なら
const volatile int * const, const volatile int * volatile, const volatile int * const

がそれぞれの cv-qualified バージョンなので
どの(any) cv-qualified も
is deleted と言うことは、要するに、
どの(any) cv-qualifiedバージョン も
cv-unqualifeid に戻すんだから

int const * const

int const *
となるから文面に不思議はないかな。

Anonymous said...

[訂正]
> const volatile int * なら
const volatile int * const, const volatile int * volatile, const volatile int * const

const volatile int * なら
const volatile int * const, const volatile int * volatile, const volatile int * const volatile

Anonymous said...

3.9.3 の 1 に

3.9.1 と 3.9.2 で言及された型は
cv-unqualified型 である。

とあり、

cv-unqualified complete or incomplete object type
もしくは
void
である
各々の型は
それぞれ
3つの cv-qualified バージョン
を持つ。

とあるので

int なら
const int, volatile int, const volatile int

int * なら
int * const, int * volatile, int * const volatile

const int * なら
const int * const, const int * volatile, const int * const volatile

volatile int * なら
volatile int * const, volatile int * volatile, volatile int * const volatile

const volatile int * なら
const volatile int * const, const volatile int * volatile, const volatile int * const volatile

が cv-qualified バージョンなので
どの(any) cv-qualified も
is deleted と言うことは、要するに、
どの(any) cv-qualifiedバージョンも
cv-unqualifeid に戻すんだから

int const * const

int const *
で文面的には不思議はないかな。

Anonymous said...

3.9.3 の 1 に

3.9.1 と 3.9.2 で言及された型は
cv-unqualified型 である。

とあり、

cv-unqualified complete or incomplete object type
もしくは
void
である
各々の型は
それぞれ
3つの cv-qualified バージョン
を持つ。

とあるので

int なら
const int, volatile int, const volatile int

int * なら
int * const, int * volatile, int * const volatile

const int * なら
const int * const, const int * volatile, const int * const volatile

volatile int * なら
volatile int * const, volatile int * volatile, volatile int * const volatile

const volatile int * なら
const volatile int * const, const volatile int * volatile, const volatile int * const volatile

が cv-qualified バージョンなので、
どの(any) cv-qualified も
is deleted と言うことは、要するに、
どの(any) cv-qualifiedバージョンも
cv-unqualifeid に戻すんだから

int const * const

int const *
で文面的には不思議はないかな。

Anonymous said...

# 最初のが消えたようなので再投稿


3.9.3 の 1 に

3.9.1 と 3.9.2 で言及された型は
cv-unqualified型 である。

とあり、

cv-unqualified complete or incomplete object type
もしくは
void
である
各々の型は
それぞれ
3つの cv-qualified バージョン
を持つ。

とあるので

int なら
const int, volatile int, const volatile int

int * なら
int * const, int * volatile, int * const volatile

const int * なら
const int * const, const int * volatile, const int * const volatile

volatile int * なら
volatile int * const, volatile int * volatile, volatile int * const volatile

const volatile int * なら
const volatile int * const, const volatile int * volatile, const volatile int * const volatile

が cv-qualified バージョンなので、
どの(any) cv-qualified も
is deleted と言うことは、要するに、
どの(any) cv-qualifiedバージョンも
cv-unqualifeid に戻すんだから

int const * const

int const *
で文面的には不思議はないかな。