- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
假设我有这个功能:
void my_test()
{
A a1 = A_factory_func();
A a2(A_factory_func());
double b1 = 0.5;
double b2(0.5);
A c1;
A c2 = A();
A c3(A());
}
最佳答案
C ++ 17更新
在C ++ 17中,A_factory_func()
的含义从创建一个临时对象(C ++ <= 14)更改为仅指定对该表达式在C ++ 17中初始化为(宽松地说)的任何对象的初始化。这些对象(称为“结果对象”)是由声明(如a1
)创建的变量,是在初始化结束时被丢弃的人造对象,或者如果引用绑定需要对象(如在A_factory_func();
中)在最后一种情况下,是人为创建的对象,称为“临时实现”,因为A_factory_func()
没有变量或引用,否则该变量或引用将需要对象存在。
例如,在a1
和a2
的情况下,特殊规则说,在此类声明中,与a1
相同类型的prvalue初始化程序的结果对象是变量a1
,因此
A_factory_func()
。任何中间函数式样式转换都不会产生任何效果,因为
a1
只是“通过”外部prvalue的结果对象,同时也是内部prvalue的结果对象。
A a1 = A_factory_func();
A a2(A_factory_func());
A_factory_func(another-prvalue)
返回的类型。我假设它返回一个
A_factory_func()
-然后执行相同的操作-除了当复制构造函数是显式的时,第一个将失败。阅读
8.6/14
double b1 = 0.5;
double b2(0.5);
A c1;
A c2 = A();
A c3(A());
A
是非POD,并且不对POD进行任何初始化(读取
8.6/9)。第二个副本初始化:值-初始化一个临时值,然后将该值复制到
A
(读取
5.2.3/2和
8.6/14)。当然,这将需要非显式的复制构造函数(读取
8.6/14,
12.3.1/3和
13.3.1.3/1)。第三个为函数
c2
创建一个函数声明,该函数声明返回
c3
,并使用指向返回
A
的函数的函数指针(读取
8.2)。
T t(x);
T t = x;
A
的构造函数(包括
T
的构造函数),参数为
explicit
。重载解析将找到最匹配的构造函数,并在需要时进行所需的任何隐式转换。
x
转换为类型为
x
的对象。 (然后,它可以将该对象复制到要初始化的对象中,因此也需要复制构造函数-但这在下面并不重要)
T
构造函数使用“显而易见的”。
#include <iostream>
struct B;
struct A {
operator B();
};
struct B {
B() { }
B(A const&) { std::cout << "<direct> "; }
};
A::operator B() { std::cout << "<copy> "; return B(); }
int main() {
A a;
B b1(a); // 1)
B b2 = a; // 2)
}
// output: <direct> <copy>
B(A const&)
explicit
的类型不是
a
或不是从其派生时,复制初始化将构造一个转换序列(这显然是这种情况)。因此它将寻找进行转换的方法,并找到以下候选者
B(A const&)
operator B(A&);
B
指针的类型,在非const成员函数中,该指针指向非const。现在,我们以
this
作为参数调用这些候选对象。赢家是转换函数:因为如果我们有两个候选函数都接受对相同类型的引用,则较少const版本会获胜(顺便说一句,这也是偏爱非const成员函数的机制要求non -const对象)。
x
):Comeau编译器会正确拒绝它,但GCC在非pedantic模式下接受它。切换到
A const&
也会使其输出正确的歧义警告。
关于c++ - 复制初始化和直接初始化之间有区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34954833/
我觉得 for(int i = 0; i < 2; i++) 和 for(int i = 0; i < 2; ++i) 不应该做同样的事情。对于第二个例子,从循环开始 i 应该等于 1 对我来说更符合
我试图牢牢掌握异常情况,以便改进我的conditional loop implementation .为此,我进行了各种实验,扔东西,看看会被抓到什么。 这个让我惊喜不已: % cat X.hs mo
我只是想回答一个问题,但我遇到了一些我不明白的事情!为什么如果我在文件中使用内联 CSS 或 CSS,如本例中的颜色,结果就不一样! 代码相同,但第一段是绿色,第二段是红色! 我真的不明白为什么? 谢
我目前正在学习 CSS 并进行试验,我偶然发现了输出中的这种差异。所以这是代码: .red-text { color: red;
"""module a.py""" test = "I am test" _test = "I am _test" __test = "I am __test" ============= ~ $ p
在向 Firestore 写入文档时,我经常看到 serverTimestamp() 标记和 new Date() 对象之间的差异不为零。 差异范围从几 秒到几十 分钟。 他们不是在做同样的事情吗?
据我了解,2.675 和 numpy.float64(2.675) 都是相同的数字。然而,round(2.675, 2) 给出 2.67,而 round(np.float64(2.675), 2) 给
问题本身的描述很简单。我正在测试 C++11 中 std::thread 库和 boost::thread 库的区别。 这些的输出: #include #include #include int
我只是想将文本文件读入 pyspark RDD,我注意到 sqlContext.read.load 之间的巨大差异和 sqlContext.read.text . s3_single_file_inp
SC.exe 和 InstallUtil 都可以安装/卸载 Windows 服务。但它们的工作方式似乎并不相同。 有什么区别? 例如,InstallUtil 失败(找不到某些文件或依赖项错误),而 S
我认为Thread对象就像是带有名称和静态Thread.CurrentThread()的抽象对象,就像访问Thread对象的方式一样。显然,这是错误的假设。。是这样的吗?
我认为Thread对象就像是带有名称和静态Thread.CurrentThread()的抽象对象,就像访问Thread对象的方式一样。显然,这是错误的假设。。是这样的吗?
我是一名优秀的程序员,十分优秀!