C & C++ FAQ
|
C++ | 明示的コンストラクタとは何ですか。 |
では『int型→complex型』の変換が行われるわけです。complex z = 10; // zをcomplex(10)で初期化
xもyも要素数が5である配列として生成されることになりますが、xの宣言は、『int型の値5をIntArray型に変換する』ことを指示しているようにもみえます。これは、私たちの直感にはそぐわないものです。class IntArray { int* v; int sz; public: IntArray(int) { /* ... */ } // ... }; int main(void) { IntArray x = 5; // OK IntArray y(5); // OK //... return (0); }
class IntArray { int* v; int sz; public: explicit IntArray(int) { /* ... */ } // ... }; int main(void) { IntArray x = 5; // エラー IntArray y(5); // OK //... return (0); }
標準C++ 1st | §12.3.1 | Conversion by constructor |
標準C++ 2nd | §12.3.1 | Conversion by constructor |