草庐IT

行为不当

全部标签

c++: string::find 对于空输入字符串的行为是否定义明确

以下代码片段在我的编译器(visualstudio)上始终返回true。但这种行为是否定义明确且可移植?boolreturn_always_true(std::stringconst&str){returnstr.find("")!=std::string::npos;}intmain(){cout 最佳答案 我找到了cppreference.com比标准更容易阅读。引用他们:Findsthefirstsubstringequaltostr...Formally,asubstringstrissaidtobefoundatposit

c++ - 如何让 g++ 拒绝任何表现出未定义行为的代码?

我想添加一个CXXFLAG我的构建系统迫使整个代码库被明确定义。因此,编译器应该拒绝以静态方式表现出未定义行为的每一段代码。例如reinterpret_cast(someIntPtr)->aMember没有任何未定义的运行时上下文(a),而inti=bar();i/=i;可能会导致未定义的行为(b),具体取决于bar()的运行时评估(可能返回零)。我只希望(a)案例被抓到,不一定是(b)案例。 最佳答案 我不确定您的目标在计算上是否可行。但是,您将适度接近-Wall-Wextra-Werror;查看其他警告选项以了解您还想启用什么。

c++奇怪的std::cout行为使用指针

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Whatisthecorrectanswerforcout我刚输出文字,突然注意到。#includeintmain(){intarray[]={1,2,3,4};int*p=array;std::cout这样的行为对我来说很奇怪,为什么会这样?

c++ - 编译器的行为是否未定义,具有未定义的行为?

当我answered这个question,我写道:First,itisimportanttonotethatitisnotonlythebehaviouroftheuserprogramthatisundefined,itisthebehaviourofthecompilerthatisundefined.但是有disagreementinacomment,所以我想在这里问这个问题:如果源代码包含未定义行为,是只有翻译后的机器码行为未定义,还是编译器的行为也未定义?该标准定义了抽象机(1.9)的行为:ThesemanticdescriptionsinthisInternationalS

c++ - 为什么我看到在堆和堆栈上分配的数组之间存在不同的行为?

我正在检查C++中两个二维数组的行为,一个从堆栈分配,一个从堆分配。我创建了两个相同形状的二维数组,并用一些数据填充这些数组。然后我尝试用两种不同的方法读取数组,第一种是使用简单的数组索引格式“Arr[ROW][COLUMN]”。然后我使用指针取消引用读取数组,我得到了堆分配数组的两个不同结果,但堆栈分配数组的结果相同。我试图理解为什么结果不同。如果有人可以提供任何说明,我将不胜感激。提前致谢。我正在运行的代码如下:#includeusingnamespacestd;intmain(){introws=6;intcolumns=3;//allocatefromthestack.doub

c++ - 在运行时改变对象的行为

如何在运行时改变对象的行为?(使用C++)我举个简单的例子。我有一个类Operator,它包含一个方法operate。让我们假设它看起来像这样:doubleoperate(doublea,doubleb){return0.0;}用户将为a和b提供一些输入值,并选择要执行的操作,假设他可以选择计算加法或乘法。鉴于它的输入,我可以做的就是实例化Operator并调用operate(a,b),这与我之前提到的完全一样。计算乘法或加法的方法将在某个地方(不知道在哪里)实现。总而言之,我必须根据用户的输入更改我的Operator对象的行为。 最佳答案

c++ - C 和 C++ 差异行为

这个问题不太可能帮助任何future的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visitthehelpcenter.关闭9年前。我用CDT插件在Eclipse中创建了两个模板项目(一个是C项目,另一个是C++),并编译了两个非常相似的项目(对我来说),但我得到的控制台输出完全不同。为什么这个输出如此不同?C代码:#include#includeintmain(void){intnumbers[5];int*p;p=numbers;*p=10;p++;*p=20;p=&numbers

c++ - 如何信任声明为 const 的 C++ 函数的行为?

这是一场C++灾难,请查看此代码示例:#includevoidfunc(constint*shouldnotChange){int*canChange=(int*)shouldnotChange;*canChange+=2;return;}intmain(){inti=5;func(&i);std::cout输出是7!那么,如果C++函数能够更改假定的常量参数,我们如何才能确定它的行为呢!?编辑:我不是在问如何确保我的代码按预期工作,而是想知道如何相信别人的功能(例如某些dll库中的某些功能)不会更改参数或具有某些行为... 最佳答案

c++ - 指针/整数算术(未)定义的行为

我有以下函数模板:templateHeldAs*duplicate(MostDerived*original,HeldAs*held){//errorcheckingomittedforbrevityMostDerived*copy=newMostDerived(*original);std::uintptr_tdistance=reinterpret_cast(held)-reinterpret_cast(original);HeldAs*copyHeld=reinterpret_cast(reinterpret_cast(copy)+distance);returncopyHeld

c++ - 使用 atan2() 函数进行模拟时出现奇怪的 "yaw"行为

我正在开发一个应用程序,一个模拟器,其中四旋翼飞行器从一个航点飞到另一个航点。在我的代码中,我实现了一个函数来计算yaw使用atan2函数。但是当四旋翼旋转超过360°时,它并没有移动最短的路径,而是绕着360°的范围移动以到达新的方向。我在这里发布了一个video.看一下它在360°范围内的行为。好的,现在完整的功能在这里:geometry_msgs::PosegetYaw(doublex1,doublex2,doubley1,doubley2){geometry_msgs::Poseoutput_trajectory;/*Extrapolatetheyawinformationbe