根据我的理解:当你通过值传递时,函数会生成传递参数的本地副本并使用它; 当函数结束时,它超出范围.当您通过const引用时,该函数使用对无法修改的传递参数的引用.但是,我不明白为什么会选择一个而不是另一个,除非需要修改和返回参数.如果你有一个无效函数没有返回任何东西,为什么选择一个而不是另一个?
编辑:所以基本上通过const引用传递避免复制对象.那么在什么情况下复制对象好呢?我的意思是,如果它始终优化性能,为什么不一直使用const引用呢?
一些程序员似乎非常讨厌他们,而其他程序员似乎认为他们很好.我知道任何可以对多维数组做的事情也可以用于常规数组,所以它们在功能上是等价的.使用多维数组是不好的做法,还是无关紧要?
C++是我的第一语言,因此我习惯于被忽略的空格.但是,我一直在玩Python,我觉得很难习惯空白规则.但是,似乎互联网上的许多程序员都无法超越空白规则.从我所看到的,人们的C++程序往往在空白方面的格式非常一致(或者它很难阅读),那么为什么有些人会像Python这样的基于空格的语言出现这样的问题呢?
我对C++比较陌生,从一开始就钻进了我不能做的事情
int x;
cin >> x;
int array[x];
Run Code Online (Sandbox Code Playgroud)
相反,您必须使用动态内存.但是,我最近发现上面会编译(虽然我得到了一个警告说它被ISO C++禁止).我知道,如果标准不允许这样做,这显然是一个坏主意,但我以前甚至都不知道这是可能的.
我的问题是,为什么g ++允许在标准不允许的情况下不动态分配的可变长度数组?另外,如果编译器可以这样做,为什么不在标准中呢?
我从头开始学习C++,因此我对C语言没有专业的理解.在C++中,你不能把无效指针转换成什么,我理解背后的原因.但是,我知道在C中你可以.这有什么可能的原因?它似乎是类型安全的一个巨大漏洞,对我来说,这似乎是一件坏事.
例如,在伪代码中添加(以前未声明的)int和字符串:
x = 1;
y = "2";
x + y = z;
Run Code Online (Sandbox Code Playgroud)
我见过强类型语言,不允许添加这两种类型,但这些类型也是静态类型的,因此不可能出现上述情况.另一方面,我已经看到了允许上述类型的弱类型语言,并且是静态类型的.
是否有任何动态类型但也强类型的语言,以便上面的代码段无效?
所以前几天我在思考语言,让我感到震惊的是,任何用互联网交互的编译语言编写的程序都会被转换成必须与Internet交互的程序集.我刚刚开始学习一些x86程序集来帮助我更好地理解C++,而且我对这样低级别的东西如何能够访问互联网感到困惑.
我确信这个问题的完整答案远远超过SO答案,但有人可能会给我一个基本的总结吗?
我正在按照指南学习curses,以及之前原型函数中的所有C代码main(),然后定义它们.在我的C++学习中,我听说过函数原型,但从未完成它,据我所知,它对代码的编译方式没有太大区别.这是程序员的个人选择吗?如果是这样,为什么它包含在C中呢?
可能重复:
JIT编译器与脱机编译器
所以直到几分钟前我才真正理解JIT编译器和解释器之间的区别是什么.浏览SO,我找到了答案,提出了标题中的问题.据我所知,JIT编译器具有能够使用其运行的特定处理器的优点,因此可以制作更好的优化程序.有人可以给我一个比较各自的利弊吗?
我正在学习C++.对我来说,我的编程风格看起来最好; 它似乎没有遵循任何一种特定风格的规则.这是一个例子
void f(int x){ //no space between close-paren and bracket
if (!x){
cout << "x is non-zero\n";
} //closing bracket indented to the same level as the original statement
}
Run Code Online (Sandbox Code Playgroud)
对于像类或命名空间这样的东西,它只是略有不同:
class myClass {}; //space between class name and bracket, otherwise the same as functions
Run Code Online (Sandbox Code Playgroud)
K&R风格确实使用了那种包围语句,但我的风格将它用于一切.我想知道它是否有一个名称,所以我可以简单地说出我的缩进样式,而不必使用这些例子来解释.