问题标签 [const-string]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - const_string 库问题
我正在尝试看起来不错的const_string lib,但它在运行时因访问冲突而崩溃(atomic_count,operator++())。测试代码:
只有当 t 是全局的时它才会崩溃。如果我将声明移到 main() 中,就可以了。系统:VS 2010,boost v. 1.47.0
问题:我做错了什么还是库/编译器的问题?有人可以推荐一个更稳定的 C++ 不可变字符串实现吗?
c++ - const_string 作为映射键;制作缓冲区副本?
const_string的重点是避免在不应该更改字符串时进行不必要的复制。
但是,在某些情况下,你不能保证 const char* 源的生命周期比 const_string 长,例如,如果使用 const_string 作为映射的键,如果某些 const char* 被回收,你会很有趣提前调试的分段错误。
有没有办法告诉 const_string,嘿朋友,请保留这个 const char* 的私人副本?还是 std::string?
我将参考上一个问题,以便您了解我在追求什么。
c++ - 静态常量字符串成员变量在使用前总是初始化吗?
在 C++ 中,如果我想定义一些可以在不同的类、函数、文件中使用的非本地 const 字符串,我知道的方法是:
使用定义指令,例如
/li>const 类成员变量,例如
/li>const 类成员函数,例如
/li>
现在我不清楚的是,如果我们使用第二种方法,变量 ConstStrVal 是否总是在任何代码实际使用之前初始化为“some_string_value”?由于“静态初始化顺序惨败”,我对此感到担忧。如果这个问题是有效的,为什么每个人都使用第二种方法?
哪个是最好的方法,2 还是 3?我知道#define 指令不尊重范围,大多数人不推荐它。
谢谢!
c++ - 为什么 strrchr() 返回 `char*` 而不是 `const char*`?
该函数在( ) 中char* strrchr(const char *str, int ch)
返回一个指针 ( ),其中最后一次出现。char*
str
const char *
ch
因此,我们可以编写以下代码而无需任何强制转换:
char*
return而不是return 有什么好处const char*
?
编辑:
正如Shafik Yaghmour指出的那样, strchr implementation 如何工作有很好的答案?
由于我的代码是 C++,所以我将<cstring>
使用<string.h>
. 感谢您的回答;-)
然而,迈克西摩的回答最适合这个问题。我什至在下面添加了一个更详细的答案,以清楚地说明strrchr()
C 函数(不允许重载),声明同时适合const和非 const字符串。因为strrchr()
可以用非常量字符串调用,所以返回的字符串也应该是非常量的。
c - const 字符串存储在哪里?在堆栈或.data 中?
我写了一个简单的c
代码,如下所示。在此代码片段中,我想验证 const 字符串的abcd
存储位置。我首先猜测它应该存储在.data
只读部分中。然而,在 Debian 中进行测试后,事情与我最初的猜测不同。通过检查 gcc 生成的汇编代码,我发现它被放置在 function 的堆栈框架中p
。但是当我稍后在 OSX 中尝试时,该字符串.data
再次存储在部分中。现在我对此感到困惑。有没有存储 const 字符串的标准?
更新:rici 的回答唤醒了我。在 OSX 中,初始文字被存储在.data
之后,然后移动到函数的堆栈帧中。因此,它成为此函数的局部变量。但是,Debian 中的 gcc 处理这种情况与 OSX 不同。在 Debian 中,gcc 直接将文字存储在堆栈中,而不是从.data
. 我很抱歉我的粗心。
c++ - 用户定义的字符串文字与常量字符串的比较
考虑以下具有这两种结构的代码:
两人之间想到了几个问题。
- 尽管它们产生相同的结果,但它们是否被认为是等效的?
- 相当于“内存占用”、“编译运行时效率”等手段。
- 每个的优点/缺点是什么。
- 是否有任何优点 - 缺点之一?
我刚刚遇到了的概念,user-defined literals
我正试图更好地理解它们的功能和有用性。
编辑
好吧,那些试图回答的人有点困惑。我熟悉const
. 问题似乎不止一个。但一般来说,我的想法更难用语言或问题的形式表达,但我试图理解的两者之间差异的总体概念是:使用“常量 std: :strings" 优于“用户定义的字符串文字”?
c++ - 如何在 C++ 中将字符串与 const 字符串进行比较
假设我有以下 poc 代码:
我知道没有与这些操作数匹配的运算符“==”。并且,修复它的方法是将变量 a 的值转换为 'hello'(而不是双引号)作为 char。
但是,如果我别无选择,只能按照代码所示进行比较,该怎么办。可能吗?您能否就这个问题提供任何指导或建议。
感谢您的回复。
c# - 内存优化:声明多个字符串变量 VS 就地使用
我必须编写一个具有大量内存分配考虑的类。
这个类到处都有字符串,就像这样
就像“scriptData”一样,有超过 10 个字符串被声明为“就地”
另一位程序员为这些字符串中的一些在类外需要的地方创建了一些公共 const 字符串。
我想知道是否应该为在课堂上多次重复的其余“就地”字符串创建私有 const 字符串。
我的问题是:
- 内存消耗会有什么不同?
- 使用 const 来保留内存而不是使用“就地”呢?
我需要了解当在类中的多个位置(通过多个方法)定义诸如“textA”之类的字符串时编译器会做什么,程序运行时内存中会发生什么,等等。
谢谢!
c++ - 当我在谷歌测试程序中定义一个 const 字符串时,为什么会发生分段错误?
我想用谷歌测试运行单元测试,但出现分段错误。我刚刚定义了一个全局 const 字符串和 RUN_ALL_TESTS,为什么?
gdb 结果是:
流动的是回溯:
这是我的整个源代码:
我希望程序在没有分段错误的情况下完成。
c - 在使用 C++ 编译器编译代码时将 C 字符串文字传递给函数有问题吗?
我收到一条错误消息,提示“参数类型” const char *
“与“”不兼容char *
。此代码由我的教授提供,我不确定问题出在哪里。
我正在编写 C,但我使用的是 C++ 编译器,因为如果这很重要,它更容易调试。