228得票9回答
默认构造函数与空括号

空圆括号(小括号)表示调用C++中的默认构造函数,在这种情况下,是否存在任何合理的原因使其无效?MyObject object; // ok - default ctor MyObject object(blah); // ok MyObject object(); // erro...

168得票5回答
我的数值初始化尝试被解释为函数声明,为什么 A a(()); 不能解决这个问题?

Stack Overflow教给我的许多东西中,有一件就是被称为“最令人困扰的解析”的概念。这个概念经典地通过一行代码来演示,例如: A a(B()); //declares a function 虽然对大多数人来说,这似乎是声明了一个类型为A的对象a,并将一个临时的B对象作为构造函数参...

90得票2回答
为什么C++允许我们在声明变量时用括号括住变量名?

例如,这样的声明:int (x) = 0; 甚至是这样:int (((x))) = 0; 我发现这个问题是因为我的代码里有一个类似以下的片段:struct B { }; struct C { C (B *) {} void f () {}; }; int main() { B ...

81得票3回答
我不理解为什么这个可以编译通过

我肯定是遗漏了什么,但我不明白为什么这个代码可以通过编译(无论是使用g++还是clang++):struct A { }; struct B { }; int main() { A a(B); } 首先,B 是一种类型,而不是一个值。我该如何解释这段代码?

80得票3回答
为什么会调用默认构造函数?

struct X { X() { std::cout << "X()\n"; } X(int) { std::cout << "X(int)\n"; } }; const int answer = 42; int main() { ...

71得票3回答
为什么没有默认构造函数就无法编译?

我能做到这件事:#include <iostream> int counter; int main() { struct Boo { Boo(int num) { ++counter; ...

43得票6回答
什么是“最具棘手性解析(Most Vexing Parse)”的目的?

我在维基百科上找到了这个: A a( A() ); 这可能是以下两种情况之一: 类 [A] 的变量定义,它接受一个类 [A] 的匿名实例;或者 函数声明,返回类型为 [A] 的对象,并且接受一个单一(未命名)参数,该参数是返回类型为 [A] 的函数(不接受任何输入)。...

38得票2回答
Visual Studio C++编译器的奇怪行为

我只是好奇为什么这段小代码在Visual Studio中可以正确地编译(而且没有警告)。也许在GCC和Clang中的结果相同,但不幸的是,我现在无法测试它们。 struct T { int t; T() : t(0) {} }; int main() { T(i_d...

32得票1回答
临时对象上调用用户自定义运算符+时出错,当存在额外的括号时。

如果我有一个自定义的operator+(),例如: class A { public: A operator+(A) { return A(); } }; 接下来的操作将如预期一样: A...

29得票1回答
最令人困扰的解析问题

我从这里获取了代码。 class Timer { public: Timer(); }; class TimeKeeper { public: TimeKeeper(const Timer& t); int get_time() { return ...