相关疑难解决方法(0)

构造函数上没有括号,没有参数是语言标准吗?

我正在使用g ++编译Cygwin中的C++程序,我有一个类,其构造函数没有参数.我有线:

MyClass myObj();
myObj.function1();
Run Code Online (Sandbox Code Playgroud)

当我尝试编译它时,我收到了消息:

error: request for member 'function1' in 'myObj', which is of non-class type 'MyClass ()()'
Run Code Online (Sandbox Code Playgroud)

经过一番研究,我发现修复是将第一行更改为

MyClass myObj;
Run Code Online (Sandbox Code Playgroud)

我可以发誓我之前用C++中的括号做了空构造函数声明.这可能是我正在使用的编译器的限制,还是语言标准真的说不使用括号用于没有参数的构造函数?

c++ standards constructor

49
推荐指数
4
解决办法
3万
查看次数

C++空String构造函数

我是一名C++初学者,如果问题太基础,那就很抱歉.

我试图收集字符串constrcturs并尝试所有它们(记住它们).

string strA();          // string(); empty string // incorrect
string strB("Hello");   // string( const char* str)
string strC("Hello",3); // string( const char* str, size_type length)
string strD(2,'c');     // string( size_type lenght, const char &c)
string strE(strB);      // string( const string& s)

cout << strA << endl;
cout << strB << endl;
cout << strC << endl;
cout << strD << endl;
cout << strE << endl;
Run Code Online (Sandbox Code Playgroud)

strA外,所有这些都有效.它打印"1".为什么?在这种情况下,strA的类型是什么?当我不确定时,如何检查东西的类型?

我注意到这是正确的方法(顺便说一句,这似乎与其他构造函数不一致,有时候parens有时没有parens):

string strA;
Run Code Online (Sandbox Code Playgroud)

ps:大胆的问题,通常不相关的答案将被低估.

c++ string

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

const引用绑定到右值

在处理这个问题时,我发现了一种不一致的行为.

为什么引用绑定在构造函数中与常用函数的行为不同?

struct A {
};

struct B : public A {
  B(){}
private:
  B(const B&);
};

void f( const B& b ) {}

int main() {
  A a( B() ); // works
  A const & a2 = B(); // C++0x: works, C++03: fails
  f( B() );  // C++0x: works, C++03: fails
}
Run Code Online (Sandbox Code Playgroud)

我已经使用g ++ - 4.1和Comeau 4.2.45.2在严格的C++ 03模式下测试了C++ 03并且禁用了C++ 0x扩展.我得到了相同的结果.

对于C++ 0x,在宽松模式下使用g ++ - 4.4和Comeau 4.3.9进行了测试,并启用了C++ 0x扩展.我得到了相同的结果.

c++ c++11

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

标签 统计

c++ ×3

c++11 ×1

constructor ×1

standards ×1

string ×1