int value = 5; // this type of assignment is called an explicit assignment
int value(5); // this type of assignment is called an implicit assignment
它们之间有什么区别(如果有的话),在什么情况下显式和隐式赋值有区别以及如何区别?
http://weblogs.asp.net/kennykerr/archive/2004/08/31/Explicit-Constructors.aspx
编辑:实际上我刚刚发现这篇文章,它使整个事情变得更加清晰......它提出了另一个问题,如果你(一般)标记构造函数采用单个参数原始类型 - numeric/bool/string - 显式并保留其余部分(当然要注意诸如 (int, SomeType = SomeType())
之类的构造函数之类的陷阱?
最佳答案
这些都不是任何类型的赋值——它们都是初始化。第一个使用复制初始化,第二个直接初始化。 (FWIW,我很确定我以前从未听说过“显式赋值”或“隐式赋值”这些术语)。
编辑:(主要是为了回应 Nathan 的评论):
这是您评论中代码的更正版本:
#include <iostream>
struct Foo {
Foo() {
std::cout << "Foo::ctor()" << std::endl;
}
Foo(Foo const& copy) {
std::cout << "Foo::cctor()" << std::endl;
}
Foo& operator=(Foo const& copy) {
std::cout << "foo::assign()" << std::endl;
return *this;
}
};
int main(int, const char**) {
Foo f;
Foo b(f);
Foo x = b;
return 0;
}
运行结果应该是:
Foo::ctor()
Foo::cctor()
Foo::cctor()
如果你运行它并得到一个 foo::assign()
,扔掉你的编译器并得到一个可以工作的(哦,让我们知道它是什么编译器,它被严重破坏了)!
关于c++ - C++中显式赋值和隐式赋值有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3057859/