相关疑难解决方法(0)

C++ 17引入了哪些评估顺序保证?

在典型的C++代码中,C++ 17评估顺序保证(P0145)投票的含义是什么?

对于像这样的事情,它有什么变化

i=1;
f(i++, i)
Run Code Online (Sandbox Code Playgroud)

std::cout << f() << f() << f() ;
Run Code Online (Sandbox Code Playgroud)

要么

f(g(),h(),j());
Run Code Online (Sandbox Code Playgroud)

c++ operator-precedence c++17

77
推荐指数
2
解决办法
7130
查看次数

C++中编译器和评估的参数顺序

好吧,我知道标准规定C++实现可以选择评估函数的哪个顺序参数,但是在实际影响程序的情况下是否有任何实现"利用"它的实现?

经典示例:

int i = 0;
foo(i++, i++);
Run Code Online (Sandbox Code Playgroud)

注意:我不是在找人告诉我评估的顺序不能依赖,我很清楚这一点.我只对任何编译器是否真的按照从左到右的顺序进行评估感兴趣,因为我的猜测是,如果他们做了很多写得不好的代码就会破坏(这是正确的,但他们仍然可能会抱怨).

c++ operator-precedence

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

为什么operator void*()转换函数被添加到C++流类中?

operator void*() constC++流类中有一个转换函数.这样所有流对象都可以隐式转换为void*.在与SO的程序员交互过程中,他们建议我不要使用,void*除非你有充分的理由使用它.void*是一种删除类型安全和错误检查的技术.因此,由于该转换功能的存在,以下程序完全有效.这是C++标准库中的一个缺陷.

#include <iostream>
int main()
{
       delete std::cout;
       delete std::cin;
}
Run Code Online (Sandbox Code Playgroud)

在这里查看现场演示.

上述程序在C++ 03中有效,但在C++ 11及更高版本的编译器中编译失败,因为此转换函数已被删除.但问题是,如果它是危险的,它是C++标准库的一部分?允许将流对象转换为的目的是void*什么?有什么用?

c++ void-pointers c++-standard-library delete-operator c++11

13
推荐指数
2
解决办法
1902
查看次数

将内容输出到std :: ostream并返回std :: ostream的函数?

我想编写一个函数来输出ostream传入的内容,并返回流,如下所示:

std::ostream& MyPrint(int val, std::ostream* out) {
  *out << val;
  return *out;
}

int main(int argc, char** argv){
    std::cout << "Value: " << MyPrint(12, &std::cout) << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

打印这样的值会很方便,并将函数调用嵌入到输出操作符链中,就像我一样main().

但它不起作用,打印出来:

$ ./a.out
12Value: 0x6013a8
Run Code Online (Sandbox Code Playgroud)

期望的输出是这样的:

Value: 12
Run Code Online (Sandbox Code Playgroud)

我怎样才能解决这个问题?我是否必须定义一个operator<<

更新:澄清了所需的输出.

更新2:有些人不明白为什么我会打印这样的数字,使用函数而不是直接打印它.这是一个简化的例子,实际上该函数打印的是复杂的对象而不是int.

c++ outputstream ostream

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

C++通过引用传递不改变参数

我一直盯着这个约一个小时,老实说我不知道​​我错过了什么.

#include <iostream>

using namespace std;

void callChain();

double chain(int, int &, int &);

int main()
{
    callChain();
}

void callChain() {
    int totalInches = 53;
    int feet;
    int inches;

    cout << "\nTesting chain for 53 inches: \nExpected result: 15.46 feet: 4 inches: 5" << endl;
    cout << "Actual result: " << chain(totalInches, feet, inches) << " feet: " << feet << " inches: " << inches << endl;
}

double chain(int totalInches, int &feet, int &inches) {
    feet = …
Run Code Online (Sandbox Code Playgroud)

c++

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