Home > Backend Development > C++ > Why Do Deleted Functions in C 11 Participate in Overload Resolution?

Why Do Deleted Functions in C 11 Participate in Overload Resolution?

Linda Hamilton
Release: 2024-12-15 12:36:10
Original
125 people have browsed it

Why Do Deleted Functions in C  11 Participate in Overload Resolution?

Why Deleted Functions Participate in Overload Resolution in C 11

In C 11, deleted functions are not erased entirely but instead participate in overload resolution. This feature serves two primary purposes.

Preventing Implicit Conversions

Half of the utility of the "= delete" syntax lies in prohibiting callers from invoking specific functions with certain parameter types. Its goal is to hinder implicit conversions under specific scenarios. For a particular overload to be disallowed, it must participate in overload resolution.

Ensuring Explicit Invocation

If the "= delete" syntax were to completely erase the function, it would essentially make it equivalent to omitting the declaration altogether. This would permit scenarios like:

onlydouble val(20); // Legal in C++
Copy after login

The compiler would consider all constructors and identify an implicit conversion that allows it to call the constructor intended for double parameters.

In contrast, with "= delete" participating in overload resolution:

onlydouble val(20); // Error in C++
Copy after login

The compiler evaluates all constructors, including the deleted one. It discovers an exact match for the integer literal and throws an error because it attempted to invoke a deleted function.

Clarifying the Role of "= delete"

The "= delete" syntax signifies "I forbid this," not merely "this does not exist." It is a stronger statement with specific implications. We do not require distinct syntax for "this does not exist" because it is already implied by omitting the declaration.

In rare cases, certain rule ambiguities can arise due to the absence of a clear way to indicate that the copy constructor does not exist. However, special constructors like the copy constructor are inherent to classes. Rather than indicating their non-existence, the concern lies in whether it is legal to invoke them.

Conclusion

Deleted functions in C 11 participate in overload resolution to facilitate clear error reporting and enforce explicit function invocation. This enables developers to prevent ambiguous and unintended conversions, ensuring program correctness and clarity.

The above is the detailed content of Why Do Deleted Functions in C 11 Participate in Overload Resolution?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template