다음 스 니펫의 동작은 정의되지 않았다고 가정합니다. 그러나 저는 지금 올바르게 이해하고 싶습니다. 의 우리가이 코드가 있다고 가정 해 봅시다 :const char * int로 변환 하시겠습니까?
#include <iostream>
int main()
{
std::cout << "mamut" - 8 << std::endl;
return 0;
}
을 그래서 생각이는 않습니다 (숯불 *) ((INT) (CONST의 char *) - (INT)),이 후 출력이 꽤 이상하다하지만, 나는 그것이 진짜 의미가 있다고 기대하지 않는다. 그래서 내 질문에 대한 char * 및 int - 사이에 캐스팅에 대한 정의되지 않은, 또는 거기에 몇 가지 논리가 뒤에?
편집 : 나 그냥이 추가하자 :
#include <iostream>
int main()
{
const char* a = "mamut";
int b = int(a);
std::cout << b << std::endl;
std::cout << &a <<std::endl;
// seems b!= &a
for(int i = 0; i<100;i++)
{
std::cout<<(const char*)((int)a - i)<<std::endl;
}
return 0;
}
출력을 내가 충분히 커질 나에게 등 _Jv_RegisterClasses 그냥 레코드에 대한 같은 것을 제공 후 :
std::cout << a - i << std::endl;
가 생산을 동일한 결과 :
std::cout<<(const char*)((int)a - i)<<std::endl;
는하지만 때문에 당신이 생각하는 이유의 정의되지 않은 동작입니다. Google 포인터 연산. –
'const char *'는'8'을 뺄 때'int'로 변환됩니다. 가정이 잘못되었습니다. – user2079303
가정이 틀린 이유는 무엇입니까?char * + char *에 대해 +가 정의되지 않았으므로 char *을 추가 할 수 없다는 의미입니다. – lightxbulb