相关疑难解决方法(0)

以下短语在C++中的含义是什么:零,默认和值初始化?

以下短语在C++中的含义是什么:

  • 零初始化,

  • 默认初始化,和

  • 值初始化

C++开发人员应该了解他们什么?

c++ initialization c++-faq

183
推荐指数
2
解决办法
3万
查看次数

131
推荐指数
4
解决办法
12万
查看次数

在C++ 14中,C++标准是否在使用不确定值和未定义行为方面发生了变化?

正如初始化所述,需要进行左值到右值的转换?是int x = x;UB吗?C++标准在3.3.2 声明部分中有一个令人惊讶的例子,其中a int用它自己的不确定值初始化:

int x = 12;
{ int x = x; }
Run Code Online (Sandbox Code Playgroud)

这里第二个x用它自己的(不确定的)值初始化.- 结束例子 ]

Johannes对此问题的回答表明是未定义的行为,因为它需要左值到右值的转换.

在最新的C++ 14草案标准中N3936,可以在此处找到此示例已更改为:

unsigned char x = 12;
{ unsigned char x = x; }
Run Code Online (Sandbox Code Playgroud)

这里第二个x用它自己的(不确定的)值初始化.- 结束例子 ]

C++ 14中有关于不确定值和未定义行为的变化,这些变化在示例中引发了这种变化吗?

c++ undefined-behavior language-lawyer c++11 c++14

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

int x; int y; int*ptr; 是不是初始化,对吧?

我正在阅读JP Mueller和J. Cogswell撰写的"C++ All-in-One for Dummies"并偶然发现:

