是否在标准中指定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.
答案 0 :(得分:2)
C ++ 11标准实际上说(3.9.3 / 1)(强调我的)
[...] cv-qualified或 类型的cv-nonqualified版本是不同类型;但是,它们应具有相同的表示形式 对齐要求
具有以下精度:
相同的表示和对齐要求意味着可互换性作为函数的参数, 从函数返回值,以及联合的非静态数据成员
答案 1 :(得分: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);
}
它会告诉你编译器可以区分它们。 (类型 不同。)