我正在阅读C++ Primer,在第6.2节中它说:
"参数初始化的工作方式与变量初始化相同."
然而当我这样做时:
void foo(char* args[]) {return;}
int main() {
char* args[]={"asd","dsa"}; // ok.
foo({"asd","dsa"}); // error.
}
Run Code Online (Sandbox Code Playgroud)
这是为什么?
在学习C++中的迭代器时,我尝试了以下方法:
#include <vector>
int main() {
std::vector<int> a;
a.end()=a.begin();
//Why is this even allowed by the compiler?
}
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
考虑:
template <typename T> void f(T&);
const int b = 2;
f(b); // ok
f(2); // error, can not bind rvalue to lvalue reference
Run Code Online (Sandbox Code Playgroud)
为什么f(const int)允许?逻辑似乎表明如果程序员没有明确地将模板参数定义为const T&,他/她想要修改binded-to变量.
所以在这种情况下,问题是,为什么模板实例化给自己提供了在没有明确要求的情况下实例化consts的自由?
即使有一个允许模板实例化用consts实例化的理由,那么为什么在这种情况下会绑定到被禁止的rvalues呢?你可以将rvalues绑定到const左值引用.在这种情况下,模板将被实例化f<const int>,并且f(2)将被允许.
我想知道这些决定背后的原因,而不是对标准的引用.
每次向对等点请求特定文件时,每个对等点是否都成为 DHT 节点?还是节点独立于对等点存在?本质上,你如何成为一个节点?你可以是一个peer而不是一个节点吗?
如果问题太简单(这里是菜鸟),我很抱歉,但我无法在其他任何地方找到答案。我使用的术语与此处使用的相同。