相关疑难解决方法(0)

C++函数参数中的评估顺序

如果我们有这样的三个函数(foo,bar和baz)......

foo(bar(), baz())
Run Code Online (Sandbox Code Playgroud)

C++标准是否保证在baz之前评估条形码?

c++ standards

83
推荐指数
4
解决办法
2万
查看次数

关于静态变量的C++参考

我只是发现这个小小的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 ++实现标准是否合规?如果我想要一个函数通过像这样的引用返回一个临时的"大"类型,以避免无用的副本,我该怎么办?

c++ static reference

15
推荐指数
2
解决办法
1374
查看次数

初始化列表中元素的求值顺序

为什么g()首先调用函数?我定义g()为初始化列表中的第二个元素。

\n\n

以下与初始值设定项列表相关的标准引用是否相关?

\n\n
\n

\xc2\xa78.5.4.4:在花括号初始化列表的初始值设定项列表中,\n 初始值设定项子句,包括任何由包扩展产生的\n (\xc2\xa714.5.3),在它们出现的顺序。

\n
\n\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\n
gf\n
Run Code Online (Sandbox Code Playgroud)\n

c++ gcc operator-precedence

5
推荐指数
1
解决办法
1835
查看次数

如何执行函数的参数?

可能重复:
功能参数评估顺序

假设我有一个带有4个参数的函数.首先考虑哪个参数用于执行以及为什么.

我试图理解,运算符对函数原型的重要性.按照规则,它是最先考虑的最后一个变量吗?

c

3
推荐指数
1
解决办法
98
查看次数

g ++和operator <<在评估期间更改值时会产生无意的结果

这是一些简单的代码.

#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 ++做了什么未定义的事情吗?

c++ g++ clang++

3
推荐指数
2
解决办法
95
查看次数

在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)

c arrays printf

3
推荐指数
1
解决办法
63
查看次数

在求职面试中提出的问题

我接受了一次面试,在那里我被问到两个我无法解决的问题.我想知道以下两段代码的问题是什么

第一个问题:

问题是:以下代码有什么问题?

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)

c++

1
推荐指数
2
解决办法
486
查看次数

在C语言中,函数的执行是从右到左还是从左到右?

可能重复:
任何人都可以解释这些未定义的行为(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=10a++所以现在a=11 不是++a这样,现在a=12比它传递a=12的打印功能打印它如此12 10

c function

-1
推荐指数
1
解决办法
6748
查看次数

无法理解C progaram的输出

我的代码是:

#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.我无法理解这一点.请有人帮助我,请解释我的输出.谢谢.

c output

-1
推荐指数
1
解决办法
246
查看次数

未按顺序执行的功能

我的功能有这个问题.

在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)

c++ function

-2
推荐指数
2
解决办法
101
查看次数

标签 统计

c++ ×6

c ×4

function ×2

arrays ×1

clang++ ×1

g++ ×1

gcc ×1

operator-precedence ×1

output ×1

printf ×1

reference ×1

standards ×1

static ×1