2014-03-12 32 views
1

我正在检查一些我在stackoverflow上看到的答案,并以一种不应该根据非常有经验的程序员工作的方式改变行,令人惊讶的是它做到了。任何人都可以解释为什么可能吗? 问题是一个字符常量与一个以上的字符(我使用Visual Studio 2013)字符常量与更多的一个字符

// stack.cpp : Defines the entry point for the console application. 
// 

#include "stdafx.h" 
#include <iostream> 
using std::cout; 


int * foo() 
{ 
    int a = 5; 
    return &a; 
} 

int main() 
{ 
    int* p = foo(); 
    cout << *p << ' '; // this line should not compile but it did??? 
    *p = 8; 
    cout << *p << '\n'; 
} 
+0

你在测试你的代码,多字符文字或未定义的行为?如果您只有一个关于多字符文字的问题,请删除导致未定义行为的其他代码,这与问题无关,并且不符合您的实际问题。 –

回答

3

任何人都可以解释为什么这是可能的吗?

因为语言允许这样的事情;它被称为多字符文字。在C++ 11 2.14.3/1的话:

一个多字符的文字的类型为int和实现定义 值。

典型地,(一个足够短的文字的)每一个字符将映射到int值的一个字节,以便'ab''ba'应具有不同的值;有关完整的详细信息,您需要查阅编译器的文档。

相关问题