我在以下程序的第6行(初始化my_foo到foo_init)时收到错误,我不确定我理解为什么.
typedef struct foo_t {
int a, b, c;
} foo_t;
const foo_t foo_init = { 1, 2, 3 };
foo_t my_foo = foo_init;
int main()
{
return 0;
}
Run Code Online (Sandbox Code Playgroud)
请记住,这是我正在研究的大型多文件项目的简化版本.目标是在目标文件中有一个常量,多个文件可用于初始化状态结构.由于它是一个资源有限的嵌入式目标,并且结构不是那么小,我不想要源的多个副本.我不想使用:
#define foo_init { 1, 2, 3 }
Run Code Online (Sandbox Code Playgroud)
我也在尝试编写可移植代码,所以我需要一个有效的C89或C99解决方案.
这是否与目标文件中的ORG有关?初始化变量进入一个ORG并通过复制第二个ORG的内容进行初始化?
也许我只需要改变我的策略,并在启动时使用初始化功能完成所有副本.除非有其他想法吗?
默认构造函数(由编译器创建)是否初始化内置类型?
c++ constructor initialization default-constructor built-in-types
我刚刚开始进入C++,我想养成一些好习惯.如果我刚刚int使用new运算符分配了一个类型的数组,我怎么能将它们全部初始化为0而不用自己循环遍历它们?我应该用memset吗?有没有"C++"方法呢?
我正在忙着用C++重写一个用C#完成的旧项目.
我的任务是重写程序,使其尽可能接近原始程序.
在一堆文件处理期间,编写该程序的前一个开发人员创建了一个包含大量字段的结构,这些字段对应于必须写入文件的设置格式,因此所有这些工作都已经完成.
这些字段都是字节数组.然后C++代码memset用来将整个结构设置为所有空格字符(0x20).一行代码.简单.
这非常重要,因为该文件最终会使用这种格式的文件.我必须做的是将此结构更改为C#中的类,但我找不到一种方法可以轻松地将每个字节数组初始化为所有空格字符.
我最终要做的是在类构造函数中:
//Initialize all of the variables to spaces.
int index = 0;
foreach (byte b in UserCode)
{
UserCode[index] = 0x20;
index++;
}
Run Code Online (Sandbox Code Playgroud)
这很好,但我确信必须有一个更简单的方法来做到这一点.当数组UserCode = new byte[6]在构造函数中设置为时,字节数组会自动初始化为默认的空值.是否有办法让它在声明时变成所有空格,所以当我调用我的类'构造函数时,它会像这样直接初始化?或者memset类似功能?
我需要在C中使用一个大的空数组作为全局数组.除了输入外,还有什么方法可以做到这一点
char ZEROARRAY[1024] = {0, 0, 0, /* ... 1021 more times... */ };
Run Code Online (Sandbox Code Playgroud)
?
我有一个定义结构的快速框架:
public struct CollectionTO {
var index: Order
var title: String
var description: String
}
Run Code Online (Sandbox Code Playgroud)
但是,我似乎无法使用另一个导入库的项目中的隐式成员智能初始化程序.错误是'CollectionTO'无法初始化,因为它没有可访问的初始化程序.即它没有给出默认的隐式成员明智的初始化者public关键字.
var collection1 = CollectionTO(index: 1, title: "New Releases", description: "All the new releases")
Run Code Online (Sandbox Code Playgroud)
我必须添加我自己的init方法,如下所示:
public struct CollectionTO {
var index: Order
var title: String
var description: String
public init(index: Order, title: String, description: String) {
self.index = index;
self.title = title;
self.description = description;
}
}
Run Code Online (Sandbox Code Playgroud)
...但是如果还有其他人知道的话,我宁可不要这样做?
假设我有私人承包商,客人一类ptr,name,pname,rname,crname和age.如果我自己不初始化会怎么样?这是一个例子:
class Example {
private:
int *ptr;
string name;
string *pname;
string &rname;
const string &crname;
int age;
public:
Example() {}
};
Run Code Online (Sandbox Code Playgroud)
然后我做:
int main() {
Example ex;
}
Run Code Online (Sandbox Code Playgroud)
如何在ex中初始化成员?指针会发生什么?做string和int获得0 intialized默认构造函数string()和int()?参考会员怎么样?const引用怎么样?
我还应该知道什么?
有谁知道涵盖这些案例的教程?也许在一些书中?我可以在大学的图书馆访问很多C++书籍.
我想学习它,所以我可以编写更好的(无bug)程序.任何反馈都会有帮助!
我正在尝试找到一种方便的方法来初始化'pod'C++结构.现在,考虑以下结构:
struct FooBar {
int foo;
float bar;
};
// just to make all examples work in C and C++:
typedef struct FooBar FooBar;
Run Code Online (Sandbox Code Playgroud)
如果我想在C(!)中方便地初始化它,我可以简单地写:
/* A */ FooBar fb = { .foo = 12, .bar = 3.4 }; // illegal C++, legal C
Run Code Online (Sandbox Code Playgroud)
请注意,我想明确地避免使用以下表示法,因为如果我将来更改结构中的任何内容,它会让我感到沮丧:
/* B */ FooBar fb = { 12, 3.4 }; // legal C++, legal C, bad style?
Run Code Online (Sandbox Code Playgroud)
为了实现与/* A */示例中相同(或至少类似)的C++ ,我将不得不实现一个愚蠢的构造函数:
FooBar::FooBar(int foo, float bar) : foo(foo), bar(bar) {}
// -> …Run Code Online (Sandbox Code Playgroud) 所以我正在声明并初始化一个int数组:
static final int UN = 0;
int[] arr = new int[size];
for (int i = 0; i < size; i++) {
arr[i] = UN;
}
Run Code Online (Sandbox Code Playgroud)
说我这样做......
int[] arr = new int[5];
System.out.println(arr[0]);
Run Code Online (Sandbox Code Playgroud)
... 0将打印到标准输出.另外,如果我这样做:
static final int UN = 0;
int[] arr = new int[5];
System.out.println(arr[0]==UN);
Run Code Online (Sandbox Code Playgroud)
... true将打印到标准输出.那么Java默认情况下如何初始化我的数组呢?是否可以安全地假设默认初始化是将数组索引设置为0意味着我不必遍历数组并初始化它?
谢谢.
initialization ×10
c++ ×4
arrays ×3
c ×3
struct ×2
.net ×1
c# ×1
constructor ×1
java ×1
new-operator ×1
swift ×1