如果我们有这样的三个函数(foo,bar和baz)......
foo(bar(), baz())
Run Code Online (Sandbox Code Playgroud)
C++标准是否保证在baz之前评估条形码?
我只是发现这个小小的C++代码并没有给我与clang ++和g ++相同的结果:
#include <iostream>
#include <string>
using namespace std;
const string& createString(char c) {
static string s;
s="";
for(int i=0; i<10; ++i) {
s+=c;
}
return s;
}
int main() {
cout << createString('a') << ' ' << createString('z') << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
使用clang ++它写道:
aaaaaaaaa zzzzzzzzzz
就像我想要的那样,但是用g ++写道:
aaaaaaaaa aaaaaaaaa
为什么会这样?g ++实现标准是否合规?如果我想要一个函数通过像这样的引用返回一个临时的"大"类型,以避免无用的副本,我该怎么办?
为什么g()
首先调用函数?我定义g()
为初始化列表中的第二个元素。
以下与初始值设定项列表相关的标准引用是否相关?
\n\n\n\n\n\xc2\xa78.5.4.4:在花括号初始化列表的初始值设定项列表中,\n 初始值设定项子句,包括任何由包扩展产生的\n (\xc2\xa714.5.3),在它们出现的顺序。
\n
#include <iostream>\n#include <vector>\n\nint f() { std::cout << "f"; return 0;}\nint g() { std::cout << "g"; return 0;}\n\nvoid h(std::vector<int> v) {}\n\nint main() {\n\n h({f(), g()});\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n输出:
\n\ngf\n
Run Code Online (Sandbox Code Playgroud)\n 这是一些简单的代码.
#include <iostream>
using namespace std;
bool func(char* m)
{
*m = '4';
return true;
}
using namespace std;
int main()
{
char c1 = '3';
cout << "a" << c1 << func(&c1) << c1 << "b" << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当使用g ++ -O0(4.7.2)编译时,输出为a413b,对于-O2,输出为a414b.对于clang ++ 3.2,输出为a314b.
我在这部分代码中为c ++做了什么未定义的事情吗?
我试图将我的数独求解程序的结果打印到终端中,如下所示:
+-------+-------+-------+
| 1 2 3 | 4 5 6 | 7 8 9 |
| 1 2 3 | 4 5 6 | 7 8 9 |
| 1 2 3 | 4 5 6 | 7 8 9 |
+-------+-------+-------+
| 1 2 3 | 4 5 6 | 7 8 9 |
| 1 2 3 | 4 5 6 | 7 8 9 |
| 1 2 3 | 4 5 6 | 7 8 9 …
Run Code Online (Sandbox Code Playgroud) 我接受了一次面试,在那里我被问到两个我无法解决的问题.我想知道以下两段代码的问题是什么
第一个问题:
问题是:以下代码有什么问题?
class A
{
// Some properties ans methods
};
class B
{
// Some properties ans methods
};
void foo(A* pa, B* pb)
{
//Do somthing with pa and pb
};
void main()
{
A* pa = NULL;
B* pb = NULL;
foo(pa = new A, pb = new B);
}
Run Code Online (Sandbox Code Playgroud)
第二个问题:
问题是:打印什么(最后,面试官告诉我答案是17和0,但我不明白为什么)
int counter = 0; //Global variable
int foo()
{
int i = 0;
while (i < 12)
{
// Do somthing
counter++;
i++;
} …
Run Code Online (Sandbox Code Playgroud) 可能重复:
任何人都可以解释这些未定义的行为(i = i ++ + ++ i,i = i ++等...)
函数参数评估顺序
在这里输入代码在C语言中,函数的执行是从右到左还是从左到右?我发现它是从右到左.(函数的执行意味着它通过参数的顺序).
所以我想知道c中是否有任何函数或任何内置函数从左到右执行?
例:-
#include<stdio.h>
int print(int a,int b);
int main()
{
int a=10,b=20;
print(++a,a++);
getch();
return 0;
}
int print(int a,int b)
{
printf("%d %d",a,b);
}
Run Code Online (Sandbox Code Playgroud)
因此,在这个从右侧开始,通过a=10
比a++
所以现在a=11
不是++a
这样,现在a=12
比它传递a=12
的打印功能打印它如此12 10
我的代码是:
#include<stdio.h>
int main()
{
char c='8';
int d=8;
printf("%d %d %d",d,d+=c>='0'&&c<='9',c++);
return(0);
}
Run Code Online (Sandbox Code Playgroud)
这个问题的结果是:9 9 56.我无法理解这一点.请有人帮助我,请解释我的输出.谢谢.
我的功能有这个问题.
在main函数中我有这个result(param, param)
函数,它有2个函数作为参数.
result(name(), score());
Run Code Online (Sandbox Code Playgroud)
但是,当代码执行时,score()
函数首先执行而不是函数执行name()
.为什么会这样呢?
(还有一个问题是由score()函数首先执行而不是函数执行的name()
是我得到了\n
读取并且name()
函数被完全跳过.但是我知道如何解决这个问题我只需要知道为什么不name()
执行该函数首先.)
我在这里找到了这个:http://en.cppreference.com/w/cpp/language/eval_order.
任何C++运算符的操作数的评估顺序,包括函数调用表达式中函数参数的评估顺序,以及任何表达式中子表达式的评估顺序都是未指定的(除非另有说明).编译器将以任何顺序对它们进行评估,并且可以在再次评估相同表达式时选择另一个顺序.
在C++中没有从左到右或从右到左评估的概念,不要将操作符的从左到右和从右到左的关联性混淆:表达式
f1() + f2() + f3()
被解析为(f1() + f2()) + f3()
左边的运算符+的右对称关系,但是对f3的函数调用可以在运行时的第一个,最后一个或之间f1()
或之间进行评估f2()
.**
但我的程序总是score()
首先执行该功能.在它上面说它是随机的所以我至少应该name()
首先执行函数有时是正确的吗?
完整代码可供参考.
#include <iostream>
#include <string>
using namespace std;
string name()
{
string fname;
cout << "Please type your full name: ";
getline(cin, fname);
return fname;
}
int score()
{
int points; …
Run Code Online (Sandbox Code Playgroud)