为什么c ++编译器不会抱怨以下代码?
#include<iostream>
int main()
{
const char* p ="Hello";
std::string q = p + 'H';
std::cout << q << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
它正确地抛出了以下代码的错误
#include<iostream>
int main()
{
const char* p ="Hello";
std::string q = p + "World";
std::cout << q << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
编译器抛出的错误语句
test.cxx: In function 'int main()':
test.cxx:5: error: invalid operands of types 'const char*' and 'const char [6]' to binary 'operator+'
Run Code Online (Sandbox Code Playgroud)
有人可以帮助我理解,为什么第一个代码没有抛出任何错误声明?
'H'是一个字符,一个整体类型.所以p + 'H'与&p['H'](基于数值的索引'H')相同.第一个片段具有未定义的行为,因为数值'H'可能远大于6,但编译器可以自由地不抱怨未定义的行为.
另一方面,"World"它不是一个整体类型,也不是可转换为一个类型.因此无法执行添加,指向空白.
| 归档时间: |
|
| 查看次数: |
82 次 |
| 最近记录: |