我们现在拥有许多新功能的C++ 11.一个有趣且令人困惑的(至少对我来说)是新的nullptr
.
嗯,不再需要令人讨厌的宏了NULL
.
int* x = nullptr;
myclass* obj = nullptr;
Run Code Online (Sandbox Code Playgroud)
尽管如此,我还没有得到如何nullptr
运作.例如,维基百科的文章说:
C++ 11通过引入一个new 关键字作为一个区分空指针常量来解决这个问题:nullptr.它的类型为nullptr_t,它是可隐式转换的,可与任何指针类型或指向成员类型的类型相媲美.除了bool之外,它不可隐式转换或与整数类型相比.
它是一个关键字和一个类型的实例?
另外,你有另一个例子(在维基百科旁边)哪里nullptr
优于好老0
?
我正在编写一个控制台应用程序,试图通过反复试验来"猜测"一个数字,它工作得很好,除了它让我想知道某个部分是我心不在焉地写的,
代码是:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int x,i,a,cc;
for(;;){
scanf("%d",&x);
a=50;
i=100/a;
for(cc=0;;cc++)
{
if(x<a)
{
printf("%d was too big\n",a);
a=a-((100/(i<<=1))?:1);
}
else if (x>a)
{
printf("%d was too small\n",a);
a=a+((100/(i<<=1))?:1);
}
else
{
printf("%d was the right number\n-----------------%d---------------------\n",a,cc);
break;
}
}
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
更具体地说,困惑我的部分是
a=a+((100/(i<<=1))?:1);
//Code, code
a=a-((100/(i<<=1))?:1);
Run Code Online (Sandbox Code Playgroud)
我曾经((100/(i<<=1))?:1)
确保如果100/(i<<=1)
返回0(或错误),整个表达式将计算为1 ((100/(i<<=1))?:***1***)
,并且我离开条件的部分,如果它是真的空的((100/(i<<=1))? _this space_ :1)
,它会工作,它似乎工作正常但是有离开的风险条件空的那部分?
如果您有以下内容:
if (x)
{
y = *x;
}
else
{
y = 0;
}
Run Code Online (Sandbox Code Playgroud)
然后保证定义行为,因为我们只能取消引用x
它是否为0
可以这样说:
y = (x) ? *x : 0;
Run Code Online (Sandbox Code Playgroud)
这似乎按预期工作(甚至用-Wpedantic
g ++编译)
这有保证吗?
c++ conditional-operator short-circuiting undefined-behavior