假设我有这个功能:
void my_test()
{
A a1 = A_factory_func();
A a2(A_factory_func());
double b1 = 0.5;
double b2(0.5);
A c1;
A c2 = A();
A c3(A());
}
Run Code Online (Sandbox Code Playgroud)
在每个分组中,这些陈述是否相同?或者在某些初始化中是否有额外的(可能是可优化的)副本?
我见过有人说过这两件事.请引用文字作为证据.还请添加其他案例.
例如,声明如下:
int (x) = 0;
Run Code Online (Sandbox Code Playgroud)
甚至是:
int (((x))) = 0;
Run Code Online (Sandbox Code Playgroud)
我偶然发现了这一点,因为在我的代码中我碰巧有一个类似于下面的片段:
struct B
{
};
struct C
{
C (B *) {}
void f () {};
};
int main()
{
B *y;
C (y);
}
Run Code Online (Sandbox Code Playgroud)
显然,我想构造一个对象C,然后在它的析构函数中做一些有用的东西.但是,当它发生时,编译器将其C (y);视为y带有类型的变量声明,C因此它会输出有关y重新定义的错误.有趣的是,如果我把它写成C (y).f ()或类似的东西C (static_cast<B*> (y))将按预期编译.当然,最好的现代解决方法是{}在构造函数调用中使用.
因此,当我在那之后发现,可以声明变量之类的int (x) = 0;甚至是,int (((x))) = 0;但我从未见过任何人实际使用这样的声明.所以我很感兴趣 - 这种可能性的目的是什么,因为现在我看到它只创造了类似于臭名昭着的"最令人烦恼的解析"的情况,并没有添加任何有用的东西?
Nicolai M. Josuttis的C++标准库声明:
两者之间存在细微差别
X x;
Y y(x) //explicit conversion
Run Code Online (Sandbox Code Playgroud)
和
X x;
Y y = x; //implicit conversion
Run Code Online (Sandbox Code Playgroud)
接下来说:"前者通过使用类型X的显式转换创建Y类型的新对象,而后者通过使用隐式转换创建类型为Y的新对象."
我猜对于显式与隐式转换的概念我有点困惑.在这两种情况下,你都使用X并将其推入Y本身 - 一个使用Y的构造函数,一个使用赋值运算符.
在这两种情况下如何处理转换有什么不同,是什么使它显式/隐式,以及如何使用"显式"关键字定义类构造函数(如果有的话)?
鉴于这样的类:
class Foo {
public:
Foo(int);
Foo(const Foo&);
Foo& operator=(int);
private:
// ...
};
Run Code Online (Sandbox Code Playgroud)
这两条线是完全相同的,还是它们之间有细微差别?
Foo f(42);
Foo f = 42;
Run Code Online (Sandbox Code Playgroud)
编辑:通过在原始问题中使Foo构造函数"显式",我感到困惑.我删除了,但欣赏答案.
我还添加了一个复制构造函数的声明,以明确复制可能不是一个简单的操作.
我真正想知道的是,根据C++标准,"Foo f = 42"会直接调用Foo(int)构造函数,还是会调用复制构造函数?
看起来fasih.ahmed有我正在寻找的答案(除非它是错的).
请考虑以下声明和初始化类型变量的方法C:
C c1;
C c2;
c2 = C();
C c3(C());
C c4 = C();
Run Code Online (Sandbox Code Playgroud)
所有这些都完全相同,或者根据确切的定义,其中一些是否有所不同C?(假设它有公共默认值和复制构造函数).
我已经阅读了很多 C++ 代码,并且遇到了两种初始化变量的方法。
方法一:
int score = 0;
Run Code Online (Sandbox Code Playgroud)
方法二:
int score {};
Run Code Online (Sandbox Code Playgroud)
我知道这int score {};会将分数初始化为 0,所以也会int score = 0;
这两者有什么区别?我已经阅读了初始化:括号与等号,但这并没有回答我的问题。我想知道等号和大括号之间有什么区别,而不是括号。在什么情况下应该使用哪一个?
我是C++的初学者,目前我正在学习如何做功能.最近我收到了以下练习:
#include <iostream>
#include <string>
using namespace std;
int main(int argc, char* argv[])
{
int a,sum=0;
cout<<"Enter a number:";
cin>>a;
int func(int x);
sum=func (a );
cout<<"\n"<<sum;
}
int func(int a)
{
int x;
for (int i=0; i<=a; i++)
{
x+=i;
}
return x;
}
Run Code Online (Sandbox Code Playgroud)
我已经提前给了代码的int主要部分,我需要做的是完成int func部分,以便代码正确执行.如果我运行此代码,我只会得到一些随机数.什么是func应该做的是返回由用户估算数量的限制所有自然数的总和.你能告诉我如何更改这段代码才能正常工作?感谢您的任何反馈!
我在理解这个陈述时遇到了问题.我不知道为什么这和其他人不一样.