#include <iostream>
using namespace std;
int main()
{
    int ExpensiveComputer;
    int CheapComputer;
    int *ptrToComp;
...
Run Code Online (Sandbox Code Playgroud)

这段代码首先初始化所有涉及的东西 - 两个整数和一个指向整数的指针.

只是为了确认,这是一个错误,应该读作'......通过声明',对吧?对我来说,这样的基本错误仍然会出现在书中,这一点很奇怪.

c++ terminology initialization declaration language-lawyer

24
推荐指数
2
解决办法
1823
查看次数

C++默认初始化和值初始化:哪个是调用何时以及如何可靠地初始化模板类型成员

我的问题与以及其他几个相似的问题有些重叠.那些有一些很好的答案,但我已经读过了,我仍然感到困惑,所以请不要认为这个问题是重复的.

所以,我有以下代码:

class A {
    public: int _a;
}

void main()
{
    A inst1;
    A* inst2 = new A;
    A* inst3 = new A();
}
Run Code Online (Sandbox Code Playgroud)

_a未初始化in inst1和in inst2初始化为0in inst3.调用哪个初始化,以及代码为何如此工作?请考虑我的帐户我手头没有C++ 03标准,但我有最后的C++ 11草案(我按'03标准编程),所以'03标准的引用或对'11的引用非常欢迎.

PS这项研究背后的原始任务是正确地初始化任意模板类型的成员T.

c++ initialization default-value

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

为什么成员`float x`用`0`初始化为main()中的对象`a`和`b`?

有人可以指出标准中的哪个子句支持在Coliru中获得的以下行为,对于该片段:

#include <iostream>

class A
{
    int i;
    float x;

    public:
    A() : i(10) {}
    A(int i) : i(i) {}
    int GetI() { return i; }
    float GetF() { return x; }
};


int main()
{
    A a;
    A b(1);
    A x{};
    A y{1};
    std::cout << a.GetI() << '\n';
    std::cout << a.GetF() << '\n';
    std::cout << b.GetI() << '\n';
    std::cout << b.GetF() << '\n';
    std::cout << x.GetI() << '\n';
    std::cout << x.GetF() << '\n';
    std::cout << y.GetI() << '\n';
    std::cout …
Run Code Online (Sandbox Code Playgroud)

c++ default-constructor c++11

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

静态 std::unordered_map 的默认值

我想知道 static 结构中变量的默认值static std::unordered_map<std::string, struct>

这是我的示例代码:

#include <iostream>
#include <string>
#include <unordered_map>

int main()
{
    enum MyStateType
    {
        MY_STATE_NEW,
        MY_STATE_RUN,
        MY_STATE_FREE
    };
    struct Foo
    {
        int num;
        MyStateType state;
    };
    static std::unordered_map<std::string, Foo> map;

    std::cout << map["Apple"].num << '\n';
    std::cout << map["Apple"].state << '\n';
}
Run Code Online (Sandbox Code Playgroud)

输出结果:

0
0
Program ended with exit code: 0
Run Code Online (Sandbox Code Playgroud)

认为内部Foo的变量总是0在开始时被初始化是否安全?

c++ static dictionary initialization

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

如果 php 自动为您初始化类内的属性,是否需要将其初始化为 null?

对两个类中的一个对象执行 var_dump 会得到相同的结果

Class Node{
    public $parent = null;
    public $right = null;
    public $left = null;        
    function __construct($data){
        $this->data = $data;                    
    }
}

Class Node{
    public $parent;
    public $right;
    public $left;        
    function __construct($data){
        $this->data = $data;                    
    }
}
Run Code Online (Sandbox Code Playgroud)

例如

$a = new Node(2);
var_dump($a);
Run Code Online (Sandbox Code Playgroud)

对于上述任一类返回以下内容

object(Node)#1 (4) {
  ["parent"]=>
  NULL
  ["right"]=>
  NULL
  ["left"]=>
  NULL
  ["data"]=>
  int(2)
}
Run Code Online (Sandbox Code Playgroud)

对于变量来说,情况似乎并非如此。

$b;
var_dump($b);
Run Code Online (Sandbox Code Playgroud)

如果您打算将该属性的值设置为 ,null是否需要明确编写该值,因为 php 似乎会自动为您执行此操作?

另外 - 根据这个答案/sf/answers/422316331/,如果您尝试获取未初始化变量的值,C++ 会给出未定义的行为。如果类中的属性未初始化为值null,C++ 是否会像 php 那样自动设置该属性的值?

php

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

const 对象的编译器投诉未初始化

可能重复:
未初始化的常量

我知道需要初始化 const 对象。

所以对于下面的代码,

class sample
{};

int main()
{
   const sample obj;
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译器会抱怨,因为 const 对象obj没有初始化。

但是当我使用默认构造函数修改代码(如下所示)时,编译器不会抛出任何错误。

class sample
{
    public:
       sample() { }
};

int main()
{
    const sample obj;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

新添加的默认ctor做了哪些让编译器满意的事情?

c++ constructor constants default-constructor

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

在哪些情况下c ++会将变量初始化为零?

在使用之前,应该正确定义和初始化每个变量(为其赋值).但是在某些情况下,c ++会将变量设置为默认值零.像下面的情况.

class A{
    ...
    static int val;
    ...};

//int val = 10; //This is the usual definition.
int val;//Definition without assigning a value.
...
A a;  //a class A object
std::cout<<a.val;
Run Code Online (Sandbox Code Playgroud)

结果将为零.显然,编译器做了一些事情来将变量a.val初始化为零.我很好奇他们什么时候会这样做?

c++ initialization

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

如何在同一个类中将两个值从一个函数传递给另一个函数?

我有这个功能:

void fraction::init()
{
  cout<<"enter the values for the numerator and denominator\n";
  cin>>num;
  cin>>denom;
}
Run Code Online (Sandbox Code Playgroud)

我希望这两个数字用于操纵它们的另一个函数.我该如何将它们带到其他功能?注意:两个功能属于同一类.

c++

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

c ++中的特殊枚举

在图书馆,我遇到了一个奇怪的结构,作为枚举:

typedef struct SetControl
{
  const static uint16_t RC_MODE_ERROR;
  const static uint16_t RELEASE_CONTROL_SUCCESS;
  const static uint16_t OBTAIN_CONTROL_SUCCESS;
  const static uint16_t OBTAIN_CONTROL_IN_PROGRESS;
  const static uint16_t RELEASE_CONTROL_IN_PROGRESS;
  const static uint16_t RC_NEED_MODE_F;
  const static uint16_t RC_NEED_MODE_P;
  const static uint16_t IOC_OBTAIN_CONTROL_ERROR;
} SetControl;
Run Code Online (Sandbox Code Playgroud)

成员不会在任何地方初始化,但即使RC_MODE_ERROR等于0,RELEASE_CONTROL_SUCCESS等于1,依此类推.我知道因为我用printf记录了它.到目前为止我还没有看到类似的东西.为什么它甚至可以工作(我认为值默认情况下会被随机数据初始化,或者0)?这个超标准有增值enum吗?我将非常感谢所有的帮助.

c++ enums struct initialization

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

编译器使用错误的值初始化

我已声明这些变量,然后使用此代码在屏幕上打印.

int totalAge = 0;  
float totalGPA = 0.0;
cout << "totalAge "<<totalAge << endl << "TotalGPA " << totalGPA;
Run Code Online (Sandbox Code Playgroud)

输出就是这个.

totalAge 1975299651
TotalGPA -1.51482e+037
Run Code Online (Sandbox Code Playgroud)

那么,现在我想知道为什么这两个变量被分配了这些值,并且如果编译器已经为它们分配了值,那么为什么它没有分配然后默认值为零?

c++

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