小编Bkt*_*ero的帖子

为什么(++ i)++有效时“ ++ i ++”无效?

让我们考虑以下代码:

int main() {
    int i = 2;
    int b = ++i++;
    return 3;
}
Run Code Online (Sandbox Code Playgroud)

编译时出现以下错误:

<source>: In function 'int main()':

<source>:3:16: error: lvalue required as increment operand

    3 |     int b = ++i++;

      |                ^~
Run Code Online (Sandbox Code Playgroud)

这对我来说听起来很公平。后缀增量的优先级高于前缀增量的优先级,因此代码被解析为int b = ++(i++);i是右值。因此,错误。

现在让我们考虑带有括号的此变体,以覆盖默认优先级:

int main() {
    int i = 2;
    int b = (++i)++;
    return 3;
}
Run Code Online (Sandbox Code Playgroud)

该代码将编译并返回3。对我来说,这听起来很公平,但似乎与第一个代码矛盾。

问题:为什么(++i)lvaluei不成?

谢谢!

更新:上面显示的错误消息来自gcc(x86-64 9.2)。这是确切的渲染: gcc错误

Clang x86-64 9.0.0有一个完全不同的消息: clang错误

<source>:3:13: error: expression is …
Run Code Online (Sandbox Code Playgroud)

c++ operators lvalue pre-increment post-increment

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

将地址清理程序与 MSVC 结合使用时应用程序崩溃

我正在尝试将地址清理程序与 MSVC 一起使用。

Visual Studio 安装程序显示我有“Visual Studio Community 2019”版本 16.9.0。

我有最基本的C++程序:

int main() {
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

CMakeLists.txt 也非常基本:

cmake_minimum_required(VERSION 3.14)
project(untitled VERSION 1.0.0)
add_executable(${PROJECT_NAME} main.cpp)
add_definitions(/fsanitize=address /Zi)
Run Code Online (Sandbox Code Playgroud)

程序在调试和发布模式下都能正确编译和链接。在发布模式下,我收到以下警告,这似乎完全合法:

LINK:警告 LNK4302:请将“/DEBUG”添加到链接命令行以获得更好的 ASAN 错误报告

到目前为止,一切都很好 (?)。

但是,当我运行该应用程序时,返回代码为-1073741515 (0xC0000135)。谷歌告诉我这可能表明缺少一个库。

如果我add_definitions(/fsanitize=address /Zi)从构建中删除,返回值为 0。丢失的库很可能是地址清理程序本身。

如何正确配置我的系统来解决此问题?谢谢!

c++ visual-studio

14
推荐指数
2
解决办法
8676
查看次数

C++20 | std::is_constant_evaluate() 和 const 变量

让我们考虑以下代码:

#include <type_traits>

int foo(int arg) {
    if (std::is_constant_evaluated()) {
        return 1;
    } else {
        return 0;
    }
}  

int main() {
    const auto b = foo(0);
    return b;
}
Run Code Online (Sandbox Code Playgroud)

它用gcc 和 clang返回 0 。我原以为它会返回 1 。

如果foo()是 made constexpr, whileb被简单地保留const,那么它确实返回 1 。

我在这里缺少什么?谢谢!

c++ c++20

3
推荐指数
2
解决办法
137
查看次数