小编Bru*_*ice的帖子

是否可以使用在接口部分的实现部分中声明的类

如果我理解正确,该interface部分对其他单位可见,并且该implementation部分仅在当前.pas文件中可见。

我有两个类,类TA应该对外可见,其他类TB不应该,但我需要一个类型为TBin的字段TA

interface
    
type
  TA = class
    //something
    B : TB;
  end;
    
//something
    
implementation
    
type
  TB = class
    //something
  end;
Run Code Online (Sandbox Code Playgroud)

它不是那样工作的。我也不能使用前向声明。有办法吗?

或者,是否有一种方法可以TB在该interface部分中声明但使其具有某种私有性?

delphi oop pascal visibility class

7
推荐指数
2
解决办法
159
查看次数

我应该只对构造函数和移动运算符写 noexcept 吗?

关于 的用法有一个非常(非常)流行的问题noexcept,但它是 8 年前的问题,其他流行的答案也同样古老。在不同的项目中看到其他人的一些代码,在我看来这noexcept并没有成为许多开发人员编写的非常普遍的事情。

除了移动构造函数和移动赋值运算符之外,使用的好处noexcept似乎还不够清楚,无法为每个函数考虑(“我应该在noexcept这里添加还是不添加?”)。

有人找到了这个说明符的一个很好的用法,可以分享他们的经验吗?

c++ c++11

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

是否应该在程序结束时调用 FreeLibrary?

我在文档中没有找到这一点:如果我在程序结束之前需要 DLL 处理程序,我是否仍然应该FreeLibrary在调用程序结束之前调用,或者不需要?

c++ dll loadlibrary c++11

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

没有真正理解 std::atomic::compare_exchange_weak 和compare_exchange_strong 的逻辑

我读过https://en.cppreference.com/w/cpp/atomic/atomic/compare_exchange

以原子方式将 *this 的对象表示形式 (C++20 之前) 值表示形式 (C++20 起) 与预期的表示形式进行比较,如果它们按位相等,则将前者替换为所需的(执行读取-修改-写入操作) )。否则,将 *this 中存储的实际值加载到预期中(执行加载操作)。

据我了解,代码如下

bool expected=true;
extern atomic<bool> b = false; 
void foo ()
{
//
    while(!b.compare_exchange_weak(expected, false));
//
}
Run Code Online (Sandbox Code Playgroud)

循环运行一次后(忽略虚假失败)它将失败,并将写入预期false,因此在第二次迭代时,compare_exchange_weak将返回成功,尽管b尚未更改为true。但这一切有什么意义呢?我虽然可以用它作为同步锁,等待其他线程更改b,但现在我想不出它的用法。

cppreference 中的示例还表明,两次调用compare_exchange_strong 后将会成功。

#include <atomic>
#include <iostream>
 
std::atomic<int>  ai;
 
int  tst_val= 4;
int  new_val= 5;
bool exchanged= false;
 
void valsout()
{
    std::cout << "ai= " << ai
          << "  tst_val= " << tst_val
          << "  new_val= " << new_val
          << "  exchanged= …
Run Code Online (Sandbox Code Playgroud)

c++ multithreading atomic compare-and-swap stdatomic

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

Delphi中的布尔表达式求值顺序?

if exp1 and exp2 and exp3 then
    //something
Run Code Online (Sandbox Code Playgroud)

Delphi中exp1、exp2和exp3(当然都是Boolean)的求值顺序是定义的还是随机的?

delphi pascal boolean logical-operators

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

现代 C++ 中比较 double/float 是否相等的现代实践

if (std::abs(double1 - double2) < std::numeric_limits<double>::epsilon())
  std::cout<<"Equal";
else
  std::cout<<"Not equal";
Run Code Online (Sandbox Code Playgroud)

这段代码与现代 C++11/14/17/21 仍然是我们比较 float 和 double 的方式吗,或者现在只需编写就可以了

if (double1 == double2)
Run Code Online (Sandbox Code Playgroud)

编译器会为我们处理 epsilon 问题吗?

顺便说一句:在检查 epsilon 时,写 < 或 <= 更好吗?

c++ floating-point c++11

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

Delphi 铸造与 as 和 Supports 的区别

使用Supportsvsas关键字进行转换有什么区别,除此之外,as我首先需要检查是否可以使用is关键字进行转换。

delphi com casting interface

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