C++ 为什么';MSVC在_;假设中使用函数调用时出错?
当我使用uu假设(SomeFunc())时;它可以很好地编译,即使假设是编译时提示,并且SomeFunc()不能在编译时预测其返回值。有人能解释一下这里发生了什么吗?通常函数可以在编译时预测其返回值。即使不能,为什么要假定编译失败呢?这是对优化器的提示。如果它不是一个有用的提示,它将不会做任何有用的事情,但没有理由失败C++ 为什么';MSVC在_;假设中使用函数调用时出错?,c++,visual-c++,visual-studio-2013,C++,Visual C++,Visual Studio 2013,当我使用uu假设(SomeFunc())时;它可以很好地编译,即使假设是编译时提示,并且SomeFunc()不能在编译时预测其返回值。有人能解释一下这里发生了什么吗?通常函数可以在编译时预测其返回值。即使不能,为什么要假定编译失败呢?这是对优化器的提示。如果它不是一个有用的提示,它将不会做任何有用的事情,但没有理由失败 还要注意的是,\uu假设的文档建议在发布模式下使用它进行断言。但是函数调用通常用于断言。如果\u假设不允许获取函数返回值,则需要两个不同的断言宏。通常函数可以在编译时预测其返回值
还要注意的是,
\uu假设
的文档建议在发布模式下使用它进行断言。但是函数调用通常用于断言。如果\u假设不允许获取函数返回值,则需要两个不同的断言宏。通常函数可以在编译时预测其返回值。即使不能,为什么要假定编译失败呢?这是对优化器的提示。如果它不是一个有用的提示,它将不会做任何有用的事情,但没有理由失败
还要注意的是,\uu假设
的文档建议在发布模式下使用它进行断言。但是函数调用通常用于断言。如果\u假设不允许获取函数返回值,则需要两个不同的断言宏
SomeFunc()
不能在编译时预测其返回值
编译器可能无法在编译时计算返回值,但这并不重要
当您使用时,程序员告诉编译器“此表达式的计算结果始终为true
”,您给了编译器额外的信息,否则它可能无法从源代码中推断出这些信息
如果在运行时对表达式求值时表达式的求值结果恰好不是true
,则该行为未定义。只有在表达式保证为真的情况下,您才有责任使用\u假设
SomeFunc()
不能在编译时预测其返回值
编译器可能无法在编译时计算返回值,但这并不重要
当您使用时,程序员告诉编译器“此表达式的计算结果始终为true
”,您给了编译器额外的信息,否则它可能无法从源代码中推断出这些信息
如果在运行时对表达式求值时表达式的求值结果恰好不是true
,则该行为未定义。只有在表达式保证为真的情况下,您才有责任使用\u假设