我知道Python//向负无穷大舍入,而在C++中则/是截断,向0舍入。
到目前为止,这是我所知道的:
|remainder|
-12 / 10 = -1, - 2 // C++
-12 // 10 = -2, + 8 # Python
12 / -10 = -1, 2 // C++
12 // -10 = -2, - 8 # Python
12 / 10 = 1, 2 // Both
12 // 10 = 1, 2
-12 / -10 = 1, - 2 // Both
= 2, + 8
C++:
1. m%(-n) == m%n
2. -m%n == -(m%n)
3. (m/n)*n …Run Code Online (Sandbox Code Playgroud) 我有一个Java应用程序,它读取已在Excel中创建的CSV文件(例如2007).有谁知道MS Excel使用什么字符集来保存这些文件?
我猜对了:
但我无法使用这些字符集类型解码扩展字符(例如法语强调字母).
我正在阅读一本书的代码片段并找到:
const char* const & a = "hello"; //can compile
const char*& a = "hello"; //cannot
Run Code Online (Sandbox Code Playgroud)
我所知道的是,在初始化引用时,不会发生数组到指针的转换.
const char* const &,const pointer对指针的引用,指针指向const char.
const char*&,pointer对指针的引用,指针指向
const char.
那么为什么添加一个额外的const,指示指针是a const,允许它编译?
我不明白为什么我总是收到相同的第1位的时候我已经接种于default_random_engine用time(0)(C++入门告诉我用time(0)).这是我的电脑的问题吗?(Ubuntu,C++ 11)
我尝试了一个在线编译器,有趣的是我使用了相同的第一个数字gcc而不使用clang++.
https://wandbox.org/permlink/kiUg1BW1RkDL8y8c
码:
#include <iostream>
#include <ctime>
#include <random>
using namespace std;
int main(){
auto t = time(0);
cout << "time: " << t << endl;
default_random_engine e(t);
uniform_int_distribution<int> uniform_dist(0, 9);
cout << "sequence:";
for(int i = 0; i < 10; i++){
cout << uniform_dist(e);
}
cout << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
结果:
我已经阅读了几篇关于临时对象生命周期的帖子.总之,我了解到:
但是这段代码超出了我的预期:
#include <memory>
#include <iostream>
void fun(std::shared_ptr<int> sp)
{
std::cout << "fun: sp.use_count() == " << sp.use_count() << '\n';
//I expect to get 2 not 1
}
int main()
{
fun(std::make_shared<int>(5));
}
Run Code Online (Sandbox Code Playgroud)
所以我认为这里有2个智能指针对象,一个是std::make_shared<int>(5)临时的未命名对象,另一个sp是函数内部的局部变量.所以根据我的理解,临时的不会在完成函数调用之前"死".我希望输出为2而不是1.这里有什么问题?
我不能这样做:
int &&q = 7;
int &&r = q;
//Error Message:
//cannot convert from 'int' to 'int &&'
//You cannot bind an lvalue to an rvalue reference
Run Code Online (Sandbox Code Playgroud)
如果我理解正确,在初始化右值引用时,也会初始化一个临时变量.所以int &&q = 7;可以认为是:
int temp = 7;
int &&q = temp;
Run Code Online (Sandbox Code Playgroud)
当在右侧使用参考时,我实际上是在使用裁判.所以int &&r = q;可以认为是:
int &&r = temp; //bind an lvalue to an rvalue reference, cause error, understandable
Run Code Online (Sandbox Code Playgroud)
所以上面是我理解编译器错误发生的方式.
为什么添加std::forward可以解决?
int &&q = 7;
int &&r = std::forward<int>(q);
Run Code Online (Sandbox Code Playgroud)
我知道std::forward总是返回一个右值引用,引用的引用是如何std::forward不同的int&&q?
为什么以及何时需要提供自己的删除器?关键字不delete足够吗?
如果您使用智能指针来管理分配的内存以外的资源
new,请记住传递删除器.
正如在评论中被问到的那样,我不清楚引用的文本和示例的原因是我在想某些东西是错误的,这是因为我一直在考虑智能指针只是为了动态内存管理而发明的.所以这个例子使用智能指针管理非动态内存让我感到困惑.
老人的一个很好的解释:
智能指针根本不关心动态内存本身.它只是一种在需要时跟踪某些东西的方法,并在它超出范围时销毁它.提到文件句柄,网络连接等的要点是指出它们不是动态内存,但智能指针可以管理它们就好了.
C++ Primer 5th采用伪网络连接(不定义析构函数)来说明.
坏:
struct destination; // represents what we are connecting to
struct connection; // information needed to use the connection
connection connect(destination*); // open the connection
void disconnect(connection); // close the given connection
void f(destination &d /* other parameters */)
{
// get a connection; must remember to close it when done
connection c = connect(&d);
// use the connection
// if we …Run Code Online (Sandbox Code Playgroud) 从C++ Primer和https://en.cppreference.com/w/cpp/container/priority_queue,我知道:
除了front,push_back和pop_back操作之外,priority_queue还需要随机访问;
我还阅读了谷歌的这篇博文,并且知道:
- push:向队列添加一个新元素,
- pop:删除队列中最大的元素,
- top:访问队列中最大的元素.
push应该实施push_back,没问题.而pop和top似乎对同一元素进行操作.一个是访问它,另一个是删除它.所以我觉得这两个操作应该由执行pop_front()和front()或pop_back()和back().
所以我很困惑,为什么要求front()和pop_back()?
让我们假设底层容器是a vector并且有一些int元素可以说1,2,3,4,5,6.适配器接口" pop(),top()" 如何与底层" front(),pop_back()"一起工作?
C++ Primer 5th:
(代码也来自书中,这里提供了99%的上下文)
#include <string>
using namespace std;
int main()
{
//no error
string s1 = "123", s2 = "aaaa";
s1 + s2 = "wow";
auto a = (s1 + s2).find("a");
}
Run Code Online (Sandbox Code Playgroud)
在新标准(这里是C++ 11)之前,没有办法阻止这种使用.为了保持向后兼容性,库类继续允许赋值给rvalues,但是,我们可能希望在我们自己的类中阻止这种用法.在这种情况下,我们想强制左手操作数(即
this点的对象)为左值.
什么向后兼容性需要为rvalues分配?
顺便说一句,我也很好奇为什么s1 + s2 = "wow"被允许但int i = 3, j = 4; i + j = 7;不允许.(因为它密切相关,我选择不打开另一个问题)
在问这个问题之前,我做了很多搜索和实践试验。
我找到了一个关于如何使用 Node.js 编写 http 代理的(非英语)教程。
到目前为止,我所知道和尝试过的:
SSL proxyFirefox中的代理设置字段和Secure在IE代理设置字段(Windows)都有关设置HTTP隧道。如果设置了SSL proxy或Secure proxy,当浏览器想要连接到 https 站点时,它会发送CONNECT请求而不是普通请求。该CONNECT要求是纯文本,这样防火墙可以看到我想要连接到并切断连接主机什么。所以我从一开始就在考虑是否可以使用https与代理服务器对话。我阅读了所有相关的帖子,但找不到直接谈论这个的答案。有些答案还说“没有 https 代理服务器这样的东西”。
但是教程说这是可以做到的(客户端和代理服务器之间的 HTTPS 没有其他变化?。所以我试了一下。我用我网站的证书将服务器更改为 https。但最终它只适用于 Chrome 中的Proxy SwitchOmega。它不适用于传统设置,例如 Firefox 代理或 IE 代理设置。
代理 SwitchOmega 设置:
Scheme|Protocol|Server|Port
.... | https | .... |...
Run Code Online (Sandbox Code Playgroud)
https如果我启动 https 服务器,我必须在这里选择协议。同样,http如果我启动 …