gpt4 book ai didi

c++ - C++中显式赋值和隐式赋值有什么区别

转载 作者:IT老高 更新时间:2023-10-28 22:18:55 27 4
gpt4 key购买 nike

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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com