gpt4 book ai didi

c++ - 重复常量 c_strings 是否重复?

转载 作者:行者123 更新时间:2023-11-30 05:12:59 25 4
gpt4 key购买 nike

例如,在我的程序中,我将一个字符串传递给一个方法。

someMethod(" Hello World ");

在编译时,我假设文字“Hello world”被识别为常量,而无需直接声明它。

如果它确实将其识别为常量,它是否将重复项存储为同一地址?

更具体地说是 c++11?

那么,让我们来看一个案例场景,假设我用对象到字符串列表填充了一个映射。

map<std::string,Shader> list;
list["shaders/sprite.vs"] = Shader("shaders/sprite.vs");
... (Sometime later in another file)
//Some call that needs a shader, that I have stored in a map.
SomeGLFunction("shaders/sprite.vs");

请原谅显然需要使用变量来保存它。

如果没有“/GF”的编译器选项来启用字符串池,编译器通常会将所有三个文字分别存储?

最佳答案

来自 C++ 标准(2.13.5 字符串文字)

16 Evaluating a string-literal results in a string literal object with static storage duration, initialized from the given characters as specified above. Whether all string literals are distinct (that is, are stored in nonoverlapping objects) and whether successive evaluations of a string-literal yield the same or a different object is unspecified

因此,相同的字符串文字是否是不同的对象是由实现定义的。通常它取决于编译器选项。

例如,如果您有这样的电话

someMethod("hello World");

在一个循环中,只使用一个字符串文字。因此该函数将在循环的每次迭代中获取字符串文字第一个字符的相同地址。

但是如果你会写

if ( "hello World" == "hello World" )
{
//...
}

然后根据相应的编译器选项,条件可以产生 true 或 false。

关于c++ - 重复常量 c_strings 是否重复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44187467/

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