草庐IT

行为不当

全部标签

c++ - 此代码行为是否定义明确?

这是一些C++代码:#includeclassA{intx;inty;doublev;public:A(intx,inty):x(x),y(y){std::cerr我得到以下输出:A(3,5)f(9.5)~A()即因为我希望它工作。但我不确定A的析构函数是否必须在f返回后调用。有保障吗?operatordouble*()返回的指针是否会在f的调用中变得无效? 最佳答案 您将A对象声明为f的实际参数,当您这样做时,对于所有效果而言,新对象就像f的局部变量,因此保证在f执行结束时调用~A。如果f返回由operatordouble*()返

c++ - boost::filesystem::path::string() 输出的奇怪行为

pf.string()输出似乎有一些奇怪的行为,其中pf是用p.filename()生成的,其中p是boost::filesystem::path类型,由charconst*或std::string构造。这是代码段:#includenamespacefs=boost::filesystem;intmain(intargc,char**argv){fs::pathp(argv[0]);//orfs::pathp((std::string(argv[0])));fs::path&&pf=p.filename();//orfs::pathpf=p.filename();std::string

c++ - 查找两个数字之间的值范围时的奇怪行为

我最近开始学习“c++primer5thEdition”。我目前正在进行以下练习:Exercise1.11:Writeaprogramthatpromptstheuserfortwointegers.Printeachnumberintherangespecifiedbythosetwointegers.我编写了以下代码作为解决方案:#includeintmain(){intnum1=0,num2=0;std::cout>num1>>num2;if(num1但是当我输入数字时,输出不太正确;示例输入:Pleaseentertwonumberstofindarangebetweem>>1

c++ - C/C++ union 和未定义行为

以下是未定义的行为吗?union{intfoo;floatbar;}baz;baz.foo=3.14*baz.bar;我记得在两个序列点之间写入和读取同一底层内存是UB,但我不确定。 最佳答案 IrememberthatwritingandreadingfromthesameunderlyingmemorybetweentwosequencepointsisUB,butIamnotcertain.读取和写入同一表达式中的同一内存位置不会调用未定义的行为,除非该位置在两个序列点之间被修改多次,或者副作用相对于使用值计算的值是无序的相同

c++ - AVR C++ uint32_t 奇怪的行为

uint32_ta=65536;uint32_tb=1为什么a!=b在这里,但是uint32_ta=65536;uint32_tb=65536;这里a==b虽然技术上应该是一样的?我将CLion用作IDE,将CMake3.7.1与ArduinoCMake结合使用。 最佳答案 uint32_tb=1如您所见,如果您不首先将1转换为32位整数,则此操作会崩溃:文字1是编译器的默认整数类型。不知道是哪个,但它是8位或16位整数。现在,假设它是一个16位输入。当您将1左移16次时,您只是……好吧,这没有意义。因此,首先让您的1成为32位in

c++ - 这是未定义的行为还是 struct init 的错误?

请考虑这段代码:#includeintmain(){structA{intx;inty;intz;intfoo(){std::coutxyzxyzx=1;this->z=10;return2;}};Ab{b.foo(),b.z=b.moo(),3};std::cout我的VS2017(x64版本)中的结果:enterfoo:0,0,0entermoo:5,0,0final:1,2,3ideone.com(gcc6.3)的结果https://ideone.com/OGqvjW):enterfoo:0,0,3entermoo:5,0,3final:1,2,2一个编译器立即将z成员设置为3,

c++ - 关于 'char' 的奇怪程序行为

我在学习if-else语句时编写这段代码只是为了好玩。当我数字10e时出现奇怪的行为,程序返回错误,但我不明白为什么!我的意思是,使用其他单位(例如“d”或“y”)时效果很好,但当我输入“e”时,它就疯了!基本上,程序会转换用户输入的数字,以数字后面的单位为单位。例如,如果您输入10d,它将返回多少日元的10英镑。看看://money_exchange.cpp:Amoneyexchangesimulatorthatconvertsanyratetopound.//Thestandardratescanbeupdateddaily.#include"stdafx.h"#include".

c++ - 数据成员线程和互斥体的初始化。错误的顺序是否有未定义的行为?

我偶然发现了一种我认为是在不知不觉中搬起石头砸自己脚的非常简单的方法。先介绍一下数据成员的初始化顺序就是数据成员声明的顺序。所以这是非法的:structA{std::size_ti_;std::size_tlength_;A(std::size_tlength):i_{length_}//UBhere.`length_`isuninitializedlength_{length}{}};因为数据成员length_在i_的初始化器中使用时是未初始化的。幸运的是,gcc和clang都对此给出了很好的警告。简单的解决方案是从参数初始化每个数据成员,即i_{length}。现在进入正题但是当它

c++ - 使用具有未定义行为的(STL)拷贝?

在评估中,我选择了选项LINEI上的运行时错误。没有未定义行为这样的选项,尽管我认为这是正确的选择。我不确定,但我认为评估有误。我编译并运行了该程序,它确实打印了3,9,0,2,1,4,5,使用三个不同的编译器(Cpp.sh,here和本地MacOSX).程序是否因LINEI存在未定义行为?#include#include#includeusingnamespacestd;voidprinter(inti){coutv1(mynumbers,mynumbers+7);copy(mynumbers,mynumbers+7,v1.end());//LINEIfor_each(v1.begi

c++ - C++中字符和整数数组的不同行为

这是一个用C++编写的小代码,其中我分别创建了两个char和int数据类型的数组。但是,对于这两个数组,相同的打印操作表现不同#includeusingnamespacestd;intmain(){chara[5]={'h','e','l','l','o'};intb[5]={1,2,3,4,5};cout我希望输出是两个数组的第一个元素的地址,即分别是a[0]和b[0]的地址,但是在这种情况下char类型数组的行为不同。 最佳答案 这是cout的运算符char*参数视为空终止字符串并打印整个字符串。如果要打印地址,请将其转换为vo