草庐IT

评估器

全部标签

c++ - 它在 C++11 标准中的什么地方指定了在翻译过程中何时可以评估 constexpr 函数?

仅仅因为一个函数(或构造函数)......被声明为constexpr并且函数定义满足constexpr要求...并不意味着编译器会在翻译过程中评估constexpr函数。我一直在查看C++11FDIS(N3242,可在http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/获得)试图确定两件事:编译器何时有义务在翻译期间评估constexpr函数?何时允许编译器在翻译期间评估constexpr函数?第5.19节第1段说常量表达式可以在翻译过程中求值。据我所知,第5.19节的其余部分阐述了constexpr函数定义中的有效规则。我知

c++ - 它在 C++11 标准中的什么地方指定了在翻译过程中何时可以评估 constexpr 函数?

仅仅因为一个函数(或构造函数)......被声明为constexpr并且函数定义满足constexpr要求...并不意味着编译器会在翻译过程中评估constexpr函数。我一直在查看C++11FDIS(N3242,可在http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/获得)试图确定两件事:编译器何时有义务在翻译期间评估constexpr函数?何时允许编译器在翻译期间评估constexpr函数?第5.19节第1段说常量表达式可以在翻译过程中求值。据我所知,第5.19节的其余部分阐述了constexpr函数定义中的有效规则。我知

c++ - 评估顺序和未定义行为

在C++11标准的上下文中(如你所知,它不再有序列点的概念)我想了解两个最简单的示例是如何定义的。inti=0;i=i++;//#0i=++i;//#1有两个关于SO的主题解释了C++11上下文中的这些示例。Here据说#0调用UB并且#1是明确定义的。Here据说这两个例子都没有定义。这种模棱两可让我很困惑。我读过这篇结构良好的reference已经三遍了,但这个话题对我来说似乎太复杂了。.我们来分析例子#0:i=i++;.相应的引号是:Thevaluecomputationofthebuilt-inpostincrementandpostdecrementoperatorsisse

c++ - 评估顺序和未定义行为

在C++11标准的上下文中(如你所知,它不再有序列点的概念)我想了解两个最简单的示例是如何定义的。inti=0;i=i++;//#0i=++i;//#1有两个关于SO的主题解释了C++11上下文中的这些示例。Here据说#0调用UB并且#1是明确定义的。Here据说这两个例子都没有定义。这种模棱两可让我很困惑。我读过这篇结构良好的reference已经三遍了,但这个话题对我来说似乎太复杂了。.我们来分析例子#0:i=i++;.相应的引号是:Thevaluecomputationofthebuilt-inpostincrementandpostdecrementoperatorsisse

c++ - 调用函数对象时如何保证参数评估的顺序?

howtoavoidundefinedexecutionorderfortheconstructorswhenusingstd::make_tuple上问题的答案引发了一次讨论,在讨论中我了解到可以保证构造函数的参数评估顺序:使用braced-init-list可以保证从左到右的顺序:T{a,b,c}表达式a、b和c按给定顺序计算。情况就是这样,即使类型T只是定义了一个普通的构造函数。显然,并非所有被调用的东西都是构造函数,有时在调用函数时保证评估顺序会很好,但没有像brace-argument-list这样的东西来调用函数对他们的论点进行定义的评估顺序。问题变成了:对构造函数的保证是

c++ - 调用函数对象时如何保证参数评估的顺序?

howtoavoidundefinedexecutionorderfortheconstructorswhenusingstd::make_tuple上问题的答案引发了一次讨论,在讨论中我了解到可以保证构造函数的参数评估顺序:使用braced-init-list可以保证从左到右的顺序:T{a,b,c}表达式a、b和c按给定顺序计算。情况就是这样,即使类型T只是定义了一个普通的构造函数。显然,并非所有被调用的东西都是构造函数,有时在调用函数时保证评估顺序会很好,但没有像brace-argument-list这样的东西来调用函数对他们的论点进行定义的评估顺序。问题变成了:对构造函数的保证是

c++ - 是否可以测试 constexpr 函数是否在编译时进行评估?

由于constexpr的扩展版本(我认为来自C++14),您可以声明可用作“真实”的constexpr函数constexpr。也就是说,代码在编译时执行,或者可以作为内联函数运行。那么什么时候可以有这个程序:#includeconstexprintfoo(constints){returns+4;}intmain(){std::cout结果是:777到目前为止一切顺利。有没有办法(可能是标准的)在foo(constints)内部知道函数是在编译时执行还是在运行时执行?编辑:也有可能在运行时知道函数是否在编译时评估? 最佳答案 C++

c++ - 是否可以测试 constexpr 函数是否在编译时进行评估?

由于constexpr的扩展版本(我认为来自C++14),您可以声明可用作“真实”的constexpr函数constexpr。也就是说,代码在编译时执行,或者可以作为内联函数运行。那么什么时候可以有这个程序:#includeconstexprintfoo(constints){returns+4;}intmain(){std::cout结果是:777到目前为止一切顺利。有没有办法(可能是标准的)在foo(constints)内部知道函数是在编译时执行还是在运行时执行?编辑:也有可能在运行时知道函数是否在编译时评估? 最佳答案 C++

c++ - 在 C++ lldb 中使用重载运算符评估表达式

我正在使用lldb在Xcode5中调试C++程序,我想在调试器中评估任意表达式,尤其是那些使用重载运算符的表达式。例如,我创建了一个非常简单的Xcode5C++项目,其中包含以下main.cpp和所有编译器/链接器/等选项设置为默认值:#include#includeintmain(intargc,constchar*argv[]){std::vectorvec;vec.push_back(42);std::cout我在return0;行设置断点并运行程序。然后,在lldb提示符下,将vector作为一个整体打印就可以了:(lldb)exprvec(std::__1::vector>)

c++ - 在 C++ lldb 中使用重载运算符评估表达式

我正在使用lldb在Xcode5中调试C++程序,我想在调试器中评估任意表达式,尤其是那些使用重载运算符的表达式。例如,我创建了一个非常简单的Xcode5C++项目,其中包含以下main.cpp和所有编译器/链接器/等选项设置为默认值:#include#includeintmain(intargc,constchar*argv[]){std::vectorvec;vec.push_back(42);std::cout我在return0;行设置断点并运行程序。然后,在lldb提示符下,将vector作为一个整体打印就可以了:(lldb)exprvec(std::__1::vector>)