从我在那里读到:为什么Objective-C在Apple社区之外不是很受欢迎?
Objective-C是C的超集(实际上比C++严格得多),因此不会出现向后兼容的问题.您可以在Objective-C中使用C语言执行的任何操作.
作为一个超集是二元的,就像怀孕一样.Obj-C是C的超集,而C++则不是.
超集是什么意思?Objective-C以什么方式更接近//向后兼容C?客观C以什么方式比C++更接近C哲学?
任何C程序都可以编译而不需要通过Objective-C编译器进行修改(100%兼容性)吗?
这是一个关于编程语言设计和兼容性的问题,而不是关于哪一个更好的战争.
在C++中,以下是否有未定义的行为:
int i = 0;
(i+=10)+=10;
Run Code Online (Sandbox Code Playgroud)
在我对C和C++中+ =的结果的答案的评论中有一些争论?这里的微妙之处在于默认响应似乎是"是",而正确的答案似乎是"它取决于C++标准的版本".
如果它确实取决于标准的版本,请解释UB的位置和不在的位置.
问这个问题我感觉非常愚蠢.但我不能自己找出原因.
int main()
{
int target;
int buffer =10;
const int source = 15;
target = (buffer+=source) = 20;
cout << target+buffer;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
target = (buffer+=source) = 20;将成为target = (25) = 20.
但是如果我在源文件中给出相同的语句,则会产生l值错误.
target+buffer打印的价值如何40.
有没有办法使用复合赋值运算符来实现这样的事情:
a = (a * 10) + b;
Run Code Online (Sandbox Code Playgroud)
最初我尝试了以下内容:
a *= 10 + b;
Run Code Online (Sandbox Code Playgroud)
但这相当于:
a = a * (10 + b)
Run Code Online (Sandbox Code Playgroud)
只是好奇.今天跑过这个.这不是功课.
我很惊讶今天在同事的代码中看到了一些语法.
void doSomething(bool& boolRef);
bool ok = true;
doSomething(ok = false);
Run Code Online (Sandbox Code Playgroud)
我认为这是一个错误,因为param中的赋值运算符ok = false,返回赋值的值,在本例中为false.由于doSomething期待参考,我的第一反应是"那应该不起作用",因为它看起来几乎完全相同doSomething(false);
但唉它确实有效.并且doSomething像你期望的那样重新分配工作中的引用值.
有人可以解释为什么这有效吗?
谢谢!
#include<stdio.h>
int main()
{
int a = 10;
++a = 20;
printf("a = %d", a);
getchar();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
上述代码获得的输出是:a = 20; 当作为C++代码运行时.
#include<stdio.h>
int main()
{
int a = 10;
a++ = 20;
printf("a = %d", a);
getchar();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这给出了编译错误.这背后的原因是什么?