小编cin*_*mon的帖子

实际上,为什么不同的编译器会计算不同的 int x = ++i + ++i; 值?

考虑这个代码:

int i = 1;
int x = ++i + ++i;
Run Code Online (Sandbox Code Playgroud)

我们对编译器可能会为这段代码做些什么有一些猜测,假设它可以编译。

  1. 两者都++i返回2,导致x=4.
  2. 一个++i返回2,另一个返回3,结果为x=5
  3. 两者都++i返回3,导致x=6.

对我来说,第二个似乎最有可能。两个++运算符之一用 执行i = 1i递增,并2返回结果。然后用++执行第二个运算符i = 2i递增,并3返回结果。然后23相加得到5

但是,我在 Visual Studio 中运行了这段代码,结果是6. 我试图更好地理解编译器,我想知道什么可能导致6. 我唯一的猜测是代码可以通过一些“内置”并发来执行。++调用了两个运算符,每个运算符i在另一个返回之前递增,然后它们都返回3。这与我对调用堆栈的理解相矛盾,需要加以解释。

C++ …

c++ undefined-behavior

162
推荐指数
7
解决办法
1万
查看次数

我应该将用户定义的概念放在 C++ 项目文件结构中的什么位置?

我正在编写一个模板化函数 func ,它将矩阵作为输入。我提供了一个与 func 兼容的 SquareMatrix 类,但我希望其他矩阵实现与 func 兼容。因此,我定义了矩阵的概念。

template<typename T>
concept Matrix = requires (T a, int b, int c) { 
    {a(b, c)} -> std::convertible_to<double>;
    {a.size1()}->std::convertible_to<size_t>;
    {a.size2()}->std::convertible_to<size_t>;
};
Run Code Online (Sandbox Code Playgroud)

我在三个地方使用了这个概念。在我的 SquareMatrix.h 和 SquareMatrix.cpp 中,我使用它来定义一个模板化构造函数,该构造函数从另一个 Matrix 生成 SquareMatrix。在 func.h 中,我用它来定义模板化函数 func。func.h 导入 SquareMatrix.h。

我现在需要决定应该将用户定义的概念矩阵放在哪个文件中。我对这个决定有几个疑问:

  1. 我应该将矩阵概念放在哪个文件中?文件名和扩展名应该是什么?
  2. 每个概念都应该放在自己的文件中吗?我的项目的所有概念都应该共享一个文件吗?
  3. 我正在使用 Visual Studio IDE。这会改变什么吗?

c++ c++-concepts c++20

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

标签 统计

c++ ×2

c++-concepts ×1

c++20 ×1

undefined-behavior ×1