初始化变量时使用花括号({})或等号(=)
Use curly braces({}) or equal sign(=) when initialize a variable
我在看The C++ Programming Language 4th Edition初始化变量的时候,作者说用{}
比=
初始化变量好:
但是我看到使用=
的人比{}
多。
那么哪种方法是坚持的好原则呢? =
或 {}
?
你选择哪一个取决于你自己的编码风格和你认为最好的。最重要的是,一旦您决定使用哪种方法,请始终如一地使用该方法。不要在方法之间切换,这会使阅读代码变得非常混乱。自 C++98 以来的另一种变量初始化方式(称为“直接初始化”)是:
int variable(1)
但我会建议你不要这样做,它在某些情况下不起作用,正如你的书可能涵盖的那样。
我的个人风格是我在 1960 年代从事 IBM 大型机工作的祖父教给我的:
int
Variable1 = 2,
Variable2 = 39,
Variable3 = 45;
bool
Foo = true,
Bar = false;
// etc.
您会注意到我也在花括号上使用了“=”符号。这似乎是大多数人编写代码的方式,所以我和我的祖父就是这样写的,以减少人们在阅读我们的代码时的困惑。我不知道这种方法在公司环境或组织中的接受度如何,我只是认为它是最有吸引力和最直观的风格。它还可以节省大量输入。
本书建议使用初始化器的一个原因是它成为初始值。
当使用赋值“=”时,在某些情况下,您最终会构造对象并为其赋予初始值,然后代码使用 class 类型的赋值运算符来更改初始值,所以效率较低。这仅在某些情况下,取决于可用的构造函数等。
然而,在大多数情况下,现代编译器可以对其进行优化,使其成为同一事物。所以不用担心。
C++ 的一个问题是总是有多种方法可以做同一件事,无论这件事多么简单。
在任何其他人想出这个愚蠢的想法之前
T a = b (其中 b 是 T 的类型)以赋值运算符调用结束,
让我们清楚一点,在 C++ 和任何面向对象的语言中,赋值运算符不能用于 尚未创建的对象 。
这是初始化,这一直是复制构造函数的调用,与C++版本无关。
在这种情况下,“=”只是一个语法糖。
参见说明部分的Reference:
The copy constructor is called whenever an object is initialized (by direct-initialization or copy-initialization) from another object of the same type (unless overload resolution selects a better match or the call is elided), which includes
initialization: T a = b; or T a(b);, where b is of type T;
我在看The C++ Programming Language 4th Edition初始化变量的时候,作者说用{}
比=
初始化变量好:
但是我看到使用=
的人比{}
多。
那么哪种方法是坚持的好原则呢? =
或 {}
?
你选择哪一个取决于你自己的编码风格和你认为最好的。最重要的是,一旦您决定使用哪种方法,请始终如一地使用该方法。不要在方法之间切换,这会使阅读代码变得非常混乱。自 C++98 以来的另一种变量初始化方式(称为“直接初始化”)是:
int variable(1)
但我会建议你不要这样做,它在某些情况下不起作用,正如你的书可能涵盖的那样。
我的个人风格是我在 1960 年代从事 IBM 大型机工作的祖父教给我的:
int
Variable1 = 2,
Variable2 = 39,
Variable3 = 45;
bool
Foo = true,
Bar = false;
// etc.
您会注意到我也在花括号上使用了“=”符号。这似乎是大多数人编写代码的方式,所以我和我的祖父就是这样写的,以减少人们在阅读我们的代码时的困惑。我不知道这种方法在公司环境或组织中的接受度如何,我只是认为它是最有吸引力和最直观的风格。它还可以节省大量输入。
本书建议使用初始化器的一个原因是它成为初始值。
当使用赋值“=”时,在某些情况下,您最终会构造对象并为其赋予初始值,然后代码使用 class 类型的赋值运算符来更改初始值,所以效率较低。这仅在某些情况下,取决于可用的构造函数等。
然而,在大多数情况下,现代编译器可以对其进行优化,使其成为同一事物。所以不用担心。
C++ 的一个问题是总是有多种方法可以做同一件事,无论这件事多么简单。
在任何其他人想出这个愚蠢的想法之前 T a = b (其中 b 是 T 的类型)以赋值运算符调用结束,
让我们清楚一点,在 C++ 和任何面向对象的语言中,赋值运算符不能用于 尚未创建的对象 。 这是初始化,这一直是复制构造函数的调用,与C++版本无关。
在这种情况下,“=”只是一个语法糖。
参见说明部分的Reference:
The copy constructor is called whenever an object is initialized (by direct-initialization or copy-initialization) from another object of the same type (unless overload resolution selects a better match or the call is elided), which includes initialization: T a = b; or T a(b);, where b is of type T;