我有这个struct:
struct Snapshot
{
double x;
int y;
};
Run Code Online (Sandbox Code Playgroud)
我希望x并且y为0.默认情况下它们是0还是我必须这样做:
Snapshot s = {0,0};
Run Code Online (Sandbox Code Playgroud)
将结构归零的其他方法是什么?
快速初学者的问题:
我是否必须初始化简单的类成员变量,或者它们是否保证在任何情况下都被赋予默认值?
例:
class Foo {
int i;
// is i==0 or do I need the following line for that?
Foo() : i(0) {}
};
Run Code Online (Sandbox Code Playgroud)
谢谢!
要初始化类型的对象T,可以执行以下某项操作:
T x = T();
T x((T()));
Run Code Online (Sandbox Code Playgroud)
我的问题涉及由简单类型说明符组合指定的类型,例如unsigned int:
unsigned int x = unsigned int();
unsigned int x((unsigned int()));
Run Code Online (Sandbox Code Playgroud)
Visual C++ 2008和英特尔C++编译器11.1接受这两个没有警告; Comeau 4.3.10.1b2和g ++ 3.4.5(不可否认,并非特别近期)没有.
根据C++标准(C++ 03 5.2.3/2,expr.type.conv):
表达式
T(),其中T是非数组完整对象类型的简单类型说明符(7.1.5.2)或(可能是cv限定的)void类型,创建指定类型的rvalue,它是值初始化的
7.1.5.2说,"简单类型说明符是",并跟随一个包含unsigned和的列表int.
因此,鉴于在5.2.3/2中,"simple-type-specifier"是单数,unsigned并且int是两个类型说明符,上面的例子是否使用unsigned int无效?(如果是这样,后续是,微软和英特尔是否支持所述表达式?)
这个问题更多是出于好奇而不是其他任何问题; 对于由多个简单类型说明符组合指定的所有类型,值初始化等效于零初始化.(这个问题是由回答关于初始化问题的答案的评论提示的).
首先,我认为我的问题与"快速选择什么"的问题不同.因为我在问为什么我能做到这一点,而不是这个.
我是新手.当我今晚学习这种神话般的语言时,我遇到了一个问题,我从未在编程语言中看到过这个标记 - " ? ".我搜索了一会儿.我知道现在有什么可选绑定.
但现在我有了一个新问题.当我想声明一个非可选的变量时.我可以写这个语法:
var friend: String
Run Code Online (Sandbox Code Playgroud)
但我写不出来:
var friend: String = nil
Run Code Online (Sandbox Code Playgroud)
要声明一个nil的变量,我只能使用optional:
var friend: String? = nil
Run Code Online (Sandbox Code Playgroud)
让我们看看第一段代码.当刚声明新的变量朋友时,它的值是nil,对吧?因为我没有为它分配任何价值.但是根据可选的定义,比如第二段和第三段代码,我们不能将nil分配给非可选变量.
所以我的问题是为什么我可以声明一个没有可选标记但没有初始值的变量.这个问题可能很简单,但我真的不知道为什么会这样.
提前致谢!
我对C++中的默认初始化有疑问.我被告知非POD对象将自动初始化.但我对以下代码感到困惑.
为什么当我使用指针时,变量i被初始化为0,但是,当我声明一个局部变量时,它不是.我使用g ++作为编译器.
class INT {
public: int i;
};
int main () {
INT* myint1 = new INT;
INT myint2;
cout<<"myint1.i is "<<myint1->i<<endl;
cout<<"myint2.i is "<<myint2.i<<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出是
myint1.i是0
myint2.i是-1078649848
我目前正在尝试编写一个脚本,以便我可以在数组中有一个项目的最后一个索引中添加一个项目.例如,如果我初始化一个数组int a[5]并且a[0], a[1], a[2]所有都有东西,那么整数将被添加到a[3]这里是什么我有 :
int main(){
int a[5];
a[0] = 10;
a[1] = 20;
a[2] = 30;
for (int i = 0; i < 5; i++){
if (a[i] < 0){
a[i] = 40; //Just an example for what it would be like.
}
}
}
Run Code Online (Sandbox Code Playgroud)
我不禁觉得有更好的方法可以做到这一点,也许是一个不同的if条件.我想知道是否有另一种方法来检查下一个索引是否为空.
在"C++编程语言 "一书的 9.2节中,Bjarne Stroustrup写道:
请注意,默认情况下会初始化在全局或命名空间范围内未定义初始值设定项的变量.对于在免费商店中创建的局部变量或对象,情况并非如此.
但是以下程序打印的值为0:
#include <iostream>
using namespace std;
int main() {
int x;
cout << x << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它不应该返回某种错误吗?
我g++用来编译.
我有这个代码:
int main()
{
char ch[15];
cout<<strlen(ch)<<endl; //7
cout<<sizeof(ch)<<endl; //15
return 0;
}
Run Code Online (Sandbox Code Playgroud)
strlen(ch)即使它是空char数组,为什么会给出不同的结果?
我发现了一些与QtCreator 一起玩的东西以及我在使用gcc的析构函数中遇到的错误:默认情况下,指针不等于NULL; 这需要手动添加(在我的情况下为构造函数).这是正确的吗?怎么会?它们的默认值是多少?
默认情况下,我们如何知道指针未初始化为NULL?有一个类似的问题针对为什么默认情况下没有用NULL初始化指针? 只是为了检查,这是一个非常简单的代码,只是为了查看默认情况下指针是否设置为NULL.
#include <iostream>
using namespace std;
int main()
{
int* x;
if(!x)
cout << "nullptr" << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在输出中,我收到了nullptr消息.如果有人能澄清这一点我感激不尽.