草庐IT

行为树

全部标签

c++ - "++l *= m"是未定义的行为吗?

我已经开始学习C++0x。我在某处遇到了以下表达式:intl=1,m=2;++l*=m;我不知道第二个表达式是否有明确定义的行为。所以我在这里问。不是UB吗?我只是想知道。 最佳答案 表达式在C++0x中定义良好。Prasoonhere给出了一个非常标准的引用常见问题解答。.我不相信(字面标准引号:解释性文本)的比例如此之高是可取的,所以我给出一个额外的小解释:记住++L等价于L+=1,并且该表达式的值计算在L的增量之后进行排序。而在a*=b中,表达式a的值计算在将乘法结果赋值给a之前排序.你有什么副作用?递增乘法结果的赋值这两个副

c++ - "++l *= m"是未定义的行为吗?

我已经开始学习C++0x。我在某处遇到了以下表达式:intl=1,m=2;++l*=m;我不知道第二个表达式是否有明确定义的行为。所以我在这里问。不是UB吗?我只是想知道。 最佳答案 表达式在C++0x中定义良好。Prasoonhere给出了一个非常标准的引用常见问题解答。.我不相信(字面标准引号:解释性文本)的比例如此之高是可取的,所以我给出一个额外的小解释:记住++L等价于L+=1,并且该表达式的值计算在L的增量之后进行排序。而在a*=b中,表达式a的值计算在将乘法结果赋值给a之前排序.你有什么副作用?递增乘法结果的赋值这两个副

c++ - 在 C++03 中左移有符号整数未定义行为吗?

根据C++03,5.8/2,左移定义如下:ThevalueofE1这里让我困扰的是,明确提到了无符号类型,而有符号类型却被完全忽略了。将此与定义右移的5.8/3进行比较:ThevalueofE1>>E2isE1right-shiftedE2bitpositions.IfE1hasanunsignedtypeorifE1hasasignedtypeandanonnegativevalue,thevalueoftheresultistheintegralpartofthequotientofE1dividedbythequantity2raisedtothepowerE2.IfE1hasa

c++ - 在 C++03 中左移有符号整数未定义行为吗?

根据C++03,5.8/2,左移定义如下:ThevalueofE1这里让我困扰的是,明确提到了无符号类型,而有符号类型却被完全忽略了。将此与定义右移的5.8/3进行比较:ThevalueofE1>>E2isE1right-shiftedE2bitpositions.IfE1hasanunsignedtypeorifE1hasasignedtypeandanonnegativevalue,thevalueoftheresultistheintegralpartofthequotientofE1dividedbythequantity2raisedtothepowerE2.IfE1hasa

C++ 析构函数行为

这个问题在这里已经有了答案:Twocallstodestructor(3个回答)关闭7年前。我在VisualStudio2010上尝试了以下程序。#includeusingnamespacestd;classA{public:intp;/*A(){cout我得到的输出是-DestructorinDDestructorinAExitingmainDestructorinDDestructorinA我无法理解为什么要调用D类和A类的析构函数在“Exitingmain”语句执行之前?我尝试了另一件事-我在上面的代码中取消了对D类构造函数的注释,然后输出与我一样预期-ConstructorDE

C++ 析构函数行为

这个问题在这里已经有了答案:Twocallstodestructor(3个回答)关闭7年前。我在VisualStudio2010上尝试了以下程序。#includeusingnamespacestd;classA{public:intp;/*A(){cout我得到的输出是-DestructorinDDestructorinAExitingmainDestructorinDDestructorinA我无法理解为什么要调用D类和A类的析构函数在“Exitingmain”语句执行之前?我尝试了另一件事-我在上面的代码中取消了对D类构造函数的注释,然后输出与我一样预期-ConstructorDE

c++ - 'a[i] = i;' 是否总是导致明确定义的行为?

提出了几个有趣的问题here关于C中未定义的行为。其中之一是(稍作修改)Doesthefollowingpieceofcoderesultinundefinedbehaviour?inti=0,*a=&i;//Line1a[i]=i+1;//Line2由于那里没有对这部分问题的具体答案,而且我有兴趣了解C++中的行为,因此我在这里再次提出。来自UndefinedBehaviorandSequencePoints的规则#2说Furthermore,thepriorvalueshallbeaccessedonlytodeterminethevaluetobestored很明显,在上面的示例

c++ - 'a[i] = i;' 是否总是导致明确定义的行为?

提出了几个有趣的问题here关于C中未定义的行为。其中之一是(稍作修改)Doesthefollowingpieceofcoderesultinundefinedbehaviour?inti=0,*a=&i;//Line1a[i]=i+1;//Line2由于那里没有对这部分问题的具体答案,而且我有兴趣了解C++中的行为,因此我在这里再次提出。来自UndefinedBehaviorandSequencePoints的规则#2说Furthermore,thepriorvalueshallbeaccessedonlytodeterminethevaluetobestored很明显,在上面的示例

引用类型的 C++11 成员变量, vector push_back 后的不同行为

我正在使用其他人的类,当我将它插入vector时它表现得很奇怪。它涉及一个成员变量,它是对另一个成员变量的引用。这是最小的独立示例:#include#includeclassMyclass{public:Myclass():a(1.0){}floata;float&a_ref=a;voidaddOne(){a=a+1.0;}};intmain(){Myclassinstance1;instance1.addOne();//prints2:std::coutvec;Myclassinstance2;vec.push_back(instance2);vec.at(0).addOne();/

引用类型的 C++11 成员变量, vector push_back 后的不同行为

我正在使用其他人的类,当我将它插入vector时它表现得很奇怪。它涉及一个成员变量,它是对另一个成员变量的引用。这是最小的独立示例:#include#includeclassMyclass{public:Myclass():a(1.0){}floata;float&a_ref=a;voidaddOne(){a=a+1.0;}};intmain(){Myclassinstance1;instance1.addOne();//prints2:std::coutvec;Myclassinstance2;vec.push_back(instance2);vec.at(0).addOne();/