x = 1; std::cout << ((++x)+(++x)+(++x)); 我预计输出是11 ,但实际上是12 。 为什么?
我试图在不同的PHP服务器上运行我的脚本时,出现了一个新问题。 在我的旧服务器上,下面的代码显示工作正常 – 即使没有声明s参数。 <?php if ($_GET['s'] == 'jwshxnsyllabus') echo "<body onload=\"loadSyllabi('syllabus', '../syllabi/jwshxnporsyllabus.xml', '../bibliographies/jwshxnbibliography_')\">"; if ($_GET['s'] == 'aquinas') echo "<body onload=\"loadSyllabi('syllabus', '../syllabi/AquinasSyllabus.xml')\">"; if ($_GET['s'] == 'POP2') echo "<body onload=\"loadSyllabi('POP2')\">"; elseif ($_GET['s'] == null) echo "<body>" ?> 但是现在,在本地机器上的本地服务器(XAMPP-Apache)上,当没有定义s值时,出现以下错误。 Notice: Undefined index: s in C:\xampp\htdocs\teaching\index.php on line 43 Notice: Undefined index: s in C:\xampp\htdocs\teaching\index.php on line 45 […]
我有以下JavaScript代码: var counter = 0; function printCounter(){ console.log("counter=" + ++counter); setTimeout(printCounter, 1000); } printCounter(); 我期望它应该打印这个输出: counter=1 counter=2 counter=3 … 但相反,它打印以下内容: counter=1 undefined // <– Notice this "undefined" counter=2 counter=3 … 为什么在第一次迭代后打印“未定义”? 重要提示: 只有在JavaScript控制台中执行代码时才会看到这种行为。 如果它是页面的一部分,它工作正常。
考虑下面的代码: int main() { int count = 0 ; int arrInt[2] = { count++, count++ } ; return 0 ; } 如果我们使用clang -std=c++03编译代码,则会产生以下警告( 现场示例 ): warning: multiple unsequenced modifications to 'count' [-Wunsequenced] int arrInt[2] = { count++, count++ } ; ^ ~~ 我不提倡这样的代码,但是类似的代码出现在另一个问题上,并且根据标准的C ++ 11是否定义了代码 。 在C ++ 11中,此行为是根据初始化程序列表中的多个突变未定义的行为定义的行为 ,实际上,如果使用-std=c++11则警告消失。 如果我们看一个预先的C ++ 11 草案标准,它不具有相同的语言覆盖初始化列表,所以看起来我们留下了Chapter 5 […]
我有以下代码: #include <iostream> #include <complex> using namespace std; int main() { complex<int> delta; complex<int> mc[4] = {0}; for(int di = 0; di < 4; di++, delta = mc[di]) { cout << di << endl; } return 0; } 我期望它输出“0,1,2,3”并停止,但它输出一系列无穷无尽的“0,1,2,3,4,5 ……” 它看起来比较di<4不能正常工作,总是返回true。 如果我只是注释掉,delta=mc[di] ,我会得到正常的“0,1,2,3”。 无辜的任务有什么问题? 我正在使用Ideone.com g ++ C ++ 14和-O2选项。
到目前为止,我无法find如下推论: int* ptr; *ptr = 0; 是未定义的行为。 首先,5.3.1 / 1表示*表示将T*转换为T*间接方式。 但是这并没有提到UB。 然后经常引用3.7.3.2/4,指出对一个非空指针使用释放函数会使指针无效,而后来无效指针的使用是UB。 但是在上面的代码中,没有关于释放的内容。 如何在上面的代码中推导UB?
编译这个: #include <iostream> int main() { for (int i = 0; i < 4; ++i) std::cout << i*1000000000 << std::endl; } 和gcc产生以下警告: warning: iteration 3u invokes undefined behavior [-Waggressive-loop-optimizations] std::cout << i*1000000000 << std::endl; ^ 我知道有一个有符号的整数溢出。 我无法得到的是为什么i价值被溢出操作打破了? 我读过的答案为什么整数溢出在x86与GCC导致无限循环? ,但我仍然不清楚为什么发生这种情况 – 我得到的“未定义”是指“任何事情都可能发生”,但是这种特定行为的根本原因是什么? 在线: http : //ideone.com/dMrRKR 编译器: gcc (4.8)
无符号整数溢出由C和C ++标准定义。 例如, C99标准 (第§6.2.5/9 )说 涉及无符号操作数的计算永远不会溢出,因为无法用结果无符号整数types表示的结果被减less的模数大于可由结果types表示的最大值的数。 但是,两个标准都指出有符号整数溢出是未定义的行为。 再次,从C99标准( §3.4.3/1 ) 未定义行为的一个例子是整数溢出行为 有没有一个历史的(或更好的!)这种差异的技术原因?
为什么null在JavaScript中被认为是一个object ? 正在检查 if ( object == null ) Do something 一样 if ( !object ) Do something ? 并且: null和undefined什么区别?
我已经写了一个简单的,工作的俄罗斯方块游戏与每个块作为一个类的单个块的一个实例。 class SingleBlock { public: SingleBlock(int, int); ~SingleBlock(); int x; int y; SingleBlock *next; }; class MultiBlock { public: MultiBlock(int, int); SingleBlock *c, *d, *e, *f; }; SingleBlock::SingleBlock(int a, int b) { x = a; y = b; } SingleBlock::~SingleBlock() { x = 222; } MultiBlock::MultiBlock(int a, int b) { c = new SingleBlock (a,b); […]