- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
据我所知,在 C++ 中有三种初始化变量的方法。
int x = 0; // C-like initialization
int x (0); // Constructor initialization
int x {0}; // Uniform initialization
为 C++11 进行了统一初始化为初始化不同类型的变量提供更统一的语法,这在 C++03 中需要不同的语法.
类 C、构造函数和统一初始化之间有什么区别?我应该始终使用统一初始化吗?
最佳答案
首先,我建议查看 following talk由 Herb Sutter 撰写,他在其中给出了有关该主题的一些建议。大括号初始化讨论从 around 23:00 开始。 .
当您谈论原始数据类型时,所有 3 种都会产生相同的结果。我个人更喜欢坚持使用旧的 int x = 0
语法,但这归结为个人喜好。
对于类类型,大括号初始化和老式构造函数初始化不能完全互换。例如:
vector<int> v (100); // Creates a 100-element vector
vector<int> v {100}; // Creates a 1-element vector, holding the value 100.
这是因为 std::vector
有一个显式定义 std::initializer_list
的构造函数作为其唯一的论据。请记住
auto var = {1, 2};
创建一个 std::initializer_list
, 与 var
作为它的标识符。
关于初始化列表的事情是它们提供了一致性,这是对之前可用内容的可喜变化。例如,如果您要在 C++ 中初始化一个数组,您将使用:
int arr[] = {1, 2, 3, 4};
但是,如果你想初始化一个 vector<int>
对于相同的元素,您要么必须:
arr
和 arr + 4
对于 C++11,你可以只使用
vector<int> v = {1, 2, 3, 4}; // Same syntax. Nice! Note that the = is optional
大括号初始化有用的另一个实例是它为 C++ 的 most vexing parse 提供了一种解决方法。 .从谈话中,假设我们有两个类(class),origin
和 extents
,可以传递其实例以构造另一个类型为 rectangle
的对象.以下声明:
rectangle w(origin(), extents());
不允许您创建 rectangle
对象使用 origin
和 extents
临时文件,因为该语句被解析为函数声明。啧啧。所以通常情况下,你必须这样做:
origin o;
extents e;
rectangle w(o, e);
通过大括号初始化,您可以即时创建它们,并且
rectangle w {origin(), extents()};
将按预期工作,即传递给用 origin
重载的构造函数对象作为它的第一个参数和一个 extents
对象作为第二个。
规则是针对对象,除非有理由不这样做,否则请使用大括号初始化。
关于c++ - C-like、构造函数和统一初始化之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47400080/
平时很少在jquery中用到this。查看代码时发现用到了,就调试出this的值,心想原来如此。还是挺有用的。这里总结一下this与$(this)的区别和使用。 $(this)生成的是什么?
使用单例类和应用程序范围的托管 bean 来保存应用程序数据有区别吗? 我需要查找某些 JNDI 资源,例如远程 bean 接口(interface),因此我为自己编写了一个单例来缓存我的引用并且只允
如果您仔细查看包含的图片,您会注意到您可以使用 Eclipse IDE 重构 Groovy 代码并将方法转换为闭包,反之亦然。那么,闭包到底是什么,它与方法有什么不同呢?有人可以举一个使用闭包的好例子
vagrant box repackage有什么区别( docs ) 和 vagrant package ( docs )? 我意识到 vagrant package仅适用于 VirtualBox 提
我想看看是否有人可以解释为什么以下代码适用于 valueOf 但不适用于其他代码。 import java.math.BigDecimal; public class Change { publ
这个问题已经有答案了: 已关闭12 年前。 Possible Duplicates: What is Closures/Lambda in PHP or Javascript in layman te
This question already has answers here: Vagrant, Docker, Puppet, Chef (3个答案) 2年前关闭。 docker和chef有什么共同
以下代码在95%的机器上产生相同的输出,但是在几台机器上却有所不同。在 Debug模式下,输出: Changing from New to Fin OK 但在 Release模式下: Changing
////Creating Object var Obj; // init Object Obj= {}; 它们之间有什么区别两个? 有没有可能把它变成一个单行? 这样使用有什么好处吗?
我想找出定时器服务之间的区别。我应该使用哪个以及何时使用。我正在使用 Jboss 应用服务器。 1) java.ejb.Schedule。 @Schedule注解或配置自xml。 2) javax.e
我发现在 C++ 中可以通过三种不同的方式将对象传递给函数。假设我的类(class)是这样的: class Test { int i; public: Test(int x);
有什么区别。 public class Test { public static void main(String args[]) { String toBeCast = "c
如果我有一列,设置为主索引,设置为INT。 如果我不将其设置为自动递增,而只是将唯一的随机整数插入其中,与自动递增相比,这是否会减慢 future 的查询速度? 如果我在主索引和唯一索引为 INT 的
这两种日期格式有什么区别。第一个给出实际时间,第二个给出时间购买添加时区偏移值。 NSDateFormatter * dateFormatter = [[NSDateFormatter alloc]
如果有一个函数,请说foo: function foo() { console.log('bar'); } 那么在 JavaScript 中,从另一个函数调用一个函数有什么区别,如下所示: f
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 4 年前。 Improv
代码是什么: class Time { private: int hours; int minutes; int seconds; pu
我知道这是非常基本的,但有人介意解释一下这两个数组声明之间的区别吗: #include array myints; ...和: int myints[5]; ...以及为什么 myints.size
我学会了如何根据 http://reference.sitepoint.com/css/specificity 计算 css 特异性但是,基于this reference,我不明白伪类(来自c)和伪元
为什么在运行 2) 时会出现额外的空行?对我来说 1 就像 2。那么为什么 2) 中的额外行? 1) export p1=$(cd $(dirname $0) && pwd) #
我是一名优秀的程序员,十分优秀!