为什么要使用 std::string 的构造函数来声明它?

Con*_*ies 1 c++ string constructor initialization code-readability

大多数人在用 C++ 或大多数其他语言声明字符串时,都会这样做:

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

但是我见过一些代码示例,其完成方式如下:

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

对我来说,它似乎不必要地混淆了代码,特别是如果using std::string代码中的声明上方隐藏着一条语句,使其看起来像

string example("example");
Run Code Online (Sandbox Code Playgroud)

对于一些可能是代码库新手或来自其他语言的人来说,它几乎看起来像是一个方法或函数。

使用构造函数而不是赋值运算符是否有任何实际或基于性能的原因,或者是否只是个人喜好?

Pet*_*ter 5

第二种形式的实际原因是它反映了实际发生的情况。你的两个例子实际上 - 尽管它们的语法差异 - 做了完全相同的事情。

它们都调用一个构造函数,该构造函数接受 a以文字const char *进行初始化。example"example"

主要区别在于它们有时的解释方式。我已经记不清有多少次看到人们坚持认为

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

执行调用std::stringsoperator=()函数的赋值 - 但事实并非如此。

厌倦了提出此类声明的人(并且希望查看代码的人尽可能了解其实际用途),因此有时更喜欢第二种形式;

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