相关疑难解决方法(0)

C++ 11类只能隐式构造?

有没有办法让一个零大小的类型只能隐式构造?

用例是通过大括号语法来防止结构的某些公共成员被初始化:

class Barrier { ... };


struct Foo {
  int user_sets;
  int* this_to;

  Barrier _bar;

  int *must_be_zero_init_by_linker;
};

Foo foo = {1};               // ok
Foo bar = {1, nullptr};      // ok
Foo baz = {1, nullptr, {}};  // must error
Run Code Online (Sandbox Code Playgroud)

编辑:另一个约束:Foo对象必须是链接器初始化的,因此它不能定义构造函数或私有成员.

c++ c++11

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

为什么在赋值发生时调用了Paramaterized构造函数?

我的问题是最后的陈述,即之前的陈述 return 0;

当我们尝试将int值分配给对象时,为什么要调用参数化构造函数.

我的代码:

#include<iostream>
using namespace std;
class Test {
private:
    int i;
    public:
    Test(int s=0):i(s) {
            cout<<"param ctor: "<<i<<endl;
    }
};

int main()
{
    Test a;         //param ctor called
    Test b(5);      //param ctor called
    //b(a);         //error as we have not implemented copy ctor
    b=a;            //compiler provided assignment opr. called
    b=100;          //why param ctor called for this.??
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

OUTPUT:

  param ctor: 0
  param ctor: 5
  param ctor: 100
Run Code Online (Sandbox Code Playgroud)

c++ copy-constructor assignment-operator

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

为什么要使用 std::string 的构造函数来声明它?

大多数人在用 C++ 或大多数其他语言声明字符串时,都会这样做:

std::string example = "example";
Run Code Online (Sandbox Code Playgroud)

但是我见过一些代码示例,其完成方式如下:

std::string example("example");
Run Code Online (Sandbox Code Playgroud)

对我来说,它似乎不必要地混淆了代码,特别是如果using std::string代码中的声明上方隐藏着一条语句,使其看起来像

string example("example");
Run Code Online (Sandbox Code Playgroud)

对于一些可能是代码库新手或来自其他语言的人来说,它几乎看起来像是一个方法或函数。

使用构造函数而不是赋值运算符是否有任何实际或基于性能的原因,或者是否只是个人喜好?

c++ string constructor initialization code-readability

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

0
推荐指数
1
解决办法
2595
查看次数

未定义的对象错误引用

#include <iostream>
#include <string>
using namespace std;

class Part{
public:
    std::string spec;
    Part(std::string str){
        this->spec = str;
    }
    std::string getSpec(){
        return spec;
    }
};

class Car{
public:
    Part getEngine();
    Part getWheels();
    Part getBody();
};


class Benz:public Car{
public:
    Part getEngine(){
        return Part("Benz Engine");
    }   
    Part getWheels(){
        return Part("Benz Wheels");
    }
    Part getBody(){
        return Part("Benz Body");
    }
};

class Audi:public Car{
public:
    Part getEngine(){
        return Part("Audi Engine");
    }   
    Part getWheels(){
        return Part("Audi Wheels");
    }
    Part getBody(){
        return Part("Audi Body");
    }
}; …
Run Code Online (Sandbox Code Playgroud)

c++ oop abstract-class class

0
推荐指数
2
解决办法
764
查看次数

C++显式转换构造函数

我正在尝试为一个赋值实现一个显式转换构造函数,我很困惑我需要做什么.我有一个包含单个元素的WordList,并且我要使这个构造函数显式,所以我不能这样做:

WordList myList;
list = 'i'; // error
Run Code Online (Sandbox Code Playgroud)

c++ constructor explicit

-1
推荐指数
1
解决办法
1044
查看次数

C++显式构造函数的应用

我是 C++ 11 的新手。我发现了显式构造函数这个术语。但是我没有找到关于显式构造函数的任何好的解释。您能解释一下在什么情况下我应该使用显式构造函数吗?

先感谢您。

c++ explicit move

-1
推荐指数
1
解决办法
6959
查看次数

"明确"阻止自动类型转换?

可能重复:
C++中的explicit关键字是什么意思?

我不明白以下几点.如果我有:

class Stack{
    explicit Stack(int size);
}
Run Code Online (Sandbox Code Playgroud)

没有关键字explicit我将被允许做:

Stack s;
s = 40;
Run Code Online (Sandbox Code Playgroud)

如果没有提供显式,为什么我会被允许这样做?是因为这是堆栈分配(没有构造函数),C++允许将任何内容分配给变量,除非explicit使用它?

c++

-3
推荐指数
1
解决办法
798
查看次数