标签: explicit

C++ 中是否可以强制显式向上转换

假设A源自B. B *x = new A()例如,是否有一种方法可以通过进行必要的显式强制转换来禁止像 中那样的隐式向上强制转换?

c++ casting explicit

2
推荐指数
1
解决办法
1335
查看次数

显式和非显式构造函数

class Test
    {
    public:
        Test(int i) { cout<<"constructor called\n";}
        Test(const Test& t) { cout<<" copy constructor called\n";}
    };
 class Test1
        {
        public:
            Test1(int i) { cout<<"constructor called\n";}
            explicit Test1(const Test1& t) { cout<<" copy constructor called\n";}
        };

    int main()
    {
        Test t(0);  
        Test u = 0;
        //Test1 t1(0);   Line 1
        //Test1 u1 = 0;  Line 2

    }
Run Code Online (Sandbox Code Playgroud)

我观察到不同的输出。情况 1:当第 1 行和第 2 行被注释时,o/p 为:构造函数调用 构造函数调用

情况 2:当第 1 行和第 2 行取消注释时:则编译错误

有人可以解释一下输出及其原因吗?也有人可以告诉operator=是否实际上最终调用了复制构造函数。

c++ constructor explicit copy-constructor copy-initialization

2
推荐指数
1
解决办法
3065
查看次数

在Java中调用重载函数?

如何在Java中调用数组函数?

目前它看起来像:

public static void WriteLine(Object Array[]) {
    for (int I = 0; I < Array.length; ++I) {
        Out.println(Array[I]);
    }
}

public static void WriteLine(Object Text) {
    Out.println(Text);
}
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

