6

const要素の配列が非const要素の配列と異なる型を持つことは標準で指定されていますか? これがVC2010とGCC4.8.0の私のコードと出力です。

ありがとうございました。

#include <iostream>
#include <typeinfo>
#include <ios>
int main(){
    int arr_a[] = {1, 2};
    int const arr_b[] = {3, 4}; // or const int arr_b[] = {3, 4};
    std::cout << typeid(arr_a).name() << "\n";
    std::cout << typeid(arr_b).name() << "\n";
    std::cout << "Same type: " << std::boolalpha << (typeid(arr_a) == typeid(arr_b)) << ".\n";
}

int [2]
int const [2]
Same type: false.

A2_i
A2_i
Same type: true.
4

2 に答える 2

0

述べたように、typeid().name() は良い選択ではありません。結果は実装で定義されるからです。これを試して:

#include <iostream>
using namespace std;

void array_function(const int a[]) {
   cout << "const int a[]" << endl;
}

void array_function(int a[]) {
   cout << "int a[]" << endl;
}


int main()
{
    const int carray[] = { 1, 2, 3};
    int array[] = { 1, 2, 3};
    array_function(carray);
    array_function(array);
}

コンパイラが違いを見分けることができることがわかります。(種類異なります。)

于 2013-07-02T14:46:53.387 に答える