有人可以向我解释为什么以下代码的输出是说数组不相等?
int main()
{
int iar1[] = {1,2,3,4,5};
int iar2[] = {1,2,3,4,5};
if (iar1 == iar2)
cout << "Arrays are equal.";
else
cout << "Arrays are not equal.";
return 0;
}
Run Code Online (Sandbox Code Playgroud) 任何人都可以向我解释一下,如果初始化器可能导致信息丢失,为什么编译器允许初始化内置类型的变量?
例如C++ Primer,第5版说,如果初始化器可能导致信息丢失,编译器将不会让我们列出内置类型的初始化变量.
但我的编译器gcc v 4.7.1 a在以下代码中成功初始化变量:
long double ld = 3.1415926536;
int a{ld};
Run Code Online (Sandbox Code Playgroud)
只有警告:缩小'ld'从'long double'到'int'的转换{} [-Wararrowing].
定理说我们不能将数组初始化为另一个数组的副本.但是我们可以将指针初始化为指向另一个数组的第一个元素的指针副本:
int a[] = {0, 1, 2};
int a2[] = a; //error
int *a3 = a; //OK
Run Code Online (Sandbox Code Playgroud)
为什么int a2[] = a;会出错?
旧式代码:
const string *ps;
void *pv;
pv = (void*)ps;
Run Code Online (Sandbox Code Playgroud)
我尝试了三种不同的命名演员:
pv = static_cast<void*>(ps); // error: invalid static_cast from type ‘const string* {aka const std::basic_string<char>*}’ to type ‘void*’
pv = const_cast<void*>(ps); // error: invalid const_cast from type ‘const string* {aka const std::basic_string<char>*}’ to type ‘void*’
pv = reinterpret_cast<void*>(ps); // error: reinterpret_cast from type ‘const string* {aka const std::basic_string<char>*}’ to type ‘void*’ casts away qualifiers
Run Code Online (Sandbox Code Playgroud)
如你看到的.什么都行不通.