C++ 包含多个字符的字符常量

C++ 包含多个字符的字符常量,c++,visual-studio-2013,C++,Visual Studio 2013,我检查了我在stackoverflow上看到的一些答案,并以一种非常有经验的程序员认为不应该工作的方式修改了一行代码,令人惊讶的是它竟然这样做了。有人能解释为什么这是可能的吗? 问题是一个字符常量包含多个字符(我使用的是Visual Studio 2013) //stack.cpp:定义控制台应用程序的入口点。 // #包括“stdafx.h” #包括 使用std::cout; int*foo() { INTA=5; 回报&a; } int main() { int*p=foo(); 库特 有人

我检查了我在stackoverflow上看到的一些答案,并以一种非常有经验的程序员认为不应该工作的方式修改了一行代码,令人惊讶的是它竟然这样做了。有人能解释为什么这是可能的吗? 问题是一个字符常量包含多个字符(我使用的是Visual Studio 2013)

//stack.cpp:定义控制台应用程序的入口点。
//
#包括“stdafx.h”
#包括
使用std::cout;
int*foo()
{
INTA=5;
回报&a;
}
int main()
{
int*p=foo();
库特
有人能解释为什么这是可能的吗

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

多字符文字定义了类型
int
和实现 价值观


通常,每个字符(足够短的文字)将映射到
int
值的一个字节,这样
'ab'
'ba'
应该有不同的值;有关详细信息,您必须查阅编译器的文档。

您用代码、多字符文字或未定义的行为测试什么?如果您只对多字符文字有疑问,删除导致未定义行为的代码的其余部分,它与问题无关,会分散您对实际问题的注意力。
// 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';
}