如何使用""初始化std :: string?

Moh*_*sin 8 c++ stdstring

我在使用""(即空字符串)初始化std :: string变量时遇到问题.它导致以前工作的代码中的奇怪行为.以下陈述是错误的吗?

std::string operationalReason = "";
Run Code Online (Sandbox Code Playgroud)

当我使用以下代码时一切正常:

std::string operationalReason;
operationalReason.clear();
Run Code Online (Sandbox Code Playgroud)

我相信字符串文字存储在一个独立于编译器的内存位置.我看到的问题实际上是否表明存储器已损坏?如果是这样,我将使用该clear() 函数隐藏它.

谢谢.

Naw*_*waz 25

std::string operationalReason; //is enough!
Run Code Online (Sandbox Code Playgroud)

它调用默认构造函数,并始终创建一个空字符串.

所以我想说std::string operationalReason = ""是矫枉过正.


Arm*_*yan 11

std::string operationalReason = "";

从技术上讲,这是完美的,但更常见,也很好

std::string operationalReason;

字符串的默认ctor将创建一个空字符串

是的,你是正确的字符串文字存储在一个不可变的内存等等等等...但字符串copy-ctor总是复制字符串或传递的C字符串


Mar*_*k B 5

如果你只是这样做会发生什么std::string operationalReason;?这应该与您提供的两个示例具有相同的效果。如果实际上您在使用std::string operationalReason = "";可能表明字符串数据存储已损坏的表单时遇到问题,但这同样可能意味着内存的某些 OTHER 部分已损坏,并且该特定行导致它以不同的方式显示。

当您使用""表单或稍后在运行时,您的代码是否会立即崩溃?您是否能够在 valgrind 或类似程序下运行它以查看它是否发现内存问题?如果您将字符串初始化为除 之外的某个文字会发生什么""