相关疑难解决方法(0)

复制初始化和直接初始化之间有区别吗?

假设我有这个功能:

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());
}
Run Code Online (Sandbox Code Playgroud)

在每个分组中,这些陈述是否相同?或者在某些初始化中是否有额外的(可能是可优化的)副本?

我见过有人说过这两件事.请引用文字作为证据.还请添加其他案例.

c++ initialization

230
推荐指数
5
解决办法
5万
查看次数

将字符串初始化为null与空字符串

如果我的C++代码(如下所示)有一个初始化为空字符串的字符串,这有什么关系:

std::string myStr = "";
....some code to optionally populate 'myStr'...
if (myStr != "") {
    // do something
}
Run Code Online (Sandbox Code Playgroud)

与no/null初始化:

std::string myStr;
....some code to optionally populate 'myStr'...
if (myStr != NULL) {
    // do something
}
Run Code Online (Sandbox Code Playgroud)

有没有最好的做法或陷阱?

c++ string initialization

39
推荐指数
5
解决办法
18万
查看次数

为什么调用复制构造函数而不是转换构造函数?

所以基本上这段代码:

class A {
};
class B { 
   B (const B& b) {}
public: 
   B (){}
   B (const A& a) {} 
};

int main()
{
   A a;
   B b1(a);  //OK
   B b2 = a; //Error
}
Run Code Online (Sandbox Code Playgroud)

只生成一个错误B b2 = a.那个错误是

错误:'B :: B(const B&)'是私有的

除了直接转换构造函数之外,为什么还要尝试调用复制构造函数?

从错误消息中可以清楚地看到B创建了一个临时文件然后用于复制构造,但为什么呢?这个标准在哪里?

c++ copy-constructor

22
推荐指数
1
解决办法
3582
查看次数

为什么复制初始化的方式如何?为什么需要复制构造函数?

可能重复:
复制和直接初始化的动机背后的动机是什么?

通过复制初始化,我的意思是这样的:

struct MyStruct
{
    MyStruct(int) {}
    MyStruct(const MyStruct&) {}
};

MyStruct s = 5; // needs *both* the int and copy constructor
Run Code Online (Sandbox Code Playgroud)

尽管用C++编程多年,但我从未意识到上面的代码需要复制构造函数(感谢jogojapan).暂时一直被遗忘,因此我甚至都不知道它是否存在(至少在肤浅的层面,尽管它被优化了),直到它被指出给我.

经过大量的谷歌搜索,我了解它是如何工作的.我的问题是为什么它是这样的?

为什么标准不能使上面的例子不需要复制构造函数?是否有一些特定的案例/示例表明在这种初始化中需要复制构造函数很重要?

如果没有合理的解释为什么事情就是他们的方式,我只是把它看作是一件讨厌的神器,但如果有一些重要的东西我不想知道,我宁可不要无知.

c++ copy-constructor copy-initialization

8
推荐指数
1
解决办法
120
查看次数

复制构造函数不调用

当我在这里阅读有关复制初始化与直接初始化的内容时.复制构造函数应该在复制初始化时调用.为什么这里复制构造函数不调用?

#include <iostream>

using namespace std;

class A{};

class B{
public:
B(const A &a){cout << "B construct from A" << endl;}
B(const B &b){cout << "B copy constructor" << endl;}
};

int main(){
A a;
B b = a;
return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ constructor

4
推荐指数
2
解决办法
248
查看次数