public static <T> void WriteLine(T Array[]) {
    for (int I = 0; I < Array.length; ++I) {
        Out.println(Array[I]);
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的主要,我做:

int[] I = new int[]{1, 2, 3, 4, 5};
WriteLine(I);
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

WriteLine<int[]>(I);
Run Code Online (Sandbox Code Playgroud)

不起作用..

它打印:[I @ 2f56f920

又名int数组的地址.如何显式调用特定的数组函数或如何让编译器知道哪一个自动调用(隐式)?

我还不习惯Java/Generics/Object ..刚刚从C++移动并用于模板:(

java generics explicit implicit

1
推荐指数
1
解决办法
194
查看次数

std::runtime_error 中的显式构造函数

根据 cplusplus.com,这是 std::runtime_error 类的实现:

class runtime_error : public exception {
public:
  explicit runtime_error (const string& what_arg);
};
Run Code Online (Sandbox Code Playgroud)

由于构造函数是显式的,我希望它只接受 std::string 对象。

throw std::runtime_error("error message");
Run Code Online (Sandbox Code Playgroud)

但是,此代码编译(GCC)。编译器不应该抱怨隐式 const char* 到 const 字符串的转换吗?

c++ constructor explicit

1
推荐指数
1
解决办法
537
查看次数

有没有办法在构造函数中强制显式参数类型?

是否有类似于C#中构造函数的explicit关键字?它似乎只影响C#中的强制转换操作符.

举个例子:

public Foo( long value )
{
    m_value = value;
}
Run Code Online (Sandbox Code Playgroud)

我正在寻找的是一种使以下代码无法编译的方法:

int bar = 10;
Foo fail = new Foo( bar );
Run Code Online (Sandbox Code Playgroud)

这可能在C#中吗?

c# constructor explicit

1
推荐指数
1
解决办法
371
查看次数

在c ++中错误地使用显式关键字

我想创建一个类MPSList,其中构造函数具有与之关联的显式关键字.

以下是最小的代码:

class MPSList {                                                                           
public:                                                                                   
    explicit MPSList(int n) : n_(n) {                                                     
        mpsL.resize(n_, std::vector<MPSNode>{});                                          
        std::cout << mpsL.size() << std::endl;                                            
     }

private:
    struct MPSNode {                                                                      
        double s_;                                                                        
    };

    std::vector<std::vector<MPSNode>> mpsL;
    int n_ = -1;
}; 
Run Code Online (Sandbox Code Playgroud)

创建MPSList类对象的CPP文件.

#include <iostream>

#include "MPSList.hpp"

int main() {
    double n = 10.9;
    MPSList mps(n);    
}
Run Code Online (Sandbox Code Playgroud)

在编译上面的CPP文件时,我原本期望在初始化对象时看到错误.当我传递一个double时,构造函数显然期望一个int.

编译命令:

g++ -std=c++14 -I../include test.cpp 
./a.out
Run Code Online (Sandbox Code Playgroud)

c++ explicit explicit-constructor

1
推荐指数
1
解决办法
258
查看次数

显式类型转换

我在一本书中读到了这一点:

//: C03:SimpleCast.cpp
int main() {
int b = 200;
unsigned long a = (unsigned long int)b;
} ///:~
Run Code Online (Sandbox Code Playgroud)

"强制转换是强大的,但它可能会引起麻烦,因为在某些情况下它会迫使编译器将数据视为(例如)比实际更大,因此它会在内存中占用更多空间;这会占用其他数据这通常在投射指针时发生,而不是在制作如上所示的简单投射时."

现在请你提供一个示例,其中转换指针可以践踏其他数据?

c++ types explicit

0
推荐指数
1
解决办法
461
查看次数

0
推荐指数
1
解决办法
2595
查看次数

Explicity传递基类型

我有一个显式函数,它引用了类的基类型.传递它的正确方法是什么?

我目前正在进行静态演员:

#include <iostream>

using namespace std;

struct Base
{
    Base() { cout << "Base Constructor" << endl; }
    Base(Base const& c) { cout << "Base-Base Constructor" << endl; }
};

struct Derived : public Base
{
    Derived() { cout << "Derived Constructor" << endl; }
    explicit Derived(Base const& c) { cout << "Derived-Base Constructor" << endl; }
    Derived(Derived const& c) { cout << "Derived-Derived Constructor" << endl; }
};

int main()
{
    Base B;
    cout << "\n";
    Derived D; …
Run Code Online (Sandbox Code Playgroud)

c++ inheritance casting explicit

0
推荐指数
1
解决办法
41
查看次数

Perl:全局符号"%s"需要显式包名

我是Perl的新手,但我认为我已经记住了变量定义和范围等基础知识......但似乎并非如此.我的问题是我不断碰到错误:

Global symbol "$save_from_date" requires explicit package name at myMover.pl line 40

我有一个函数,我打算将文件日期与另一个日期(默认或参数)进行比较,但它失败了.

这是麻烦的代码,提取:

# Process source directory
sub ParseSource {
    my $file = $_;
    my $filedate = localtime( ( stat $file )[9] )->ymd('');
    if ( $filedate >= $save_from_date ) {
        print "[To Archive] $file";
    }
}

#   Default Values
my $source_directory      = 'C:\Users\Public\Documents';
my $destination_directory = 'C:\Users\Public\Documents\Archive';
my $save_from_date        = strftime "%Y%m%d", localtime;
my ( $verboseornotverbose, $display_help ) = undef;

GetOptions(
    "verbose!"            => \$verboseornotverbose,
    "help|h!"             => \$display_help,
    "source_dir|s:s"      => …
Run Code Online (Sandbox Code Playgroud)

variables perl global explicit

0
推荐指数
1
解决办法
413
查看次数

C++显式转换构造函数

我正在尝试为一个赋值实现一个显式转换构造函数,我很困惑我需要做什么.我有一个包含单个元素的WordList,并且我要使这个构造函数显式,所以我不能这样做:

WordList myList;
list = 'i'; // error
Run Code Online (Sandbox Code Playgroud)

c++ constructor explicit

-1
推荐指数
1
解决办法
1044
查看次数

C++显式构造函数的应用

我是 C++ 11 的新手。我发现了显式构造函数这个术语。但是我没有找到关于显式构造函数的任何好的解释。您能解释一下在什么情况下我应该使用显式构造函数吗?

先感谢您。

c++ explicit move

-1
推荐指数
1
解决办法
6959
查看次数

运算符的显式和隐式(int)

public static explicit operator int(Author a)
    {
        return a.Publications.Length;
    }
    public static implicit operator int(Author a)
    {
        return a.Publications.Length;
    }
Run Code Online (Sandbox Code Playgroud)

为什么我不这样做?我的老师让我覆盖了Author类的operator int的隐式和显式转换.+我可以得到深拷贝的解释:D?

c# overriding explicit implicit

-5
推荐指数
1
解决办法
380
查看次数