Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么';MSVC在_;假设中使用函数调用时出错?_C++_Visual C++_Visual Studio 2013 - Fatal编程技术网

C++ 为什么';MSVC在_;假设中使用函数调用时出错?

C++ 为什么';MSVC在_;假设中使用函数调用时出错?,c++,visual-c++,visual-studio-2013,C++,Visual C++,Visual Studio 2013,当我使用uu假设(SomeFunc())时;它可以很好地编译,即使假设是编译时提示,并且SomeFunc()不能在编译时预测其返回值。有人能解释一下这里发生了什么吗?通常函数可以在编译时预测其返回值。即使不能,为什么要假定编译失败呢?这是对优化器的提示。如果它不是一个有用的提示,它将不会做任何有用的事情,但没有理由失败 还要注意的是,\uu假设的文档建议在发布模式下使用它进行断言。但是函数调用通常用于断言。如果\u假设不允许获取函数返回值,则需要两个不同的断言宏。通常函数可以在编译时预测其返回值

当我使用uu假设(SomeFunc())时;它可以很好地编译,即使假设是编译时提示,并且SomeFunc()不能在编译时预测其返回值。有人能解释一下这里发生了什么吗?

通常函数可以在编译时预测其返回值。即使不能,为什么要假定编译失败呢?这是对优化器的提示。如果它不是一个有用的提示,它将不会做任何有用的事情,但没有理由失败


还要注意的是,
\uu假设
的文档建议在发布模式下使用它进行断言。但是函数调用通常用于断言。如果
\u假设不允许
获取函数返回值,则需要两个不同的断言宏。

通常函数可以在编译时预测其返回值。即使不能,为什么要假定编译失败呢?这是对优化器的提示。如果它不是一个有用的提示,它将不会做任何有用的事情,但没有理由失败

还要注意的是,
\uu假设
的文档建议在发布模式下使用它进行断言。但是函数调用通常用于断言。如果
\u假设不允许
获取函数返回值,则需要两个不同的断言宏

SomeFunc()
不能在编译时预测其返回值

编译器可能无法在编译时计算返回值,但这并不重要

当您使用时,程序员告诉编译器“此表达式的计算结果始终为
true
”,您给了编译器额外的信息,否则它可能无法从源代码中推断出这些信息

如果在运行时对表达式求值时表达式的求值结果恰好不是
true
,则该行为未定义。只有在表达式保证为
真的情况下,您才有责任使用
\u假设

SomeFunc()
不能在编译时预测其返回值

编译器可能无法在编译时计算返回值,但这并不重要

当您使用时,程序员告诉编译器“此表达式的计算结果始终为
true
”,您给了编译器额外的信息,否则它可能无法从源代码中推断出这些信息

如果在运行时对表达式求值时表达式的求值结果恰好不是
true
,则该行为未定义。只有在表达式保证为
真的情况下,您才有责任使用
\u假设