小编pas*_*sha的帖子

如果在一行中声明了两个对象,它们的构造顺序是什么?

假设一个类被定义为

class A {
//.....
};
Run Code Online (Sandbox Code Playgroud)

现在我正在创建两个对象

A a,b;
Run Code Online (Sandbox Code Playgroud)

按照什么顺序ab创造的呢?它是由标准定义的吗?

c++ declaration object-construction language-lawyer

63
推荐指数
5
解决办法
4248
查看次数

为什么文字和临时变量不是左值?

我读过的lvalues是"具有已定义存储位置的内容".

而且文字和临时变量也不是左值,但没有给出这个陈述的理由.

是因为文字和临时变量没有定义存储位置?如果是的话,那么如果不在记忆中它们会在哪里居住?

我想在"定义的存储位置"中"定义"有一些意义,如果有(或没有)请告诉我.

c++ rvalue lvalue c++11

24
推荐指数
4
解决办法
1940
查看次数

C++:如果我重载new运算符,我是否也必须重载delete运算符?

我正在阅读关于SO的问题,在其中一个答案中,它被提到:

如果找不到明确的匹配解除分配函数,则传播异常不会导致释放对象的内存.

所以,如果我只是重载我的new运算符而不是delete运算符,那么是否delete会创建并调用任何默认运算符; 或者,我是否还必须delete明确地编写运算符.

c++ new-operator dynamic-memory-allocation delete-operator

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

翻译单元vs编译单元vs目标文件vs可执行vs ....在C++中

我找不到翻译单元,编译单元,目标文件,可执行文件之间的区别......在很多地方我都看到过使用了一个而不是其他的.

我知道这些文件是在C++程序编译和链接期间生成的.任何人都可以列出在这些过程中生成的所有文件并指定它们之间的差异吗?

c++ executable compilation object-files translation-unit

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

我可以提供删除[]的参数,如delete [3]吗?

我读过,delete[]可以释放一个对象数组.然而,在我读过的任何来源中都没有提到它是否是一个错误或未定义提供类似的参数delete[3].

我有以下疑问.

  1. 难道是C++标准规定是否我可以/不可以suplly一个参数delete[]delete[3]
  2. 如果是,效果如何?
  3. 它是否在C++中指定是否可以/不能delete用于从中分配的数组new[]

c++ dynamic-allocation delete-operator

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

如果我在类成员函数的定义中使用全局变量,是否违反了封装?

我被要求解释什么是封装,我回答说"捆绑修改这些数据的数据和函数,称为封装".

答案之后是另一个问题 - "因此,根据您的定义,如果我从类的成员函数修改全局变量,则会违反封装."

回答"是"是有道理的.

我不确定我的解释是否错误或者问题是否有效,我的回答是肯定的.

有人可以帮忙.

c++ encapsulation

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

什么是"加载模块"?

我一直在阅读有关链接和加载(操作系统主题之一,不是特定于任何语言)的内容,我在没有任何先前参考的情况下遇到过这个术语"加载模块".根据我对其使用方式的理解,它似乎是编译和链接后的最终产品(也许是可执行文件).我试过谷歌,这个术语似乎与COBOL语言有关,并且没有特定于COBOL的规范,所以,我在这里发布这个,以便知道你们之前是否有人听过这个并且启发我.

linker cobol mainframe zos

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

C ++中缩小和截断之间的区别?

我一直在读一本书(C++ 编程语言 Stroustrup 第 4 版)。与初始化相关的部分中给出的示例如下:

void f(double d, int i)
{
    int a{ d };     // error : possible truncation
    char b{ i };    // error : possible narrowing
}
Run Code Online (Sandbox Code Playgroud)

截断和缩小之间究竟有什么区别?

c++ initialization truncation narrowing c++11

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

构造函数是否创建了类的对象?

我正在读书

Robert Lafore用C++编写面向对象的程序设计 (第235页)

"如果没有构造函数,编译器会自动在程序中构建一个隐式无参数构造函数,而这个构造函数创建了这些对象,即使我们没有在类中定义它.这个无参构造函数是称为默认构造函数.如果它不是由构造函数自动创建的,那么就无法创建没有定义构造函数的类的对象."

构造函数是否创建了对象?

我理解构造函数可用于初始化对象.但即使我不需要初始化我正在创建的类的对象,编译器也会生成一个默认构造函数.因此我怀疑构造函数还有其他用途/需求.有没有?

c++ constructor default-constructor

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

C++:宏参数中可以有空格吗?

如果我定义一个带有参数的宏,如下所示。

#define define_int(a) int a;
Run Code Online (Sandbox Code Playgroud)

并提供一个参数,中间有空格,如下所示

define_int(* a)
Run Code Online (Sandbox Code Playgroud)

并得到输出?

int * a;
Run Code Online (Sandbox Code Playgroud)

有可能的使用

#define ASSIGN(A,B) B=A;
Run Code Online (Sandbox Code Playgroud)

我想直接使用这个宏从函数返回

ASSIGN(A, return B)
Run Code Online (Sandbox Code Playgroud)

这样它就会输出,

return B = A;
Run Code Online (Sandbox Code Playgroud)

c++ macros preprocessor

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