从(4.4/1)开始
如果"cv2 T"比"cv1 T"更符合cv,则可以将类型"指向cv1 T的指针"的rvalue转换为"指向cv2 T的指针"的rvalue.
我不知道标准定义'更多cv-qualifield'类型的位置,但据我所知,const的声明符比非const更符合cv.
对于以下转换,标准的引用如何适用或如何知道哪一个更少或更多cv-qualifed?
int *const c1 = 0;
int const* c2 = 0;
const int *const c3 = 0;
c1 = c2; // allowed
c1 = c3; // allowed
Run Code Online (Sandbox Code Playgroud)
更新:
c2 = c1;
c2 = c3;
Run Code Online (Sandbox Code Playgroud) 考虑以下测试:
std::is_same<T, bool>::value
std::is_same<T, char>::value
std::is_same<T, short int>::value
std::is_same<T, int>::value
std::is_same<T, long int>::value
std::is_same<T, long long int>::value
std::is_same<T, float>::value
std::is_same<T, double>::value
std::is_same<T, long double>::value
Run Code Online (Sandbox Code Playgroud)
问题是,如果T = const unsigned char所有测试都是假的,我希望这个std::is_same<T, char>::value是真的.或者,如果T = volatile signed long long int我想std::is_same<T, long long int>::value成为现实.怎么做type_traits?
我已经看到了对values()内部@Qualifier定义的各种引用.我理解@Qualifier为标记系统,但您将它们定义为接口.
一个界面可以允许枚举,但我不明白values()我在下面列出的两个不相关的例子中看到的这个词.
你可以向我解释一下value()这个词是什么意思吗?
@Qualifier
@Retention(RUNTIME)
@Target({FIELD, TYPE, METHOD})
public @interface NumberOfDigits {
Digits value();
}
public enum Digits {
TWO,
EIGHT,
TEN,
THIRTEEN
}
Run Code Online (Sandbox Code Playgroud)
package com.byteslounge.bean;
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import javax.inject.Qualifier;
@Qualifier
@Retention(RUNTIME)
@Target({FIELD, TYPE, METHOD})
public @interface MessageTransport {
MessageTransportType value();
}
Run Code Online (Sandbox Code Playgroud) 在解释和创建函数参数的类型时,我很难理解为什么C++比C更"放松"的行为.
C做世界上最简单的事情,它坚持你写的东西就是这样,另一方面,C++以一种我无法理解的扭曲方式运作.
例如,流行的argv是一个char* []传递给函数的时候变成了char**,我真的不明白为什么,我期待和"想要" char * const *但是我得到了这种行为.
您还可以阅读PDF中讨论C和C++之间差异的文章,文章也以这句话结尾:
虽然C++在确定函数签名时会忽略参数声明中的顶级cv限定符,但它并不完全忽略这些cv限定符.
因为我在网上找不到这个问题(嵌入式系统编程 - 2000年2月,这个老问题是免费的),我想知道这句话可能意味着什么.
有人可以解释为什么这种行为是它在C++中的行为?
编辑:
我的一个例子是
#include <stdio.h>
void foo(int argc, const char *const *const argv) {
printf("%d %s\n", argc, argv[0]);
}
int main(int argc, char *argv[]) {
foo(argc, argv);
return (0);
}
Run Code Online (Sandbox Code Playgroud)
如果你编译它,gcc 4.8.1你得到预期的错误
gcc cv_1.c
cv_1.c: In function ‘main’:
cv_1.c:8:3: warning: passing argument 2 of ‘foo’ from incompatible pointer type [enabled by default]
foo(argc, argv);
^
cv_1.c:3:6: …Run Code Online (Sandbox Code Playgroud) 我有一些其他类扩展的基类。因此,我必须提供能够插入特定实例的限定符。
我想知道是否可以将这些类(例如,最高级的类)中的任何一个标记为默认类,如果没有提供限定符的话,该默认类将被选中@Autowired吗?
@Service
//@Qualifier("Parent")
class ParentRunner;
@Service
@Qualifier("Child")
class ChildRunner extends ParentRunner;
Run Code Online (Sandbox Code Playgroud)
以下内容至少不起作用:
@Autowired
//@Qualifier("Parent")
private ParentRunner runner;
Run Code Online (Sandbox Code Playgroud) 我有一些VBA代码在我的办公桌上在Excel工作正常,但在家里它是崩溃的.事实证明我所要做的就是改变
Set shtObj = ThisWorkbook.Sheets(1)
Run Code Online (Sandbox Code Playgroud)
至
Set shtObj = Excel.ThisWorkbook.Sheets(1)
Run Code Online (Sandbox Code Playgroud)
谁知道为什么?我们的组织刚刚搬到了一个SharePoint平台,我怀疑它正在导致各种各样的伏都教爬行,但我只是在猜测.
听起来很复杂,但这是一个简单的概念.假设你有一些结构"foo",如果它的成员是指向另一个foo结构的指针(如链表)
这似乎有效.
struct foo {
struct foo* ptr;
};
Run Code Online (Sandbox Code Playgroud)
但是,如果我想让foo成为一个类型呢?
就像我将如何做以下几点?
typedef struct foo {
foo* ptr;
} foo;
Run Code Online (Sandbox Code Playgroud)
ptr的声明失败,因为foo还不是限定符.
Eclipse中是否有任何功能可以重构我的代码,以便不合格的字段访问获得this限定符?例如,我在静态方法中编写了一些代码,但现在想将它们更改为非静态方法.我更喜欢使用我的代码样式,this以便它更清晰,更易读.
我想了一个简单的方法foo,并bar在这里:
public class Example
{
private static String foo = "Hovercraft";
private static int bar = 9001;
public static void main(String[] args)
{
System.out.println(foo + " has " + bar + " eels.");
}
}
Run Code Online (Sandbox Code Playgroud)
转入this.foo和this.bar更改代码后使用非静态方法:
public class Example
{
private String foo;
private int bar;
public class Example(String theFoo, int theBar)
{
this.foo = theFoo;
this.bar = theBar;
}
public void run()
{
System.out.println(this.foo + " …Run Code Online (Sandbox Code Playgroud) @Override
@Autowired(required = true)
@Qualifier("hibernateCriteriaBuilder")
public void setCriteriaBuilder(IQueryCriteriaBuilder<Entity> criteriabuilder)
{
super.setCriteriaBuilder(criteriaBuilder):
}
Run Code Online (Sandbox Code Playgroud)
这在我在java文件中的代码中,我不断收到错误说:"注释@qualifier是为这个位置拨号的." 有人可以向我解释如何解决这个错误吗?我的代码中有两次,但找不到解决方案.
我写了这个memcpy函数,但我仍然需要禁用规则11.5和11.8.是否有完整的MISRA:2012兼容解决方案?
#pragma cstat_suppress="MISRAC2012-Rule-21.6" // Uses of stdio.h were found.
#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include <stdlib.h>
extern int main(void);
static int_least8_t _memcpy(void *dst, const void *src, const size_t length)
{
#pragma cstat_disable="MISRAC2012-Rule-11.5" // A conversion from a pointer to void into a pointer to object was found.
int_least8_t* destination = (int_least8_t*)dst;
#pragma cstat_disable="MISRAC2012-Rule-11.8" // A cast that removes a const or volatile qualification was found.
const int_least8_t* source = (int_least8_t*)src;
#pragma cstat_restore="MISRAC2012-Rule-11.5","MISRAC2012-Rule-11.8"
for (size_t i = 0; …Run Code Online (Sandbox Code Playgroud)