在C ++中,指定不允许隐式转换或复制初始化的构造函数和转换运算符。在C#中声明了一个必须使用强制转换调用的用户定义的类型转换运算符。对于MS SQL Server for-xml-EXPLICIT模式,请使用[for-xml-explicit]标记
我了解到我们可以在 C++ 中为我们的类提供转换运算符。所以我希望对于下面的程序,c=1;会使用转换运算符 int()。但令我惊讶的是;那...
为什么 const char* 隐式转换为 bool 而不是 std::string?
#include #包括 结构我的结构{ mystruct(std::string s){ std::cout<<__FUNCTION__ <<" String "< #include <iostream> #include <string> struct mystruct{ mystruct(std::string s){ std::cout<<__FUNCTION__ <<" String "<<s; } explicit mystruct(bool s) { std::cout<<__FUNCTION__<<" Bool "<<s; } }; int main() { const char* c ="hello"; mystruct obj(c); return 0; } 输出: mystruct Bool 1 为什么 const char* 隐式转换为 bool 而不是 std::string,尽管构造函数需要 explicit 类型? 这里如何应用隐式转换优先级? 因为const char*到bool的隐式转换是标准转换,而const char*到std::string是自定义转换。前者排名更高,在 overload resolution. 中获胜 标准转换序列总是优于用户定义的转换序列或省略号转换序列。 BTW:mystruct obj(c);执行直接初始化,explicit转换构造函数包括mystruct::mystruct(bool)也被考虑。结果,c 被转换为 bool 然后传递给 mystruct::mystruct(bool) 作为构造 obj. 的参数 直接初始化比复制初始化更宽松:复制初始化只考虑非显式构造函数和非显式用户定义的转换函数,而直接初始化考虑所有构造函数和所有用户定义的转换函数。 关于explicit说明符, 指定构造函数 or conversion function (since C++11) or deduction guide (since C++17) 是显式的,也就是说,它不能用于 隐式转换 和 copy-initialization. “为什么 const char* 隐式转换为 bool 而不是 std::string,尽管构造函数需要 explicit 类型?”: 标准转换优先于用户定义的转换。 char const* 是指向常量字符的指针,指针可以隐式转换为 bool :如果它是 nullptr,则转换为 false,否则转换为 true。 您曾经在检查指针是否为NULL的情况下看到如此有效的转换,所以如果不是nulptr我们安全地取消引用它否则它具有nullptr值因此它是不正确的取消引用它: int* ptr = nullptr; if(ptr) // false because ptr has nullptr or NULL or 0 or 0x000000 address value std::cout << ptr << '\t' << *ptr << '\n'; // not executed ptr = new int(10); // valid and non-nullptr if(ptr) // non-nullptr so condition succeeds std::cout << ptr << '\t' << *ptr << '\n'; // 0FED155 10 delete ptr; // free memory explicit构造函数意味着它只能被显式调用,唯一的方法是像你的情况一样通过直接初始化: mystruct obj(c); // direct initialization mystruct obj = c; // copy-initialization. Error: constructor myStruct(bool) is `explicit` 只是添加到已经很好的答案中。您可以通过添加 delegating constructor 来解决这个问题,如下所示: mystruct(const char* s):mystruct(std::string(s)) {} 这将在重载决策中胜过 bool。 另一种选择是在这里避免使用 bool 并使用 bool 但具有更多含义的东西。这可能是'布尔盲目'的一个例子
我尝试了类似于: let lchars : char ref list = ref [];; 但不工作... ...
在关闭JAVA中的Selenium Web驱动程序之前,如何验证文件下载是否完成。我已经编写了一个Selenium代码,可以将2个文件下载到所需的文件夹位置。但是我关闭了...
我有一个带有子类的基类Method。自动谐波力= [](const double&q,const double&k){return -k * q;};枚举SplittingAB {SS,L42};类方法{public:〜Method()= ...
具有ftp_connect功能的AUTH TLS / SSL
根据RFC 2228,AUTH是FTP命令,可以与一种身份验证机制(TLS或SSL)一起使用,以保护数据通道和控制通道。我想知道我是否...
public class MainClass {public static void main(String [] args)引发IOException {RectangleArray array = new RectangleArray(“ rectangle.txt”); array.printColl(); }}类颜色...
我遇到了编译错误“无法转换..”,“没有构造函数实例..”。我做错了我。我试图更改对象的初始化方式,但没有帮助。想了解...
c ++ 20引入了显式(布尔),它在编译时有条件地选择是否使构造函数显式。下面是我在这里找到的示例https://github.com/AnthonyCalandra / ...
我有以下代码段:公共接口Imy {int X {get;组; }}公共类MyImpl:Imy {private int _x; int Imy.X {get => _x;设置=> _x =值; } ...
我有一个从int构造C的构造函数,从double构造一个C的构造函数。我让第一个执行隐式类型转换,但是使用关键字explicit阻止第二个。但是,不幸的是,...有一个双倍...
我有2个项目。嵌套项目有2个模型:Model1in和Model1Out。名称空间Test.Nested {公共类Model1in {#如果NATIVE公共静态显式运算符Model1in(Model1Out ...
使用显式的chr()调用将当前行为保留在/home/lnk4bqjq7963/public_html/360spacea.com/type.php的第1行[关闭]
module($ this-> mv); $ claster ...
我对SWIFT还是很陌生,我了解可选的安全性(几乎,我认为)。但是我不太明白为什么我们不只是隐式地初始化变量,而不是可选地:...
需要验证的单元测试在行l1.Next(s1).Should()。BeNull();处中断。我的主要方法AddBefore(IStation toAdd,IStation before = null)需要正确地调用方法IStation Next ...
请考虑以下基本程序。它具有typedef int Number,目的是允许将来的开发人员将其更改为当时最有意义的精度(或者甚至说使用...
隐式超级构造函数Shape2D()未定义。关于“ include Java.awts.Color”
我正在一个项目中出现此错误“隐式超级构造函数Shape2D未定义。必须显式调用另一个构造函数”,并且并没有真正理解。这是我的形状类别...
[阅读了以下博客:http://xania.org/200711/ambiguous-overloading之后,我开始自问:“我是否应该始终不明确地定义构造函数?所以我开始阅读比发现的更多...
我们声明了隐式等待10秒,但是元素花费的时间更多,例如20秒,有时可能会出现5秒,因此在这种情况下,声明显式等待。任何时候隐式等待都不要...