gpt4 book ai didi

c++ - C++中字符串文字的数据类型是什么?

转载 作者:IT老高 更新时间:2023-10-28 22:18:02 26 4
gpt4 key购买 nike

关于 C++ 中字符串字面量的数据类型,有人提出了类似的问题。

很多人都引用过标准:

A narrow string literal has type “array of n const char”, where n is the size of the string as defined below, and has static storage duration (3.7)

我在main函数中写了如下语句:

  char cstring[]= "hellohellohellohellohellohello";

但是我在程序集中找不到任何作为静态数据存储的字符串文字。事实上,汇编显示字符串被分解并直接“存储”在指令中。

    movl    $1819043176, -48(%rbp)
movl $1818585199, -44(%rbp)
movl $1701343084, -40(%rbp)
movl $1752132716, -36(%rbp)
movl $1869376613, -32(%rbp)
movl $1819043176, -28(%rbp)
movl $1818585199, -24(%rbp)
movw $28524, -20(%rbp)
movb $0, -18(%rbp)

虽然全局范围中的类似语句将字符串存储为静态数据。

char cstring1[] = "hellohellohellohellohellohello";

大会

cstring1:
.string "hellohellohellohellohellohello"

以上示例可在线获取 here .

所以这似乎不符合引用的标准。也许这里引用的内容有一些异常(exception)?

最佳答案

根据“as-if”规则,它确实符合标准。

由于字符串文字的唯一用途是初始化cstring,因此不需要任何对象表示。编译器已经消除了它,转而用另一种方法初始化 cstring,这种方法具有相同的结果,但编译器认为在某些方面(速度或代码大小)更好。

关于c++ - C++中字符串文字的数据类型是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38568172/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com