相关疑难解决方法(0)

我对值初始化的尝试被解释为函数声明,为什么不是A a(()); 解决这个问题?

Stack Overflow教给我的很多东西都是所谓的"最令人烦恼的解析",经典地用一条线来证明

A a(B()); //declares a function
Run Code Online (Sandbox Code Playgroud)

虽然这对于大多数人而言,直观地看起来是a类型对象的声明A,将临时B对象作为构造函数参数,它实际上是一个函数a返回的声明A,将一个指针指向一个返回的函数,它B本身不带参数.同样的线

A a(); //declares a function
Run Code Online (Sandbox Code Playgroud)

也属于同一类别,因为它代替一个对象,它声明了一个函数.现在,在第一种情况下,这个问题的通常解决方法是在其周围添加一组额外的括号/括号B(),因为编译器会将其解释为对象的声明

A a((B())); //declares an object
Run Code Online (Sandbox Code Playgroud)

但是,在第二种情况下,执行相同操作会导致编译错误

A a(()); //compile error
Run Code Online (Sandbox Code Playgroud)

我的问题是,为什么?是的我非常清楚正确的"解决方法"是将其更改为A a;,但我很想知道()第一个示例中的额外功能是什么,然后在重新应用它时不起作用第二个例子.A a((B()));变通办法是否是写入标准的特定异常?

c++

154
推荐指数
5
解决办法
2万
查看次数

C++最令人烦恼的解析

直接来自http://herbsutter.com/2013/05/09/gotw-1-solution/

虽然widget w();对我来说很清楚,但我不知道下面的代码如何成为函数声明?

// same problem (gadget and doodad are types)
//
widget w( gadget(), doodad() );  // pitfall: not a variable declaration
Run Code Online (Sandbox Code Playgroud)

这怎么可能?

c++ c++11 gotw

39
推荐指数
1
解决办法
4529
查看次数

使用括号还是不使用括号实例化类?

#include <iostream>
using namespace std;

class CTest 
{
    int x;

  public:
    CTest()
    { 
       x = 3;
       cout << "A"; 
    }
};

int main () {
  CTest t1;
  CTest t2();

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

CTest t1当然会打印"A".

但似乎没有任何事情发生在t2(),但代码运行良好.

那么我们在没有参数的情况下使用这些括号吗?或者为什么我们这样使用呢?

c++ constructor

7
推荐指数
1
解决办法
1万
查看次数

如何用这个c ++设置对象数据成员

所以这个问题可能是重复的,但是当我搜索时我找不到任何东西.所以在C++中,如果我有

class Foo{
    public:
        int x;
        int y;
        Foo(int x, int y);
};
Run Code Online (Sandbox Code Playgroud)

Foo(int xIn, int yIn){
    x = xIn;
    y = yIn;
}
Run Code Online (Sandbox Code Playgroud)

是不是有办法做作业this?那么您不必更改传入的变量的名称?

c++

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

标签 统计

c++ ×4

c++11 ×1

constructor ×1

gotw ×1