在我正在阅读Python的书中,它继续使用代码 eval(input('blah'))
我阅读了文档,我理解它,但我仍然没有看到它如何改变input()功能.
它有什么作用?谁能解释一下?
我有两个具有父子关系的Parent类(类"has-a" Child类),并且Child该类有一个指向它的指针Parent.在构造子进程时初始化父指针会很好,如下所示:
class Child;
class Parent;
class Child
{
public:
Child (Parent* parent_ptr_) : parent_ptr(parent_ptr_) {};
private:
Parent* parent_ptr;
};
class Parent
{
public:
Parent() : child(this) {};
private:
Child child;
}
Run Code Online (Sandbox Code Playgroud)
现在,我认识的人建议不使用this在初始化列表,以及C++ FAQ说我会得到一个编译器警告(顺便说一句,在VS2010,我没有得到一个警告),但我真的很喜欢这更好,然后调用一些功能集在Parent的构造函数.我的问题是:
this时,父指针是否定义良好Child?谢谢,
波阿斯
编辑:谢谢Timbo,它确实是一个副本(呵呵,我甚至选择了相同的类名).所以让我们获得一些附加值:引用怎么样?是否可以/安全地执行以下操作?:
class Child
{
public:
Child (Parent& parnet_ptr_) : parent_ptr(parent_ptr_) {};
private:
Parent* parent_ptr;
};
class Parent
{
public:
Parent() : child(*this) …Run Code Online (Sandbox Code Playgroud) 我有一个关于绑定变量可以在PL/SQL中的动态SQL语句中使用的问题.
例如,我知道这是有效的:
CREATE OR REPLACE FUNCTION get_num_of_employees (p_loc VARCHAR2, p_job VARCHAR2)
RETURN NUMBER
IS
v_query_str VARCHAR2(1000);
v_num_of_employees NUMBER;
BEGIN
v_query_str := 'SELECT COUNT(*) FROM emp_'
|| p_loc
|| ' WHERE job = :bind_job';
EXECUTE IMMEDIATE v_query_str
INTO v_num_of_employees
USING p_job;
RETURN v_num_of_employees;
END;
/
Run Code Online (Sandbox Code Playgroud)
我想知道你是否可以在这样的select语句中使用绑定变量
CREATE OR REPLACE FUNCTION get_num_of_employees (p_loc VARCHAR2, p_job VARCHAR2)
RETURN NUMBER
IS
v_query_str VARCHAR2(1000);
v_num_of_employees NUMBER;
BEGIN
v_query_str := 'SELECT COUNT(*) INTO :into_bind FROM emp_'
|| p_loc
|| ' WHERE job = :bind_job';
EXECUTE IMMEDIATE …Run Code Online (Sandbox Code Playgroud) 我对Oracle DATE和INTERVAL数据类型的一些内部工作方式有疑问.根据Oracle 11.2 SQL Reference,当您减去2个DATE数据类型时,结果将是NUMBER数据类型.
粗略测试,这似乎是真的:
CREATE TABLE test (start_date DATE);
INSERT INTO test (start_date) VALUES (date'2004-08-08');
SELECT (SYSDATE - start_date) from test;
Run Code Online (Sandbox Code Playgroud)
将返回NUMBER数据类型.
但现在如果你这样做:
SELECT (SYSDATE - start_date) DAY(5) TO SECOND from test;
Run Code Online (Sandbox Code Playgroud)
你得到一个INTERVAL数据类型.换句话说,Oracle可以将NUMBER从DATE减法转换为INTERVAL类型.
所以现在我想我可以尝试直接在括号中输入NUMBER数据类型(而不是做'SYSDATE - start_date',这会导致NUMBER反正):
SELECT (1242.12423) DAY(5) TO SECOND from test;
Run Code Online (Sandbox Code Playgroud)
但这会导致错误:
ORA-30083: syntax error was found in interval value expression
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:这里发生了什么?似乎减去日期应该导致NUMBER(如SELECT语句#1中所示),它不能自动转换为INTERVAL类型(如SELECT语句#3中所示).但是,如果使用DATE减法表达式而不是放入原始NUMBER(SELECT语句#2),Oracle似乎能够以某种方式做到这一点.
谢谢
我正在努力确保我对CURSOR_SHARING,绑定变量,绑定变量偷看和直方图之间的关系有一个很好的理解,因为大多数来源涵盖这些主题是不同的部分.
好的,这就是我到目前为止收集的内容,如果我有任何错误,请随意纠正我:
CURSOR_SHARING
1. = EXACT(默认)
2. = FORCE
3. =类似
问题:
根据我的理解,是不是使用CUSOR_SHARING = EXACT +用绑定变量(1.2)编写SQL语句导致与设置CURSOR_SHARING = FORCE(2.1)完全相同的结果?在这两种情况下,优化器只会在第一次运行时查看绑定变量以生成执行计划,然后重新使用该计划,无论后续运行时绑定变量的值是什么?如果是这样,为什么大多数消息来源建议使用绑定变量?这似乎可能会对性能产生重大影响.
初始绑定变量中使用的直方图是否为1.2和2.1?在第一次运行SQL语句并且优化器查看绑定变量时,是否使用直方图(如果有)确定是使用全表扫描还是索引扫描?"Oracle Database 11g,性能调优配方"似乎表明直方图仅在CURSOR_SHARING = SIMILAR时相关,但其他一些来源表明直方图也用于所有其他CURSOR_SHARING设置.
在1.1的情况下,优化器是否会使用直方图来确定最佳执行计划?基本上我只是想知道何时使用直方图.是仅当CURSOR_SHARING = SIMILAR或其他CURSOR_SHARING设置好吗?
Adpative Cursor Sharing - 只有存在绑定变量时才会发生此功能(来自用户查询或系统生成(通过文字替换)).因此它只发生在1.2,2.1,3.1和3.2?但由于SIMILAR已被弃用,这是否意味着ACS仅出现在1.2和2.1中?
希望我现在离基地不太远,但如果我犯了任何错误,请纠正我
谢谢!
编辑:BYS2于2011年12月20日下午12:11
在下面的代码,为什么所有三个IntComparator(),IntComparator2和IntComparator3工作为的第三个参数sort()的功能?它们不会具有不同的l值函数类型吗?基于https://en.cppreference.com/w/cpp/algorithm/sort,它说
比较函数的签名应等效于以下内容:
bool cmp(const Type1&a,const Type2&b);
哪个更匹配IntComparator2?
还有哪一个更可取?第三种选择似乎更简单,更直观。
#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>
struct IntComparator
{
bool operator()(const int &a, const int &b) const
{
return a < b;
}
};
bool IntComparator2 (const int &a, const int &b)
{
return a < b;
}
bool IntComparator3 (int a, int b)
{
return a < b;
}
int main()
{
int items[] = { 4, …Run Code Online (Sandbox Code Playgroud) 只是要求对2.之间的区别进行澄清2.据我所知,EXPLAIN PLAN为您提供理论执行计划,而DBMS_XPLAN.DISPLAY_CURSOR为您提供了具有该语句执行统计信息的实际执行计划.
EXPLAIN PLAN将此数据存储在PLAN_TABLE中,而DBMS_XPLAN使用V $ SQL_PLAN,V $ SQL_PLAN_STATISTICS和V $ SQL_PLAN_STATISTICS_ALL视图获取其信息.
但是,要使DISPLAY_CURSOR收集该参数的实际运行时统计信息,需要设置/*+ gather_plan_statistics */提示.否则,只填充V $ SQL_PLAN,它只会为您提供执行计划,但不会为您提供实际的执行统计信息.只有/*+ gather_plan_statistics */在填充V $ SQL_PLAN_STATISTICS 的地方.
所以我的问题是,如果我不使用gather_plan_statistics提示,EXPLAIN PLAN和DISPLAY_CURSOR会不会给我相同的执行计划(对于同一个语句)?
我对视图USER_TAB_COLUMNS(或等效项)中的列LOW_VALUE和HIGH_VALUE有疑问.
我只是想知道这些值是否总是正确的,如果你有一个500k行值为1的列,500k行值为5和1行值1000,LOW_VALUE应该是1(转换后)原始数字)和HIGH_VALUE应为1000(转换原始数字后).但是,在任何情况下Oracle都会"错过"此异常值,而对于HIGH_VALUE则为5吗?
另外,这两个值的目的是什么?
谢谢
我对如何在C ++中调用函子的语法有疑问。在下面的代码中,为什么前两个示例有效,而第三次和第四次尝试却无效?
Also I can call ob (100); and it will output 300, but why can't I call Class(100) and have it output 300? Is there any way to use the overloaded operator () without instantiating a new object?
#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>
using namespace std;
struct Class
{
void operator() (int a)
{
cout << a * 3 << " ";
}
} ob;
int main()
{
int arr[5] = { 1, 5, …Run Code Online (Sandbox Code Playgroud)