Gibt es eine Möglichkeit, diesen Konflikt in der Funktionsüberlastung zu verhindern?C++

Programme in C++. Entwicklerforum
Anonymous
 Gibt es eine Möglichkeit, diesen Konflikt in der Funktionsüberlastung zu verhindern?

Post by Anonymous »

Im folgenden Code versuche ich den Konstruktor aufzurufen, der ein std :: uint64_t nimmt: < /p>
#include
#include

template
struct MYFOO
{
MYFOO(std::uint64_t size) { }
MYFOO(const std::initializer_list& list) {

}

};

int main() {

MYFOO buff{ 1000 };
//invalid narrowing conversion from "int" to "unsigned char": constant value does not fit in destination type
}
< /code>
Es wird also offensichtlich den Anruf als Anruf bei der Initialisiererliste eins gelöst. Dies geschieht nur, wenn ich die Initialisierung von Curly Brace verwende. Wenn ich gekrümmte Klammern verwende, funktioniert es, aber ich vermeide diese, weil ich, wenn ich sie verwende, auf die ärgerlichsten analysierten Probleme stoße, bei denen die Aussage als Funktionssignatur anstelle eines Konstruktoraufrufs abzieht. Ich begann überall als Standardeinstellung, aber dann bin ich auf solche Probleme gestoßen. Mache ich etwas falsch in Bezug auf den Programmierstil oder ist dies nur eine wirklich unglückliche Eigenart in der Sprache?MYFOO buff{ 1000, 4};
< /code>
und < /p>
MYFOO buff = { 1000 };
< /code>
basiert nur auf dem Kontext, oder? Wenn ein Konstruktor einen STD :: Initializer nimmt, können Sie den Konstruktor nicht mit {} nicht initialisieren oder aufrufen, oder?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post