相关疑难解决方法(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万
查看次数

初始化..哪一个更有效?

我有以下问题.应该遵循哪一个更好,为什么?

string strMyString = "SampleString";
Run Code Online (Sandbox Code Playgroud)

要么

string strMyString("SampleString");
Run Code Online (Sandbox Code Playgroud)

提前致谢.

c++ constructor initialization

10
推荐指数
2
解决办法
3417
查看次数

对象按值传递时调用的析构函数

即使通过普通的按值调用参数传递机制将对象传递给函数,理论上它们可以保护和隔离调用参数,但是仍然可能发生可能影响甚至损坏的副作用,用作参数的对象.例如,如果用作参数的对象分配内存并在销毁时释放该内存,那么在调用析构函数时,函数内部的本地副本将释放相同的内存.这将使原始物体损坏并且实际上无用.

这是用C++编写的:完整参考

在这个程序在这里

#include<iostream>

using namespace std;

class Sample
{         
 public:
         int *ptr;
         Sample(int i)
         {
         ptr = new int(i);
         }
         ~Sample()
         {
         cout<<"destroyed";
         delete ptr;
         }
         void PrintVal()
         {
         cout << "The value is " << *ptr;
         }
 };
 void SomeFunc(Sample x)
{
 cout << "Say i am in someFunc " << endl;
}
 int main()
{
 Sample s1= 10;
SomeFunc(s1);
 s1.PrintVal();
}
Run Code Online (Sandbox Code Playgroud)

它会在对象s1从对象返回时被销毁时生成运行时错误.我无法弄清楚为什么会发生这种情况,因为应该制作副本.我想也许是因为班级定义中没有复制构造函数.但我很惊讶地发现,如果使用这个函数声明

 void SomeFunc(Sample &x)
{
 cout << "Say i am in someFunc " << endl;
} …
Run Code Online (Sandbox Code Playgroud)

c++

10
推荐指数
1
解决办法
4314
查看次数

两个(类型)值和类型(值)之间有什么区别?

最近,我对这两个表达式感到困惑 - (type)valuetype(value).

例如 : size_t c = size_t(-1); size_t c = (size_t)-1;

有什么不同?

c c++

2
推荐指数
1
解决办法
95
查看次数

标签 统计

c++ ×4

initialization ×2

c ×1

constructor ×1