我正在检查我在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'
具有不同的值;有关详细信息,您必须查阅编译器的文档。