小编Ric*_*ick的帖子

Python 选择将整数除法舍入到负无穷大背后的数学原因是什么?

我知道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)

c++ python rounding integer-division python-3.x

88
推荐指数
6
解决办法
8440
查看次数

保存文件时Microsoft Excel使用什么字符集?

我有一个Java应用程序,它读取已在Excel中创建的CSV文件(例如2007).有谁知道MS Excel使用什么字符集来保存这些文件?

我猜对了:

  • windows-1255(Cp1255)
  • ISO-8859-1
  • UTF8

但我无法使用这些字符集类型解码扩展字符(例如法语强调字母).

excel encoding character-encoding

60
推荐指数
3
解决办法
12万
查看次数

为什么const char*const&="hello"编译?

我正在阅读一本书的代码片段并找到:

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,允许它编译?

c++ const reference language-lawyer

52
推荐指数
2
解决办法
2890
查看次数

为什么在我按时间播种发电机的同时,我会保持相同的第一位数字?

我不明白为什么我总是收到相同的第1位的时候我已经接种于default_random_enginetime(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)

结果:

正如你所看到的6,无论我使用clang++还是g++编译,我都会随机获得一个随机数的第一个数字. 在此输入图像描述

c++

27
推荐指数
1
解决办法
2325
查看次数

函数中的临时对象参数生存期

我已经阅读了几篇关于临时对象生命周期的帖子.总之,我了解到:

临时在包含它的完整表达式结束后被销毁.

但是这段代码超出了我的预期:

#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.这里有什么问题?

c++

25
推荐指数
2
解决办法
1733
查看次数

普通右值引用和std :: forward返回的引用之间有什么区别?

我不能这样做:

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

c++ rvalue-reference c++11 value-categories

17
推荐指数
2
解决办法
652
查看次数

为什么以及何时需要提供自己的删除器?

为什么以及何时需要提供自己的删除器?关键字不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++ smart-pointers

15
推荐指数
2
解决办法
1899
查看次数

为什么优先级队列需要来自底层容器的front(),pop_back()而不是back(),pop_back()?

C++ Primerhttps://en.cppreference.com/w/cpp/container/priority_queue,我知道:

除了front,push_back和pop_back操作之外,priority_queue还需要随机访问;

我还阅读了谷歌的这篇博文,并且知道:

  • push:向队列添加一个新元素,
  • pop:删除队列中最大的元素,
  • top:访问队列中最大的元素.

push应该实施push_back,没问题.而poptop似乎对同一元素进行操作.一个是访问它,另一个是删除它.所以我觉得这两个操作应该由执行pop_front()front()pop_back()back().

所以我很困惑,为什么要求front()pop_back()

让我们假设底层容器是a vector并且有一些int元素可以说1,2,3,4,5,6.适配器接口" pop(),top()" 如何与底层" front(),pop_back()"一起工作?

c++

13
推荐指数
1
解决办法
951
查看次数

什么向后兼容性需要为rvalues分配?

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;不允许.(因为它密切相关,我选择不打开另一个问题)

c++

13
推荐指数
1
解决办法
247
查看次数

HTTPS 代理服务器仅适用于 SwitchOmega

在问这个问题之前,我做了很多搜索和实践试验。

很长的故事:

我找到了一个关于如何使用 Node.js 编写 http 代理的(非英语)教程。

到目前为止,我所知道和尝试过的:

  • HTTP 代理可以处理 HTTP 请求和 HTTPS 请求,但方式不同。它通过读取客户端的请求来处理 HTTP 请求,并向目标发出新请求并将响应返回给客户端。至于 HTTPS 请求,则是通过 HTTP Tunnel处理的。

在此处输入图片说明

  • SSL proxyFirefox中的代理设置字段和Secure在IE代理设置字段(Windows)都有关设置HTTP隧道。如果设置了SSL proxySecure 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如果我启动 …

ssl proxy http node.js

11
推荐指数
1
解决办法
3775
查看次数