小编Cor*_*ica的帖子

在c ++ 11时钟之间转换

如果我有一个time_point任意时钟(比方说high_resolution_clock::time_point),有没有办法将其转换time_point为另一个任意时钟(比方说system_clock::time_point)?

我知道如果存在这种能力,就必须有限制,因为并非所有的时钟都是稳定的,但有没有任何功能可以帮助这些规范中的转换呢?

c++ c++11 c++-chrono

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

Do trivial destructors cause aliasing

C++11 §3.8.1 declares that, for an object with a trivial destructor, I can end its lifespan by assigning to its storage. I am wondering if trivial destructors can prolong the object's lifespan and cause aliasing woes by "destroying an object" that I ended the lifespan of much earlier.

To start, something which I know is safe and alias-free

void* mem = malloc(sizeof(int));
int*  asInt = (int*)mem;
*asInt = 1; // the object '1' is now alive, trivial constructor + assignment …
Run Code Online (Sandbox Code Playgroud)

c++ memory destructor c++11

6
推荐指数
1
解决办法
319
查看次数

将最小(有符号)32 位数字写入 C++ 文字

如果我想使用 <limits> 标头,则很容易编写最小整数:

std::int32_t small = std::numeric_limits<std::int32_t>::min();
Run Code Online (Sandbox Code Playgroud)

small等于-2147483648。

我在一家图书馆工作,里面有这样的数字。因此最好写成

std::int32_t small = -2147483648;
Run Code Online (Sandbox Code Playgroud)

我在 Visual Studio 上遇到了问题,但是当我阅读 C++ 规范时,我发现它表明我无法对任何编译器执行此操作。我认为我不能这样做的原因是规范表明整数文字不包含负号。负号实际上后来变成了一元减号。因此,C++ 处理整数文字 2147483648。这个数字太大,无法放入 int 中(假设 int 是 32 位,这是我正在考虑的平台上的),因此它必须是一个 long int (64 位) 。

(顺便说一句,这是我在 Visual Studio 上出错的地方。它似乎将 2147483648 视为无符号长整型,而不是有符号长整型,但这个问题与规范行为有关)

据我所知,无法将 32 位数字 -2147483648 写为 32 位文字。您必须首先将其设为 64 位文字 2147483648UL,然后将其取反。这似乎是一个疏忽,但它似乎也可以在任何地方编译(除了 Visual Studio),那么我错过了什么?

c++ literals

6
推荐指数
1
解决办法
164
查看次数

我是否可以保证每个使用 JNI 的进程只有一个 JavaVM?

我有一个通过 JNI 从 Java 应用程序使用的 C 共享库。我需要存储一些计算成本高昂的数据,这些数据在JavaVM. 我想将它存储static在 C中的一个变量中,以便它只计算一次。

当然,如果我的库可以JavaVM在同一进程中从多个s 中使用,这将失败。我的静态值仅在第一个JavaVM. 如果我的库是通过类上的System.loadLibrary一个static块从 Java 加载的,是否有可能在多个 JavaVM 之间使用所述库而不必完全卸载我的 C 共享库?

c java java-native-interface jvm

3
推荐指数
1
解决办法
55
查看次数

一对几乎为 1 的值相乘可以得到 1.0 的结果吗?

我有两个浮点值,ab。我可以保证它们是域 (0, 1) 中的值。有什么情况a * b可以等于一吗?我打算计算1/(1 - a * b),并希望避免被零除。

我的直觉是它不能,因为结果应该等于或小于ab。但本能并不能替代理解正确的行为。

我无法指定舍入模式,因此如果存在可能会遇到麻烦的舍入模式,我想了解它。

编辑:我没有指定编译器是否符合 IEEE 标准,因为我无法保证运行我的软件的编译器/CPU 确实符合 IEEE 标准。

c++ floating-point

2
推荐指数
1
解决办法
149
查看次数

为什么我们需要基地对成员的习语?

我熟悉基会成员的习语,以及它的经典例子:

#include <streambuf>  // for std::streambuf
#include <ostream>    // for std::ostream

namespace  std {
  class streambuf;
  class ostream {
    explicit ostream(std::streambuf * buf);
    //...
  };
}
class fdoutbuf   // A customization of streambuf
    : public std::streambuf
{
public:
    explicit fdoutbuf( int fd );
    //...
};

class fdostream
    : public std::ostream
{
protected:
    fdoutbuf buf;
public:
    explicit fdostream( int fd ) 
        : buf( fd ), std::ostream( &buf ) 
        // This is not allowed: buf can't be initialized before std::ostream.
        // std::ostream …
Run Code Online (Sandbox Code Playgroud)

c++ inheritance initialization

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

安全地向 Python 方法添加成员的规则是什么?

我正在查看这样的代码:

def foo():
    return 42

foo.x = 5
Run Code Online (Sandbox Code Playgroud)

这显然向名为 的函数对象添加了一个成员foo。我发现这非常有用,因为它使这些函数对象看起来与带有函数的对象非常相似__call__

是否有我必须遵守的规则以确保我不会在 Python 的未来更新中引起问题,例如我必须避免的名称?也许有一个 PEP 或文档部分提到了规则?

python attributes function dynamic

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